Skip to content

Commit ab48bae

Browse files
committed
Merge branch 'main'
2 parents 8a0e2c5 + 499dff1 commit ab48bae

1,588 files changed

Lines changed: 95514 additions & 59477 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.gitattributes‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,12 @@ Include/internal/pycore_ast_state.h generated
8080
Include/internal/pycore_opcode.h generated
8181
Include/internal/pycore_opcode_metadata.h generated
8282
Include/internal/pycore_*_generated.h generated
83+
Include/internal/pycore_token.h generated
8384
Include/internal/pycore_uop_ids.h generated
8485
Include/internal/pycore_uop_metadata.h generated
8586
Include/opcode.h generated
8687
Include/opcode_ids.h generated
8788
Include/slots_generated.h generated
88-
Include/token.h generated
8989
Lib/_opcode_metadata.py generated
9090
Lib/idlelib/help.html generated
9191
Lib/keyword.py generated

‎.github/CODEOWNERS‎

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,6 @@ Mac/ @python/macos-team
171171
Lib/_osx_support.py @python/macos-team
172172
Lib/test/test__osx_support.py @python/macos-team
173173

174-
# WebAssembly
175-
Tools/wasm/README.md @brettcannon @freakboy3742 @emmatyping
176-
177174
# WebAssembly (Emscripten)
178175
Platforms/emscripten @freakboy3742 @emmatyping
179176
Tools/wasm/emscripten @freakboy3742 @emmatyping
@@ -226,7 +223,7 @@ Tools/cases_generator/ @markshannon
226223
Python/assemble.c @markshannon @iritkatriel
227224
Python/codegen.c @markshannon @iritkatriel
228225
Python/compile.c @markshannon @iritkatriel
229-
Python/flowgraph.c @markshannon @iritkatriel
226+
Python/flowgraph.c @markshannon @iritkatriel @eclips4
230227
Python/instruction_sequence.c @iritkatriel
231228
Python/symtable.c @JelleZijlstra @carljm
232229

@@ -293,9 +290,10 @@ Tools/jit/ @brandtbucher @savannahostrowski @diegorusso
293290
InternalDocs/jit.md @brandtbucher @savannahostrowski @diegorusso @AA-Turner
294291

295292
# Lazy imports (PEP 810)
296-
Objects/lazyimportobject.c @yhg1s @DinoV @pablogsal
297-
Include/internal/pycore_lazyimportobject.h @yhg1s @DinoV @pablogsal
298-
Lib/test/test_lazy_import @yhg1s @DinoV @pablogsal
293+
.github/workflows/reusable-test-lazy-imports-all.yml @yhg1s @DinoV @pablogsal
294+
Objects/lazyimportobject.c @yhg1s @DinoV @pablogsal
295+
Include/internal/pycore_lazyimportobject.h @yhg1s @DinoV @pablogsal
296+
Lib/test/test_lazy_import @yhg1s @DinoV @pablogsal
299297

300298
# Micro-op / μop / Tier 2 Optimiser
301299
Python/optimizer.c @markshannon @Fidget-Spinner
@@ -335,7 +333,6 @@ Modules/_remote_debugging/ @pablogsal
335333

336334
# Sub-Interpreters
337335
**/*crossinterp* @ericsnowcurrently
338-
**/*interpreteridobject.* @ericsnowcurrently
339336
Doc/library/concurrent.interpreters.rst @ericsnowcurrently
340337
Lib/concurrent/futures/interpreter.py @ericsnowcurrently
341338
Lib/concurrent/interpreters/ @ericsnowcurrently
@@ -602,6 +599,12 @@ Doc/library/tomllib.rst @encukou @hauntsaninja
602599
Lib/test/test_tomllib/ @encukou @hauntsaninja
603600
Lib/tomllib/ @encukou @hauntsaninja
604601

602+
# Turtle
603+
Doc/library/turtle.rst @StanFromIreland
604+
Doc/library/turtle-star.png @StanFromIreland
605+
Lib/test/test_turtle.py @StanFromIreland
606+
Lib/turtle.py @StanFromIreland
607+
605608
# Typing
606609
Doc/library/typing.rst @JelleZijlstra @AlexWaygood
607610
Lib/test/test_typing.py @JelleZijlstra @AlexWaygood
@@ -624,6 +627,12 @@ Lib/test/test_unittest/testmock/ @cjw296
624627
# Weakref
625628
**/*weakref* @kumaraditya303
626629

630+
# Zlib
631+
Doc/library/zlib.rst @StanFromIreland
632+
Lib/compression/zlib.py @StanFromIreland
633+
Lib/test/test_zlib.py @StanFromIreland
634+
Modules/zlibmodule.c @StanFromIreland
635+
627636
# Zipfile.Path
628637
Lib/test/test_zipfile/_path/ @jaraco
629638
Lib/zipfile/_path/ @jaraco
@@ -646,3 +655,9 @@ Modules/**/clinic/
646655
Objects/**/clinic/
647656
PC/**/clinic/
648657
Python/**/clinic/
658+
659+
# Exclude Lazy Imports=all CI carve out file
660+
Lib/test/lazy_imports_all_exclude.txt
661+
662+
# Exclude HTML IDs list
663+
Doc/tools/removed-ids.txt

