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 ef889ea0cc834c1..4a2cb8c3be0b992 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 be1acd17ce3592c..1e4da5ca70df5db 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 17bf5cdc819542d..9a9ce48e7b1aff3 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 2ac1738d15c6c72..88f893c2caefc38 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 92fe6b7723fe268..f4a8419baa9297d 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 20f1e728733fec6..d530f03673ee377 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 f506ce68aea5b29..4d68eed9d34bc4b 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 583c47daff3ad8d..313da61ff4b8ddb 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 c5b8d854d77de3d..e0df742435da491 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 4157a4b4dcdd2aa..9f3f0e549885a97 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 32f4b7d2d6e08be..0a1bdd715578c87 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 79d37198ce7aff3..cd97d156730cc20 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 ffec9c545ee11f8..c50d601e4393863 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 f92b1fde768fc7d..8a7925b9e96e517 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 7d26129b80de868..546832dc27b6ddb 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 4541267bab866a4..818085edb89302e 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 ab18247682b69aa..2663d25a9427ed5 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 fb20639d4599672..87e3a2b75ee6585 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 01ca6c51dafcafe..620b5caa67ef7a5 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 b7875fe8f2f75df..18db798e66dcda3 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 f32dcd589e2de22..a61f6a8d6e7c12f 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 f15dae13eb384ef..11d78bb1585b98c 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 7454c8a15391e90..069065f6474516d 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 81967fb8a837404..813ee27f9ab6239 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 b1b2dd2ca5ca0db..f91076fde00fde2 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 7327c1bd5f50530..9513a543e8318a9 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 b7df08f6079cd31..142568a00d455bd 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 d2c2261edbe04e1..2843b4f532373c0 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 3f5fcb29b442dec..6d889a80da1db87 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 670d4ca8835e0d2..9e4d8883e25b7bf 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 5b3b88deedd1210..2ed17a37cd43313 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 11e04009956db1d..89433bb96a3a3dd 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 c30386afe41849b..66942651d667bec 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 6eb25960101a9e3..3bc8a4bc2d62411 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 a5969b7a47d948b..a20f2209673d488 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 d6623fee9bb2b43..3d540854bc1c6d5 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 e83dd0d4e28d006..813929279d90111 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 41c9752e557fb36..a2af4e1787a465b 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 cf579d4da4e0dfb..b23f7e7a7e1065a 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 8f9a239bead1309..db8c1be7371f448 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 f71b6f53486509b..368486c191a9219 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 61c4ec9b7d5b4a7..e2047cd6df285ab 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 9bfd4bc7d636699..1b9824f763e1a85 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 2a7cfb7affaa21b..24392840eaefbe1 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 edd85df633fc3bb..048559666e88404 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 e533392b8cae94a..e2997b8742c318f 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 df95e558949aee3..4ea9606169df1db 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 055be2994bf435e..cf15a87b894b606 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 3a41ea97a2e0a26..620ab7bd72a1739 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 f735dd217330068..37a4c031ca0e96c 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 abac31e25886fae..be2d1148487959b 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 1e67870d13323d3..5fd43b2ba6a0eab 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 235c8f8b0be5812..668f2b77dbfe6b2 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 b23f7e7a7e1065a..cf579d4da4e0dfb 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 db8c1be7371f448..8f9a239bead1309 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 24392840eaefbe1..2a7cfb7affaa21b 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 e2997b8742c318f..e533392b8cae94a 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 000000000000000..eff98cb7b583fbc --- /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 4a2cb8c3be0b992..ef889ea0cc834c1 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 e2dff74538a3422..3de2493a4e61d31 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 7185ef351ddc7f2..61143305c91cd8c 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 9c7faa26bb4bd44..4f5b3b06691ab40 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 9a9ce48e7b1aff3..1fdd56d0ca9826b 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 b50426c31ead53a..21e86894d7ec00b 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 50cf2b3f5b3e453..7d8337d8edb0545 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 b2aaf5fd9fa91e6..aeda4fe4e470730 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 be950079e396de1..82fd94daa093100 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 ae8ef32792b3e92..a1d3132c887a101 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 ba11d63fba600a3..6ca9a36104f1a83 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 08ede3ec679613a..1d141e8a09da3cb 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 641fb2e944d4311..e09285ad199ae32 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 c6a51dd8e377b81..d2bfeb5321508b4 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 496cb7655d032de..0b5df916ffd8b85 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 4f8704016e2131f..02f7bedd3fd4684 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 ab6b95e0ba60c09..07727a8399deec6 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 032d31225315fb7..58a5703abd3fba9 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 24320b5a3bffab3..abd9a9e78f8e786 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 8b9060e57072ea0..6e42167a7e671cd 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 40bc5a0ad798fe3..e23a497620331c6 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 9386376058c7916..7c895a773a1450b 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 f2f44f5f8d4e611..514a3ce31c8e941 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 6db38de3aa6cb9c..eaec7fc635f325f 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 10bd3c234508214..d7bb17610bfb875 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 1fae1d4b0adbd75..37d6fe7e04d1563 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 ad3355d9f82765a..33a5cacb07aad14 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 fb448ece2fa25e7..9bed90415d1ce6b 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 75e75ebe5acafcd..1203b444f6270a6 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 239bf5af4705674..e9d376f79bbeee3 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 4b57a182c9a49d3..247ba23d7587337 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 42048ff2395fe19..dc2c276640a155e 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 48e7eca280ebf81..0fc3f01eb62abe3 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 750da373272298a..f050acdb12a4e13 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 5a9b32aaf6bb815..7c971fac9a7461e 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 76144ee8fb30f5e..b0753716da092d0 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 485d5a75a29c1ad..7e06c3ce1cec149 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 b63ff9ec2877b96..8943b6fca6bace4 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 71fa480ce4d05c1..82640264d7d82f2 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 8304734b847a835..26636c482c7ceea 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 725a55b9c47230c..d76ee30d25f42f1 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 a811363c18d04e5..ff5e149522943ae 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 e734a8be714a2ad..2563121399ab85f 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 6cfea3888cd6a90..dc7cc1170b085de 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 28c196a42672fcd..3ce475ebc5b23b1 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 a5ec76e15ffdf3e..bcd2d218c60f9ba 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 6969ad73b01a81a..cdabc76df50799e 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 fb6ee8250867502..b9e69bbef232ad0 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 6d75cf7aa67dcce..7c15ae8d5ff6ba0 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 32f878b842b276d..d2315c47b8e36ef 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 2773ed7ce614b55..c76c311c9ee3520 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 9ca3b332648b311..9ad7f5bc42287bc 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 cf8af05fe27e77b..92a24739cfc0a8c 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 90ace4e1bc4f9ef..02fe753e76c8b42 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 86e51b6cb2cb22d..d938f9585909a1f 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 922416297a42e02..0f8c7397341165c 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 17478473a3d1b27..87c16b7cbaa35c7 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 0dfe2f3c58befad..df6965d94f24938 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 731f1975e50e239..8a4d6682167e395 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 e5e903688597aa7..0d9eb1c7c705bac 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 d67dba76911fcfa..b047102633a546b 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 ebb02b5c0d8356a..16deac2b63a68d5 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 7e16abdb7c9f96f..e740041281c4246 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 675396514447514..c2bfd88bd1d6738 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 343843c4166e97d..e885fd21dca683c 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 e0642cf0cabef04..ef512eecfa5b91e 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 86da8849e5ca00f..1906638b3d99c7d 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 51d2accfe48a1c7..053ebe4a620c18b 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 67f28db6b0875cf..0f2a17ccb06dbc1 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 0f13363f84f3610..981aadfbe5a379e 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 2e10d7cd36760ff..9ab0790b34b22d4 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 13d8b9e1ba9572a..a9f8050592912e9 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 17668ccd1227b78..2de84a410aaddcc 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 384db566ac76cdb..ca68b08e4fcec25 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 706703965bffd6f..d0c7518ac4b0c47 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 a6ef858a8c954a2..9cc4f1ed4fba69b 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 bd486d7da660108..5446b6af10294b5 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 6c07389b29ad455..0b4638823a5928f 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 81eff398c72f45b..d9f505c2d56f646 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 57bf5559c0fa88a..357dfac7d174a75 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 5fc60185a663e8f..9ae19f70e00f840 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 2f819fda025ba3d..24489510b7fe2ea 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 de703c195cd2290..a33dd699ca99b8f 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 8c9c410ebaf47c0..f59d843924641d8 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 9d9798394195860..b327f3f71109451 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 9f3f0e549885a97..3ab23deafb36432 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 86c21f00bb8d00b..e78eb39507982a9 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 55f510382bf4c36..b97e99f0a527994 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 203a57db89ca6a7..1443af08cfdad62 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 7189378ab3dd615..cf32f56f51cb679 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 c616d4fde3b6d30..d5046abc776fbd8 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 b3e4c10cf9e38e7..61117452fb4081a 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 beb5b582039f884..be2a414426a7602 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 20721fe980c784e..5903e780d897cf8 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 221068c5885fcba..72edbf1a9f3728e 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 5a2645b9cc27dce..084a593290c8bb1 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 aa5bdfb4fbd4c62..598f1e030fb43a3 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 14c343cf9b30872..bbbd1fced28faa3 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 1d3f2ac3096fb0e..257ea51f41c68b5 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 464126e2df06682..5fa611997047ec3 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 91a32cebb513f91..5b37387472af047 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 8baa657550de948..d3cca71b5599d20 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 3fd7aadb2aea84f..2a0c5a3c6fbed11 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 48a77875ba5801c..ecfb835f6bf6eba 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 aa73427c4915c8c..4b87add6e55c137 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 b80c8e56c928105..2619c1e30d348f3 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 3716d841568d309..0211abcffe40119 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 e1c40fee8f48053..c2aa1597a1c61d5 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 55712e904603f86..26b37de0ba254d0 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 4fb418db3262556..f23653988ed547b 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 935a4832257fa4a..c17214fefe02a33 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 aa19a24e3edef28..e0ac4de01f62a65 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 929c3fd3a507f46..0f98bd30d8f75b8 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 95042d4debdc03b..20e721fcc0705af 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 0f719a06883ad72..1ea7f0c1fb4ece5 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 182ce7189614daf..8af6b7455788788 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 f52446d5fcdcf84..f43c88ed7a3500d 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 1247e8f1cc05286..02bf9856eb6dcf4 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 2fafd9322c609ee..2b206588f99cba5 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 0a1bdd715578c87..bc577d1474234c8 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 50688fbb666658c..1513c23fb1d3d2b 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 79a1969d5f83d6d..f35ae5fab16cd38 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 bb4a521223da04d..648a1174d0aead1 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 93f3ef5e38af843..d9084e22a55f6f2 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 1fd7e3ec95a0734..c0eb9ce4ea03a32 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 5f61001c46b79ce..8b512b87126b36b 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 5959f52dd12639d..d6aff9adf0f48ae 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 ec389457ef5b1c1..449f0a2ce124427 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 e7da17e500ead96..058438fc97edf0d 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 6b4c57d0b4bad7a..fb2aac538778a2d 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 46ce950433ddf64..8ea065af79b1c04 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 80ee9e0ba56e754..9df381a7ae83260 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 0112c9163fd0cdb..b56e199eed2b8bb 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 813ee27f9ab6239..15e19a5617c93df 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 d8e3b671ec229f9..a9746b2bff7f1e5 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 73b1f671c58555f..fdbc230335a1545 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 9513a543e8318a9..b126a8888683648 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 2843b4f532373c0..f868246d44996e7 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 d15948a38b25dd3..101d909ec7e3667 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 779457119e8f0ea..caec0395882d833 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 6524baabe7f96ff..131f30a95b632aa 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 66942651d667bec..608ab9a6e46b8ac 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 272414a62048561..9c09200754a9eb1 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 574529c70741d8f..5cd3196891aee86 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 ebf572ac5caac1b..4f675d3e68cb39a 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 c905c0da0a12327..aeaf47d5fd6d3f7 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 858b37effc64bd7..b13a42651c1895f 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 ea1e29a4e5f2783..089e70620ff0d98 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 7587276a41e9539..085997c9a323e83 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 3283697d418188e..6f0f4dfa21c9e2d 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 5449f0484492fbd..3673487d2c7300f 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 aae052160d9763e..1ebfefede97c4c7 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 97168549667de35..0108cb3184073d6 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 2fd39bedf258d1a..ed951b5c17a641f 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 a7fc6bc35c5ecea..488397882f8bba4 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 c922d32cedc307c..6b9dd5cfd827620 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 4085a64b0eec575..7ba4e6c92a1cbee 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 691a78bb060b394..ffb7a791cde825c 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 b114b1f0d80fbf3..9015956e6de078f 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 85b5c61518de444..f630377ae0ba132 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 e48fad8898f0ef3..9bc0855907cc9a0 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 287684efc85a910..24e6920968b4a35 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 a926a7a4d408afc..90a22ecbffd8b92 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 6399f952f9e912b..cc501b5356fc35b 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 cf579d4da4e0dfb..104a24dc080737f 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 d846c8af7ec4345..6e892116906bd50 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 5bc03085e60a3d3..af7a345f4a6a2d8 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 e07856f33cbdac2..209758024d52efa 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 fcd94edc611fac3..530436b771c86c3 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 e93c3c37354e27f..fa5f48600fe28e1 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 fc8ef9520b3c0f3..f8afb83595dfe6e 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 410f1436ed4d20a..b18247530d131bc 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 4623b7eb4434b05..79ebe6e0d2f9e2b 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 b9c261310bb5670..cb59c10146898ce 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 12256b3b5626375..eb7035612ebee54 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 c4b2d7ca05c0a6c..005172ed1439418 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 a26a8c1d522a70e..a70c1c9a175a1a4 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 5cd26923f75c311..78e1af6db80e7bb 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 10dca684accee3c..add5813281c3efb 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 29babd7bf6996ad..62cfa07e10efeb3 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 02c70403185f60d..1935136ce345330 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 ab53a20cff55392..ac070e4b910ce0b 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 bb64153b91c92cc..e7ccb51b325f6b0 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 38c9779daaf87d4..8520ca69cd4600a 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 acdbd699d181344..4296c68939b45cb 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 bf1bcf8e6ed5d9a..01304a1e7cd52f8 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 32ef0ccf4e638d5..5c49136cfd09a0c 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 3545d92c4f5d7ff..26724a9fe5143ca 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 7c2d753f4c31113..ced1794f60c335e 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 16f3699e89e77d1..0fe149a9f97d97d 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 f441376d09c4aa2..95ef8c4e81c2a86 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 3e6871157d09299..a583c8dbac8b0d6 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 ccc18d4aee4386c..9235a95256f2a04 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 c619a9a0c1c5a1b..e2529db71515fc3 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 6636755db55eecb..88220910b24fdd5 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 c7fe0d162ac6e41..3a23c68c7e3c990 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 ddf4474d2bce55f..5f4b49f67438b41 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 eb101fe616c587d..d82fd2593d16af6 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 3de2493a4e61d31..e2dff74538a3422 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 61143305c91cd8c..7185ef351ddc7f2 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