Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit af90634

Browse filesBrowse files
committed
Merge branch 'main' into pyrepl/completions-below
2 parents c5407d5 + 35e998f commit af90634
Copy full SHA for af90634

File tree

681 files changed

+18906
-10507
lines changed
Filter options

Some content is hidden

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

681 files changed

+18906
-10507
lines changed

‎.github/CODEOWNERS

Copy file name to clipboardExpand all lines: .github/CODEOWNERS
+14-9Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
# Build system
1515
configure* @erlend-aasland @corona10
16+
Makefile.pre.in @erlend-aasland
17+
Modules/Setup* @erlend-aasland
1618

1719
# asyncio
1820
**/*asyncio* @1st1 @asvetlov @gvanrossum @kumaraditya303 @willingc
@@ -34,11 +36,13 @@ Python/ceval*.h @markshannon
3436
Python/compile.c @markshannon @iritkatriel
3537
Python/assemble.c @markshannon @iritkatriel
3638
Python/flowgraph.c @markshannon @iritkatriel
39+
Python/instruction_sequence.c @iritkatriel
3740
Python/ast_opt.c @isidentical
3841
Python/bytecodes.c @markshannon
3942
Python/optimizer*.c @markshannon
4043
Python/optimizer_analysis.c @Fidget-Spinner
4144
Python/optimizer_bytecodes.c @Fidget-Spinner
45+
Python/symtable.c @JelleZijlstra @carljm
4246
Lib/_pyrepl/* @pablogsal @lysnikolaou @ambv
4347
Lib/test/test_patma.py @brandtbucher
4448
Lib/test/test_type_*.py @JelleZijlstra
@@ -74,11 +78,8 @@ Programs/python.c @ericsnowcurrently
7478
Tools/build/generate_global_objects.py @ericsnowcurrently
7579

7680
# Exceptions
77-
Lib/traceback.py @iritkatriel
7881
Lib/test/test_except*.py @iritkatriel
79-
Lib/test/test_traceback.py @iritkatriel
8082
Objects/exceptions.c @iritkatriel
81-
Python/traceback.c @iritkatriel
8283

8384
# Hashing
8485
**/*hashlib* @gpshead @tiran
@@ -155,10 +156,10 @@ Include/internal/pycore_time.h @pganssle @abalkin
155156
/Tools/cases_generator/ @markshannon
156157

157158
# AST
158-
Python/ast.c @isidentical
159-
Parser/asdl.py @isidentical
160-
Parser/asdl_c.py @isidentical
161-
Lib/ast.py @isidentical
159+
Python/ast.c @isidentical @JelleZijlstra
160+
Parser/asdl.py @isidentical @JelleZijlstra
161+
Parser/asdl_c.py @isidentical @JelleZijlstra
162+
Lib/ast.py @isidentical @JelleZijlstra
162163

163164
# Mock
164165
/Lib/unittest/mock.py @cjw296
@@ -175,6 +176,10 @@ Lib/ast.py @isidentical
175176
/Lib/test/test_subprocess.py @gpshead
176177
/Modules/*subprocess* @gpshead
177178

179+
# debugger
180+
**/*pdb* @gaogaotiantian
181+
**/*bdb* @gaogaotiantian
182+
178183
# Limited C API & stable ABI
179184
Tools/build/stable_abi.py @encukou
180185
Misc/stable_abi.toml @encukou
@@ -196,7 +201,6 @@ Doc/c-api/stable.rst @encukou
196201
**/*itertools* @rhettinger
197202
**/*collections* @rhettinger
198203
**/*random* @rhettinger
199-
**/*queue* @rhettinger
200204
**/*bisect* @rhettinger
201205
**/*heapq* @rhettinger
202206
**/*functools* @rhettinger
@@ -207,6 +211,7 @@ Doc/c-api/stable.rst @encukou
207211
**/*ensurepip* @pfmoore @pradyunsg
208212

209213
**/*idlelib* @terryjreedy
214+
/Doc/library/idle.rst @terryjreedy
210215