‎.github/workflows/build.yml‎

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,12 @@ jobs:
245245
os: ${{ matrix.os }}
246246
test-opts: ${{ matrix.test-opts || '' }}
247247

248+
build-ubuntu-installed:
249+
name: 'Ubuntu (installed)'
250+
needs: build-context
251+
if: needs.build-context.outputs.run-ubuntu == 'true'
252+
uses: ./.github/workflows/reusable-install.yml
253+
248254
build-ubuntu-ssltests:
249255
name: 'Ubuntu SSL tests'
250256
runs-on: ${{ matrix.os }}
@@ -262,13 +268,13 @@ jobs:
262268
# unsupported as it most resembles other 1.1.1-work-a-like ssl APIs
263269
# supported by important vendors such as AWS-LC.
264270
- { name: openssl, version: 1.1.1w }
265-
- { name: openssl, version: 3.0.21 }
266-
- { name: openssl, version: 3.4.6 }
267-
- { name: openssl, version: 3.5.7 }
268-
- { name: openssl, version: 3.6.3 }
269-
- { name: openssl, version: 4.0.1 }
271+
- { name: openssl, version: 3.0.22 }
272+
- { name: openssl, version: 3.4.7 }
273+
- { name: openssl, version: 3.5.8 }
274+
- { name: openssl, version: 3.6.4 }
275+
- { name: openssl, version: 4.0.2 }
270276
## AWS-LC
271-
- { name: aws-lc, version: 5.0.0 }
277+
- { name: aws-lc, version: 5.5.0 }
272278
env:
273279
SSLLIB_VER: ${{ matrix.ssllib.version }}
274280
MULTISSL_DIR: ${{ github.workspace }}/multissl
@@ -338,7 +344,7 @@ jobs:
338344
with:
339345
persist-credentials: false
340346
- name: Build and test
341-
run: JAVA_HOME="${JAVA_HOME_21_X64:-$JAVA_HOME_21_arm64}" python3 Platforms/Android ci --fast-ci ${{ matrix.arch }}-linux-android
347+
run: python3 Platforms/Android ci --fast-ci ${{ matrix.arch }}-linux-android
342348

343349
build-ios:
344350
name: iOS
@@ -373,7 +379,7 @@ jobs:
373379
needs: build-context
374380
if: needs.build-context.outputs.run-ubuntu == 'true'
375381
env:
376-
OPENSSL_VER: 3.5.7
382+
OPENSSL_VER: 3.5.8
377383
PYTHONSTRICTEXTENSIONBUILD: 1
378384
steps:
379385
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
@@ -470,6 +476,12 @@ jobs:
470476
name: hypothesis-example-db
471477
path: ${{ env.CPYTHON_BUILDDIR }}/.hypothesis/examples/
472478

479+
test-lazy-imports-all:
480+
name: 'Lazy imports enabled'
481+
needs: build-context
482+
if: fromJSON(needs.build-context.outputs.run-tests)
483+
uses: ./.github/workflows/reusable-test-lazy-imports-all.yml
484+
473485
build-asan:
474486
name: 'Address sanitizer'
475487
runs-on: ${{ matrix.os }}
@@ -481,7 +493,7 @@ jobs:
481493
matrix:
482494
os: [ubuntu-26.04]
483495
env:
484-
OPENSSL_VER: 3.5.7
496+
OPENSSL_VER: 3.5.8
485497
PYTHONSTRICTEXTENSIONBUILD: 1
486498
ASAN_OPTIONS: detect_leaks=0:allocator_may_return_null=1:handle_segv=0
487499
steps:
@@ -636,11 +648,13 @@ jobs:
636648
- build-windows
637649
- build-macos
638650
- build-ubuntu
651+
- build-ubuntu-installed
639652
- build-ubuntu-ssltests
640653
- build-ios
641654
- build-emscripten
642655
- build-wasi
643656
- test-hypothesis
657+
- test-lazy-imports-all
644658
- build-asan
645659
- build-san
646660
- cross-build-linux
@@ -685,6 +699,7 @@ jobs:
685699
!fromJSON(needs.build-context.outputs.run-ubuntu)
686700
&& '
687701
build-ubuntu,
702+
build-ubuntu-installed,
688703
build-ubuntu-ssltests,
689704
test-hypothesis,
690705
build-asan,
@@ -697,4 +712,5 @@ jobs:
697712
${{ !fromJSON(needs.build-context.outputs.run-ios) && 'build-ios,' || '' }}
698713
${{ !fromJSON(needs.build-context.outputs.run-emscripten) && 'build-emscripten,' || '' }}
699714
${{ !fromJSON(needs.build-context.outputs.run-wasi) && 'build-wasi,' || '' }}
715+
${{ !fromJSON(needs.build-context.outputs.run-tests) && 'test-lazy-imports-all,' || '' }}
700716
jobs: ${{ toJSON(needs) }}

