From 97bde7505c8a8ceca0631a27265f39ef4e84be57 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Tue, 19 May 2026 08:06:33 -0500 Subject: [PATCH 1/6] Lazily import itertools --- Lib/_pydecimal.py | 2 +- Lib/_pylong.py | 2 +- Lib/_pyrepl/_module_completer.py | 2 +- Lib/asyncio/tools.py | 2 +- Lib/calendar.py | 2 +- Lib/collections/__init__.py | 6 +++--- Lib/concurrent/futures/_base.py | 2 +- Lib/ctypes/macholib/dyld.py | 2 +- Lib/filecmp.py | 2 +- Lib/idlelib/idle_test/test_sidebar.py | 2 +- Lib/importlib/metadata/__init__.py | 2 +- Lib/importlib/metadata/_itertools.py | 4 ++-- Lib/pathlib/__init__.py | 2 +- Lib/pickle.py | 2 +- Lib/profiling/sampling/jsonl_collector.py | 2 +- Lib/random.py | 2 +- Lib/reprlib.py | 2 +- Lib/sched.py | 2 +- Lib/statistics.py | 2 +- Lib/test/seq_tests.py | 2 +- Lib/test/test_asyncio/test_sock_lowlevel.py | 2 +- Lib/test/test_bdb.py | 2 +- Lib/test/test_buffer.py | 2 +- Lib/test/test_builtin.py | 2 +- Lib/test/test_collections.py | 2 +- Lib/test/test_csv.py | 2 +- Lib/test/test_ctypes/test_numbers.py | 2 +- Lib/test/test_email/test_email.py | 2 +- Lib/test/test_exceptions.py | 2 +- Lib/test/test_free_threading/test_itertools.py | 2 +- Lib/test/test_free_threading/test_itertools_combinatoric.py | 2 +- Lib/test/test_free_threading/test_str.py | 2 +- Lib/test/test_functools.py | 2 +- Lib/test/test_generators.py | 2 +- Lib/test/test_genericalias.py | 2 +- Lib/test/test_heapq.py | 2 +- Lib/test/test_io/test_bufferedio.py | 2 +- Lib/test/test_iterlen.py | 2 +- Lib/test/test_itertools.py | 4 ++-- Lib/test/test_math.py | 2 +- Lib/test/test_memoryview.py | 2 +- Lib/test/test_peepholer.py | 2 +- Lib/test/test_set.py | 2 +- Lib/test/test_sort.py | 2 +- Lib/test/test_struct.py | 2 +- Lib/test/test_tuple.py | 2 +- Lib/test/test_unittest/test_assertions.py | 2 +- Lib/test/test_uuid.py | 2 +- Lib/test/test_xml_etree.py | 2 +- Lib/test/test_zipfile/_path/_itertools.py | 2 +- Lib/threading.py | 2 +- Tools/c-analyzer/distutils/_msvccompiler.py | 2 +- Tools/msi/csv_to_wxs.py | 2 +- 53 files changed, 57 insertions(+), 57 deletions(-) diff --git a/Lib/_pydecimal.py b/Lib/_pydecimal.py index ef889ea0cc834c..4a2cb8c3be0b99 100644 --- a/Lib/_pydecimal.py +++ b/Lib/_pydecimal.py @@ -6279,7 +6279,7 @@ def _group_lengths(grouping): # (2) nonempty list of positive integers + [0] # (3) list of positive integers + [locale.CHAR_MAX], or - from itertools import chain, repeat + lazy from itertools import chain, repeat if not grouping: return [] elif grouping[-1] == 0 and len(grouping) >= 2: diff --git a/Lib/_pylong.py b/Lib/_pylong.py index be1acd17ce3592..1e4da5ca70df5d 100644 --- a/Lib/_pylong.py +++ b/Lib/_pylong.py @@ -721,7 +721,7 @@ def inner(w): exp = compute_powers(w, 1, limit, need_hi=need_hi) assert exp.keys() == need - from itertools import chain + lazy from itertools import chain for need_hi in (False, True): for limit in (0, 1, 10, 100, 1_000, 10_000, 100_000): for w in chain(range(1, 100_000), diff --git a/Lib/_pyrepl/_module_completer.py b/Lib/_pyrepl/_module_completer.py index 17bf5cdc819542..9a9ce48e7b1aff 100644 --- a/Lib/_pyrepl/_module_completer.py +++ b/Lib/_pyrepl/_module_completer.py @@ -11,7 +11,7 @@ from io import StringIO from contextlib import contextmanager from dataclasses import dataclass -from itertools import chain +lazy from itertools import chain from tokenize import TokenInfo from .fancycompleter import safe_getattr diff --git a/Lib/asyncio/tools.py b/Lib/asyncio/tools.py index 2ac1738d15c6c7..88f893c2caefc3 100644 --- a/Lib/asyncio/tools.py +++ b/Lib/asyncio/tools.py @@ -1,7 +1,7 @@ """Tools to analyze tasks running in asyncio programs.""" from collections import defaultdict -from itertools import count +lazy from itertools import count from enum import Enum import sys from _remote_debugging import RemoteUnwinder, FrameInfo diff --git a/Lib/calendar.py b/Lib/calendar.py index 92fe6b7723fe26..f4a8419baa9297 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -9,7 +9,7 @@ import datetime from enum import IntEnum, global_enum import locale as _locale -from itertools import repeat +lazy from itertools import repeat __all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday", "firstweekday", "isleap", "leapdays", "weekday", "monthrange", diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index 20f1e728733fec..d530f03673ee37 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -34,9 +34,9 @@ lazy from copy import copy as _copy lazy from heapq import nlargest as _nlargest -from itertools import chain as _chain -from itertools import repeat as _repeat -from itertools import starmap as _starmap +lazy from itertools import chain as _chain +lazy from itertools import repeat as _repeat +lazy from itertools import starmap as _starmap from keyword import iskeyword as _iskeyword from operator import eq as _eq from operator import itemgetter as _itemgetter diff --git a/Lib/concurrent/futures/_base.py b/Lib/concurrent/futures/_base.py index f506ce68aea5b2..4d68eed9d34bc4 100644 --- a/Lib/concurrent/futures/_base.py +++ b/Lib/concurrent/futures/_base.py @@ -9,7 +9,7 @@ import time import types import weakref -from itertools import islice +lazy from itertools import islice FIRST_COMPLETED = 'FIRST_COMPLETED' FIRST_EXCEPTION = 'FIRST_EXCEPTION' diff --git a/Lib/ctypes/macholib/dyld.py b/Lib/ctypes/macholib/dyld.py index 583c47daff3ad8..313da61ff4b8dd 100644 --- a/Lib/ctypes/macholib/dyld.py +++ b/Lib/ctypes/macholib/dyld.py @@ -5,7 +5,7 @@ import os from ctypes.macholib.framework import framework_info from ctypes.macholib.dylib import dylib_info -from itertools import * +lazy from itertools import * try: from _ctypes import _dyld_shared_cache_contains_path except ImportError: diff --git a/Lib/filecmp.py b/Lib/filecmp.py index c5b8d854d77de3..e0df742435da49 100644 --- a/Lib/filecmp.py +++ b/Lib/filecmp.py @@ -12,7 +12,7 @@ import os import stat -from itertools import filterfalse +lazy from itertools import filterfalse from types import GenericAlias __all__ = ['clear_cache', 'cmp', 'dircmp', 'cmpfiles', 'DEFAULT_IGNORES'] diff --git a/Lib/idlelib/idle_test/test_sidebar.py b/Lib/idlelib/idle_test/test_sidebar.py index 4157a4b4dcdd2a..9f3f0e549885a9 100644 --- a/Lib/idlelib/idle_test/test_sidebar.py +++ b/Lib/idlelib/idle_test/test_sidebar.py @@ -2,7 +2,7 @@ from textwrap import dedent import sys -from itertools import chain +lazy from itertools import chain import unittest import unittest.mock from test.support import requires, swap_attr diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py index 32f4b7d2d6e08b..0a1bdd715578c8 100644 --- a/Lib/importlib/metadata/__init__.py +++ b/Lib/importlib/metadata/__init__.py @@ -26,7 +26,7 @@ from contextlib import suppress from importlib import import_module from importlib.abc import MetaPathFinder -from itertools import starmap +lazy from itertools import starmap from typing import Any from . import _meta diff --git a/Lib/importlib/metadata/_itertools.py b/Lib/importlib/metadata/_itertools.py index 79d37198ce7aff..cd97d156730cc2 100644 --- a/Lib/importlib/metadata/_itertools.py +++ b/Lib/importlib/metadata/_itertools.py @@ -1,5 +1,5 @@ from collections import defaultdict, deque -from itertools import filterfalse +lazy from itertools import filterfalse def unique_everseen(iterable, key=None): @@ -99,7 +99,7 @@ class bucket: If you specify a *validator* function, selected buckets will instead be checked against it. - >>> from itertools import count + >>> lazy from itertools import count >>> it = count(1, 2) # Infinite sequence of odd numbers >>> key = lambda x: x % 10 # Bucket by last digit >>> validator = lambda x: x in {1, 3, 5, 7, 9} # Odd digits only diff --git a/Lib/pathlib/__init__.py b/Lib/pathlib/__init__.py index ffec9c545ee11f..c50d601e439386 100644 --- a/Lib/pathlib/__init__.py +++ b/Lib/pathlib/__init__.py @@ -12,7 +12,7 @@ import posixpath import sys from errno import * -from itertools import chain +lazy from itertools import chain from stat import ( S_IMODE, S_ISDIR, S_ISREG, S_ISLNK, S_ISSOCK, S_ISBLK, S_ISCHR, S_ISFIFO, ) diff --git a/Lib/pickle.py b/Lib/pickle.py index f92b1fde768fc7..8a7925b9e96e51 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -25,7 +25,7 @@ from types import FunctionType from copyreg import dispatch_table from copyreg import _extension_registry, _inverted_registry, _extension_cache -from itertools import batched +lazy from itertools import batched from functools import partial import sys from sys import maxsize diff --git a/Lib/profiling/sampling/jsonl_collector.py b/Lib/profiling/sampling/jsonl_collector.py index 7d26129b80de86..546832dc27b6dd 100644 --- a/Lib/profiling/sampling/jsonl_collector.py +++ b/Lib/profiling/sampling/jsonl_collector.py @@ -71,7 +71,7 @@ from collections import Counter import json import uuid -from itertools import batched +lazy from itertools import batched from .constants import PROFILING_MODE_NAMES from .collector import normalize_location diff --git a/Lib/random.py b/Lib/random.py index 4541267bab866a..818085edb89302 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -57,7 +57,7 @@ from os import urandom as _urandom from _collections_abc import Sequence as _Sequence from operator import index as _index -from itertools import accumulate as _accumulate, repeat as _repeat +lazy from itertools import accumulate as _accumulate, repeat as _repeat from bisect import bisect as _bisect import os as _os import _random diff --git a/Lib/reprlib.py b/Lib/reprlib.py index ab18247682b69a..2663d25a9427ed 100644 --- a/Lib/reprlib.py +++ b/Lib/reprlib.py @@ -3,7 +3,7 @@ __all__ = ["Repr", "repr", "recursive_repr"] import builtins -from itertools import islice +lazy from itertools import islice from _thread import get_ident def recursive_repr(fillvalue='...'): diff --git a/Lib/sched.py b/Lib/sched.py index fb20639d459967..87e3a2b75ee658 100644 --- a/Lib/sched.py +++ b/Lib/sched.py @@ -26,7 +26,7 @@ import time import heapq from collections import namedtuple -from itertools import count +lazy from itertools import count import threading from time import monotonic as _time diff --git a/Lib/statistics.py b/Lib/statistics.py index 01ca6c51dafcaf..620b5caa67ef7a 100644 --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -136,7 +136,7 @@ from fractions import Fraction from decimal import Decimal -from itertools import compress, count, groupby, repeat +lazy from itertools import compress, count, groupby, repeat from bisect import bisect_left, bisect_right from math import hypot, sqrt, fabs, exp, erfc, tau, log, fsum, sumprod from math import isfinite, isinf, pi, cos, sin, tan, cosh, asin, atan, acos diff --git a/Lib/test/seq_tests.py b/Lib/test/seq_tests.py index b7875fe8f2f75d..18db798e66dcda 100644 --- a/Lib/test/seq_tests.py +++ b/Lib/test/seq_tests.py @@ -82,7 +82,7 @@ def __iter__(self): def __next__(self): raise StopIteration -from itertools import chain +lazy from itertools import chain def itermulti(seqn): 'Test multiple tiers of iterators' return chain(map(lambda x:x, iterfunc(IterGen(Sequence(seqn))))) diff --git a/Lib/test/test_asyncio/test_sock_lowlevel.py b/Lib/test/test_asyncio/test_sock_lowlevel.py index f32dcd589e2de2..a61f6a8d6e7c12 100644 --- a/Lib/test/test_asyncio/test_sock_lowlevel.py +++ b/Lib/test/test_asyncio/test_sock_lowlevel.py @@ -4,7 +4,7 @@ import unittest from asyncio import proactor_events -from itertools import cycle, islice +lazy from itertools import cycle, islice from unittest.mock import Mock from test.test_asyncio import utils as test_utils from test import support diff --git a/Lib/test/test_bdb.py b/Lib/test/test_bdb.py index f15dae13eb384e..11d78bb1585b98 100644 --- a/Lib/test/test_bdb.py +++ b/Lib/test/test_bdb.py @@ -56,7 +56,7 @@ import importlib import linecache from contextlib import contextmanager -from itertools import islice, repeat +lazy from itertools import islice, repeat from test.support import import_helper from test.support import os_helper from test.support import patch_list diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py index 7454c8a15391e9..069065f6474516 100644 --- a/Lib/test/test_buffer.py +++ b/Lib/test/test_buffer.py @@ -18,7 +18,7 @@ from test import support from test.support import os_helper import inspect -from itertools import permutations, product +lazy from itertools import permutations, product from random import randrange, sample, choice import warnings import sys, array, io, os diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 81967fb8a83740..813ee27f9ab623 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -26,7 +26,7 @@ from contextlib import ExitStack from functools import partial from inspect import CO_COROUTINE -from itertools import product +lazy from itertools import product from textwrap import dedent from types import AsyncGeneratorType, FunctionType, CellType from operator import neg diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index b1b2dd2ca5ca0d..f91076fde00fde 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -8,7 +8,7 @@ import operator import pickle from random import choice, randrange -from itertools import product, chain, combinations +lazy from itertools import product, chain, combinations import string import sys from test import support diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 7327c1bd5f5053..9513a543e8318a 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -12,7 +12,7 @@ from test import support from test.support import cpython_only, import_helper, check_disallow_instantiation from test.support.import_helper import ensure_lazy_imports -from itertools import permutations +lazy from itertools import permutations from textwrap import dedent from collections import OrderedDict diff --git a/Lib/test/test_ctypes/test_numbers.py b/Lib/test/test_ctypes/test_numbers.py index b7df08f6079cd3..142568a00d455b 100644 --- a/Lib/test/test_ctypes/test_numbers.py +++ b/Lib/test/test_ctypes/test_numbers.py @@ -3,7 +3,7 @@ import struct import sys import unittest -from itertools import combinations +lazy from itertools import combinations from operator import truth from ctypes import (byref, sizeof, alignment, c_char, c_byte, c_ubyte, c_short, c_ushort, c_int, c_uint, diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index d2c2261edbe04e..2843b4f532373c 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -9,7 +9,7 @@ import textwrap from io import StringIO, BytesIO -from itertools import chain +lazy from itertools import chain from random import choice from threading import Thread from unittest.mock import patch diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 3f5fcb29b442de..6d889a80da1db8 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -8,7 +8,7 @@ import weakref import errno from codecs import BOM_UTF8 -from itertools import product +lazy from itertools import product from textwrap import dedent from test.support import (captured_stderr, check_impl_detail, diff --git a/Lib/test/test_free_threading/test_itertools.py b/Lib/test/test_free_threading/test_itertools.py index 670d4ca8835e0d..9e4d8883e25b7b 100644 --- a/Lib/test/test_free_threading/test_itertools.py +++ b/Lib/test/test_free_threading/test_itertools.py @@ -1,5 +1,5 @@ import unittest -from itertools import accumulate, batched, chain, combinations_with_replacement, cycle, permutations, zip_longest +lazy from itertools import accumulate, batched, chain, combinations_with_replacement, cycle, permutations, zip_longest from test.support import threading_helper diff --git a/Lib/test/test_free_threading/test_itertools_combinatoric.py b/Lib/test/test_free_threading/test_itertools_combinatoric.py index 5b3b88deedd121..2ed17a37cd4331 100644 --- a/Lib/test/test_free_threading/test_itertools_combinatoric.py +++ b/Lib/test/test_free_threading/test_itertools_combinatoric.py @@ -1,6 +1,6 @@ import unittest from threading import Thread, Barrier -from itertools import combinations, product +lazy from itertools import combinations, product from test.support import threading_helper diff --git a/Lib/test/test_free_threading/test_str.py b/Lib/test/test_free_threading/test_str.py index 11e04009956db1..89433bb96a3a3d 100644 --- a/Lib/test/test_free_threading/test_str.py +++ b/Lib/test/test_free_threading/test_str.py @@ -2,7 +2,7 @@ import threading import unittest -from itertools import cycle +lazy from itertools import cycle from threading import Barrier, Event, Thread from unittest import TestCase diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index c30386afe41849..66942651d667be 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -4,7 +4,7 @@ import collections import collections.abc import copy -from itertools import permutations +lazy from itertools import permutations import pickle from random import choice import re diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py index 6eb25960101a9e..3bc8a4bc2d6241 100644 --- a/Lib/test/test_generators.py +++ b/Lib/test/test_generators.py @@ -1655,7 +1655,7 @@ def b(): Thanks to itertools.tee, it is now clear "how to get the internal uses of m235 to share a single generator". ->>> from itertools import tee +>>> lazy from itertools import tee >>> def m235(): ... def _m235(): ... yield 1 diff --git a/Lib/test/test_genericalias.py b/Lib/test/test_genericalias.py index a5969b7a47d948..a20f2209673d48 100644 --- a/Lib/test/test_genericalias.py +++ b/Lib/test/test_genericalias.py @@ -25,7 +25,7 @@ from difflib import SequenceMatcher from filecmp import dircmp from fileinput import FileInput -from itertools import chain +lazy from itertools import chain from http.cookies import Morsel try: from multiprocessing.managers import ValueProxy, DictProxy, ListProxy diff --git a/Lib/test/test_heapq.py b/Lib/test/test_heapq.py index d6623fee9bb2b4..3d540854bc1c6d 100644 --- a/Lib/test/test_heapq.py +++ b/Lib/test/test_heapq.py @@ -497,7 +497,7 @@ def __iter__(self): def __next__(self): raise StopIteration -from itertools import chain +lazy from itertools import chain def L(seqn): 'Test multiple tiers of iterators' return chain(map(lambda x:x, R(Ig(G(seqn))))) diff --git a/Lib/test/test_io/test_bufferedio.py b/Lib/test/test_io/test_bufferedio.py index e83dd0d4e28d00..813929279d9011 100644 --- a/Lib/test/test_io/test_bufferedio.py +++ b/Lib/test/test_io/test_bufferedio.py @@ -8,7 +8,7 @@ import warnings import weakref from collections import deque, UserList -from itertools import cycle, count +lazy from itertools import cycle, count from test import support from test.support import check_sanitizer, os_helper, threading_helper from .utils import byteslike, CTestCase, PyTestCase diff --git a/Lib/test/test_iterlen.py b/Lib/test/test_iterlen.py index 41c9752e557fb3..a2af4e1787a465 100644 --- a/Lib/test/test_iterlen.py +++ b/Lib/test/test_iterlen.py @@ -42,7 +42,7 @@ """ import unittest -from itertools import repeat +lazy from itertools import repeat from collections import deque from operator import length_hint diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index cf579d4da4e0df..b23f7e7a7e1065 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -3,7 +3,7 @@ import itertools from test import support from test.support import threading_helper, script_helper -from itertools import * +lazy from itertools import * import weakref from decimal import Decimal from fractions import Fraction @@ -1514,7 +1514,7 @@ def test_pairwise_result_gc(self): @support.cpython_only def test_immutable_types(self): - from itertools import _grouper, _tee, _tee_dataobject + lazy from itertools import _grouper, _tee, _tee_dataobject dataset = ( accumulate, batched, diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index 8f9a239bead130..db8c1be7371f44 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -1503,7 +1503,7 @@ def run(func, *args): def test_sumprod_extended_precision_accuracy(self): import operator from fractions import Fraction - from itertools import starmap + lazy from itertools import starmap from collections import namedtuple from math import log2, exp2, fabs from random import choices, uniform, shuffle diff --git a/Lib/test/test_memoryview.py b/Lib/test/test_memoryview.py index f71b6f53486509..368486c191a921 100644 --- a/Lib/test/test_memoryview.py +++ b/Lib/test/test_memoryview.py @@ -15,7 +15,7 @@ import pickle import struct -from itertools import product +lazy from itertools import product from test import support from test.support import import_helper, threading_helper diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py index 61c4ec9b7d5b4a..e2047cd6df285a 100644 --- a/Lib/test/test_peepholer.py +++ b/Lib/test/test_peepholer.py @@ -1,7 +1,7 @@ import ast import dis import gc -from itertools import combinations, product +lazy from itertools import combinations, product import opcode import sys import textwrap diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py index 9bfd4bc7d63669..1b9824f763e1a8 100644 --- a/Lib/test/test_set.py +++ b/Lib/test/test_set.py @@ -1803,7 +1803,7 @@ def __iter__(self): def __next__(self): raise StopIteration -from itertools import chain +lazy from itertools import chain def L(seqn): 'Test multiple tiers of iterators' return chain(map(lambda x:x, R(Ig(G(seqn))))) diff --git a/Lib/test/test_sort.py b/Lib/test/test_sort.py index 2a7cfb7affaa21..24392840eaefbe 100644 --- a/Lib/test/test_sort.py +++ b/Lib/test/test_sort.py @@ -129,7 +129,7 @@ def bad_key(x): check("stability", x, s) def test_small_stability(self): - from itertools import product + lazy from itertools import product from operator import itemgetter # Exhaustively test stability across all lists of small lengths diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py index edd85df633fc3b..048559666e8840 100644 --- a/Lib/test/test_struct.py +++ b/Lib/test/test_struct.py @@ -1,5 +1,5 @@ from collections import abc -from itertools import combinations +lazy from itertools import combinations import array import gc import math diff --git a/Lib/test/test_tuple.py b/Lib/test/test_tuple.py index e533392b8cae94..e2997b8742c318 100644 --- a/Lib/test/test_tuple.py +++ b/Lib/test/test_tuple.py @@ -127,7 +127,7 @@ def check_one_exact(t, e32, e64): # - https://bugs.python.org/issue942952 # - https://bugs.python.org/issue34751 def test_hash_optional(self): - from itertools import product + lazy from itertools import product if not RUN_ALL_HASH_TESTS: return diff --git a/Lib/test/test_unittest/test_assertions.py b/Lib/test/test_unittest/test_assertions.py index df95e558949aee..4ea9606169df1d 100644 --- a/Lib/test/test_unittest/test_assertions.py +++ b/Lib/test/test_unittest/test_assertions.py @@ -3,7 +3,7 @@ import weakref import unittest from test.support import gc_collect -from itertools import product +lazy from itertools import product class Test_Assertions(unittest.TestCase): diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py index 055be2994bf435..cf15a87b894b60 100755 --- a/Lib/test/test_uuid.py +++ b/Lib/test/test_uuid.py @@ -9,7 +9,7 @@ import sys import unittest import weakref -from itertools import product +lazy from itertools import product from unittest import mock from test import support diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index 3a41ea97a2e0a2..620ab7bd72a173 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -24,7 +24,7 @@ from contextlib import nullcontext from functools import partial -from itertools import product, islice +lazy from itertools import product, islice from test import support from test.support import os_helper from test.support import warnings_helper diff --git a/Lib/test/test_zipfile/_path/_itertools.py b/Lib/test/test_zipfile/_path/_itertools.py index f735dd21733006..37a4c031ca0e96 100644 --- a/Lib/test/test_zipfile/_path/_itertools.py +++ b/Lib/test/test_zipfile/_path/_itertools.py @@ -1,6 +1,6 @@ import itertools from collections import deque -from itertools import islice +lazy from itertools import islice # from jaraco.itertools 6.3.0 diff --git a/Lib/threading.py b/Lib/threading.py index abac31e25886fa..be2d1148487959 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -7,7 +7,7 @@ from time import monotonic as _time from _weakrefset import WeakSet -from itertools import count as _count +lazy from itertools import count as _count try: from _collections import deque as _deque except ImportError: diff --git a/Tools/c-analyzer/distutils/_msvccompiler.py b/Tools/c-analyzer/distutils/_msvccompiler.py index 1e67870d13323d..5fd43b2ba6a0ea 100644 --- a/Tools/c-analyzer/distutils/_msvccompiler.py +++ b/Tools/c-analyzer/distutils/_msvccompiler.py @@ -21,7 +21,7 @@ from distutils.ccompiler import CCompiler from distutils import log -from itertools import count +lazy from itertools import count def _find_vc2015(): try: diff --git a/Tools/msi/csv_to_wxs.py b/Tools/msi/csv_to_wxs.py index 235c8f8b0be581..668f2b77dbfe6b 100644 --- a/Tools/msi/csv_to_wxs.py +++ b/Tools/msi/csv_to_wxs.py @@ -21,7 +21,7 @@ import sys from collections import defaultdict -from itertools import chain, zip_longest +lazy from itertools import chain, zip_longest from pathlib import PureWindowsPath from uuid import uuid1 From c7a33727bdeb477c5c983ae73908f95815f7abb2 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Tue, 19 May 2026 08:13:05 -0500 Subject: [PATCH 2/6] No lazy importing star glob and within functions --- Lib/test/test_itertools.py | 4 ++-- Lib/test/test_math.py | 2 +- Lib/test/test_sort.py | 2 +- Lib/test/test_tuple.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index b23f7e7a7e1065..cf579d4da4e0df 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -3,7 +3,7 @@ import itertools from test import support from test.support import threading_helper, script_helper -lazy from itertools import * +from itertools import * import weakref from decimal import Decimal from fractions import Fraction @@ -1514,7 +1514,7 @@ def test_pairwise_result_gc(self): @support.cpython_only def test_immutable_types(self): - lazy from itertools import _grouper, _tee, _tee_dataobject + from itertools import _grouper, _tee, _tee_dataobject dataset = ( accumulate, batched, diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index db8c1be7371f44..8f9a239bead130 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -1503,7 +1503,7 @@ def run(func, *args): def test_sumprod_extended_precision_accuracy(self): import operator from fractions import Fraction - lazy from itertools import starmap + from itertools import starmap from collections import namedtuple from math import log2, exp2, fabs from random import choices, uniform, shuffle diff --git a/Lib/test/test_sort.py b/Lib/test/test_sort.py index 24392840eaefbe..2a7cfb7affaa21 100644 --- a/Lib/test/test_sort.py +++ b/Lib/test/test_sort.py @@ -129,7 +129,7 @@ def bad_key(x): check("stability", x, s) def test_small_stability(self): - lazy from itertools import product + from itertools import product from operator import itemgetter # Exhaustively test stability across all lists of small lengths diff --git a/Lib/test/test_tuple.py b/Lib/test/test_tuple.py index e2997b8742c318..e533392b8cae94 100644 --- a/Lib/test/test_tuple.py +++ b/Lib/test/test_tuple.py @@ -127,7 +127,7 @@ def check_one_exact(t, e32, e64): # - https://bugs.python.org/issue942952 # - https://bugs.python.org/issue34751 def test_hash_optional(self): - lazy from itertools import product + from itertools import product if not RUN_ALL_HASH_TESTS: return From d9443db9ccfd4bd1481ec9d8d83fe218aa296b01 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 13:09:48 +0000 Subject: [PATCH 3/6] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Library/2026-05-19-13-09-46.gh-issue-150082.xz99ig.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2026-05-19-13-09-46.gh-issue-150082.xz99ig.rst diff --git a/Misc/NEWS.d/next/Library/2026-05-19-13-09-46.gh-issue-150082.xz99ig.rst b/Misc/NEWS.d/next/Library/2026-05-19-13-09-46.gh-issue-150082.xz99ig.rst new file mode 100644 index 00000000000000..eff98cb7b583fb --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-19-13-09-46.gh-issue-150082.xz99ig.rst @@ -0,0 +1 @@ +Lazily import modules within standard library From 943ad786c7b13e2eea35c46538a93ca1418a2d94 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Tue, 19 May 2026 08:27:20 -0500 Subject: [PATCH 4/6] Revert screwup in _pydecimal.py --- Lib/_pydecimal.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/_pydecimal.py b/Lib/_pydecimal.py index 4a2cb8c3be0b99..ef889ea0cc834c 100644 --- a/Lib/_pydecimal.py +++ b/Lib/_pydecimal.py @@ -6279,7 +6279,7 @@ def _group_lengths(grouping): # (2) nonempty list of positive integers + [0] # (3) list of positive integers + [locale.CHAR_MAX], or - lazy from itertools import chain, repeat + from itertools import chain, repeat if not grouping: return [] elif grouping[-1] == 0 and len(grouping) >= 2: From d6b5308b68afecd121d296138a9c6819acadbe9c Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Tue, 19 May 2026 08:19:18 -0500 Subject: [PATCH 5/6] Lazy import io, importlib, idle, itertools --- Doc/conf.py | 4 +-- Doc/tools/extensions/profiling_trace.py | 2 +- Lib/_pyio.py | 2 +- Lib/_pyrepl/_module_completer.py | 4 +-- Lib/_pyrepl/utils.py | 2 +- Lib/bdb.py | 2 +- Lib/csv.py | 2 +- Lib/doctest.py | 2 +- Lib/email/feedparser.py | 2 +- Lib/email/generator.py | 2 +- Lib/email/iterators.py | 2 +- Lib/email/message.py | 2 +- Lib/email/parser.py | 2 +- Lib/encodings/quopri_codec.py | 2 +- Lib/encodings/uu_codec.py | 2 +- Lib/ensurepip/__init__.py | 2 +- Lib/idlelib/autocomplete.py | 6 ++-- Lib/idlelib/autocomplete_w.py | 4 +-- Lib/idlelib/browser.py | 10 +++---- Lib/idlelib/calltip.py | 4 +-- Lib/idlelib/calltip_w.py | 2 +- Lib/idlelib/codecontext.py | 2 +- Lib/idlelib/colorizer.py | 4 +-- Lib/idlelib/configdialog.py | 24 +++++++-------- Lib/idlelib/debugger.py | 6 ++-- Lib/idlelib/debugger_r.py | 2 +- Lib/idlelib/debugobj.py | 2 +- Lib/idlelib/debugobj_r.py | 2 +- Lib/idlelib/editor.py | 30 +++++++++---------- Lib/idlelib/format.py | 2 +- Lib/idlelib/grep.py | 4 +-- Lib/idlelib/help.py | 4 +-- Lib/idlelib/help_about.py | 2 +- Lib/idlelib/history.py | 2 +- Lib/idlelib/hyperparser.py | 2 +- Lib/idlelib/idle.py | 2 +- Lib/idlelib/idle_test/htest.py | 2 +- Lib/idlelib/idle_test/mock_idle.py | 2 +- Lib/idlelib/idle_test/mock_tk.py | 2 +- Lib/idlelib/idle_test/template.py | 2 +- Lib/idlelib/idle_test/test_autocomplete.py | 4 +-- Lib/idlelib/idle_test/test_autoexpand.py | 2 +- Lib/idlelib/idle_test/test_browser.py | 8 ++--- Lib/idlelib/idle_test/test_calltip.py | 4 +-- Lib/idlelib/idle_test/test_calltip_w.py | 2 +- Lib/idlelib/idle_test/test_codecontext.py | 4 +-- Lib/idlelib/idle_test/test_colorizer.py | 8 ++--- Lib/idlelib/idle_test/test_config.py | 4 +-- Lib/idlelib/idle_test/test_config_key.py | 6 ++-- Lib/idlelib/idle_test/test_configdialog.py | 8 ++--- Lib/idlelib/idle_test/test_debugger.py | 2 +- Lib/idlelib/idle_test/test_debugger_r.py | 2 +- Lib/idlelib/idle_test/test_debugobj.py | 2 +- Lib/idlelib/idle_test/test_debugobj_r.py | 2 +- Lib/idlelib/idle_test/test_delegator.py | 2 +- Lib/idlelib/idle_test/test_editmenu.py | 2 +- Lib/idlelib/idle_test/test_editor.py | 2 +- Lib/idlelib/idle_test/test_filelist.py | 2 +- Lib/idlelib/idle_test/test_format.py | 6 ++-- Lib/idlelib/idle_test/test_grep.py | 4 +-- Lib/idlelib/idle_test/test_help.py | 2 +- Lib/idlelib/idle_test/test_help_about.py | 8 ++--- Lib/idlelib/idle_test/test_history.py | 6 ++-- Lib/idlelib/idle_test/test_hyperparser.py | 4 +-- Lib/idlelib/idle_test/test_iomenu.py | 8 ++--- Lib/idlelib/idle_test/test_macosx.py | 4 +-- Lib/idlelib/idle_test/test_mainmenu.py | 2 +- Lib/idlelib/idle_test/test_multicall.py | 2 +- Lib/idlelib/idle_test/test_outwin.py | 6 ++-- Lib/idlelib/idle_test/test_parenmatch.py | 2 +- Lib/idlelib/idle_test/test_pathbrowser.py | 8 ++--- Lib/idlelib/idle_test/test_percolator.py | 2 +- Lib/idlelib/idle_test/test_pyparse.py | 2 +- Lib/idlelib/idle_test/test_pyshell.py | 2 +- Lib/idlelib/idle_test/test_query.py | 4 +-- Lib/idlelib/idle_test/test_redirector.py | 4 +-- Lib/idlelib/idle_test/test_replace.py | 4 +-- Lib/idlelib/idle_test/test_rpc.py | 2 +- Lib/idlelib/idle_test/test_run.py | 4 +-- Lib/idlelib/idle_test/test_runscript.py | 4 +-- Lib/idlelib/idle_test/test_scrolledlist.py | 2 +- Lib/idlelib/idle_test/test_search.py | 4 +-- Lib/idlelib/idle_test/test_searchbase.py | 6 ++-- Lib/idlelib/idle_test/test_searchengine.py | 6 ++-- Lib/idlelib/idle_test/test_sidebar.py | 14 ++++----- Lib/idlelib/idle_test/test_squeezer.py | 12 ++++---- Lib/idlelib/idle_test/test_stackviewer.py | 4 +-- Lib/idlelib/idle_test/test_statusbar.py | 2 +- Lib/idlelib/idle_test/test_textview.py | 6 ++-- Lib/idlelib/idle_test/test_tooltip.py | 2 +- Lib/idlelib/idle_test/test_tree.py | 2 +- Lib/idlelib/idle_test/test_undo.py | 4 +-- Lib/idlelib/idle_test/test_util.py | 2 +- Lib/idlelib/idle_test/test_warning.py | 4 +-- Lib/idlelib/idle_test/test_window.py | 2 +- Lib/idlelib/idle_test/test_zoomheight.py | 4 +-- Lib/idlelib/idle_test/test_zzdummy.py | 8 ++--- Lib/idlelib/idle_test/test_zzdummy_user.py | 6 ++-- Lib/idlelib/iomenu.py | 4 +-- Lib/idlelib/mainmenu.py | 4 +-- Lib/idlelib/outwin.py | 2 +- Lib/idlelib/parenmatch.py | 4 +-- Lib/idlelib/pathbrowser.py | 4 +-- Lib/idlelib/percolator.py | 4 +-- Lib/idlelib/pyshell.py | 24 +++++++-------- Lib/idlelib/replace.py | 4 +-- Lib/idlelib/run.py | 14 ++++----- Lib/idlelib/runscript.py | 10 +++---- Lib/idlelib/scrolledlist.py | 2 +- Lib/idlelib/search.py | 4 +-- Lib/idlelib/sidebar.py | 6 ++-- Lib/idlelib/squeezer.py | 8 ++--- Lib/idlelib/stackviewer.py | 4 +-- Lib/idlelib/textview.py | 2 +- Lib/idlelib/tree.py | 4 +-- Lib/idlelib/undo.py | 2 +- Lib/idlelib/zzdummy.py | 2 +- Lib/imaplib.py | 2 +- Lib/importlib/metadata/__init__.py | 4 +-- Lib/importlib/resources/_adapters.py | 2 +- Lib/pathlib/_os.py | 2 +- Lib/pathlib/types.py | 2 +- Lib/plistlib.py | 2 +- Lib/pprint.py | 2 +- Lib/pydoc_data/topics.py | 2 +- Lib/shlex.py | 2 +- Lib/socketserver.py | 2 +- Lib/test/libregrtest/refleak.py | 2 +- Lib/test/multibytecodec_support.py | 2 +- Lib/test/support/script_helper.py | 2 +- Lib/test/test_abc.py | 2 +- Lib/test/test_ast/test_ast.py | 2 +- Lib/test/test_builtin.py | 2 +- Lib/test/test_bz2.py | 2 +- Lib/test/test_cmd_line_script.py | 2 +- Lib/test/test_csv.py | 2 +- Lib/test/test_email/test_email.py | 2 +- Lib/test/test_email/torture_test.py | 2 +- Lib/test/test_enum.py | 2 +- Lib/test/test_fileinput.py | 2 +- Lib/test/test_functools.py | 2 +- Lib/test/test_getpass.py | 2 +- Lib/test/test_httpservers.py | 2 +- Lib/test/test_idle.py | 2 +- Lib/test/test_import/__init__.py | 4 +-- .../test_importlib/import_/test___loader__.py | 2 +- Lib/test/test_importlib/import_/test_api.py | 2 +- .../test_importlib/import_/test_helpers.py | 2 +- Lib/test/test_importlib/metadata/fixtures.py | 2 +- Lib/test/test_importlib/metadata/test_api.py | 2 +- Lib/test/test_importlib/metadata/test_main.py | 2 +- Lib/test/test_importlib/metadata/test_zip.py | 2 +- .../resources/test_compatibilty_files.py | 2 +- .../test_importlib/resources/test_custom.py | 4 +-- .../test_importlib/resources/test_files.py | 2 +- .../test_importlib/resources/test_read.py | 2 +- .../test_importlib/resources/test_reader.py | 4 +-- .../test_importlib/resources/test_resource.py | 2 +- Lib/test/test_importlib/resources/util.py | 4 +-- Lib/test/test_importlib/test_lazy.py | 4 +-- Lib/test/test_importlib/test_pkg_import.py | 2 +- Lib/test/test_importlib/test_util.py | 2 +- Lib/test/test_importlib/util.py | 2 +- Lib/test/test_itertools.py | 2 +- Lib/test/test_json/test_decode.py | 2 +- Lib/test/test_json/test_dump.py | 2 +- Lib/test/test_json/test_indent.py | 2 +- Lib/test/test_linecache.py | 2 +- Lib/test/test_lzma.py | 2 +- Lib/test/test_optparse.py | 2 +- Lib/test/test_pdb.py | 2 +- Lib/test/test_pkgutil.py | 2 +- Lib/test/test_plistlib.py | 2 +- Lib/test/test_print.py | 2 +- Lib/test/test_profile.py | 2 +- Lib/test/test_pstats.py | 2 +- Lib/test/test_pydoc/test_pydoc.py | 2 +- Lib/test/test_pyexpat.py | 2 +- Lib/test/test_sax.py | 2 +- Lib/test/test_sys.py | 2 +- Lib/test/test_tokenize.py | 2 +- Lib/test/test_traceback.py | 2 +- Lib/test/test_unittest/test_discovery.py | 2 +- .../testmock/testmagicmethods.py | 2 +- Lib/test/test_warnings/__init__.py | 2 +- Lib/test/test_wsgiref.py | 2 +- Lib/tokenize.py | 2 +- Lib/turtledemo/__main__.py | 6 ++-- Lib/unittest/mock.py | 2 +- Lib/xmlrpc/client.py | 2 +- Lib/xmlrpc/server.py | 2 +- .../IDLE.app/Contents/Resources/idlemain.py | 2 +- Tools/build/check_extension_modules.py | 6 ++-- Tools/cases_generator/cwriter.py | 2 +- Tools/cases_generator/parsing.py | 2 +- Tools/i18n/pygettext.py | 2 +- Tools/importbench/importbench.py | 2 +- 197 files changed, 347 insertions(+), 347 deletions(-) diff --git a/Doc/conf.py b/Doc/conf.py index e2dff74538a342..3de2493a4e61d3 100644 --- a/Doc/conf.py +++ b/Doc/conf.py @@ -8,8 +8,8 @@ import os import sys -from importlib import import_module -from importlib.util import find_spec +lazy from importlib import import_module +lazy from importlib.util import find_spec # Make our custom extensions available to Sphinx sys.path.append(os.path.abspath('tools/extensions')) diff --git a/Doc/tools/extensions/profiling_trace.py b/Doc/tools/extensions/profiling_trace.py index 7185ef351ddc7f..61143305c91cd8 100644 --- a/Doc/tools/extensions/profiling_trace.py +++ b/Doc/tools/extensions/profiling_trace.py @@ -8,7 +8,7 @@ import json import re import sys -from io import StringIO +lazy from io import StringIO from pathlib import Path from sphinx.errors import ExtensionError diff --git a/Lib/_pyio.py b/Lib/_pyio.py index 9c7faa26bb4bd4..4f5b3b06691ab4 100644 --- a/Lib/_pyio.py +++ b/Lib/_pyio.py @@ -16,7 +16,7 @@ _setmode = None import io -from io import (__all__, SEEK_SET, SEEK_CUR, SEEK_END, Reader, Writer) # noqa: F401 +lazy from io import (__all__, SEEK_SET, SEEK_CUR, SEEK_END, Reader, Writer) # noqa: F401 valid_seek_flags = {0, 1, 2} # Hardwired values if hasattr(os, 'SEEK_HOLE') : diff --git a/Lib/_pyrepl/_module_completer.py b/Lib/_pyrepl/_module_completer.py index 9a9ce48e7b1aff..1fdd56d0ca9826 100644 --- a/Lib/_pyrepl/_module_completer.py +++ b/Lib/_pyrepl/_module_completer.py @@ -7,8 +7,8 @@ import sys import token import tokenize -from importlib.machinery import FileFinder -from io import StringIO +lazy from importlib.machinery import FileFinder +lazy from io import StringIO from contextlib import contextmanager from dataclasses import dataclass lazy from itertools import chain diff --git a/Lib/_pyrepl/utils.py b/Lib/_pyrepl/utils.py index b50426c31ead53..21e86894d7ec00 100644 --- a/Lib/_pyrepl/utils.py +++ b/Lib/_pyrepl/utils.py @@ -10,7 +10,7 @@ from collections import deque from dataclasses import dataclass -from io import StringIO +lazy from io import StringIO from tokenize import TokenInfo as TI from typing import Iterable, Iterator, Match, NamedTuple, Self diff --git a/Lib/bdb.py b/Lib/bdb.py index 50cf2b3f5b3e45..7d8337d8edb054 100644 --- a/Lib/bdb.py +++ b/Lib/bdb.py @@ -6,7 +6,7 @@ import os import weakref from contextlib import contextmanager -from inspect import CO_GENERATOR, CO_COROUTINE, CO_ASYNC_GENERATOR +lazy from inspect import CO_GENERATOR, CO_COROUTINE, CO_ASYNC_GENERATOR __all__ = ["BdbQuit", "Bdb", "Breakpoint"] diff --git a/Lib/csv.py b/Lib/csv.py index b2aaf5fd9fa91e..aeda4fe4e47073 100644 --- a/Lib/csv.py +++ b/Lib/csv.py @@ -71,7 +71,7 @@ class excel: QUOTE_STRINGS, QUOTE_NOTNULL from _csv import Dialect as _Dialect -from io import StringIO +lazy from io import StringIO __all__ = ["QUOTE_MINIMAL", "QUOTE_ALL", "QUOTE_NONNUMERIC", "QUOTE_NONE", "QUOTE_STRINGS", "QUOTE_NOTNULL", diff --git a/Lib/doctest.py b/Lib/doctest.py index be950079e396de..82fd94daa09310 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -104,7 +104,7 @@ def _test(): import traceback import types import unittest -from io import StringIO, TextIOWrapper, BytesIO +lazy from io import StringIO, TextIOWrapper, BytesIO from collections import namedtuple lazy import _colorize # Used in doctests lazy from _colorize import ANSIColors, can_colorize diff --git a/Lib/email/feedparser.py b/Lib/email/feedparser.py index ae8ef32792b3e9..a1d3132c887a10 100644 --- a/Lib/email/feedparser.py +++ b/Lib/email/feedparser.py @@ -26,7 +26,7 @@ from email import errors from email._policybase import compat32 from collections import deque -from io import StringIO +lazy from io import StringIO NLCRE = re.compile(r'\r\n|\r|\n') NLCRE_bol = re.compile(r'(\r\n|\r|\n)') diff --git a/Lib/email/generator.py b/Lib/email/generator.py index ba11d63fba600a..6ca9a36104f1a8 100644 --- a/Lib/email/generator.py +++ b/Lib/email/generator.py @@ -12,7 +12,7 @@ import random from copy import deepcopy -from io import StringIO, BytesIO +lazy from io import StringIO, BytesIO from email.utils import _has_surrogates from email.errors import HeaderWriteError diff --git a/Lib/email/iterators.py b/Lib/email/iterators.py index 08ede3ec679613..1d141e8a09da3c 100644 --- a/Lib/email/iterators.py +++ b/Lib/email/iterators.py @@ -12,7 +12,7 @@ ] import sys -from io import StringIO +lazy from io import StringIO # This function will become a method of the Message class diff --git a/Lib/email/message.py b/Lib/email/message.py index 641fb2e944d431..e09285ad199ae3 100644 --- a/Lib/email/message.py +++ b/Lib/email/message.py @@ -9,7 +9,7 @@ import binascii import re import quopri -from io import BytesIO, StringIO +lazy from io import BytesIO, StringIO # Intrapackage imports from email import utils diff --git a/Lib/email/parser.py b/Lib/email/parser.py index c6a51dd8e377b8..d2bfeb5321508b 100644 --- a/Lib/email/parser.py +++ b/Lib/email/parser.py @@ -7,7 +7,7 @@ __all__ = ['Parser', 'HeaderParser', 'BytesParser', 'BytesHeaderParser', 'FeedParser', 'BytesFeedParser'] -from io import StringIO, TextIOWrapper +lazy from io import StringIO, TextIOWrapper from email.feedparser import FeedParser, BytesFeedParser from email._policybase import compat32 diff --git a/Lib/encodings/quopri_codec.py b/Lib/encodings/quopri_codec.py index 496cb7655d032d..0b5df916ffd8b8 100644 --- a/Lib/encodings/quopri_codec.py +++ b/Lib/encodings/quopri_codec.py @@ -5,7 +5,7 @@ import codecs import quopri -from io import BytesIO +lazy from io import BytesIO def quopri_encode(input, errors='strict'): assert errors == 'strict' diff --git a/Lib/encodings/uu_codec.py b/Lib/encodings/uu_codec.py index 4f8704016e2131..02f7bedd3fd468 100644 --- a/Lib/encodings/uu_codec.py +++ b/Lib/encodings/uu_codec.py @@ -9,7 +9,7 @@ import codecs import binascii -from io import BytesIO +lazy from io import BytesIO ### Codec APIs diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py index ab6b95e0ba60c0..07727a8399deec 100644 --- a/Lib/ensurepip/__init__.py +++ b/Lib/ensurepip/__init__.py @@ -4,7 +4,7 @@ import sysconfig import tempfile from contextlib import nullcontext -from importlib import resources +lazy from importlib import resources from pathlib import Path from shutil import copy2 diff --git a/Lib/idlelib/autocomplete.py b/Lib/idlelib/autocomplete.py index 032d31225315fb..58a5703abd3fba 100644 --- a/Lib/idlelib/autocomplete.py +++ b/Lib/idlelib/autocomplete.py @@ -17,9 +17,9 @@ # Two types of completions; defined here for autocomplete_w import below. ATTRS, FILES = 0, 1 -from idlelib import autocomplete_w -from idlelib.config import idleConf -from idlelib.hyperparser import HyperParser +lazy from idlelib import autocomplete_w +lazy from idlelib.config import idleConf +lazy from idlelib.hyperparser import HyperParser # Tuples passed to open_completions. # EvalFunc, Complete, WantWin, Mode diff --git a/Lib/idlelib/autocomplete_w.py b/Lib/idlelib/autocomplete_w.py index 24320b5a3bffab..abd9a9e78f8e78 100644 --- a/Lib/idlelib/autocomplete_w.py +++ b/Lib/idlelib/autocomplete_w.py @@ -6,8 +6,8 @@ from tkinter import * from tkinter.ttk import Scrollbar -from idlelib.autocomplete import FILES, ATTRS -from idlelib.multicall import MC_SHIFT +lazy from idlelib.autocomplete import FILES, ATTRS +lazy from idlelib.multicall import MC_SHIFT HIDE_VIRTUAL_EVENT_NAME = "<>" HIDE_FOCUS_OUT_SEQUENCE = "" diff --git a/Lib/idlelib/browser.py b/Lib/idlelib/browser.py index 8b9060e57072ea..6e42167a7e671c 100644 --- a/Lib/idlelib/browser.py +++ b/Lib/idlelib/browser.py @@ -12,11 +12,11 @@ import pyclbr import sys -from idlelib.config import idleConf -from idlelib import pyshell -from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas -from idlelib.util import py_extensions -from idlelib.window import ListedToplevel +lazy from idlelib.config import idleConf +lazy from idlelib import pyshell +lazy from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas +lazy from idlelib.util import py_extensions +lazy from idlelib.window import ListedToplevel file_open = None # Method...Item and Class...Item use this. diff --git a/Lib/idlelib/calltip.py b/Lib/idlelib/calltip.py index 40bc5a0ad798fe..e23a497620331c 100644 --- a/Lib/idlelib/calltip.py +++ b/Lib/idlelib/calltip.py @@ -11,8 +11,8 @@ import textwrap import types -from idlelib import calltip_w -from idlelib.hyperparser import HyperParser +lazy from idlelib import calltip_w +lazy from idlelib.hyperparser import HyperParser class Calltip: diff --git a/Lib/idlelib/calltip_w.py b/Lib/idlelib/calltip_w.py index 9386376058c791..7c895a773a1450 100644 --- a/Lib/idlelib/calltip_w.py +++ b/Lib/idlelib/calltip_w.py @@ -5,7 +5,7 @@ """ from tkinter import Label, LEFT, SOLID, TclError -from idlelib.tooltip import TooltipBase +lazy from idlelib.tooltip import TooltipBase HIDE_EVENT = "<>" HIDE_SEQUENCES = ("", "") diff --git a/Lib/idlelib/codecontext.py b/Lib/idlelib/codecontext.py index f2f44f5f8d4e61..514a3ce31c8e94 100644 --- a/Lib/idlelib/codecontext.py +++ b/Lib/idlelib/codecontext.py @@ -17,7 +17,7 @@ from tkinter import Frame, Text, TclError from tkinter.constants import NSEW, SUNKEN -from idlelib.config import idleConf +lazy from idlelib.config import idleConf BLOCKOPENERS = {'class', 'def', 'if', 'elif', 'else', 'while', 'for', 'try', 'except', 'finally', 'with', 'async'} diff --git a/Lib/idlelib/colorizer.py b/Lib/idlelib/colorizer.py index 6db38de3aa6cb9..eaec7fc635f325 100644 --- a/Lib/idlelib/colorizer.py +++ b/Lib/idlelib/colorizer.py @@ -3,8 +3,8 @@ import re import time -from idlelib.config import idleConf -from idlelib.delegator import Delegator +lazy from idlelib.config import idleConf +lazy from idlelib.delegator import Delegator DEBUG = False diff --git a/Lib/idlelib/configdialog.py b/Lib/idlelib/configdialog.py index 10bd3c23450821..d7bb17610bfb87 100644 --- a/Lib/idlelib/configdialog.py +++ b/Lib/idlelib/configdialog.py @@ -23,18 +23,18 @@ import tkinter.font as tkfont from tkinter import messagebox -from idlelib.config import idleConf, ConfigChanges -from idlelib.config_key import GetKeysWindow -from idlelib.dynoption import DynOptionMenu -from idlelib import macosx -from idlelib.query import SectionName, HelpSource -from idlelib.textview import view_text -from idlelib.autocomplete import AutoComplete -from idlelib.codecontext import CodeContext -from idlelib.parenmatch import ParenMatch -from idlelib.format import FormatParagraph -from idlelib.squeezer import Squeezer -from idlelib.textview import ScrollableTextFrame +lazy from idlelib.config import idleConf, ConfigChanges +lazy from idlelib.config_key import GetKeysWindow +lazy from idlelib.dynoption import DynOptionMenu +lazy from idlelib import macosx +lazy from idlelib.query import SectionName, HelpSource +lazy from idlelib.textview import view_text +lazy from idlelib.autocomplete import AutoComplete +lazy from idlelib.codecontext import CodeContext +lazy from idlelib.parenmatch import ParenMatch +lazy from idlelib.format import FormatParagraph +lazy from idlelib.squeezer import Squeezer +lazy from idlelib.textview import ScrollableTextFrame changes = ConfigChanges() # Reload changed options in the following classes. diff --git a/Lib/idlelib/debugger.py b/Lib/idlelib/debugger.py index 1fae1d4b0adbd7..37d6fe7e04d156 100644 --- a/Lib/idlelib/debugger.py +++ b/Lib/idlelib/debugger.py @@ -21,9 +21,9 @@ from tkinter import * from tkinter.ttk import Frame, Scrollbar -from idlelib import macosx -from idlelib.scrolledlist import ScrolledList -from idlelib.window import ListedToplevel +lazy from idlelib import macosx +lazy from idlelib.scrolledlist import ScrolledList +lazy from idlelib.window import ListedToplevel class Idb(bdb.Bdb): diff --git a/Lib/idlelib/debugger_r.py b/Lib/idlelib/debugger_r.py index ad3355d9f82765..33a5cacb07aad1 100644 --- a/Lib/idlelib/debugger_r.py +++ b/Lib/idlelib/debugger_r.py @@ -21,7 +21,7 @@ """ import reprlib import types -from idlelib import debugger +lazy from idlelib import debugger debugging = 0 diff --git a/Lib/idlelib/debugobj.py b/Lib/idlelib/debugobj.py index fb448ece2fa25e..9bed90415d1ce6 100644 --- a/Lib/idlelib/debugobj.py +++ b/Lib/idlelib/debugobj.py @@ -12,7 +12,7 @@ # - for classes/modules, add "open source" to object browser from reprlib import Repr -from idlelib.tree import TreeItem, TreeNode, ScrolledCanvas +lazy from idlelib.tree import TreeItem, TreeNode, ScrolledCanvas myrepr = Repr() myrepr.maxstring = 100 diff --git a/Lib/idlelib/debugobj_r.py b/Lib/idlelib/debugobj_r.py index 75e75ebe5acafc..1203b444f6270a 100644 --- a/Lib/idlelib/debugobj_r.py +++ b/Lib/idlelib/debugobj_r.py @@ -1,4 +1,4 @@ -from idlelib import rpc +lazy from idlelib import rpc def remote_object_tree_item(item): wrapper = WrappedObjectTreeItem(item) diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py index 239bf5af470567..e9d376f79bbeee 100644 --- a/Lib/idlelib/editor.py +++ b/Lib/idlelib/editor.py @@ -15,21 +15,21 @@ from tkinter import simpledialog from tkinter import messagebox -from idlelib.config import idleConf -from idlelib import configdialog -from idlelib import grep -from idlelib import help -from idlelib import help_about -from idlelib import macosx -from idlelib.multicall import MultiCallCreator -from idlelib import pyparse -from idlelib import query -from idlelib import replace -from idlelib import search -from idlelib.tree import wheel_event -from idlelib.util import py_extensions -from idlelib import window -from idlelib.help import _get_dochome +lazy from idlelib.config import idleConf +lazy from idlelib import configdialog +lazy from idlelib import grep +lazy from idlelib import help +lazy from idlelib import help_about +lazy from idlelib import macosx +lazy from idlelib.multicall import MultiCallCreator +lazy from idlelib import pyparse +lazy from idlelib import query +lazy from idlelib import replace +lazy from idlelib import search +lazy from idlelib.tree import wheel_event +lazy from idlelib.util import py_extensions +lazy from idlelib import window +lazy from idlelib.help import _get_dochome # The default tab setting for a Text widget, in average-width characters. TK_TABWIDTH_DEFAULT = 8 diff --git a/Lib/idlelib/format.py b/Lib/idlelib/format.py index 4b57a182c9a49d..247ba23d758733 100644 --- a/Lib/idlelib/format.py +++ b/Lib/idlelib/format.py @@ -8,7 +8,7 @@ import re from tkinter.messagebox import askyesno from tkinter.simpledialog import askinteger -from idlelib.config import idleConf +lazy from idlelib.config import idleConf class FormatParagraph: diff --git a/Lib/idlelib/grep.py b/Lib/idlelib/grep.py index 42048ff2395fe1..dc2c276640a155 100644 --- a/Lib/idlelib/grep.py +++ b/Lib/idlelib/grep.py @@ -10,8 +10,8 @@ from tkinter import StringVar, BooleanVar from tkinter.ttk import Checkbutton # Frame imported in ...Base -from idlelib.searchbase import SearchDialogBase -from idlelib import searchengine +lazy from idlelib.searchbase import SearchDialogBase +lazy from idlelib import searchengine # Importing OutputWindow here fails due to import loop # EditorWindow -> GrepDialog -> OutputWindow -> EditorWindow diff --git a/Lib/idlelib/help.py b/Lib/idlelib/help.py index 48e7eca280ebf8..0fc3f01eb62abe 100644 --- a/Lib/idlelib/help.py +++ b/Lib/idlelib/help.py @@ -37,8 +37,8 @@ from tkinter.ttk import Frame, Menubutton, Scrollbar, Style from tkinter import font as tkfont -from idlelib.config import idleConf -from idlelib.colorizer import color_config +lazy from idlelib.config import idleConf +lazy from idlelib.colorizer import color_config ## About IDLE ## diff --git a/Lib/idlelib/help_about.py b/Lib/idlelib/help_about.py index 750da373272298..f050acdb12a4e1 100644 --- a/Lib/idlelib/help_about.py +++ b/Lib/idlelib/help_about.py @@ -9,7 +9,7 @@ from tkinter import Toplevel, Frame, Label, Button, PhotoImage from tkinter import SUNKEN, TOP, BOTTOM, LEFT, X, BOTH, W, EW, NSEW, E -from idlelib import textview +lazy from idlelib import textview pyver = python_version() diff --git a/Lib/idlelib/history.py b/Lib/idlelib/history.py index 5a9b32aaf6bb81..7c971fac9a7461 100644 --- a/Lib/idlelib/history.py +++ b/Lib/idlelib/history.py @@ -1,6 +1,6 @@ "Implement Idle Shell history mechanism with History class" -from idlelib.config import idleConf +lazy from idlelib.config import idleConf class History: diff --git a/Lib/idlelib/hyperparser.py b/Lib/idlelib/hyperparser.py index 76144ee8fb30f5..b0753716da092d 100644 --- a/Lib/idlelib/hyperparser.py +++ b/Lib/idlelib/hyperparser.py @@ -7,7 +7,7 @@ from keyword import iskeyword import string -from idlelib import pyparse +lazy from idlelib import pyparse # all ASCII chars that may be in an identifier _ASCII_ID_CHARS = frozenset(string.ascii_letters + string.digits + "_") diff --git a/Lib/idlelib/idle.py b/Lib/idlelib/idle.py index 485d5a75a29c1a..7e06c3ce1cec14 100644 --- a/Lib/idlelib/idle.py +++ b/Lib/idlelib/idle.py @@ -10,5 +10,5 @@ if idlelib_dir not in sys.path: sys.path.insert(0, idlelib_dir) -from idlelib.pyshell import main # This is subject to change +lazy from idlelib.pyshell import main # This is subject to change main() diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py index b63ff9ec2877b9..8943b6fca6bace 100644 --- a/Lib/idlelib/idle_test/htest.py +++ b/Lib/idlelib/idle_test/htest.py @@ -64,7 +64,7 @@ """ import idlelib.pyshell # Set Windows DPI awareness before Tk(). -from importlib import import_module +lazy from importlib import import_module import textwrap import tkinter as tk from tkinter.ttk import Scrollbar diff --git a/Lib/idlelib/idle_test/mock_idle.py b/Lib/idlelib/idle_test/mock_idle.py index 71fa480ce4d05c..82640264d7d82f 100644 --- a/Lib/idlelib/idle_test/mock_idle.py +++ b/Lib/idlelib/idle_test/mock_idle.py @@ -3,7 +3,7 @@ Attributes and methods will be added as needed for tests. ''' -from idlelib.idle_test.mock_tk import Text +lazy from idlelib.idle_test.mock_tk import Text class Func: '''Record call, capture args, return/raise result set by test. diff --git a/Lib/idlelib/idle_test/mock_tk.py b/Lib/idlelib/idle_test/mock_tk.py index 8304734b847a83..26636c482c7cee 100644 --- a/Lib/idlelib/idle_test/mock_tk.py +++ b/Lib/idlelib/idle_test/mock_tk.py @@ -61,7 +61,7 @@ class Mbox: Example usage in test_module.py for testing functions in module.py: --- -from idlelib.idle_test.mock_tk import Mbox +lazy from idlelib.idle_test.mock_tk import Mbox import module orig_mbox = module.messagebox diff --git a/Lib/idlelib/idle_test/template.py b/Lib/idlelib/idle_test/template.py index 725a55b9c47230..d76ee30d25f42f 100644 --- a/Lib/idlelib/idle_test/template.py +++ b/Lib/idlelib/idle_test/template.py @@ -1,6 +1,6 @@ "Test , coverage %." -from idlelib import zzdummy +lazy from idlelib import zzdummy import unittest from test.support import requires from tkinter import Tk diff --git a/Lib/idlelib/idle_test/test_autocomplete.py b/Lib/idlelib/idle_test/test_autocomplete.py index a811363c18d04e..ff5e149522943a 100644 --- a/Lib/idlelib/idle_test/test_autocomplete.py +++ b/Lib/idlelib/idle_test/test_autocomplete.py @@ -9,8 +9,8 @@ import idlelib.autocomplete as ac import idlelib.autocomplete_w as acw -from idlelib.idle_test.mock_idle import Func -from idlelib.idle_test.mock_tk import Event +lazy from idlelib.idle_test.mock_idle import Func +lazy from idlelib.idle_test.mock_tk import Event class DummyEditwin: diff --git a/Lib/idlelib/idle_test/test_autoexpand.py b/Lib/idlelib/idle_test/test_autoexpand.py index e734a8be714a2a..2563121399ab85 100644 --- a/Lib/idlelib/idle_test/test_autoexpand.py +++ b/Lib/idlelib/idle_test/test_autoexpand.py @@ -1,6 +1,6 @@ "Test autoexpand, coverage 100%." -from idlelib.autoexpand import AutoExpand +lazy from idlelib.autoexpand import AutoExpand import unittest from test.support import requires from tkinter import Text, Tk diff --git a/Lib/idlelib/idle_test/test_browser.py b/Lib/idlelib/idle_test/test_browser.py index 6cfea3888cd6a9..dc7cc1170b085d 100644 --- a/Lib/idlelib/idle_test/test_browser.py +++ b/Lib/idlelib/idle_test/test_browser.py @@ -1,18 +1,18 @@ "Test browser, coverage 90%." -from idlelib import browser +lazy from idlelib import browser from test.support import requires import unittest from unittest import mock -from idlelib.idle_test.mock_idle import Func -from idlelib.util import py_extensions +lazy from idlelib.idle_test.mock_idle import Func +lazy from idlelib.util import py_extensions from collections import deque import os.path import pyclbr from tkinter import Tk -from idlelib.tree import TreeNode +lazy from idlelib.tree import TreeNode class ModuleBrowserTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_calltip.py b/Lib/idlelib/idle_test/test_calltip.py index 28c196a42672fc..3ce475ebc5b23b 100644 --- a/Lib/idlelib/idle_test/test_calltip.py +++ b/Lib/idlelib/idle_test/test_calltip.py @@ -1,12 +1,12 @@ "Test calltip, coverage 76%" -from idlelib import calltip +lazy from idlelib import calltip import unittest from unittest.mock import Mock import textwrap import types import re -from idlelib.idle_test.mock_tk import Text +lazy from idlelib.idle_test.mock_tk import Text from test.support import MISSING_C_DOCSTRINGS diff --git a/Lib/idlelib/idle_test/test_calltip_w.py b/Lib/idlelib/idle_test/test_calltip_w.py index a5ec76e15ffdf3..bcd2d218c60f9b 100644 --- a/Lib/idlelib/idle_test/test_calltip_w.py +++ b/Lib/idlelib/idle_test/test_calltip_w.py @@ -1,6 +1,6 @@ "Test calltip_w, coverage 18%." -from idlelib import calltip_w +lazy from idlelib import calltip_w import unittest from test.support import requires from tkinter import Tk, Text diff --git a/Lib/idlelib/idle_test/test_codecontext.py b/Lib/idlelib/idle_test/test_codecontext.py index 6969ad73b01a81..cdabc76df50799 100644 --- a/Lib/idlelib/idle_test/test_codecontext.py +++ b/Lib/idlelib/idle_test/test_codecontext.py @@ -1,6 +1,6 @@ "Test codecontext, coverage 100%" -from idlelib import codecontext +lazy from idlelib import codecontext import unittest import unittest.mock from test.support import requires @@ -8,7 +8,7 @@ from unittest import mock import re -from idlelib import config +lazy from idlelib import config usercfg = codecontext.idleConf.userCfg diff --git a/Lib/idlelib/idle_test/test_colorizer.py b/Lib/idlelib/idle_test/test_colorizer.py index fb6ee825086750..b9e69bbef232ad 100644 --- a/Lib/idlelib/idle_test/test_colorizer.py +++ b/Lib/idlelib/idle_test/test_colorizer.py @@ -1,15 +1,15 @@ "Test colorizer, coverage 99%." -from idlelib import colorizer +lazy from idlelib import colorizer from test.support import requires import unittest from unittest import mock -from idlelib.idle_test.tkinter_testing_utils import run_in_tk_mainloop +lazy from idlelib.idle_test.tkinter_testing_utils import run_in_tk_mainloop from functools import partial import textwrap from tkinter import Tk, Text -from idlelib import config -from idlelib.percolator import Percolator +lazy from idlelib import config +lazy from idlelib.percolator import Percolator usercfg = colorizer.idleConf.userCfg diff --git a/Lib/idlelib/idle_test/test_config.py b/Lib/idlelib/idle_test/test_config.py index 6d75cf7aa67dcc..7c15ae8d5ff6ba 100644 --- a/Lib/idlelib/idle_test/test_config.py +++ b/Lib/idlelib/idle_test/test_config.py @@ -3,7 +3,7 @@ * Exception is OSError clause in Save method. Much of IdleConf is also exercised by ConfigDialog and test_configdialog. """ -from idlelib import config +lazy from idlelib import config import sys import os import tempfile @@ -11,7 +11,7 @@ import unittest from unittest import mock import idlelib -from idlelib.idle_test.mock_idle import Func +lazy from idlelib.idle_test.mock_idle import Func # Tests should not depend on fortuitous user configurations. # They must not affect actual user .cfg files. diff --git a/Lib/idlelib/idle_test/test_config_key.py b/Lib/idlelib/idle_test/test_config_key.py index 32f878b842b276..d2315c47b8e36e 100644 --- a/Lib/idlelib/idle_test/test_config_key.py +++ b/Lib/idlelib/idle_test/test_config_key.py @@ -5,13 +5,13 @@ Not tested: exit with 'self.advanced or self.keys_ok(keys) ...' False. """ -from idlelib import config_key +lazy from idlelib import config_key from test.support import requires import unittest from unittest import mock from tkinter import Tk, TclError -from idlelib.idle_test.mock_idle import Func -from idlelib.idle_test.mock_tk import Mbox_func +lazy from idlelib.idle_test.mock_idle import Func +lazy from idlelib.idle_test.mock_tk import Mbox_func class ValidationTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_configdialog.py b/Lib/idlelib/idle_test/test_configdialog.py index 2773ed7ce614b5..c76c311c9ee352 100644 --- a/Lib/idlelib/idle_test/test_configdialog.py +++ b/Lib/idlelib/idle_test/test_configdialog.py @@ -2,15 +2,15 @@ Half the class creates dialog, half works with user customizations. """ -from idlelib import configdialog +lazy from idlelib import configdialog from test.support import requires requires('gui') import unittest from unittest import mock -from idlelib.idle_test.mock_idle import Func +lazy from idlelib.idle_test.mock_idle import Func from tkinter import (Tk, StringVar, IntVar, BooleanVar, DISABLED, NORMAL) -from idlelib import config -from idlelib.configdialog import idleConf, changes, tracers +lazy from idlelib import config +lazy from idlelib.configdialog import idleConf, changes, tracers # Tests should not depend on fortuitous user configurations. # They must not affect actual user .cfg files. diff --git a/Lib/idlelib/idle_test/test_debugger.py b/Lib/idlelib/idle_test/test_debugger.py index 9ca3b332648b31..9ad7f5bc42287b 100644 --- a/Lib/idlelib/idle_test/test_debugger.py +++ b/Lib/idlelib/idle_test/test_debugger.py @@ -3,7 +3,7 @@ Try to make tests pass with draft bdbx, which may replace bdb in 3.13+. """ -from idlelib import debugger +lazy from idlelib import debugger from collections import namedtuple from textwrap import dedent from tkinter import Tk diff --git a/Lib/idlelib/idle_test/test_debugger_r.py b/Lib/idlelib/idle_test/test_debugger_r.py index cf8af05fe27e77..92a24739cfc0a8 100644 --- a/Lib/idlelib/idle_test/test_debugger_r.py +++ b/Lib/idlelib/idle_test/test_debugger_r.py @@ -1,6 +1,6 @@ "Test debugger_r, coverage 30%." -from idlelib import debugger_r +lazy from idlelib import debugger_r import unittest # Boilerplate likely to be needed for future test classes. diff --git a/Lib/idlelib/idle_test/test_debugobj.py b/Lib/idlelib/idle_test/test_debugobj.py index 90ace4e1bc4f9e..02fe753e76c8b4 100644 --- a/Lib/idlelib/idle_test/test_debugobj.py +++ b/Lib/idlelib/idle_test/test_debugobj.py @@ -1,6 +1,6 @@ "Test debugobj, coverage 40%." -from idlelib import debugobj +lazy from idlelib import debugobj import unittest diff --git a/Lib/idlelib/idle_test/test_debugobj_r.py b/Lib/idlelib/idle_test/test_debugobj_r.py index 86e51b6cb2cb22..d938f9585909a1 100644 --- a/Lib/idlelib/idle_test/test_debugobj_r.py +++ b/Lib/idlelib/idle_test/test_debugobj_r.py @@ -1,6 +1,6 @@ "Test debugobj_r, coverage 56%." -from idlelib import debugobj_r +lazy from idlelib import debugobj_r import unittest diff --git a/Lib/idlelib/idle_test/test_delegator.py b/Lib/idlelib/idle_test/test_delegator.py index 922416297a42e0..0f8c7397341165 100644 --- a/Lib/idlelib/idle_test/test_delegator.py +++ b/Lib/idlelib/idle_test/test_delegator.py @@ -1,6 +1,6 @@ "Test delegator, coverage 100%." -from idlelib.delegator import Delegator +lazy from idlelib.delegator import Delegator import unittest diff --git a/Lib/idlelib/idle_test/test_editmenu.py b/Lib/idlelib/idle_test/test_editmenu.py index 17478473a3d1b2..87c16b7cbaa35c 100644 --- a/Lib/idlelib/idle_test/test_editmenu.py +++ b/Lib/idlelib/idle_test/test_editmenu.py @@ -7,7 +7,7 @@ import tkinter as tk from tkinter import ttk import unittest -from idlelib import pyshell +lazy from idlelib import pyshell class PasteTest(unittest.TestCase): '''Test pasting into widgets that allow pasting. diff --git a/Lib/idlelib/idle_test/test_editor.py b/Lib/idlelib/idle_test/test_editor.py index 0dfe2f3c58befa..df6965d94f2493 100644 --- a/Lib/idlelib/idle_test/test_editor.py +++ b/Lib/idlelib/idle_test/test_editor.py @@ -1,6 +1,6 @@ "Test editor, coverage 53%." -from idlelib import editor +lazy from idlelib import editor import unittest from collections import namedtuple from test.support import requires diff --git a/Lib/idlelib/idle_test/test_filelist.py b/Lib/idlelib/idle_test/test_filelist.py index 731f1975e50e23..8a4d6682167e39 100644 --- a/Lib/idlelib/idle_test/test_filelist.py +++ b/Lib/idlelib/idle_test/test_filelist.py @@ -1,6 +1,6 @@ "Test filelist, coverage 19%." -from idlelib import filelist +lazy from idlelib import filelist import unittest from test.support import requires from tkinter import Tk diff --git a/Lib/idlelib/idle_test/test_format.py b/Lib/idlelib/idle_test/test_format.py index e5e903688597aa..0d9eb1c7c705ba 100644 --- a/Lib/idlelib/idle_test/test_format.py +++ b/Lib/idlelib/idle_test/test_format.py @@ -1,12 +1,12 @@ "Test format, coverage 99%." -from idlelib import format as ft +lazy from idlelib import format as ft import unittest from unittest import mock from test.support import requires from tkinter import Tk, Text -from idlelib.editor import EditorWindow -from idlelib.idle_test.mock_idle import Editor as MockEditor +lazy from idlelib.editor import EditorWindow +lazy from idlelib.idle_test.mock_idle import Editor as MockEditor class Is_Get_Test(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_grep.py b/Lib/idlelib/idle_test/test_grep.py index d67dba76911fcf..b047102633a546 100644 --- a/Lib/idlelib/idle_test/test_grep.py +++ b/Lib/idlelib/idle_test/test_grep.py @@ -5,10 +5,10 @@ Otherwise, tests are mostly independent. Currently only test grep_it, coverage 51%. """ -from idlelib import grep +lazy from idlelib import grep import unittest from test.support import captured_stdout -from idlelib.idle_test.mock_tk import Var +lazy from idlelib.idle_test.mock_tk import Var import os import re diff --git a/Lib/idlelib/idle_test/test_help.py b/Lib/idlelib/idle_test/test_help.py index ebb02b5c0d8356..16deac2b63a68d 100644 --- a/Lib/idlelib/idle_test/test_help.py +++ b/Lib/idlelib/idle_test/test_help.py @@ -1,6 +1,6 @@ "Test help, coverage 94%." -from idlelib import help +lazy from idlelib import help import unittest from test.support import requires requires('gui') diff --git a/Lib/idlelib/idle_test/test_help_about.py b/Lib/idlelib/idle_test/test_help_about.py index 7e16abdb7c9f96..e740041281c424 100644 --- a/Lib/idlelib/idle_test/test_help_about.py +++ b/Lib/idlelib/idle_test/test_help_about.py @@ -3,13 +3,13 @@ '100% combines coverage on Mac and others. """ -from idlelib import help_about +lazy from idlelib import help_about import unittest from test.support import requires, findfile from tkinter import Tk, TclError -from idlelib.idle_test.mock_idle import Func -from idlelib.idle_test.mock_tk import Mbox_func -from idlelib import textview +lazy from idlelib.idle_test.mock_idle import Func +lazy from idlelib.idle_test.mock_tk import Mbox_func +lazy from idlelib import textview import os.path from platform import python_version diff --git a/Lib/idlelib/idle_test/test_history.py b/Lib/idlelib/idle_test/test_history.py index 67539651444751..c2bfd88bd1d673 100644 --- a/Lib/idlelib/idle_test/test_history.py +++ b/Lib/idlelib/idle_test/test_history.py @@ -1,13 +1,13 @@ " Test history, coverage 100%." -from idlelib.history import History +lazy from idlelib.history import History import unittest from test.support import requires import tkinter as tk from tkinter import Text as tkText -from idlelib.idle_test.mock_tk import Text as mkText -from idlelib.config import idleConf +lazy from idlelib.idle_test.mock_tk import Text as mkText +lazy from idlelib.config import idleConf line1 = 'a = 7' line2 = 'b = a' diff --git a/Lib/idlelib/idle_test/test_hyperparser.py b/Lib/idlelib/idle_test/test_hyperparser.py index 343843c4166e97..e885fd21dca683 100644 --- a/Lib/idlelib/idle_test/test_hyperparser.py +++ b/Lib/idlelib/idle_test/test_hyperparser.py @@ -1,10 +1,10 @@ "Test hyperparser, coverage 98%." -from idlelib.hyperparser import HyperParser +lazy from idlelib.hyperparser import HyperParser import unittest from test.support import requires from tkinter import Tk, Text -from idlelib.editor import EditorWindow +lazy from idlelib.editor import EditorWindow class DummyEditwin: def __init__(self, text): diff --git a/Lib/idlelib/idle_test/test_iomenu.py b/Lib/idlelib/idle_test/test_iomenu.py index e0642cf0cabef0..ef512eecfa5b91 100644 --- a/Lib/idlelib/idle_test/test_iomenu.py +++ b/Lib/idlelib/idle_test/test_iomenu.py @@ -1,12 +1,12 @@ "Test , coverage 17%." -from idlelib import iomenu +lazy from idlelib import iomenu import unittest from test.support import requires from tkinter import Tk -from idlelib.editor import EditorWindow -from idlelib import util -from idlelib.idle_test.mock_idle import Func +lazy from idlelib.editor import EditorWindow +lazy from idlelib import util +lazy from idlelib.idle_test.mock_idle import Func # Fail if either tokenize.open and t.detect_encoding does not exist. # These are used in loadfile and encode. diff --git a/Lib/idlelib/idle_test/test_macosx.py b/Lib/idlelib/idle_test/test_macosx.py index 86da8849e5ca00..1906638b3d99c7 100644 --- a/Lib/idlelib/idle_test/test_macosx.py +++ b/Lib/idlelib/idle_test/test_macosx.py @@ -1,11 +1,11 @@ "Test macosx, coverage 45% on Windows." -from idlelib import macosx +lazy from idlelib import macosx import unittest from test.support import requires import tkinter as tk import unittest.mock as mock -from idlelib.filelist import FileList +lazy from idlelib.filelist import FileList mactypes = {'carbon', 'cocoa', 'xquartz'} nontypes = {'other'} diff --git a/Lib/idlelib/idle_test/test_mainmenu.py b/Lib/idlelib/idle_test/test_mainmenu.py index 51d2accfe48a1c..053ebe4a620c18 100644 --- a/Lib/idlelib/idle_test/test_mainmenu.py +++ b/Lib/idlelib/idle_test/test_mainmenu.py @@ -1,7 +1,7 @@ "Test mainmenu, coverage 100%." # Reported as 88%; mocking turtledemo absence would have no point. -from idlelib import mainmenu +lazy from idlelib import mainmenu import re import unittest diff --git a/Lib/idlelib/idle_test/test_multicall.py b/Lib/idlelib/idle_test/test_multicall.py index 67f28db6b0875c..0f2a17ccb06dbc 100644 --- a/Lib/idlelib/idle_test/test_multicall.py +++ b/Lib/idlelib/idle_test/test_multicall.py @@ -1,6 +1,6 @@ "Test multicall, coverage 33%." -from idlelib import multicall +lazy from idlelib import multicall import unittest from test.support import requires from tkinter import Tk, Text diff --git a/Lib/idlelib/idle_test/test_outwin.py b/Lib/idlelib/idle_test/test_outwin.py index 0f13363f84f361..981aadfbe5a379 100644 --- a/Lib/idlelib/idle_test/test_outwin.py +++ b/Lib/idlelib/idle_test/test_outwin.py @@ -1,13 +1,13 @@ "Test outwin, coverage 76%." -from idlelib import outwin +lazy from idlelib import outwin import platform import sys import unittest from test.support import requires from tkinter import Tk, Text -from idlelib.idle_test.mock_tk import Mbox_func -from idlelib.idle_test.mock_idle import Func +lazy from idlelib.idle_test.mock_tk import Mbox_func +lazy from idlelib.idle_test.mock_idle import Func from unittest import mock diff --git a/Lib/idlelib/idle_test/test_parenmatch.py b/Lib/idlelib/idle_test/test_parenmatch.py index 2e10d7cd36760f..9ab0790b34b22d 100644 --- a/Lib/idlelib/idle_test/test_parenmatch.py +++ b/Lib/idlelib/idle_test/test_parenmatch.py @@ -3,7 +3,7 @@ This must currently be a gui test because ParenMatch methods use several text methods not defined on idlelib.idle_test.mock_tk.Text. """ -from idlelib.parenmatch import ParenMatch +lazy from idlelib.parenmatch import ParenMatch from test.support import requires requires('gui') diff --git a/Lib/idlelib/idle_test/test_pathbrowser.py b/Lib/idlelib/idle_test/test_pathbrowser.py index 13d8b9e1ba9572..a9f8050592912e 100644 --- a/Lib/idlelib/idle_test/test_pathbrowser.py +++ b/Lib/idlelib/idle_test/test_pathbrowser.py @@ -1,6 +1,6 @@ "Test pathbrowser, coverage 95%." -from idlelib import pathbrowser +lazy from idlelib import pathbrowser import unittest from test.support import requires from tkinter import Tk @@ -9,10 +9,10 @@ import pyclbr # for _modules import sys # for sys.path -from idlelib.idle_test.mock_idle import Func +lazy from idlelib.idle_test.mock_idle import Func import idlelib # for __file__ -from idlelib import browser -from idlelib.tree import TreeNode +lazy from idlelib import browser +lazy from idlelib.tree import TreeNode class PathBrowserTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_percolator.py b/Lib/idlelib/idle_test/test_percolator.py index 17668ccd1227b7..2de84a410aaddc 100644 --- a/Lib/idlelib/idle_test/test_percolator.py +++ b/Lib/idlelib/idle_test/test_percolator.py @@ -1,6 +1,6 @@ "Test percolator, coverage 100%." -from idlelib.percolator import Percolator, Delegator +lazy from idlelib.percolator import Percolator, Delegator import unittest from test.support import requires requires('gui') diff --git a/Lib/idlelib/idle_test/test_pyparse.py b/Lib/idlelib/idle_test/test_pyparse.py index 384db566ac76cd..ca68b08e4fcec2 100644 --- a/Lib/idlelib/idle_test/test_pyparse.py +++ b/Lib/idlelib/idle_test/test_pyparse.py @@ -1,6 +1,6 @@ "Test pyparse, coverage 96%." -from idlelib import pyparse +lazy from idlelib import pyparse import unittest from collections import namedtuple diff --git a/Lib/idlelib/idle_test/test_pyshell.py b/Lib/idlelib/idle_test/test_pyshell.py index 706703965bffd6..d0c7518ac4b0c4 100644 --- a/Lib/idlelib/idle_test/test_pyshell.py +++ b/Lib/idlelib/idle_test/test_pyshell.py @@ -1,7 +1,7 @@ "Test pyshell, coverage 12%." # Plus coverage of test_warning. Was 20% with test_openshell. -from idlelib import pyshell +lazy from idlelib import pyshell import unittest from test.support import requires from tkinter import Tk diff --git a/Lib/idlelib/idle_test/test_query.py b/Lib/idlelib/idle_test/test_query.py index a6ef858a8c954a..9cc4f1ed4fba69 100644 --- a/Lib/idlelib/idle_test/test_query.py +++ b/Lib/idlelib/idle_test/test_query.py @@ -9,14 +9,14 @@ The appearance of the widgets is checked by the Query and HelpSource htests. These are run by running query.py. """ -from idlelib import query +lazy from idlelib import query import unittest from test.support import requires from tkinter import Tk, END import sys from unittest import mock -from idlelib.idle_test.mock_tk import Var +lazy from idlelib.idle_test.mock_tk import Var # NON-GUI TESTS diff --git a/Lib/idlelib/idle_test/test_redirector.py b/Lib/idlelib/idle_test/test_redirector.py index bd486d7da66010..5446b6af10294b 100644 --- a/Lib/idlelib/idle_test/test_redirector.py +++ b/Lib/idlelib/idle_test/test_redirector.py @@ -1,10 +1,10 @@ "Test redirector, coverage 100%." -from idlelib.redirector import WidgetRedirector +lazy from idlelib.redirector import WidgetRedirector import unittest from test.support import requires from tkinter import Tk, Text, TclError -from idlelib.idle_test.mock_idle import Func +lazy from idlelib.idle_test.mock_idle import Func class InitCloseTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_replace.py b/Lib/idlelib/idle_test/test_replace.py index 6c07389b29ad45..0b4638823a5928 100644 --- a/Lib/idlelib/idle_test/test_replace.py +++ b/Lib/idlelib/idle_test/test_replace.py @@ -1,13 +1,13 @@ "Test replace, coverage 78%." -from idlelib.replace import ReplaceDialog +lazy from idlelib.replace import ReplaceDialog import unittest from test.support import requires requires('gui') from tkinter import Tk, Text from unittest.mock import Mock -from idlelib.idle_test.mock_tk import Mbox +lazy from idlelib.idle_test.mock_tk import Mbox import idlelib.searchengine as se orig_mbox = se.messagebox diff --git a/Lib/idlelib/idle_test/test_rpc.py b/Lib/idlelib/idle_test/test_rpc.py index 81eff398c72f45..d9f505c2d56f64 100644 --- a/Lib/idlelib/idle_test/test_rpc.py +++ b/Lib/idlelib/idle_test/test_rpc.py @@ -1,6 +1,6 @@ "Test rpc, coverage 20%." -from idlelib import rpc +lazy from idlelib import rpc import unittest diff --git a/Lib/idlelib/idle_test/test_run.py b/Lib/idlelib/idle_test/test_run.py index 57bf5559c0fa88..357dfac7d174a7 100644 --- a/Lib/idlelib/idle_test/test_run.py +++ b/Lib/idlelib/idle_test/test_run.py @@ -1,13 +1,13 @@ "Test run, coverage 54%." -from idlelib import run +lazy from idlelib import run import io import sys from test.support import captured_output, captured_stderr import unittest from unittest import mock import idlelib -from idlelib.idle_test.mock_idle import Func +lazy from idlelib.idle_test.mock_idle import Func from test.support import force_not_colorized idlelib.testing = True # Use {} for executing test user code. diff --git a/Lib/idlelib/idle_test/test_runscript.py b/Lib/idlelib/idle_test/test_runscript.py index 5fc60185a663e8..9ae19f70e00f84 100644 --- a/Lib/idlelib/idle_test/test_runscript.py +++ b/Lib/idlelib/idle_test/test_runscript.py @@ -1,10 +1,10 @@ "Test runscript, coverage 16%." -from idlelib import runscript +lazy from idlelib import runscript import unittest from test.support import requires from tkinter import Tk -from idlelib.editor import EditorWindow +lazy from idlelib.editor import EditorWindow class ScriptBindingTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_scrolledlist.py b/Lib/idlelib/idle_test/test_scrolledlist.py index 2f819fda025ba3..24489510b7fe2e 100644 --- a/Lib/idlelib/idle_test/test_scrolledlist.py +++ b/Lib/idlelib/idle_test/test_scrolledlist.py @@ -1,6 +1,6 @@ "Test scrolledlist, coverage 38%." -from idlelib.scrolledlist import ScrolledList +lazy from idlelib.scrolledlist import ScrolledList import unittest from test.support import requires requires('gui') diff --git a/Lib/idlelib/idle_test/test_search.py b/Lib/idlelib/idle_test/test_search.py index de703c195cd229..a33dd699ca99b8 100644 --- a/Lib/idlelib/idle_test/test_search.py +++ b/Lib/idlelib/idle_test/test_search.py @@ -1,11 +1,11 @@ "Test search, coverage 69%." -from idlelib import search +lazy from idlelib import search import unittest from test.support import requires requires('gui') from tkinter import Tk, Text, BooleanVar -from idlelib import searchengine +lazy from idlelib import searchengine # Does not currently test the event handler wrappers. # A usage test should simulate clicks and check highlighting. diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py index 8c9c410ebaf47c..f59d843924641d 100644 --- a/Lib/idlelib/idle_test/test_searchbase.py +++ b/Lib/idlelib/idle_test/test_searchbase.py @@ -6,9 +6,9 @@ from test.support import requires from tkinter import Text, Tk, Toplevel from tkinter.ttk import Frame -from idlelib import searchengine as se -from idlelib import searchbase as sdb -from idlelib.idle_test.mock_idle import Func +lazy from idlelib import searchengine as se +lazy from idlelib import searchbase as sdb +lazy from idlelib.idle_test.mock_idle import Func ## from idlelib.idle_test.mock_tk import Var # The ## imports above & following could help make some tests gui-free. diff --git a/Lib/idlelib/idle_test/test_searchengine.py b/Lib/idlelib/idle_test/test_searchengine.py index 9d979839419586..b327f3f7110945 100644 --- a/Lib/idlelib/idle_test/test_searchengine.py +++ b/Lib/idlelib/idle_test/test_searchengine.py @@ -1,12 +1,12 @@ "Test searchengine, coverage 99%." -from idlelib import searchengine as se +lazy from idlelib import searchengine as se import unittest # from test.support import requires from tkinter import BooleanVar, StringVar, TclError # ,Tk, Text from tkinter import messagebox -from idlelib.idle_test.mock_tk import Var, Mbox -from idlelib.idle_test.mock_tk import Text as mockText +lazy from idlelib.idle_test.mock_tk import Var, Mbox +lazy from idlelib.idle_test.mock_tk import Text as mockText import re # With mock replacements, the module does not use any gui widgets. diff --git a/Lib/idlelib/idle_test/test_sidebar.py b/Lib/idlelib/idle_test/test_sidebar.py index 9f3f0e549885a9..3ab23deafb3643 100644 --- a/Lib/idlelib/idle_test/test_sidebar.py +++ b/Lib/idlelib/idle_test/test_sidebar.py @@ -8,16 +8,16 @@ from test.support import requires, swap_attr from test import support import tkinter as tk -from idlelib.idle_test.tkinter_testing_utils import run_in_tk_mainloop +lazy from idlelib.idle_test.tkinter_testing_utils import run_in_tk_mainloop -from idlelib.delegator import Delegator -from idlelib.editor import fixwordbreaks -from idlelib.percolator import Percolator +lazy from idlelib.delegator import Delegator +lazy from idlelib.editor import fixwordbreaks +lazy from idlelib.percolator import Percolator import idlelib.pyshell -from idlelib.pyshell import fix_x11_paste, PyShell, PyShellFileList -from idlelib.run import fix_scaling +lazy from idlelib.pyshell import fix_x11_paste, PyShell, PyShellFileList +lazy from idlelib.run import fix_scaling import idlelib.sidebar -from idlelib.sidebar import get_end_linenumber, get_lineno +lazy from idlelib.sidebar import get_end_linenumber, get_lineno class Dummy_editwin: diff --git a/Lib/idlelib/idle_test/test_squeezer.py b/Lib/idlelib/idle_test/test_squeezer.py index 86c21f00bb8d00..e78eb39507982a 100644 --- a/Lib/idlelib/idle_test/test_squeezer.py +++ b/Lib/idlelib/idle_test/test_squeezer.py @@ -6,13 +6,13 @@ from unittest.mock import Mock, NonCallableMagicMock, patch, sentinel, ANY from test.support import requires -from idlelib.config import idleConf -from idlelib.percolator import Percolator -from idlelib.squeezer import count_lines_with_wrapping, ExpandingButton, \ +lazy from idlelib.config import idleConf +lazy from idlelib.percolator import Percolator +lazy from idlelib.squeezer import count_lines_with_wrapping, ExpandingButton, \ Squeezer -from idlelib import macosx -from idlelib.textview import view_text -from idlelib.tooltip import Hovertip +lazy from idlelib import macosx +lazy from idlelib.textview import view_text +lazy from idlelib.tooltip import Hovertip SENTINEL_VALUE = sentinel.SENTINEL_VALUE diff --git a/Lib/idlelib/idle_test/test_stackviewer.py b/Lib/idlelib/idle_test/test_stackviewer.py index 55f510382bf4c3..b97e99f0a52799 100644 --- a/Lib/idlelib/idle_test/test_stackviewer.py +++ b/Lib/idlelib/idle_test/test_stackviewer.py @@ -1,11 +1,11 @@ "Test stackviewer, coverage 63%." -from idlelib import stackviewer +lazy from idlelib import stackviewer import unittest from test.support import requires from tkinter import Tk -from idlelib.tree import TreeNode, ScrolledCanvas +lazy from idlelib.tree import TreeNode, ScrolledCanvas class StackBrowserTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_statusbar.py b/Lib/idlelib/idle_test/test_statusbar.py index 203a57db89ca6a..1443af08cfdad6 100644 --- a/Lib/idlelib/idle_test/test_statusbar.py +++ b/Lib/idlelib/idle_test/test_statusbar.py @@ -1,6 +1,6 @@ "Test statusbar, coverage 100%." -from idlelib import statusbar +lazy from idlelib import statusbar import unittest from test.support import requires from tkinter import Tk diff --git a/Lib/idlelib/idle_test/test_textview.py b/Lib/idlelib/idle_test/test_textview.py index 7189378ab3dd61..cf32f56f51cb67 100644 --- a/Lib/idlelib/idle_test/test_textview.py +++ b/Lib/idlelib/idle_test/test_textview.py @@ -5,7 +5,7 @@ Using mock Text would not change this. Other mocks are used to retrieve information about calls. """ -from idlelib import textview as tv +lazy from idlelib import textview as tv from test.support import requires requires('gui') @@ -13,8 +13,8 @@ import unittest from tkinter import Tk, TclError, CHAR, NONE, WORD from tkinter.ttk import Button -from idlelib.idle_test.mock_idle import Func -from idlelib.idle_test.mock_tk import Mbox_func +lazy from idlelib.idle_test.mock_idle import Func +lazy from idlelib.idle_test.mock_tk import Mbox_func def setUpModule(): global root diff --git a/Lib/idlelib/idle_test/test_tooltip.py b/Lib/idlelib/idle_test/test_tooltip.py index c616d4fde3b6d3..d5046abc776fbd 100644 --- a/Lib/idlelib/idle_test/test_tooltip.py +++ b/Lib/idlelib/idle_test/test_tooltip.py @@ -5,7 +5,7 @@ particular situation, and which are 'pass'ed if they do. """ -from idlelib.tooltip import TooltipBase, Hovertip +lazy from idlelib.tooltip import TooltipBase, Hovertip from test.support import requires requires('gui') diff --git a/Lib/idlelib/idle_test/test_tree.py b/Lib/idlelib/idle_test/test_tree.py index b3e4c10cf9e38e..61117452fb4081 100644 --- a/Lib/idlelib/idle_test/test_tree.py +++ b/Lib/idlelib/idle_test/test_tree.py @@ -1,6 +1,6 @@ "Test tree. coverage 56%." -from idlelib import tree +lazy from idlelib import tree import unittest from test.support import requires requires('gui') diff --git a/Lib/idlelib/idle_test/test_undo.py b/Lib/idlelib/idle_test/test_undo.py index beb5b582039f88..be2a414426a760 100644 --- a/Lib/idlelib/idle_test/test_undo.py +++ b/Lib/idlelib/idle_test/test_undo.py @@ -1,14 +1,14 @@ "Test undo, coverage 77%." # Only test UndoDelegator so far. -from idlelib.undo import UndoDelegator +lazy from idlelib.undo import UndoDelegator import unittest from test.support import requires requires('gui') from unittest.mock import Mock from tkinter import Text, Tk -from idlelib.percolator import Percolator +lazy from idlelib.percolator import Percolator class UndoDelegatorTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_util.py b/Lib/idlelib/idle_test/test_util.py index 20721fe980c784..5903e780d897cf 100644 --- a/Lib/idlelib/idle_test/test_util.py +++ b/Lib/idlelib/idle_test/test_util.py @@ -1,7 +1,7 @@ """Test util, coverage 100%""" import unittest -from idlelib import util +lazy from idlelib import util class UtilTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_warning.py b/Lib/idlelib/idle_test/test_warning.py index 221068c5885fcb..72edbf1a9f3728 100644 --- a/Lib/idlelib/idle_test/test_warning.py +++ b/Lib/idlelib/idle_test/test_warning.py @@ -5,8 +5,8 @@ Revise if output destination changes (http://bugs.python.org/issue18318). Make sure warnings module is left unaltered (http://bugs.python.org/issue18081). ''' -from idlelib import run -from idlelib import pyshell as shell +lazy from idlelib import run +lazy from idlelib import pyshell as shell import unittest from test.support import captured_stderr import warnings diff --git a/Lib/idlelib/idle_test/test_window.py b/Lib/idlelib/idle_test/test_window.py index 5a2645b9cc27dc..084a593290c8bb 100644 --- a/Lib/idlelib/idle_test/test_window.py +++ b/Lib/idlelib/idle_test/test_window.py @@ -1,6 +1,6 @@ "Test window, coverage 47%." -from idlelib import window +lazy from idlelib import window import unittest from test.support import requires from tkinter import Tk diff --git a/Lib/idlelib/idle_test/test_zoomheight.py b/Lib/idlelib/idle_test/test_zoomheight.py index aa5bdfb4fbd4c6..598f1e030fb43a 100644 --- a/Lib/idlelib/idle_test/test_zoomheight.py +++ b/Lib/idlelib/idle_test/test_zoomheight.py @@ -1,11 +1,11 @@ "Test zoomheight, coverage 66%." # Some code is system dependent. -from idlelib import zoomheight +lazy from idlelib import zoomheight import unittest from test.support import requires from tkinter import Tk -from idlelib.editor import EditorWindow +lazy from idlelib.editor import EditorWindow class Test(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_zzdummy.py b/Lib/idlelib/idle_test/test_zzdummy.py index 14c343cf9b3087..bbbd1fced28faa 100644 --- a/Lib/idlelib/idle_test/test_zzdummy.py +++ b/Lib/idlelib/idle_test/test_zzdummy.py @@ -1,13 +1,13 @@ "Test zzdummy, coverage 100%." -from idlelib import zzdummy +lazy from idlelib import zzdummy import unittest from test.support import requires from tkinter import Tk, Text from unittest import mock -from idlelib import config -from idlelib import editor -from idlelib import format +lazy from idlelib import config +lazy from idlelib import editor +lazy from idlelib import format usercfg = zzdummy.idleConf.userCfg diff --git a/Lib/idlelib/idle_test/test_zzdummy_user.py b/Lib/idlelib/idle_test/test_zzdummy_user.py index 1d3f2ac3096fb0..257ea51f41c68b 100644 --- a/Lib/idlelib/idle_test/test_zzdummy_user.py +++ b/Lib/idlelib/idle_test/test_zzdummy_user.py @@ -1,12 +1,12 @@ "Test zzdummy with user config, coverage 100%." -from idlelib import zzdummy +lazy from idlelib import zzdummy import unittest from test.support import requires from tkinter import Tk, Text -from idlelib import config +lazy from idlelib import config -from idlelib.idle_test.test_zzdummy import ( +lazy from idlelib.idle_test.test_zzdummy import ( ZZDummyMixin, DummyEditwin, code_sample, ) diff --git a/Lib/idlelib/iomenu.py b/Lib/idlelib/iomenu.py index 464126e2df0668..5fa611997047ec 100644 --- a/Lib/idlelib/iomenu.py +++ b/Lib/idlelib/iomenu.py @@ -9,8 +9,8 @@ from tkinter import messagebox from tkinter.simpledialog import askstring # loadfile encoding. -from idlelib.config import idleConf -from idlelib.util import py_extensions +lazy from idlelib.config import idleConf +lazy from idlelib.util import py_extensions py_extensions = ' '.join("*"+ext for ext in py_extensions) encoding = 'utf-8' diff --git a/Lib/idlelib/mainmenu.py b/Lib/idlelib/mainmenu.py index 91a32cebb513f9..5b37387472af04 100644 --- a/Lib/idlelib/mainmenu.py +++ b/Lib/idlelib/mainmenu.py @@ -8,9 +8,9 @@ windows. """ -from importlib.util import find_spec +lazy from importlib.util import find_spec -from idlelib.config import idleConf +lazy from idlelib.config import idleConf # Warning: menudefs is altered in macosx.overrideRootMenu() # after it is determined that an OS X Aqua Tk is in use, diff --git a/Lib/idlelib/outwin.py b/Lib/idlelib/outwin.py index 8baa657550de94..d3cca71b5599d2 100644 --- a/Lib/idlelib/outwin.py +++ b/Lib/idlelib/outwin.py @@ -5,7 +5,7 @@ from tkinter import messagebox -from idlelib.editor import EditorWindow +lazy from idlelib.editor import EditorWindow file_line_pats = [ diff --git a/Lib/idlelib/parenmatch.py b/Lib/idlelib/parenmatch.py index 3fd7aadb2aea84..2a0c5a3c6fbed1 100644 --- a/Lib/idlelib/parenmatch.py +++ b/Lib/idlelib/parenmatch.py @@ -4,8 +4,8 @@ paren. Paren here is used generically; the matching applies to parentheses, square brackets, and curly braces. """ -from idlelib.hyperparser import HyperParser -from idlelib.config import idleConf +lazy from idlelib.hyperparser import HyperParser +lazy from idlelib.config import idleConf _openers = {')':'(',']':'[','}':'{'} CHECK_DELAY = 100 # milliseconds diff --git a/Lib/idlelib/pathbrowser.py b/Lib/idlelib/pathbrowser.py index 48a77875ba5801..ecfb835f6bf6eb 100644 --- a/Lib/idlelib/pathbrowser.py +++ b/Lib/idlelib/pathbrowser.py @@ -2,8 +2,8 @@ import os import sys -from idlelib.browser import ModuleBrowser, ModuleBrowserTreeItem -from idlelib.tree import TreeItem +lazy from idlelib.browser import ModuleBrowser, ModuleBrowserTreeItem +lazy from idlelib.tree import TreeItem class PathBrowser(ModuleBrowser): diff --git a/Lib/idlelib/percolator.py b/Lib/idlelib/percolator.py index aa73427c4915c8..4b87add6e55c13 100644 --- a/Lib/idlelib/percolator.py +++ b/Lib/idlelib/percolator.py @@ -1,5 +1,5 @@ -from idlelib.delegator import Delegator -from idlelib.redirector import WidgetRedirector +lazy from idlelib.delegator import Delegator +lazy from idlelib.redirector import WidgetRedirector class Percolator: diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py index b80c8e56c92810..2619c1e30d348f 100755 --- a/Lib/idlelib/pyshell.py +++ b/Lib/idlelib/pyshell.py @@ -31,18 +31,18 @@ import tokenize import warnings -from idlelib.colorizer import ColorDelegator -from idlelib.config import idleConf -from idlelib.delegator import Delegator -from idlelib import debugger -from idlelib import debugger_r -from idlelib.editor import EditorWindow, fixwordbreaks -from idlelib.filelist import FileList -from idlelib.outwin import OutputWindow -from idlelib import replace -from idlelib import rpc -from idlelib.run import idle_formatwarning, StdInputFile, StdOutputFile -from idlelib.undo import UndoDelegator +lazy from idlelib.colorizer import ColorDelegator +lazy from idlelib.config import idleConf +lazy from idlelib.delegator import Delegator +lazy from idlelib import debugger +lazy from idlelib import debugger_r +lazy from idlelib.editor import EditorWindow, fixwordbreaks +lazy from idlelib.filelist import FileList +lazy from idlelib.outwin import OutputWindow +lazy from idlelib import replace +lazy from idlelib import rpc +lazy from idlelib.run import idle_formatwarning, StdInputFile, StdOutputFile +lazy from idlelib.undo import UndoDelegator # Default for testing; defaults to True in main() for running. use_subprocess = False diff --git a/Lib/idlelib/replace.py b/Lib/idlelib/replace.py index 3716d841568d30..0211abcffe4011 100644 --- a/Lib/idlelib/replace.py +++ b/Lib/idlelib/replace.py @@ -7,8 +7,8 @@ from tkinter import StringVar, TclError -from idlelib.searchbase import SearchDialogBase -from idlelib import searchengine +lazy from idlelib.searchbase import SearchDialogBase +lazy from idlelib import searchengine def replace(text, insert_tags=None): diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py index e1c40fee8f4805..c2aa1597a1c61d 100644 --- a/Lib/idlelib/run.py +++ b/Lib/idlelib/run.py @@ -18,13 +18,13 @@ import warnings import idlelib # testing -from idlelib import autocomplete # AutoComplete, fetch_encodings -from idlelib import calltip # Calltip -from idlelib import debugger_r # start_debugger -from idlelib import debugobj_r # remote_object_tree_item -from idlelib import iomenu # encoding -from idlelib import rpc # multiple objects -from idlelib import stackviewer # StackTreeItem +lazy from idlelib import autocomplete # AutoComplete, fetch_encodings +lazy from idlelib import calltip # Calltip +lazy from idlelib import debugger_r # start_debugger +lazy from idlelib import debugobj_r # remote_object_tree_item +lazy from idlelib import iomenu # encoding +lazy from idlelib import rpc # multiple objects +lazy from idlelib import stackviewer # StackTreeItem import __main__ import tkinter # Use tcl and, if startup fails, messagebox. diff --git a/Lib/idlelib/runscript.py b/Lib/idlelib/runscript.py index 55712e904603f8..26b37de0ba254d 100644 --- a/Lib/idlelib/runscript.py +++ b/Lib/idlelib/runscript.py @@ -16,11 +16,11 @@ from tkinter import messagebox -from idlelib.config import idleConf -from idlelib import macosx -from idlelib import pyshell -from idlelib.query import CustomRun -from idlelib import outwin +lazy from idlelib.config import idleConf +lazy from idlelib import macosx +lazy from idlelib import pyshell +lazy from idlelib.query import CustomRun +lazy from idlelib import outwin indent_message = """Error: Inconsistent indentation detected! diff --git a/Lib/idlelib/scrolledlist.py b/Lib/idlelib/scrolledlist.py index 4fb418db326255..f23653988ed547 100644 --- a/Lib/idlelib/scrolledlist.py +++ b/Lib/idlelib/scrolledlist.py @@ -1,7 +1,7 @@ from tkinter import * from tkinter.ttk import Frame, Scrollbar -from idlelib import macosx +lazy from idlelib import macosx class ScrolledList: diff --git a/Lib/idlelib/search.py b/Lib/idlelib/search.py index 935a4832257fa4..c17214fefe02a3 100644 --- a/Lib/idlelib/search.py +++ b/Lib/idlelib/search.py @@ -6,8 +6,8 @@ """ from tkinter import TclError -from idlelib import searchengine -from idlelib.searchbase import SearchDialogBase +lazy from idlelib import searchengine +lazy from idlelib.searchbase import SearchDialogBase def _setup(text): """Return the new or existing singleton SearchDialog instance. diff --git a/Lib/idlelib/sidebar.py b/Lib/idlelib/sidebar.py index aa19a24e3edef2..e0ac4de01f62a6 100644 --- a/Lib/idlelib/sidebar.py +++ b/Lib/idlelib/sidebar.py @@ -7,9 +7,9 @@ import tkinter as tk from tkinter.font import Font -from idlelib.config import idleConf -from idlelib.delegator import Delegator -from idlelib import macosx +lazy from idlelib.config import idleConf +lazy from idlelib.delegator import Delegator +lazy from idlelib import macosx def get_lineno(text, index): diff --git a/Lib/idlelib/squeezer.py b/Lib/idlelib/squeezer.py index 929c3fd3a507f4..0f98bd30d8f75b 100644 --- a/Lib/idlelib/squeezer.py +++ b/Lib/idlelib/squeezer.py @@ -19,10 +19,10 @@ import tkinter as tk from tkinter import messagebox -from idlelib.config import idleConf -from idlelib.textview import view_text -from idlelib.tooltip import Hovertip -from idlelib import macosx +lazy from idlelib.config import idleConf +lazy from idlelib.textview import view_text +lazy from idlelib.tooltip import Hovertip +lazy from idlelib import macosx def count_lines_with_wrapping(s, linewidth=80): diff --git a/Lib/idlelib/stackviewer.py b/Lib/idlelib/stackviewer.py index 95042d4debdc03..20e721fcc0705a 100644 --- a/Lib/idlelib/stackviewer.py +++ b/Lib/idlelib/stackviewer.py @@ -5,8 +5,8 @@ import tkinter as tk -from idlelib.debugobj import ObjectTreeItem, make_objecttreeitem -from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas +lazy from idlelib.debugobj import ObjectTreeItem, make_objecttreeitem +lazy from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas def StackBrowser(root, exc, flist=None, top=None): global sc, item, node # For testing. diff --git a/Lib/idlelib/textview.py b/Lib/idlelib/textview.py index 0f719a06883ad7..1ea7f0c1fb4ece 100644 --- a/Lib/idlelib/textview.py +++ b/Lib/idlelib/textview.py @@ -6,7 +6,7 @@ from tkinter.ttk import Frame, Scrollbar, Button from tkinter.messagebox import showerror -from idlelib.colorizer import color_config +lazy from idlelib.colorizer import color_config class AutoHideScrollbar(Scrollbar): diff --git a/Lib/idlelib/tree.py b/Lib/idlelib/tree.py index 182ce7189614da..8af6b745578878 100644 --- a/Lib/idlelib/tree.py +++ b/Lib/idlelib/tree.py @@ -19,8 +19,8 @@ from tkinter import * from tkinter.ttk import Frame, Scrollbar -from idlelib.config import idleConf -from idlelib import zoomheight +lazy from idlelib.config import idleConf +lazy from idlelib import zoomheight ICONDIR = "Icons" diff --git a/Lib/idlelib/undo.py b/Lib/idlelib/undo.py index f52446d5fcdcf8..f43c88ed7a3500 100644 --- a/Lib/idlelib/undo.py +++ b/Lib/idlelib/undo.py @@ -1,6 +1,6 @@ import string -from idlelib.delegator import Delegator +lazy from idlelib.delegator import Delegator # tkinter import not needed because module does not create widgets, # although many methods operate on text widget arguments. diff --git a/Lib/idlelib/zzdummy.py b/Lib/idlelib/zzdummy.py index 1247e8f1cc0528..02bf9856eb6dcf 100644 --- a/Lib/idlelib/zzdummy.py +++ b/Lib/idlelib/zzdummy.py @@ -4,7 +4,7 @@ See config-extension.def for configuring an extension. """ -from idlelib.config import idleConf +lazy from idlelib.config import idleConf from functools import wraps diff --git a/Lib/imaplib.py b/Lib/imaplib.py index 2fafd9322c609e..2b206588f99cba 100644 --- a/Lib/imaplib.py +++ b/Lib/imaplib.py @@ -23,7 +23,7 @@ import binascii, errno, random, re, socket, subprocess, sys, time, calendar from datetime import datetime, timezone, timedelta -from io import DEFAULT_BUFFER_SIZE +lazy from io import DEFAULT_BUFFER_SIZE try: import ssl diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py index 0a1bdd715578c8..bc577d1474234c 100644 --- a/Lib/importlib/metadata/__init__.py +++ b/Lib/importlib/metadata/__init__.py @@ -24,8 +24,8 @@ import types from collections.abc import Iterable, Mapping from contextlib import suppress -from importlib import import_module -from importlib.abc import MetaPathFinder +lazy from importlib import import_module +lazy from importlib.abc import MetaPathFinder lazy from itertools import starmap from typing import Any diff --git a/Lib/importlib/resources/_adapters.py b/Lib/importlib/resources/_adapters.py index 50688fbb666658..1513c23fb1d3d2 100644 --- a/Lib/importlib/resources/_adapters.py +++ b/Lib/importlib/resources/_adapters.py @@ -1,5 +1,5 @@ from contextlib import suppress -from io import TextIOWrapper +lazy from io import TextIOWrapper from . import abc diff --git a/Lib/pathlib/_os.py b/Lib/pathlib/_os.py index 79a1969d5f83d6..f35ae5fab16cd3 100644 --- a/Lib/pathlib/_os.py +++ b/Lib/pathlib/_os.py @@ -3,7 +3,7 @@ """ from errno import * -from io import TextIOWrapper, text_encoding +lazy from io import TextIOWrapper, text_encoding import os import sys try: diff --git a/Lib/pathlib/types.py b/Lib/pathlib/types.py index bb4a521223da04..648a1174d0aead 100644 --- a/Lib/pathlib/types.py +++ b/Lib/pathlib/types.py @@ -12,7 +12,7 @@ from abc import ABC, abstractmethod from glob import _GlobberBase -from io import text_encoding +lazy from io import text_encoding from pathlib._os import (vfsopen, vfspath, ensure_distinct_paths, ensure_different_files, copyfileobj) from pathlib import PurePath, Path diff --git a/Lib/plistlib.py b/Lib/plistlib.py index 93f3ef5e38af84..d9084e22a55f6f 100644 --- a/Lib/plistlib.py +++ b/Lib/plistlib.py @@ -62,7 +62,7 @@ import codecs import datetime import enum -from io import BytesIO +lazy from io import BytesIO import itertools import os import re diff --git a/Lib/pprint.py b/Lib/pprint.py index 1fd7e3ec95a073..c0eb9ce4ea03a3 100644 --- a/Lib/pprint.py +++ b/Lib/pprint.py @@ -37,7 +37,7 @@ import collections as _collections import sys as _sys import types as _types -from io import StringIO as _StringIO +lazy from io import StringIO as _StringIO __all__ = ["pprint","pformat","isreadable","isrecursive","saferepr", "PrettyPrinter", "pp"] diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py index 5f61001c46b79c..8b512b87126b36 100644 --- a/Lib/pydoc_data/topics.py +++ b/Lib/pydoc_data/topics.py @@ -12579,7 +12579,7 @@ def foo(): attributes on built-in functions may be supported in the future. Additional information about a function’s definition can be retrieved -from its code object (accessible via the "__code__" attribute). +lazy from its code object (accessible via the "__code__" attribute). Instance methods diff --git a/Lib/shlex.py b/Lib/shlex.py index 5959f52dd12639..d6aff9adf0f48a 100644 --- a/Lib/shlex.py +++ b/Lib/shlex.py @@ -8,7 +8,7 @@ # changes to tokenize more like Posix shells by Vinay Sajip, July 2016. import sys -from io import StringIO +lazy from io import StringIO __all__ = ["shlex", "split", "quote", "join"] diff --git a/Lib/socketserver.py b/Lib/socketserver.py index ec389457ef5b1c..449f0a2ce12442 100644 --- a/Lib/socketserver.py +++ b/Lib/socketserver.py @@ -125,7 +125,7 @@ class will essentially render the service "deaf" while one request is import os import sys import threading -from io import BufferedIOBase +lazy from io import BufferedIOBase from time import monotonic as time __all__ = ["BaseServer", "TCPServer", "UDPServer", diff --git a/Lib/test/libregrtest/refleak.py b/Lib/test/libregrtest/refleak.py index e7da17e500ead9..058438fc97edf0 100644 --- a/Lib/test/libregrtest/refleak.py +++ b/Lib/test/libregrtest/refleak.py @@ -1,7 +1,7 @@ import os import sys import warnings -from inspect import isabstract +lazy from inspect import isabstract from typing import Any import linecache diff --git a/Lib/test/multibytecodec_support.py b/Lib/test/multibytecodec_support.py index 6b4c57d0b4bad7..fb2aac538778a2 100644 --- a/Lib/test/multibytecodec_support.py +++ b/Lib/test/multibytecodec_support.py @@ -10,7 +10,7 @@ import unittest from http.client import HTTPException from test import support -from io import BytesIO +lazy from io import BytesIO class TestBase: encoding = '' # codec name diff --git a/Lib/test/support/script_helper.py b/Lib/test/support/script_helper.py index 46ce950433ddf6..8ea065af79b1c0 100644 --- a/Lib/test/support/script_helper.py +++ b/Lib/test/support/script_helper.py @@ -9,7 +9,7 @@ import subprocess import py_compile -from importlib.util import source_from_cache +lazy from importlib.util import source_from_cache from test import support from test.support.import_helper import make_legacy_pyc diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py index 80ee9e0ba56e75..9df381a7ae8326 100644 --- a/Lib/test/test_abc.py +++ b/Lib/test/test_abc.py @@ -10,7 +10,7 @@ import abc import _py_abc -from inspect import isabstract +lazy from inspect import isabstract def test_factory(abc_ABCMeta, abc_get_cache_token): class TestLegacyAPI(unittest.TestCase): diff --git a/Lib/test/test_ast/test_ast.py b/Lib/test/test_ast/test_ast.py index 0112c9163fd0cd..b56e199eed2b8b 100644 --- a/Lib/test/test_ast/test_ast.py +++ b/Lib/test/test_ast/test_ast.py @@ -16,7 +16,7 @@ import unittest import warnings import weakref -from io import StringIO +lazy from io import StringIO from pathlib import Path from textwrap import dedent try: diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 813ee27f9ab623..15e19a5617c93d 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -25,7 +25,7 @@ import weakref from contextlib import ExitStack from functools import partial -from inspect import CO_COROUTINE +lazy from inspect import CO_COROUTINE lazy from itertools import product from textwrap import dedent from types import AsyncGeneratorType, FunctionType, CellType diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py index d8e3b671ec229f..a9746b2bff7f1e 100644 --- a/Lib/test/test_bz2.py +++ b/Lib/test/test_bz2.py @@ -4,7 +4,7 @@ import array import unittest import io -from io import BytesIO, DEFAULT_BUFFER_SIZE +lazy from io import BytesIO, DEFAULT_BUFFER_SIZE import os import pickle import glob diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py index 73b1f671c58555..fdbc230335a154 100644 --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -40,7 +40,7 @@ def f(): assertEqual(result, ['Top level assignment', 'Lower level reference']) # Check population of magic variables assertEqual(__name__, '__main__') -from importlib.machinery import BuiltinImporter +lazy from importlib.machinery import BuiltinImporter _loader = __loader__ if __loader__ is BuiltinImporter else type(__loader__) print('__loader__==%a' % _loader) print('__file__==%a' % __file__) diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 9513a543e8318a..b126a888868364 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -4,7 +4,7 @@ import copy import sys import unittest -from io import StringIO +lazy from io import StringIO from tempfile import TemporaryFile import csv import gc diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index 2843b4f532373c..f868246d44996e 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -8,7 +8,7 @@ import unittest import textwrap -from io import StringIO, BytesIO +lazy from io import StringIO, BytesIO lazy from itertools import chain from random import choice from threading import Thread diff --git a/Lib/test/test_email/torture_test.py b/Lib/test/test_email/torture_test.py index d15948a38b25dd..101d909ec7e366 100644 --- a/Lib/test/test_email/torture_test.py +++ b/Lib/test/test_email/torture_test.py @@ -9,7 +9,7 @@ import sys import os import unittest -from io import StringIO +lazy from io import StringIO from test.test_email import TestEmailBase diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 779457119e8f0e..caec0395882d83 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -15,7 +15,7 @@ from enum import STRICT, CONFORM, EJECT, KEEP, _simple_enum, _test_simple_enum from enum import verify, UNIQUE, CONTINUOUS, NAMED_FLAGS, ReprEnum from enum import member, nonmember, _iter_bits_lsb, EnumDict -from io import StringIO +lazy from io import StringIO from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL from test import support from test.support import ALWAYS_EQ, REPO_ROOT diff --git a/Lib/test/test_fileinput.py b/Lib/test/test_fileinput.py index 6524baabe7f96f..131f30a95b632a 100644 --- a/Lib/test/test_fileinput.py +++ b/Lib/test/test_fileinput.py @@ -21,7 +21,7 @@ except ImportError: gzip = None -from io import BytesIO, StringIO +lazy from io import BytesIO, StringIO from fileinput import FileInput, hook_encoded from test.support import verbose diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index 66942651d667be..608ab9a6e46b8a 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -19,7 +19,7 @@ import gc from weakref import proxy import contextlib -from inspect import Signature +lazy from inspect import Signature from test.support import ALWAYS_EQ from test.support import import_helper diff --git a/Lib/test/test_getpass.py b/Lib/test/test_getpass.py index 272414a6204856..9c09200754a9eb 100644 --- a/Lib/test/test_getpass.py +++ b/Lib/test/test_getpass.py @@ -1,7 +1,7 @@ import getpass import os import unittest -from io import BytesIO, StringIO, TextIOWrapper +lazy from io import BytesIO, StringIO, TextIOWrapper from unittest import mock from test import support diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 574529c70741d8..5cd3196891aee8 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -27,7 +27,7 @@ import datetime import threading from unittest import mock -from io import BytesIO, StringIO +lazy from io import BytesIO, StringIO from _colorize import get_theme import unittest diff --git a/Lib/test/test_idle.py b/Lib/test/test_idle.py index ebf572ac5caac1..4f675d3e68cb39 100644 --- a/Lib/test/test_idle.py +++ b/Lib/test/test_idle.py @@ -16,7 +16,7 @@ # Unittest.main and test.libregrtest.runtest.runtest_inner # call load_tests, when present here, to discover tests to run. -from idlelib.idle_test import load_tests # noqa: F401 +lazy from idlelib.idle_test import load_tests # noqa: F401 if __name__ == '__main__': tk.NoDefaultRoot() diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index c905c0da0a1232..aeaf47d5fd6d3f 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -3,8 +3,8 @@ import glob import json import importlib.util -from importlib._bootstrap_external import _get_sourcefile -from importlib.machinery import ( +lazy from importlib._bootstrap_external import _get_sourcefile +lazy from importlib.machinery import ( AppleFrameworkLoader, BuiltinImporter, ExtensionFileLoader, diff --git a/Lib/test/test_importlib/import_/test___loader__.py b/Lib/test/test_importlib/import_/test___loader__.py index 858b37effc64bd..b13a42651c1895 100644 --- a/Lib/test/test_importlib/import_/test___loader__.py +++ b/Lib/test/test_importlib/import_/test___loader__.py @@ -1,4 +1,4 @@ -from importlib import machinery +lazy from importlib import machinery import unittest from test.test_importlib import util diff --git a/Lib/test/test_importlib/import_/test_api.py b/Lib/test/test_importlib/import_/test_api.py index ea1e29a4e5f278..089e70620ff0d9 100644 --- a/Lib/test/test_importlib/import_/test_api.py +++ b/Lib/test/test_importlib/import_/test_api.py @@ -1,6 +1,6 @@ from test.test_importlib import util -from importlib import machinery +lazy from importlib import machinery import sys import types import unittest diff --git a/Lib/test/test_importlib/import_/test_helpers.py b/Lib/test/test_importlib/import_/test_helpers.py index 7587276a41e953..085997c9a323e8 100644 --- a/Lib/test/test_importlib/import_/test_helpers.py +++ b/Lib/test/test_importlib/import_/test_helpers.py @@ -1,6 +1,6 @@ """Tests for helper functions used by import.c .""" -from importlib import _bootstrap_external, machinery +lazy from importlib import _bootstrap_external, machinery import os.path from types import ModuleType, SimpleNamespace import unittest diff --git a/Lib/test/test_importlib/metadata/fixtures.py b/Lib/test/test_importlib/metadata/fixtures.py index 3283697d418188..6f0f4dfa21c9e2 100644 --- a/Lib/test/test_importlib/metadata/fixtures.py +++ b/Lib/test/test_importlib/metadata/fixtures.py @@ -6,7 +6,7 @@ import shutil import sys import textwrap -from importlib import resources +lazy from importlib import resources from test.support import import_helper from test.support import os_helper diff --git a/Lib/test/test_importlib/metadata/test_api.py b/Lib/test/test_importlib/metadata/test_api.py index 5449f0484492fb..3673487d2c7300 100644 --- a/Lib/test/test_importlib/metadata/test_api.py +++ b/Lib/test/test_importlib/metadata/test_api.py @@ -3,7 +3,7 @@ import textwrap import unittest -from importlib.metadata import ( +lazy from importlib.metadata import ( Distribution, PackageNotFoundError, Prepared, diff --git a/Lib/test/test_importlib/metadata/test_main.py b/Lib/test/test_importlib/metadata/test_main.py index aae052160d9763..1ebfefede97c4c 100644 --- a/Lib/test/test_importlib/metadata/test_main.py +++ b/Lib/test/test_importlib/metadata/test_main.py @@ -9,7 +9,7 @@ from .stubs import fake_filesystem_unittest as ffs from test.support import os_helper -from importlib.metadata import ( +lazy from importlib.metadata import ( Distribution, EntryPoint, MetadataNotFound, diff --git a/Lib/test/test_importlib/metadata/test_zip.py b/Lib/test/test_importlib/metadata/test_zip.py index 97168549667de3..0108cb3184073d 100644 --- a/Lib/test/test_importlib/metadata/test_zip.py +++ b/Lib/test/test_importlib/metadata/test_zip.py @@ -5,7 +5,7 @@ from test.support import requires_fork, warnings_helper -from importlib.metadata import ( +lazy from importlib.metadata import ( FastPath, PackageNotFoundError, distribution, diff --git a/Lib/test/test_importlib/resources/test_compatibilty_files.py b/Lib/test/test_importlib/resources/test_compatibilty_files.py index 2fd39bedf258d1..ed951b5c17a641 100644 --- a/Lib/test/test_importlib/resources/test_compatibilty_files.py +++ b/Lib/test/test_importlib/resources/test_compatibilty_files.py @@ -1,7 +1,7 @@ import importlib.resources as resources import io import unittest -from importlib.resources._adapters import ( +lazy from importlib.resources._adapters import ( CompatibilityFiles, wrap_spec, ) diff --git a/Lib/test/test_importlib/resources/test_custom.py b/Lib/test/test_importlib/resources/test_custom.py index a7fc6bc35c5ece..488397882f8bba 100644 --- a/Lib/test/test_importlib/resources/test_custom.py +++ b/Lib/test/test_importlib/resources/test_custom.py @@ -2,8 +2,8 @@ import importlib.resources as resources import pathlib import unittest -from importlib.resources import abc -from importlib.resources.abc import ResourceReader, TraversableResources +lazy from importlib.resources import abc +lazy from importlib.resources.abc import ResourceReader, TraversableResources from test.support import os_helper diff --git a/Lib/test/test_importlib/resources/test_files.py b/Lib/test/test_importlib/resources/test_files.py index c922d32cedc307..6b9dd5cfd82762 100644 --- a/Lib/test/test_importlib/resources/test_files.py +++ b/Lib/test/test_importlib/resources/test_files.py @@ -6,7 +6,7 @@ import textwrap import unittest import warnings -from importlib.resources.abc import Traversable +lazy from importlib.resources.abc import Traversable from test.support import import_helper, os_helper diff --git a/Lib/test/test_importlib/resources/test_read.py b/Lib/test/test_importlib/resources/test_read.py index 4085a64b0eec57..7ba4e6c92a1cbe 100644 --- a/Lib/test/test_importlib/resources/test_read.py +++ b/Lib/test/test_importlib/resources/test_read.py @@ -1,6 +1,6 @@ import importlib.resources as resources import unittest -from importlib import import_module +lazy from importlib import import_module from . import util diff --git a/Lib/test/test_importlib/resources/test_reader.py b/Lib/test/test_importlib/resources/test_reader.py index 691a78bb060b39..ffb7a791cde825 100644 --- a/Lib/test/test_importlib/resources/test_reader.py +++ b/Lib/test/test_importlib/resources/test_reader.py @@ -1,8 +1,8 @@ import os.path import pathlib import unittest -from importlib import import_module -from importlib.resources.readers import MultiplexedPath, NamespaceReader +lazy from importlib import import_module +lazy from importlib.resources.readers import MultiplexedPath, NamespaceReader from . import util diff --git a/Lib/test/test_importlib/resources/test_resource.py b/Lib/test/test_importlib/resources/test_resource.py index b114b1f0d80fbf..9015956e6de078 100644 --- a/Lib/test/test_importlib/resources/test_resource.py +++ b/Lib/test/test_importlib/resources/test_resource.py @@ -1,7 +1,7 @@ import importlib.resources as resources import types import unittest -from importlib import import_module +lazy from importlib import import_module from . import util diff --git a/Lib/test/test_importlib/resources/util.py b/Lib/test/test_importlib/resources/util.py index 85b5c61518de44..f630377ae0ba13 100644 --- a/Lib/test/test_importlib/resources/util.py +++ b/Lib/test/test_importlib/resources/util.py @@ -6,8 +6,8 @@ import pathlib import sys import types -from importlib.machinery import ModuleSpec -from importlib.resources.abc import ResourceReader, Traversable, TraversableResources +lazy from importlib.machinery import ModuleSpec +lazy from importlib.resources.abc import ResourceReader, Traversable, TraversableResources from test.support import import_helper, os_helper diff --git a/Lib/test/test_importlib/test_lazy.py b/Lib/test/test_importlib/test_lazy.py index e48fad8898f0ef..9bc0855907cc9a 100644 --- a/Lib/test/test_importlib/test_lazy.py +++ b/Lib/test/test_importlib/test_lazy.py @@ -1,6 +1,6 @@ import importlib -from importlib import abc -from importlib import util +lazy from importlib import abc +lazy from importlib import util import sys import time import threading diff --git a/Lib/test/test_importlib/test_pkg_import.py b/Lib/test/test_importlib/test_pkg_import.py index 287684efc85a91..24e6920968b4a3 100644 --- a/Lib/test/test_importlib/test_pkg_import.py +++ b/Lib/test/test_importlib/test_pkg_import.py @@ -6,7 +6,7 @@ import tempfile import unittest -from importlib.util import cache_from_source +lazy from importlib.util import cache_from_source from test.support.os_helper import create_empty_file class TestImport(unittest.TestCase): diff --git a/Lib/test/test_importlib/test_util.py b/Lib/test/test_importlib/test_util.py index a926a7a4d408af..90a22ecbffd8b9 100644 --- a/Lib/test/test_importlib/test_util.py +++ b/Lib/test/test_importlib/test_util.py @@ -6,7 +6,7 @@ importlib_util = util.import_importlib('importlib.util') import importlib.util -from importlib import _bootstrap_external +lazy from importlib import _bootstrap_external import os import pathlib import string diff --git a/Lib/test/test_importlib/util.py b/Lib/test/test_importlib/util.py index 6399f952f9e912..cc501b5356fc35 100644 --- a/Lib/test/test_importlib/util.py +++ b/Lib/test/test_importlib/util.py @@ -2,7 +2,7 @@ import contextlib import errno import functools -from importlib import machinery, util, invalidate_caches +lazy from importlib import machinery, util, invalidate_caches import marshal import os import os.path diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index cf579d4da4e0df..104a24dc080737 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -3,7 +3,7 @@ import itertools from test import support from test.support import threading_helper, script_helper -from itertools import * +lazy from itertools import * import weakref from decimal import Decimal from fractions import Fraction diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py index d846c8af7ec434..6e892116906bd5 100644 --- a/Lib/test/test_json/test_decode.py +++ b/Lib/test/test_json/test_decode.py @@ -1,5 +1,5 @@ import decimal -from io import StringIO +lazy from io import StringIO from collections import OrderedDict from test.test_json import PyTest, CTest from test import support diff --git a/Lib/test/test_json/test_dump.py b/Lib/test/test_json/test_dump.py index 5bc03085e60a3d..af7a345f4a6a2d 100644 --- a/Lib/test/test_json/test_dump.py +++ b/Lib/test/test_json/test_dump.py @@ -1,4 +1,4 @@ -from io import StringIO +lazy from io import StringIO from test.test_json import PyTest, CTest from test.support import bigmemtest, _1G diff --git a/Lib/test/test_json/test_indent.py b/Lib/test/test_json/test_indent.py index e07856f33cbdac..209758024d52ef 100644 --- a/Lib/test/test_json/test_indent.py +++ b/Lib/test/test_json/test_indent.py @@ -1,5 +1,5 @@ import textwrap -from io import StringIO +lazy from io import StringIO from test.test_json import PyTest, CTest diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index fcd94edc611fac..530436b771c86c 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -6,7 +6,7 @@ import tempfile import threading import tokenize -from importlib.machinery import ModuleSpec +lazy from importlib.machinery import ModuleSpec from test import support from test.support import os_helper from test.support import threading_helper diff --git a/Lib/test/test_lzma.py b/Lib/test/test_lzma.py index e93c3c37354e27..fa5f48600fe28e 100644 --- a/Lib/test/test_lzma.py +++ b/Lib/test/test_lzma.py @@ -1,5 +1,5 @@ import array -from io import BytesIO, UnsupportedOperation, DEFAULT_BUFFER_SIZE +lazy from io import BytesIO, UnsupportedOperation, DEFAULT_BUFFER_SIZE import os import pickle import random diff --git a/Lib/test/test_optparse.py b/Lib/test/test_optparse.py index fc8ef9520b3c0f..f8afb83595dfe6 100644 --- a/Lib/test/test_optparse.py +++ b/Lib/test/test_optparse.py @@ -12,7 +12,7 @@ import copy import unittest -from io import StringIO +lazy from io import StringIO from test import support from test.support import cpython_only, os_helper from test.support.i18n_helper import TestTranslationsBase, update_translation_snapshots diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 410f1436ed4d20..b18247530d131b 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -19,7 +19,7 @@ from asyncio.events import _set_event_loop_policy from contextlib import ExitStack, redirect_stdout -from io import StringIO +lazy from io import StringIO from test import support from test.support import has_socket_support, os_helper from test.support.import_helper import import_module diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py index 4623b7eb4434b0..79ebe6e0d2f9e2 100644 --- a/Lib/test/test_pkgutil.py +++ b/Lib/test/test_pkgutil.py @@ -6,7 +6,7 @@ import unittest import sys import importlib -from importlib.util import spec_from_file_location +lazy from importlib.util import spec_from_file_location import pkgutil import os import os.path diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py index b9c261310bb567..cb59c10146898c 100644 --- a/Lib/test/test_plistlib.py +++ b/Lib/test/test_plistlib.py @@ -16,7 +16,7 @@ import zoneinfo from test import support from test.support import os_helper -from io import BytesIO +lazy from io import BytesIO from plistlib import UID diff --git a/Lib/test/test_print.py b/Lib/test/test_print.py index 12256b3b562637..eb7035612ebee5 100644 --- a/Lib/test/test_print.py +++ b/Lib/test/test_print.py @@ -1,6 +1,6 @@ import unittest import sys -from io import StringIO +lazy from io import StringIO from test import support diff --git a/Lib/test/test_profile.py b/Lib/test/test_profile.py index c4b2d7ca05c0a6..005172ed143941 100644 --- a/Lib/test/test_profile.py +++ b/Lib/test/test_profile.py @@ -6,7 +6,7 @@ import os import warnings from difflib import unified_diff -from io import StringIO +lazy from io import StringIO from test.support.os_helper import TESTFN, unlink, temp_dir, change_cwd from contextlib import contextmanager, redirect_stdout diff --git a/Lib/test/test_pstats.py b/Lib/test/test_pstats.py index a26a8c1d522a70..a70c1c9a175a1a 100644 --- a/Lib/test/test_pstats.py +++ b/Lib/test/test_pstats.py @@ -2,7 +2,7 @@ from test import support from test.support.import_helper import ensure_lazy_imports -from io import StringIO +lazy from io import StringIO from pstats import SortKey from enum import StrEnum, _test_simple_enum diff --git a/Lib/test/test_pydoc/test_pydoc.py b/Lib/test/test_pydoc/test_pydoc.py index 5cd26923f75c31..78e1af6db80e7b 100644 --- a/Lib/test/test_pydoc/test_pydoc.py +++ b/Lib/test/test_pydoc/test_pydoc.py @@ -22,7 +22,7 @@ import xml.etree import xml.etree.ElementTree import textwrap -from io import StringIO +lazy from io import StringIO from collections import namedtuple from urllib.request import urlopen, urlcleanup from test import support diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py index 10dca684accee3..add5813281c3ef 100644 --- a/Lib/test/test_pyexpat.py +++ b/Lib/test/test_pyexpat.py @@ -10,7 +10,7 @@ import textwrap import unittest import traceback -from io import BytesIO +lazy from io import BytesIO from test import support from test.support import import_helper, os_helper from test.support import sortdict diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py index 29babd7bf6996a..62cfa07e10efeb 100644 --- a/Lib/test/test_sax.py +++ b/Lib/test/test_sax.py @@ -16,7 +16,7 @@ LexicalHandler) from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl from xml import sax -from io import BytesIO, StringIO +lazy from io import BytesIO, StringIO import codecs import os.path import pyexpat diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index 02c70403185f60..1935136ce34533 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -12,7 +12,7 @@ import sys import sysconfig import test.support -from io import StringIO +lazy from io import StringIO from unittest import mock from test import support from test.support import os_helper diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py index ab53a20cff5539..ac070e4b910ce0 100644 --- a/Lib/test/test_tokenize.py +++ b/Lib/test/test_tokenize.py @@ -7,7 +7,7 @@ import token import tokenize import unittest -from io import BytesIO, StringIO +lazy from io import BytesIO, StringIO from textwrap import dedent from unittest import TestCase, mock from test import support diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index bb64153b91c92c..e7ccb51b325f6b 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -1,7 +1,7 @@ """Test cases for traceback module""" from collections import namedtuple -from io import StringIO +lazy from io import StringIO import linecache import sys import types diff --git a/Lib/test/test_unittest/test_discovery.py b/Lib/test/test_unittest/test_discovery.py index 38c9779daaf87d..8520ca69cd4600 100644 --- a/Lib/test/test_unittest/test_discovery.py +++ b/Lib/test/test_unittest/test_discovery.py @@ -4,7 +4,7 @@ import sys import types import pickle -from importlib._bootstrap_external import NamespaceLoader +lazy from importlib._bootstrap_external import NamespaceLoader from test import support from test.support import import_helper diff --git a/Lib/test/test_unittest/testmock/testmagicmethods.py b/Lib/test/test_unittest/testmock/testmagicmethods.py index acdbd699d18134..4296c68939b45c 100644 --- a/Lib/test/test_unittest/testmock/testmagicmethods.py +++ b/Lib/test/test_unittest/testmock/testmagicmethods.py @@ -1,7 +1,7 @@ import math import unittest import os -from inspect import iscoroutinefunction +lazy from inspect import iscoroutinefunction from unittest.mock import AsyncMock, Mock, MagicMock, _magics diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py index bf1bcf8e6ed5d9..01304a1e7cd52f 100644 --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -4,7 +4,7 @@ import os import importlib import inspect -from io import StringIO +lazy from io import StringIO import re import sys import textwrap diff --git a/Lib/test/test_wsgiref.py b/Lib/test/test_wsgiref.py index 32ef0ccf4e638d..5c49136cfd09a0 100644 --- a/Lib/test/test_wsgiref.py +++ b/Lib/test/test_wsgiref.py @@ -11,7 +11,7 @@ from wsgiref.simple_server import WSGIServer, WSGIRequestHandler from wsgiref.simple_server import make_server from http.client import HTTPConnection -from io import StringIO, BytesIO, BufferedReader +lazy from io import StringIO, BytesIO, BufferedReader from socketserver import BaseServer from platform import python_implementation diff --git a/Lib/tokenize.py b/Lib/tokenize.py index 3545d92c4f5d7f..26724a9fe5143c 100644 --- a/Lib/tokenize.py +++ b/Lib/tokenize.py @@ -28,7 +28,7 @@ from codecs import lookup, BOM_UTF8 import collections import functools -from io import TextIOWrapper +lazy from io import TextIOWrapper import itertools as _itertools import re import sys diff --git a/Lib/turtledemo/__main__.py b/Lib/turtledemo/__main__.py index 7c2d753f4c3111..ced1794f60c335 100644 --- a/Lib/turtledemo/__main__.py +++ b/Lib/turtledemo/__main__.py @@ -87,9 +87,9 @@ import os from tkinter import * -from idlelib.colorizer import ColorDelegator, color_config -from idlelib.percolator import Percolator -from idlelib.textview import view_text +lazy from idlelib.colorizer import ColorDelegator, color_config +lazy from idlelib.percolator import Percolator +lazy from idlelib.textview import view_text import turtle from turtledemo import __doc__ as about_turtledemo diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index 16f3699e89e77d..0fe149a9f97d97 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -32,7 +32,7 @@ import sys import builtins import pkgutil -from inspect import iscoroutinefunction +lazy from inspect import iscoroutinefunction import threading from annotationlib import Format from dataclasses import fields, is_dataclass diff --git a/Lib/xmlrpc/client.py b/Lib/xmlrpc/client.py index f441376d09c4aa..95ef8c4e81c2a8 100644 --- a/Lib/xmlrpc/client.py +++ b/Lib/xmlrpc/client.py @@ -137,7 +137,7 @@ import urllib.parse from xml.parsers import expat import errno -from io import BytesIO +lazy from io import BytesIO try: import gzip except ImportError: diff --git a/Lib/xmlrpc/server.py b/Lib/xmlrpc/server.py index 3e6871157d0929..a583c8dbac8b0d 100644 --- a/Lib/xmlrpc/server.py +++ b/Lib/xmlrpc/server.py @@ -107,7 +107,7 @@ def export_add(self, x, y): from xmlrpc.client import Fault, dumps, loads, gzip_encode, gzip_decode from http.server import BaseHTTPRequestHandler from functools import partial -from inspect import signature +lazy from inspect import signature import html import http.server import socketserver diff --git a/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py b/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py index ccc18d4aee4386..9235a95256f2a0 100644 --- a/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py +++ b/Mac/IDLE/IDLE.app/Contents/Resources/idlemain.py @@ -68,6 +68,6 @@ break # Now it is safe to import idlelib. -from idlelib.pyshell import main +lazy from idlelib.pyshell import main if __name__ == '__main__': main() diff --git a/Tools/build/check_extension_modules.py b/Tools/build/check_extension_modules.py index c619a9a0c1c5a1..e2529db71515fc 100644 --- a/Tools/build/check_extension_modules.py +++ b/Tools/build/check_extension_modules.py @@ -33,15 +33,15 @@ import sysconfig import warnings from collections.abc import Iterable -from importlib._bootstrap import ( # type: ignore[attr-defined] +lazy from importlib._bootstrap import ( # type: ignore[attr-defined] _load as bootstrap_load, ) -from importlib.machinery import ( +lazy from importlib.machinery import ( BuiltinImporter, ExtensionFileLoader, ModuleSpec, ) -from importlib.util import spec_from_file_location, spec_from_loader +lazy from importlib.util import spec_from_file_location, spec_from_loader from typing import NamedTuple SRC_DIR = pathlib.Path(__file__).parent.parent.parent diff --git a/Tools/cases_generator/cwriter.py b/Tools/cases_generator/cwriter.py index 6636755db55eec..88220910b24fdd 100644 --- a/Tools/cases_generator/cwriter.py +++ b/Tools/cases_generator/cwriter.py @@ -1,7 +1,7 @@ import contextlib from lexer import Token from typing import TextIO, Iterator -from io import StringIO +lazy from io import StringIO class CWriter: "A writer that understands tokens and how to format C code" diff --git a/Tools/cases_generator/parsing.py b/Tools/cases_generator/parsing.py index c7fe0d162ac6e4..3a23c68c7e3c99 100644 --- a/Tools/cases_generator/parsing.py +++ b/Tools/cases_generator/parsing.py @@ -2,7 +2,7 @@ from dataclasses import dataclass, field from typing import NamedTuple, Callable, TypeVar, Literal, cast, Iterator -from io import StringIO +lazy from io import StringIO import lexer as lx from plexer import PLexer diff --git a/Tools/i18n/pygettext.py b/Tools/i18n/pygettext.py index ddf4474d2bce55..5f4b49f67438b4 100755 --- a/Tools/i18n/pygettext.py +++ b/Tools/i18n/pygettext.py @@ -149,7 +149,7 @@ import time import tokenize from dataclasses import dataclass, field -from io import BytesIO +lazy from io import BytesIO from operator import itemgetter __version__ = '1.5' diff --git a/Tools/importbench/importbench.py b/Tools/importbench/importbench.py index eb101fe616c587..d82fd2593d16af 100644 --- a/Tools/importbench/importbench.py +++ b/Tools/importbench/importbench.py @@ -6,7 +6,7 @@ """ from test.test_importlib import util import decimal -from importlib.util import cache_from_source +lazy from importlib.util import cache_from_source import importlib import importlib.machinery import json From 238f2bf4cf2bc431bd9c51a5bc09ebe1ed284b30 Mon Sep 17 00:00:00 2001 From: Charlie Lin Date: Tue, 19 May 2026 08:32:39 -0500 Subject: [PATCH 6/6] Exclude Doc from change --- Doc/conf.py | 4 ++-- Doc/tools/extensions/profiling_trace.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Doc/conf.py b/Doc/conf.py index 3de2493a4e61d3..e2dff74538a342 100644 --- a/Doc/conf.py +++ b/Doc/conf.py @@ -8,8 +8,8 @@ import os import sys -lazy from importlib import import_module -lazy from importlib.util import find_spec +from importlib import import_module +from importlib.util import find_spec # Make our custom extensions available to Sphinx sys.path.append(os.path.abspath('tools/extensions')) diff --git a/Doc/tools/extensions/profiling_trace.py b/Doc/tools/extensions/profiling_trace.py index 61143305c91cd8..7185ef351ddc7f 100644 --- a/Doc/tools/extensions/profiling_trace.py +++ b/Doc/tools/extensions/profiling_trace.py @@ -8,7 +8,7 @@ import json import re import sys -lazy from io import StringIO +from io import StringIO from pathlib import Path from sphinx.errors import ExtensionError