211216
**/*typing* @JelleZijlstra @AlexWaygood
212217

@@ -242,7 +247,7 @@ Doc/howto/clinic.rst @erlend-aasland
242247
**/*interpreteridobject.* @ericsnowcurrently
243248
**/*crossinterp* @ericsnowcurrently
244249
Lib/test/support/interpreters/ @ericsnowcurrently
245-
Modules/_xx*interp*module.c @ericsnowcurrently
250+
Modules/_interp*module.c @ericsnowcurrently
246251
Lib/test/test_interpreters/ @ericsnowcurrently
247252

248253
# Android

‎.github/workflows/build.yml

Copy file name to clipboardExpand all lines: .github/workflows/build.yml
+7-5Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ jobs:
5454
# into the PR branch anyway.
5555
#
5656
# https://github.com/python/core-workflow/issues/373
57-
git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc|^\.pre-commit-config\.yaml$|\.ruff\.toml$)' && echo "run_tests=true" >> $GITHUB_OUTPUT || true
57+
git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc|^\.pre-commit-config\.yaml$|\.ruff\.toml$|\.md$|mypy\.ini$)' && echo "run_tests=true" >> $GITHUB_OUTPUT || true
5858
fi
5959
6060
# Check if we should run hypothesis tests
@@ -199,8 +199,9 @@ jobs:
199199
uses: ./.github/workflows/reusable-macos.yml
200200
with:
201201
config_hash: ${{ needs.check_source.outputs.config_hash }}
202-
# macos-14 is M1, macos-13 is Intel
203-
os-matrix: '["macos-14", "macos-13"]'
202+
# Cirrus and macos-14 are M1, macos-13 is default GHA Intel.
203+
# Cirrus used for upstream, macos-14 for forks.
204+
os-matrix: '["ghcr.io/cirruslabs/macos-runner:sonoma", "macos-14", "macos-13"]'
204205

205206
build_macos_free_threading:
206207
name: 'macOS (free-threading)'
@@ -210,8 +211,9 @@ jobs:
210211
with:
211212
config_hash: ${{ needs.check_source.outputs.config_hash }}
212213
free-threading: true
213-
# macos-14-large is Intel with 12 cores (most parallelism)
214-
os-matrix: '["macos-14"]'
214+
# Cirrus and macos-14 are M1.
215+
# Cirrus used for upstream, macos-14 for forks.
216+
os-matrix: '["ghcr.io/cirruslabs/macos-runner:sonoma", "macos-14"]'
215217

216218
build_ubuntu:
217219
name: 'Ubuntu'

‎.github/workflows/reusable-macos.yml

Copy file name to clipboardExpand all lines: .github/workflows/reusable-macos.yml
+8-1Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ on:
1414

1515
jobs:
1616
build_macos:
17-
name: 'build and test'
17+
name: build and test (${{ matrix.os }})
1818
timeout-minutes: 60
1919
env:
2020
HOMEBREW_NO_ANALYTICS: 1
@@ -27,6 +27,13 @@ jobs:
2727
fail-fast: false
2828
matrix:
2929
os: ${{fromJson(inputs.os-matrix)}}
30+
is-fork:
31+
- ${{ github.repository_owner != 'python' }}
32+
exclude:
33+
- os: "ghcr.io/cirruslabs/macos-runner:sonoma"
34+
is-fork: true
35+
- os: "macos-14"
36+
is-fork: false
3037
runs-on: ${{ matrix.os }}
3138
steps:
3239
- uses: actions/checkout@v4

‎.readthedocs.yml

Copy file name to clipboardExpand all lines: .readthedocs.yml
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ build:
2626
exit 183;
2727
fi
2828
29+
- asdf plugin add uv
30+
- asdf install uv latest
31+
- asdf global uv latest
2932
- make -C Doc venv html
3033
- mkdir _readthedocs
3134
- mv Doc/build/html _readthedocs/html

‎Doc/Makefile

Copy file name to clipboardExpand all lines: Doc/Makefile
+19-6Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ htmlview: html
152152

153153
.PHONY: ensure-sphinx-autobuild
154154
ensure-sphinx-autobuild: venv
155-
$(VENVDIR)/bin/sphinx-autobuild --version > /dev/null || $(VENVDIR)/bin/python3 -m pip install sphinx-autobuild
155+
$(call ensure_package,sphinx-autobuild)
156156

157157
.PHONY: htmllive
158158
htmllive: SPHINXBUILD = $(VENVDIR)/bin/sphinx-autobuild
@@ -174,10 +174,15 @@ venv:
174174
echo "To recreate it, remove it first with \`make clean-venv'."; \
175175
else \
176176
echo "Creating venv in $(VENVDIR)"; \
177-
$(PYTHON) -m venv $(VENVDIR); \
178-
$(VENVDIR)/bin/python3 -m pip install --upgrade pip; \
179-
$(VENVDIR)/bin/python3 -m pip install -r $(REQUIREMENTS); \
180-
echo "The venv has been created in the $(VENVDIR) directory"; \
177+
if uv --version > /dev/null; then \
178+
uv venv $(VENVDIR); \
179+
VIRTUAL_ENV=$(VENVDIR) uv pip install -r $(REQUIREMENTS); \
180+
else \
181+
$(PYTHON) -m venv $(VENVDIR); \
182+
$(VENVDIR)/bin/python3 -m pip install --upgrade pip; \
183+
$(VENVDIR)/bin/python3 -m pip install -r $(REQUIREMENTS); \
184+
echo "The venv has been created in the $(VENVDIR) directory"; \
185+
fi; \
181186
fi
182187

183188
.PHONY: dist
@@ -235,9 +240,17 @@ dist:
235240
rm -r dist/python-$(DISTVERSION)-docs-texinfo
236241
rm dist/python-$(DISTVERSION)-docs-texinfo.tar
237242

243+
define ensure_package
244+
if uv --version > /dev/null; then \
245+
$(VENVDIR)/bin/python3 -m $(1) --version > /dev/null || VIRTUAL_ENV=$(VENVDIR) uv pip install $(1); \
246+
else \
247+
$(VENVDIR)/bin/python3 -m $(1) --version > /dev/null || $(VENVDIR)/bin/python3 -m pip install $(1); \
248+
fi
249+
endef
250+
238251
.PHONY: check
239252
check: venv
240-
$(VENVDIR)/bin/python3 -m pre_commit --version > /dev/null || $(VENVDIR)/bin/python3 -m pip install pre-commit
253+
$(call ensure_package,pre_commit)
241254
$(VENVDIR)/bin/python3 -m pre_commit run --all-files
242255

243256
.PHONY: serve

‎Doc/c-api/init.rst

Copy file name to clipboardExpand all lines: Doc/c-api/init.rst
+157-3Lines changed: 157 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ The following functions can be safely called before Python is initialized:
5555
* :c:func:`PyMem_RawCalloc`
5656
* :c:func:`PyMem_RawFree`
5757

58+
* Synchronization:
59+
60+
* :c:func:`PyMutex_Lock`
61+
* :c:func:`PyMutex_Unlock`
62+
5863
.. note::
5964

6065
The following functions **should not be called** before
@@ -391,9 +396,16 @@ Initializing and finalizing the interpreter
391396
:c:func:`Py_NewInterpreter` below) that were created and not yet destroyed since
392397
the last call to :c:func:`Py_Initialize`. Ideally, this frees all memory
393398
allocated by the Python interpreter. This is a no-op when called for a second
394-
time (without calling :c:func:`Py_Initialize` again first). Normally the
395-
return value is ``0``. If there were errors during finalization
396-
(flushing buffered data), ``-1`` is returned.
399+
time (without calling :c:func:`Py_Initialize` again first).
400+
401+
Since this is the reverse of :c:func:`Py_Initialize`, it should be called
402+
in the same thread with the same interpreter active. That means
403+
the main thread and the main interpreter.
404+
This should never be called while :c:func:`Py_RunMain` is running.
405+
406+
Normally the return value is ``0``.
407+
If there were errors during finalization (flushing buffered data),
408+
``-1`` is returned.
397409
398410
This function is provided for a number of reasons. An embedding application
399411
might want to restart Python without having to restart the application itself.
@@ -2152,3 +2164,145 @@ be used in new code.
21522164
.. c:function:: void PyThread_delete_key_value(int key)
21532165
.. c:function:: void PyThread_ReInitTLS()
21542166
2167+
Synchronization Primitives
2168+
==========================
2169+
2170+
The C-API provides a basic mutual exclusion lock.
2171+
2172+
.. c:type:: PyMutex
2173+
2174+
A mutual exclusion lock. The :c:type:`!PyMutex` should be initialized to
2175+
zero to represent the unlocked state. For example::
2176+
2177+
PyMutex mutex = {0};
2178+
2179+
Instances of :c:type:`!PyMutex` should not be copied or moved. Both the
2180+
contents and address of a :c:type:`!PyMutex` are meaningful, and it must
2181+
remain at a fixed, writable location in memory.
2182+
2183+
.. note::
2184+
2185+
A :c:type:`!PyMutex` currently occupies one byte, but the size should be
2186+
considered unstable. The size may change in future Python releases
2187+
without a deprecation period.
2188+
2189+
.. versionadded:: 3.13
2190+
2191+
.. c:function:: void PyMutex_Lock(PyMutex *m)
2192+
2193+
Lock mutex *m*. If another thread has already locked it, the calling
2194+
thread will block until the mutex is unlocked. While blocked, the thread
2195+
will temporarily release the :term:`GIL` if it is held.
2196+
2197+
.. versionadded:: 3.13
2198+
2199+
.. c:function:: void PyMutex_Unlock(PyMutex *m)
2200+
2201+
Unlock mutex *m*. The mutex must be locked --- otherwise, the function will
2202+
issue a fatal error.
2203+
2204+
.. versionadded:: 3.13
2205+
2206+
.. _python-critical-section-api:
2207+
2208+
Python Critical Section API
2209+
---------------------------
2210+
2211+
The critical section API provides a deadlock avoidance layer on top of
2212+
per-object locks for :term:`free-threaded <free threading>` CPython. They are
2213+
intended to replace reliance on the :term:`global interpreter lock`, and are
2214+
no-ops in versions of Python with the global interpreter lock.
2215+
2216+
Critical sections avoid deadlocks by implicitly suspending active critical
2217+
sections and releasing the locks during calls to :c:func:`PyEval_SaveThread`.
2218+
When :c:func:`PyEval_RestoreThread` is called, the most recent critical section
2219+
is resumed, and its locks reacquired. This means the critical section API
2220+
provides weaker guarantees than traditional locks -- they are useful because
2221+
their behavior is similar to the :term:`GIL`.
2222+
2223+
The functions and structs used by the macros are exposed for cases
2224+
where C macros are not available. They should only be used as in the
2225+
given macro expansions. Note that the sizes and contents of the structures may
2226+
change in future Python versions.
2227+
2228+
.. note::
2229+
2230+
Operations that need to lock two objects at once must use
2231+
:c:macro:`Py_BEGIN_CRITICAL_SECTION2`. You *cannot* use nested critical
2232+
sections to lock more than one object at once, because the inner critical
2233+
section may suspend the outer critical sections. This API does not provide
2234+
a way to lock more than two objects at once.
2235+
2236+
Example usage::
2237+
2238+
static PyObject *
2239+
set_field(MyObject *self, PyObject *value)
2240+
{
2241+
Py_BEGIN_CRITICAL_SECTION(self);
2242+
Py_SETREF(self->field, Py_XNewRef(value));
2243+
Py_END_CRITICAL_SECTION();
2244+
Py_RETURN_NONE;
2245+
}
2246+
2247+
In the above example, :c:macro:`Py_SETREF` calls :c:macro:`Py_DECREF`, which
2248+
can call arbitrary code through an object's deallocation function. The critical
2249+
section API avoids potentital deadlocks due to reentrancy and lock ordering
2250+
by allowing the runtime to temporarily suspend the critical section if the
2251+
code triggered by the finalizer blocks and calls :c:func:`PyEval_SaveThread`.
2252+
2253+
.. c:macro:: Py_BEGIN_CRITICAL_SECTION(op)
2254+
2255+
Acquires the per-object lock for the object *op* and begins a
2256+
critical section.
2257+
2258+
In the free-threaded build, this macro expands to::
2259+
2260+
{
2261+
PyCriticalSection _py_cs;
2262+
PyCriticalSection_Begin(&_py_cs, (PyObject*)(op))
2263+
2264+
In the default build, this macro expands to ``{``.
2265+
2266+
.. versionadded:: 3.13
2267+
2268+
.. c:macro:: Py_END_CRITICAL_SECTION()
2269+
2270+
Ends the critical section and releases the per-object lock.
2271+
2272+
In the free-threaded build, this macro expands to::
2273+
2274+
PyCriticalSection_End(&_py_cs);
2275+
}
2276+
2277+
In the default build, this macro expands to ``}``.
2278+
2279+
.. versionadded:: 3.13
2280+
2281+
.. c:macro:: Py_BEGIN_CRITICAL_SECTION2(a, b)
2282+
2283+
Acquires the per-objects locks for the objects *a* and *b* and begins a
2284+
critical section. The locks are acquired in a consistent order (lowest
2285+
address first) to avoid lock ordering deadlocks.
2286+
2287+
In the free-threaded build, this macro expands to::
2288+
2289+
{
2290+
PyCriticalSection2 _py_cs2;
2291+
PyCriticalSection_Begin2(&_py_cs2, (PyObject*)(a), (PyObject*)(b))
2292+
2293+
In the default build, this macro expands to ``{``.
2294+
2295+
.. versionadded:: 3.13
2296+
2297+
.. c:macro:: Py_END_CRITICAL_SECTION2()
2298+
2299+
Ends the critical section and releases the per-object locks.
2300+
2301+
In the free-threaded build, this macro expands to::
2302+
2303+
PyCriticalSection_End2(&_py_cs2);
2304+
}
2305+
2306+
In the default build, this macro expands to ``}``.
2307+
2308+
.. versionadded:: 3.13

‎Doc/c-api/long.rst

Copy file name to clipboardExpand all lines: Doc/c-api/long.rst
+13Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,19 @@ distinguished from a number. Use :c:func:`PyErr_Occurred` to disambiguate.
494494
.. versionadded:: 3.13
495495
496496
497+
.. c:function:: int PyLong_GetSign(PyObject *obj, int *sign)
498+
499+
Get the sign of the integer object *obj*.
500+
501+
On success, set *\*sign* to the integer sign (0, -1 or +1 for zero, negative or
502+
positive integer, respectively) and return 0.
503+
504+
On failure, return -1 with an exception set. This function always succeeds
505+
if *obj* is a :c:type:`PyLongObject` or its subtype.
506+
507+
.. versionadded:: 3.14
508+
509+
497510
.. c:function:: int PyUnstable_Long_IsCompact(const PyLongObject* op)
498511
499512
Return 1 if *op* is compact, 0 otherwise.

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.