‎.github/workflows/reusable-docs.yml‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ jobs:
8686
--fail-if-regression \
8787
--fail-if-improved \
8888
--fail-if-new-news-nit
89+
- name: 'Build list of changes'
90+
run: |
91+
make -C Doc/ PYTHON=../python changes
8992
- name: 'Collect HTML IDs'
9093
if: github.event_name == 'pull_request'
9194
run: python Doc/tools/check-html-ids.py collect Doc/build/html -o Doc/build/html-ids-head.json.gz
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: Reusable Ubuntu (installed)
2+
3+
on:
4+
workflow_call:
5+
6+
permissions:
7+
contents: read
8+
9+
env:
10+
FORCE_COLOR: 1
11+
12+
jobs:
13+
build-install-test:
14+
name: build, install and test
15+
runs-on: ubuntu-26.04-arm
16+
timeout-minutes: 60
17+
env:
18+
PYTHONSTRICTEXTENSIONBUILD: 1
19+
steps:
20+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
21+
with:
22+
persist-credentials: false
23+
- name: Register gcc problem matcher
24+
run: echo "::add-matcher::.github/problem-matchers/gcc.json"
25+
- name: Set install dir
26+
run:
27+
echo "INSTALL_DIR=$(realpath "${GITHUB_WORKSPACE}/../installed-python")" >> "$GITHUB_ENV"
28+
- name: Install dependencies
29+
run: sudo ./.github/workflows/posix-deps-apt.sh
30+
- name: Configure CPython
31+
run: ./configure --config-cache --prefix="$INSTALL_DIR"
32+
- name: Build CPython
33+
run: make -j
34+
- name: Install CPython
35+
run: make install
36+
- name: Set installed interpreter
37+
run: |
38+
ldversion=$(./python -c 'import sysconfig; print(sysconfig.get_config_var("LDVERSION"))')
39+
echo "INSTALLED_PYTHON=${INSTALL_DIR}/bin/python${ldversion}" >> "$GITHUB_ENV"
40+
- name: Display build info
41+
run: |
42+
"$INSTALLED_PYTHON" -m test.pythoninfo
43+
- name: Test the installed Python
44+
run: xvfb-run "$INSTALLED_PYTHON" -m test --fast-ci --timeout=900

‎.github/workflows/reusable-san.yml‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ permissions:
1717

1818
env:
1919
FORCE_COLOR: 1
20-
OPENSSL_VER: 3.5.7
20+
OPENSSL_VER: 3.5.8
2121

