8000 Merge branch 'main' into test-lazy-import · python/cpython@d224483 · GitHub
[go: up one dir, main page]

Skip to content

Commit d224483

Browse files
committed
Merge branch 'main' into test-lazy-import
2 parents 34e39ab + f5b7847 commit d224483

File tree

585 files changed

+29197
-8377
lines changed
  • PC
  • PCbuild
  • Parser
  • Programs
  • Python
  • Tools
  • iOS
  • Some content is hidden

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

    585 files changed

    +29197
    -8377
    lines changed

    .github/CODEOWNERS

    Lines changed: 7 additions & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -188,7 +188,7 @@ Include/internal/pycore_time.h @pganssle @abalkin
    188188

    189189
    # AST
    190190
    Python/ast.c @isidentical @JelleZijlstra @eclips4
    191-
    Python/ast_opt.c @isidentical @eclips4
    191+
    Python/ast_preprocess.c @isidentical @eclips4
    192192
    Parser/asdl.py @isidentical @JelleZijlstra @eclips4
    193193
    Parser/asdl_c.py @isidentical @JelleZijlstra @eclips4
    194194
    Lib/ast.py @isidentical @JelleZijlstra @eclips4
    @@ -320,3 +320,9 @@ Lib/test/test__colorize.py @hugovk
    320320

    321321
    # Fuzzing
    322322
    Modules/_xxtestfuzz/ @ammaraskar
    323+
    324+
    # t-strings
    325+
    **/*interpolationobject* @lysnikolaou
    326+
    **/*templateobject* @lysnikolaou
    327+
    **/*templatelib* @lysnikolaou
    328+
    **/*tstring* @lysnikolaou

    .github/workflows/jit.yml

    Lines changed: 29 additions & 28 deletions
    Original file line numberDiff line numberDiff line change
    @@ -95,10 +95,10 @@ jobs:
    9595
    with:
    9696
    python-version: '3.11'
    9797

    98+
    # PCbuild downloads LLVM automatically:
    9899
    - name: Windows
    99100
    if: runner.os == 'Windows'
    100101
    run: |
    101-
    choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}.1.0
    102102
    ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }}
    103103
    ./PCbuild/rt.bat ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }} -q --multiprocess 0 --timeout 4500 --verbose2 --verbose3
    104104
    @@ -113,7 +113,7 @@ jobs:
    113113
    find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete
    114114
    brew install llvm@${{ matrix.llvm }}
    115115
    export SDKROOT="$(xcrun --show-sdk-path)"
    116-
    ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '' }}
    116+
    ./configure --enable-experimental-jit --enable-universalsdk --with-universal-archs=universal2 ${{ matrix.debug && '--with-pydebug' || '' }}
    117117
    make all --jobs 4
    118118
    ./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3
    119119
    @@ -126,29 +126,30 @@ jobs:
    126126
    make all --jobs 4
    127127
    ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3
    128128
    129-
    jit-with-disabled-gil:
    130-
    name: Free-Threaded (Debug)
    131-
    needs: interpreter
    132-
    runs-on: ubuntu-24.04
    133-
    timeout-minutes: 90
    134-
    strategy:
    135-
    fail-fast: false
    136-
    matrix:
    137-
    llvm:
    138-
    - 19
    139-
    steps:
    140-
    - uses: actions/checkout@v4
    141-
    with:
    142-
    persist-credentials: false
    143-
    - uses: actions/setup-python@v5
    144-
    with:
    145-
    python-version: '3.11'
    146-
    - name: Build with JIT enabled and GIL disabled
    147-
    run: |
    148-
    sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }}
    149-
    export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH"
    150-
    ./configure --enable-experimental-jit --with-pydebug --disable-gil
    151-
    make all --jobs 4
    152-
    - name: Run tests
    153-
    run: |
    154-
    ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3
    129+
    # XXX: GH-133171
    130+
    # jit-with-disabled-gil:
    131+
    # name: Free-Threaded (Debug)
    132+
    # needs: interpreter
    133+
    # runs-on: ubuntu-24.04
    134+
    # timeout-minutes: 90
    135+
    # strategy:
    136+
    # fail-fast: false
    137+
    # matrix:
    138+
    # llvm:
    139+
    # - 19
    140+
    # steps:
    141+
    # - uses: actions/checkout@v4
    142+
    # with:
    143+
    # persist-credentials: false
    144+
    # - uses: actions/setup-python@v5
    145+
    # with:
    146+
    # python-version: '3.11'
    147+
    # - name: Build with JIT enabled and GIL disabled
    148+
    # run: |
    149+
    # sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }}
    150+
    # export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH"
    151+
    # ./configure --enable-experimental-jit --with-pydebug --disable-gil
    152+
    # make all --jobs 4
    153+
    # - name: Run tests
    154+
    # run: |
    155+
    # ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3

    .github/workflows/mypy.yml

    Lines changed: 4 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -8,8 +8,11 @@ on:
    88
    pull_request:
    99
    paths:
    1010
    - ".github/workflows/mypy.yml"
    11+
    - "Lib/_colorize.py"
    1112
    - "Lib/_pyrepl/**"
    1213
    - "Lib/test/libregrtest/**"
    14+
    - "Lib/tomllib/**"
    15+
    - "Misc/mypy/**"
    1316
    - "Tools/build/generate_sbom.py"
    1417
    - "Tools/cases_generator/**"
    1518
    - "Tools/clinic/**"
    @@ -42,6 +45,7 @@ jobs:
    4245
    target: [
    4346
    "Lib/_pyrepl",
    4447
    "Lib/test/libregrtest",
    48+
    "Lib/tomllib",
    4549
    "Tools/build",
    4650
    "Tools/cases_generator",
    4751
    "Tools/clinic",

    .github/workflows/reusable-context.yml

    Lines changed: 2 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -97,6 +97,8 @@ jobs:
    9797
    run: python Tools/build/compute-changes.py
    9898
    env:
    9999
    GITHUB_DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
    100+
    CCF_TARGET_REF: ${{ github.base_ref || github.event.repository.default_branch }}
    101+
    CCF_HEAD_REF: ${{ github.event.pull_request.head.sha || github.sha }}
    100102

    101103
    - name: Compute hash for config cache key
    102104
    id: config-hash

    .github/workflows/reusable-docs.yml

    Lines changed: 2 additions & 2 deletions
    Original file line numberDiff line numberDiff line change
    @@ -66,7 +66,7 @@ jobs:
    6666
    run: |
    6767
    set -Eeuo pipefail
    6868
    # Build docs with the nit-picky option; write warnings to file
    69-
    make -C Doc/ PYTHON=../python SPHINXOPTS="--quiet --nitpicky --fail-on-warning --keep-going --warning-file sphinx-warnings.txt" html
    69+
    make -C Doc/ PYTHON=../python SPHINXOPTS="--quiet --nitpicky --fail-on-warning --warning-file sphinx-warnings.txt" html
    7070
    - name: 'Check warnings'
    7171
    if: github.event_name == 'pull_request'
    7272
    run: |
    @@ -101,4 +101,4 @@ jobs:
    101101
    run: make -C Doc/ PYTHON=../python venv
    102102
    # Use "xvfb-run" since some doctest tests open GUI windows
    103103
    - name: 'Run documentation doctest'
    104-
    run: xvfb-run make -C Doc/ PYTHON=../python SPHINXERRORHANDLING="--fail-on-warning --keep-going" doctest
    104+
    run: xvfb-run make -C Doc/ PYTHON=../python SPHINXERRORHANDLING="--fail-on-warning" doctest

    .gitignore

    Lines changed: 2 additions & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -138,11 +138,12 @@ Tools/unicode/data/
    138138
    # hendrikmuhs/ccache-action@v1
    139139
    /.ccache
    140140
    /cross-build/
    141-
    /jit_stencils.h
    141+
    /jit_stencils*.h
    142142
    /platform
    143143
    /profile-clean-stamp
    144144
    /profile-run-stamp
    145145
    /profile-bolt-stamp
    146+
    /profile-gen-stamp
    146147
    /pybuilddir.txt
    147148
    /pyconfig.h
    148149
    /python-config

    .pre-commit-config.yaml

    Lines changed: 5 additions & 5 deletions
    Original file line numberDiff line numberDiff line change
    @@ -1,6 +1,6 @@
    11
    repos:
    22
    - repo: https://github.com/astral-sh/ruff-pre-commit
    3-
    rev: v0.11.6
    3+
    rev: v0.11.8
    44
    hooks:
    55
    - id: ruff
    66
    name: Run Ruff (lint) on Doc/
    @@ -22,14 +22,14 @@ repos:
    2222
    name: Run Ruff (format) on Doc/
    2323
    args: [--check]
    2424
    files: ^Doc/
    25+
    - id: ruff-format
    26+
    name: Run Ruff (format) on Tools/build/check_warnings.py
    27+
    args: [--check, --config=Tools/build/.ruff.toml]
    28+
    files: ^Tools/build/check_warnings.py
    2529

    2630
    - repo: https://github.com/psf/black-pre-commit-mirror
    2731
    rev: 25.1.0
    2832
    hooks:
    29-
    - id: black
    30-
    name: Run Black on Tools/build/check_warnings.py
    31-
    files: ^Tools/build/check_warnings.py
    32-
    args: [--line-length=79]
    3333
    - id: black
    3434
    name: Run Black on Tools/jit/
    3535
    files: ^Tools/jit/

    .ruff.toml

    Lines changed: 12 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -0,0 +1,12 @@
    1+
    # Default settings for Ruff in CPython
    2+
    3+
    # PYTHON_FOR_REGEN
    4+
    target-version = "py310"
    5+
    6+
    # PEP 8
    7+
    line-length = 79
    8+
    9+
    # Enable automatic fixes by default.
    10+
    # To override this, use ``fix = false`` in a subdirectory's config file
    11+
    # or ``--no-fix`` on the command line.
    12+
    fix = true

    Android/README.md

    Lines changed: 5 additions & 3 deletions
    Original file line numberDiff line numberDiff line change
    @@ -25,11 +25,13 @@ it:
    2525
    `android-sdk/cmdline-tools/latest`.
    2626
    * `export ANDROID_HOME=/path/to/android-sdk`
    2727

    28-
    The `android.py` script also requires the following commands to be on the `PATH`:
    28+
    The `android.py` script will automatically use the SDK's `sdkmanager` to install
    29+
    any packages it needs.
    30+
    31+
    The script also requires the following commands to be on the `PATH`:
    2932

    3033
    * `curl`
    3134
    * `java` (or set the `JAVA_HOME` environment variable)
    32-
    * `tar`
    3335

    3436

    3537
    ## Building
    @@ -97,7 +99,7 @@ similar to the `Android` directory of the CPython source tree.
    9799
    The Python test suite can be run on Linux, macOS, or Windows:
    98100

    99101
    * On Linux, the emulator needs access to the KVM virtualization interface, and
    100-
    a DISPLAY environment variable pointing at an X server.
    102+
    a DISPLAY environment variable pointing at an X server. Xvfb is acceptable.
    101103

    102104
    The test suite can usually be run on a device with 2 GB of RAM, but this is
    103105
    borderline, so you may need to increase it to 4 GB. As of Android

    Android/android.py

    Lines changed: 9 additions & 11 deletions
    Original file line numberDiff line numberDiff line change
    @@ -138,19 +138,19 @@ def make_build_python(context):
    138138
    run(["make", "-j", str(os.cpu_count())])
    139139

    140140

    141-
    def unpack_deps(host):
    141+
    def unpack_deps(host, prefix_dir):
    142142
    deps_url = "https://github.com/beeware/cpython-android-source-deps/releases/download"
    143143
    for name_ver in ["bzip2-1.0.8-2", "libffi-3.4.4-3", "openssl-3.0.15-4",
    144144
    "sqlite-3.49.1-0", "xz-5.4.6-1"]:
    145145
    filename = f"{name_ver}-{host}.tar.gz"
    146146
    download(f"{deps_url}/{name_ver}/{filename}")
    147-
    run(["tar", "-xf", filename])
    147+
    shutil.unpack_archive(filename, prefix_dir)
    148148
    os.remove(filename)
    149149

    150150

    151151
    def download(url, target_dir="."):
    152152
    out_path = f"{target_dir}/{basename(url)}"
    153-
    run(["curl", "-Lf", "-o", out_path, url])
    153+
    run(["curl", "-Lf", "--retry", "5", "--retry-all-errors", "-o", out_path, url])
    154154
    return out_path
    155155

    156156

    @@ -162,8 +162,7 @@ def configure_host_python(context):
    162162
    prefix_dir = host_dir / "prefix"
    163163
    if not prefix_dir.exists():
    164164
    prefix_dir.mkdir()
    165-
    os.chdir(prefix_dir)
    166-
    unpack_deps(context.host)
    165+
    unpack_deps(context.host, prefix_dir)
    167166

    168167
    os.chdir(host_dir)
    169168
    command = [
    @@ -241,16 +240,15 @@ def setup_sdk():
    241240
    # the Gradle wrapper is not included in the CPython repository. Instead, we
    242241
    # extract it from the Gradle GitHub repository.
    243242
    def setup_testbed():
    244-
    # The Gradle version used for the build is specified in
    245-
    # testbed/gradle/wrapper/gradle-wrapper.properties. This wrapper version
    246-
    # doesn't need to match, as any version of the wrapper can download any
    247-
    # version of Gradle.
    248-
    version = "8.9.0"
    249243
    paths = ["gradlew", "gradlew.bat", "gradle/wrapper/gradle-wrapper.jar"]
    250-
    251244
    if all((TESTBED_DIR / path).exists() for path in paths):
    252245
    return
    253246

    247+
    # The wrapper version isn't important, as any version of the wrapper can
    248+
    # download any version of Gradle. The Gradle version actually used for the
    249+
    # build is specified in testbed/gradle/wrapper/gradle-wrapper.properties.
    250+
    version = "8.9.0"
    251+
    254252
    for path in paths:
    255253
    out_path = TESTBED_DIR / path
    256254
    out_path.parent.mkdir(exist_ok=True)

    Doc/.ruff.toml

    Lines changed: 2 additions & 3 deletions
    Original file line numberDiff line numberDiff line change
    @@ -1,7 +1,6 @@
    1+
    extend = "../.ruff.toml" # Inherit the project-wide settings
    2+
    13
    target-version = "py312" # Align with the version in oldest_supported_sphinx
    2-
    fix = true
    3-
    output-format = "full"
    4-
    line-length = 79
    54
    extend-exclude = [
    65
    "includes/*",
    76
    # Temporary exclusions:

    Doc/c-api/float.rst

    Lines changed: 3 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -96,6 +96,9 @@ NaNs (if such things exist on the platform) isn't handled correctly, and
    9696
    attempting to unpack a bytes string containing an IEEE INF or NaN will raise an
    9797
    exception.
    9898
    99+
    Note that NaNs type may not be preserved on IEEE platforms (silent NaN become
    100+
    quiet), for example on x86 systems in 32-bit mode.
    101+
    99102
    On non-IEEE platforms with more precision, or larger dynamic range, than IEEE
    100103
    754 supports, not all values can be packed; on non-IEEE platforms with less
    101104
    precision, or smaller dynamic range, not all values can be unpacked. What

    Doc/c-api/init.rst

    Lines changed: 1 addition & 11 deletions
    Original file line numberDiff line numberDiff line change
    @@ -1131,7 +1131,7 @@ Cautions regarding runtime finalization
    11311131
    In the late stage of :term:`interpreter shutdown`, after attempting to wait for
    11321132
    non-daemon threads to exit (though this can be interrupted by
    11331133
    :class:`KeyboardInterrupt`) and running the :mod:`atexit` functions, the runtime
    1134-
    is marked as *finalizing*: :c:func:`_Py_IsFinalizing` and
    1134+
    is marked as *finalizing*: :c:func:`Py_IsFinalizing` and
    11351135
    :func:`sys.is_finalizing` return true. At this point, only the *finalization
    11361136
    thread* that initiated finalization (typically the main thread) is allowed to
    11371137
    acquire the :term:`GIL`.
    @@ -1517,16 +1517,6 @@ All of the following functions must be called after :c:func:`Py_Initialize`.
    15171517
    .. versionadded:: 3.8
    15181518
    15191519
    1520-
    .. c:function:: PyObject* PyUnstable_InterpreterState_GetMainModule(PyInterpreterState *interp)
    1521-
    1522-
    Return a :term:`strong reference` to the ``__main__`` :ref:`module object <moduleobjects>`
    1523-
    for the given interpreter.
    1524-
    1525-
    The caller must have an :term:`attached thread state`.
    1526-
    1527-
    .. versionadded:: 3.13
    1528-
    1529-
    15301520
    .. c:type:: PyObject* (*_PyFrameEvalFunction)(PyThreadState *tstate, _PyInterpreterFrame *frame, int throwflag)
    15311521
    15321522
    Type of a frame evaluation function.

    Doc/c-api/object.rst

    Lines changed: 32 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -613,6 +613,38 @@ Object Protocol
    613613
    614614
    .. versionadded:: 3.14
    615615
    616+
    .. c:function:: int PyUnstable_Object_IsUniqueReferencedTemporary(PyObject *obj)
    617+
    618+
    Check if *obj* is a unique temporary object.
    619+
    Returns ``1`` if *obj* is known to be a unique temporary object,
    620+
    and ``0`` otherwise. This function cannot fail, but the check is
    621+
    conservative, and may return ``0`` in some cases even if *obj* is a unique
    622+
    temporary object.
    623+
    624+
    If an object is a unique temporary, it is guaranteed that the current code
    625+
    has the only reference to the object. For arguments to C functions, this
    626+
    should be used instead of checking if the reference count is ``1``. Starting
    627+
    with Python 3.14, the interpreter internally avoids some reference count
    628+
    modifications when loading objects onto the operands stack by
    629+
    :term:`borrowing <borrowed reference>` references when possible, which means
    630+
    that a reference count of ``1`` by itself does not guarantee that a function
    631+
    argument uniquely referenced.
    632+
    633+
    In the example below, ``my_func`` is called with a unique temporary object
    634+
    as its argument::
    635+
    636+
    my_func([1, 2, 3])
    637+
    638+
    In the example below, ``my_func`` is **not** called with a unique temporary
    639+
    object as its argument, even if its refcount is ``1``::
    640+
    641+
    my_list = [1, 2, 3]
    642+
    my_func(my_list)
    643+
    644+
    See also the function :c:func:`Py_REFCNT`.
    645+
    646+
    .. versionadded:: 3.14
    647+
    616648
    .. c:function:: int PyUnstable_IsImmortal(PyObject *obj)
    617649
    618650
    This function returns non-zero if *obj* is :term:`immortal`, and zero

    Doc/c-api/refcounting.rst

    Lines changed: 2 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -23,6 +23,8 @@ of Python objects.
    2323
    2424
    Use the :c:func:`Py_SET_REFCNT()` function to set an object reference count.
    2525
    26+
    See also the function :c:func:`PyUnstable_Object_IsUniqueReferencedTemporary()`.
    27+
    2628
    .. versionchanged:: 3.10
    2729
    :c:func:`Py_REFCNT()` is changed to the inline static function.
    2830

    Doc/c-api/unicode.rst

    Lines changed: 8 additions & 2 deletions
    Original file line numberDiff line numberDiff line change
    @@ -33,8 +33,14 @@ Python:
    3333

    3434
    .. c:var:: PyTypeObject PyUnicode_Type
    3535
    36-
    This instance of :c:type:`PyTypeObject` represents the Python Unicode type. It
    37-
    is exposed to Python code as :py:class:`str`.
    36+
    This instance of :c:type:`PyTypeObject` represents the Python Unicode type.
    37+
    It is exposed to Python code as :py:class:`str`.
    38+
    39+
    40+
    .. c:var:: PyTypeObject PyUnicodeIter_Type
    41+
    42+
    This instance of :c:type:`PyTypeObject` represents the Python Unicode
    43+
    iterator type. It is used to iterate over Unicode string objects.
    3844

    3945

    4046
    .. c:type:: Py_UCS4

    0 commit comments

    Comments
     (0)
    0