Skip to content

Commit 6ec3ecd

Browse files
authored
Merge branch 'main' into json-loads-opt
2 parents f84dec8 + e9ae46f commit 6ec3ecd

1,292 files changed

Lines changed: 75297 additions & 44591 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.

‎.claude/CLAUDE.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../AGENTS.md

‎.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: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ Tools/cases_generator/ @markshannon
223223
Python/assemble.c @markshannon @iritkatriel
224224
Python/codegen.c @markshannon @iritkatriel
225225
Python/compile.c @markshannon @iritkatriel
226-
Python/flowgraph.c @markshannon @iritkatriel
226+
Python/flowgraph.c @markshannon @iritkatriel @eclips4
227227
Python/instruction_sequence.c @iritkatriel
228228
Python/symtable.c @JelleZijlstra @carljm
229229

@@ -290,9 +290,10 @@ Tools/jit/ @brandtbucher @savannahostrowski @diegorusso
290290
InternalDocs/jit.md @brandtbucher @savannahostrowski @diegorusso @AA-Turner
291291

292292
# Lazy imports (PEP 810)
293-
Objects/lazyimportobject.c @yhg1s @DinoV @pablogsal
294-
Include/internal/pycore_lazyimportobject.h @yhg1s @DinoV @pablogsal
295-
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
296297

297298
# Micro-op / μop / Tier 2 Optimiser
298299
Python/optimizer.c @markshannon @Fidget-Spinner
@@ -598,6 +599,12 @@ Doc/library/tomllib.rst @encukou @hauntsaninja
598599
Lib/test/test_tomllib/ @encukou @hauntsaninja
599600
Lib/tomllib/ @encukou @hauntsaninja
600601

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+
601608
# Typing
602609
Doc/library/typing.rst @JelleZijlstra @AlexWaygood
603610
Lib/test/test_typing.py @JelleZijlstra @AlexWaygood
@@ -620,6 +627,12 @@ Lib/test/test_unittest/testmock/ @cjw296
620627
# Weakref
621628
**/*weakref* @kumaraditya303
622629

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+
623636
# Zipfile.Path
624637
Lib/test/test_zipfile/_path/ @jaraco
625638
Lib/zipfile/_path/ @jaraco
@@ -643,5 +656,8 @@ Objects/**/clinic/
643656
PC/**/clinic/
644657
Python/**/clinic/
645658

659+
# Exclude Lazy Imports=all CI carve out file
660+
Lib/test/lazy_imports_all_exclude.txt
661+
646662
# Exclude HTML IDs list
647663
Doc/tools/removed-ids.txt

‎.github/workflows/build.yml‎

Lines changed: 24 additions & 8 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
@@ -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: 1 addition & 1 deletion
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:
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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
runs-on: ${{ inputs.os }}
3636
timeout-minutes: 60
3737
env:
38-
OPENSSL_VER: 3.5.7
38+
OPENSSL_VER: 3.5.8
3939
PYTHONSTRICTEXTENSIONBUILD: 1
4040
TERM: linux
4141
steps:

‎.gitignore‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ Tools/unicode/data/
143143
/config.status.lineno
144144
/.ccache
145145
/cross-build*/
146+
/dist/
146147
/jit_stencils*.h
147148
/jit_unwind_info*.h
148149
.jit-stamp
@@ -177,8 +178,12 @@ Python/frozen_modules/MANIFEST
177178
/python
178179
!/Python/
179180

180-
# People's custom https://docs.anthropic.com/en/docs/claude-code/memory configs.
181-
/.claude/
181+
# Local AI agent scratch state (per-PR and per-branch notebooks, sandbox
182+
# experiments) and personal agent overrides, none of which are committed.
183+
/.claude/pr-*
184+
/.claude/branch-*
185+
/.claude/sandbox/
186+
AGENTS.local.md
182187
CLAUDE.local.md
183188

184189
#### main branch only stuff below this line, things to backport go above. ####

0 commit comments

Comments
 (0)