2222
jobs:
2323
build-san-reusable:
@@ -55,7 +55,7 @@ jobs:
5555
SAN_LOG_OPTION: log_path=${{ github.workspace }}/san_log
5656
SUPPRESSIONS_SUFFIX: >-
5757
${{
58-
fromJSON(inputs.free-threading)
58+
inputs.free-threading
5959
&& '_free_threading'
6060
|| ''
6161
}}
@@ -101,7 +101,7 @@ jobs:
101101
}}
102102
--with-pydebug
103103
${{ inputs.sanitizer == 'TSan' && '--with-openssl="$OPENSSL_DIR" --with-openssl-rpath=auto' || '' }}
104-
${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }}
104+
${{ inputs.free-threading && '--disable-gil' || '' }}
105105
- name: Build CPython
106106
run: make -j4
107107
- name: Display build info
@@ -114,7 +114,7 @@ jobs:
114114
- name: Parallel tests
115115
if: >-
116116
inputs.sanitizer == 'TSan'
117-
&& fromJSON(inputs.free-threading)
117+
&& inputs.free-threading
118118
run: ./python -m test --tsan-parallel --parallel-threads=4 -j4 -W --timeout=600 --slowest
119119
- name: Display logs
120120
if: always()
@@ -125,7 +125,7 @@ jobs:
125125
with:
126126
name: >-
127127
${{ inputs.sanitizer }}-logs-${{
128-
fromJSON(inputs.free-threading)
128+
inputs.free-threading
129129
&& 'free-threading'
130130
|| 'default'
131131
}}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
name: Reusable Lazy Imports Tests
2+
3+
# Run the CPython test suite with global lazy imports forced on
4+
# (``-X lazy_imports=all``).
5+
#
6+
# Modules that are known to fail under lazy imports are listed in
7+
# Lib/test/lazy_imports_all_exclude.txt and skipped here. Remove entries from
8+
# that file as the modules are fixed so this workflow starts guarding them
9+
# against regressions. Excluded modules are also checked separately so the
10+
# workflow fails when one starts passing and its exclusion should be removed.
11+
12+
on:
13+
workflow_call:
14+
15+
permissions:
16+
contents: read
17+
18+
env:
19+
FORCE_COLOR: 1
20+
21+
jobs:
22+
test-lazy-imports-all:
23+
name: 'Run Tests with lazy_imports=all'
24+
runs-on: ubuntu-26.04
25+
timeout-minutes: 60
26+
env:
27+
EXCLUDE_FILE: Lib/test/lazy_imports_all_exclude.txt
28+
steps:
29+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
30+
with:
31+
persist-credentials: false
32+
- name: Register gcc problem matcher
33+
run: echo "::add-matcher::.github/problem-matchers/gcc.json"
34+
- name: Install dependencies
35+
run: sudo ./.github/workflows/posix-deps-apt.sh
36+
- name: Configure CPython
37+
run: ./configure --config-cache --with-pydebug
38+
- name: Build CPython
39+
run: make -j4
40+
- name: Display build info
41+
run: make pythoninfo
42+
- name: Verify lazy imports are fully enabled
43+
run: ./python -X lazy_imports=all -c "import sys; assert sys.flags.lazy_imports == 1, sys.flags.lazy_imports; print('lazy imports all enabled')"
44+
- name: Build test list (all tests minus the known-failing exclusions)
45+
run: |
46+
set -euo pipefail
47+
./python -m test --list-tests > all_tests.txt
48+
# Strip comments/blank lines from the exclusion file, then drop those
49+
# exact test names (whole-line, fixed-string match) from the run list.
50+
grep -vE '^\s*(#.*)?$' "$EXCLUDE_FILE" > exclude_tests.txt || true
51+
grep -vxF -f exclude_tests.txt all_tests.txt > run_tests.txt
52+
# Fail loudly if any exclusion entry matched nothing: a stale or
53+
# mistyped name (or a change in `--list-tests` output) would otherwise
54+
# silently stop excluding a module and let it fail the run.
55+
stale=$(comm -23 <(sort -u exclude_tests.txt) <(sort -u all_tests.txt))
56+
if [ -n "$stale" ]; then
57+
echo "::error::Stale entries in $EXCLUDE_FILE (no longer match 'python -m test --list-tests'); remove or fix them:"
58+
echo "$stale"
59+
exit 1
60+
fi
61+
echo "Excluding $(wc -l < exclude_tests.txt) module(s); running $(wc -l < run_tests.txt) of $(wc -l < all_tests.txt)."
62+
- name: Run tests with lazy imports
63+
run: xvfb-run xargs -a run_tests.txt ./python -X lazy_imports=all -m test --fast-ci --timeout=900 < /dev/null
64+
- name: Verify excluded tests still need exclusion
65+
run: |
66+
set -euo pipefail
67+
unexpected_passes=()
68+
while IFS= read -r test_name; do
69+
[ -n "$test_name" ] || continue
70+
echo "Checking excluded test: $test_name"
71+
if xvfb-run ./python -X lazy_imports=all -m test --fast-ci --timeout=900 "$test_name"; then
72+
unexpected_passes+=("$test_name")
73+
fi
74+
done < exclude_tests.txt
75+
if [ "${#unexpected_passes[@]}" -ne 0 ]; then
76+
echo "::error::These tests still appear in $EXCLUDE_FILE but now pass with -X lazy_imports=all. Remove them from the exclude file:"
77+
printf '%s\n' "${unexpected_passes[@]}"
78+
exit 1
79+
fi

0 commit comments

Comments
 (0)