The first argument can be a :class:`dict`, a :class:`frozendict`, or a
mapping.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
The first argument can be a :class:`dict` or a :class:`frozendict`.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
.. versionadded:: 3.13
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
.. versionadded:: 3.13
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
See also the :c:func:`PyObject_GetItem` function.
Calling this API without an :term:`attached thread state` had been allowed for historical
reason. It is no longer allowed.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
occurred. Return ``NULL`` **without** an exception set if the key
wasn't present.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
Prefer using the :c:func:`PyDict_GetItemWithError` function with your own
:c:func:`PyUnicode_FromString` *key* instead.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
.. versionadded:: 3.13
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
The first argument can be a :class:`dict` or a :class:`frozendict`.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
The first argument can be a :class:`dict` or a :class:`frozendict`.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
The first argument can be a :class:`dict` or a :class:`frozendict`.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
The argument can be a :class:`dict` or a :class:`frozendict`.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
Similar to :c:func:`PyDict_Size`, but without error checking.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
:term:`strong reference <strong reference>` (for example, using
:c:func:`Py_NewRef`).
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Also accept :class:`frozendict`.
.. c:function:: int PyDict_Merge(PyObject *a, PyObject *b, int override)
Use the standard ``alignas`` specifier rather than this macro.
- .. deprecated:: next
+ .. deprecated:: 3.15
The macro is :term:`soft deprecated`.
.. c:macro:: PY_FORMAT_SIZE_T
The :c:func:`printf` formatting modifier for :c:type:`size_t`.
Use ``"z"`` directly instead.
- .. deprecated:: next
+ .. deprecated:: 3.15
The macro is :term:`soft deprecated`.
.. c:macro:: Py_LL(number)
Consider using the C99 standard suffixes ``LL`` and ``LLU`` directly.
- .. deprecated:: next
+ .. deprecated:: 3.15
The macro is :term:`soft deprecated`.
.. c:macro:: PY_LONG_LONG
respectively.
Historically, these types needed compiler-specific extensions.
- .. deprecated:: next
+ .. deprecated:: 3.15
These macros are :term:`soft deprecated`.
.. c:macro:: PY_LLONG_MIN
The required header, ``<limits.h>``,
:ref:`is included <capi-system-includes>` in ``Python.h``.
- .. deprecated:: next
+ .. deprecated:: 3.15
These macros are :term:`soft deprecated`.
.. c:macro:: Py_MEMCPY(dest, src, n)
The required header for the latter, ``<limits.h>``,
:ref:`is included <capi-system-includes>` in ``Python.h``.
- .. deprecated:: next
+ .. deprecated:: 3.15
The macro is :term:`soft deprecated`.
.. c:macro:: Py_UNICODE_WIDE
Defined if ``wchar_t`` can hold a Unicode character (UCS-4).
Use ``sizeof(wchar_t) >= 4`` instead
- .. deprecated:: next
+ .. deprecated:: 3.15
The macro is :term:`soft deprecated`.
.. c:macro:: Py_VA_COPY
.. versionchanged:: 3.6
This is now an alias to ``va_copy``.
- .. deprecated:: next
+ .. deprecated:: 3.15
The macro is :term:`soft deprecated`.
.. seealso:: :pep:`803`
- .. versionadded:: next
+ .. versionadded:: 3.15
.. _stable-abi:
as :c:expr:`_Float16` type, if the compiler supports the Annex H
of the C23 standard.
- .. versionadded:: next
+ .. versionadded:: 3.15
(4)
Complex types (``F`` and ``D``) are available unconditionally,
standard Base64 alphabet, and return the encoded :class:`bytes`. The result
can still contain ``=`` if *padded* is true (default).
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *padded* parameter.
``/`` in the standard Base64 alphabet, and return the decoded
:class:`bytes`.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *padded* parameter.
Padding of input is no longer required by default.
after at most every *wrapcol* characters.
If *wrapcol* is zero (default), do not add any newlines.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *padded* and *wrapcol* parameters.
incorrectly padded or if there are non-alphabet characters present in the
input.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *ignorechars* and *padded* parameters.
.. versionadded:: 3.10
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *padded* and *wrapcol* parameters.
.. versionadded:: 3.10
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *ignorechars* and *padded* parameters.
after at most every *wrapcol* characters.
If *wrapcol* is zero (default), do not add any newlines.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *wrapcol* parameter.
incorrectly padded or if there are non-alphabet characters present in the
input.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *ignorechars* parameter.
.. versionadded:: 3.4
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *wrapcol* parameter.
.. versionadded:: 3.4
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *ignorechars* parameter.
.. versionchanged:: 3.15
The *pad* parameter was added.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *wrapcol* parameter.
.. versionadded:: 3.13
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *ignorechars* parameter.
Invalid base32 data will raise :exc:`binascii.Error`.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. function:: b2a_base32(data, /, *, padded=True, alphabet=BASE32_ALPHABET, wrapcol=0)
after at most every *wrapcol* characters.
If *wrapcol* is zero (default), do not insert any newlines.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. function:: a2b_qp(data, header=False)
liberal towards whitespace) is also accessible using the
:meth:`bytes.fromhex` class method.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *ignorechars* parameter.
The Base 64 alphabet according to :rfc:`4648`.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. data:: URLSAFE_BASE64_ALPHABET
The "URL and filename safe" Base 64 alphabet according to :rfc:`4648`.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. data:: UU_ALPHABET
The uuencoding alphabet.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. data:: CRYPT_ALPHABET
The Base 64 alphabet used in the :manpage:`crypt(3)` routine and in the GEDCOM format.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. data:: BINHEX_ALPHABET
The Base 64 alphabet used in BinHex 4 (HQX) within the classic Mac OS.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. data:: BASE85_ALPHABET
The Base85 alphabet.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. data:: ASCII85_ALPHABET
The Ascii85 alphabet.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. data:: Z85_ALPHABET
The `Z85 <https://rfc.zeromq.org/spec/32/>`_ alphabet.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. data:: BASE32_ALPHABET
The Base 32 alphabet according to :rfc:`4648`.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. data:: BASE32HEX_ALPHABET
Data encoded with this alphabet maintains its sort order during bitwise
comparisons.
- .. versionadded:: next
+ .. versionadded:: 3.15
.. seealso::
(or by) Python.
It is recommended to only use this function as a default or fallback,
- .. deprecated:: next
+ .. deprecated:: 3.15
This function is :term:`soft deprecated`.
It is kept for use in cases where it works, but not expected to be
.. versionchanged:: 3.14
Added the *echo_char* parameter for keyboard feedback.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
When using non-empty *echo_char* on Unix, keyboard shortcuts (including
cursor movement and line editing) are now properly handled using the
terminal's control character configuration.
conversion length limitation <int_max_str_digits>` to help avoid denial
of service attacks.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the optional *array_hook* parameter.
.. function:: loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, array_hook=None, **kw)
*array_hook* will be used instead of the :class:`list`. This feature can be
used to implement custom decoders.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added support for *array_hook*.
*parse_float* is an optional function that will be called with the string of
.. versionchanged:: 3.11
No longer attempts to write to :data:`!sys.stdout` if it is ``None``.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Added the *expand* parameter.
The *flags* parameter. ``select.EPOLL_CLOEXEC`` is used by default now.
Use :func:`os.set_inheritable` to make the file descriptor inheritable.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
When CPython is built, this function may be disabled using
:option:`--disable-epoll`.
The bytearray version of this method does *not* operate in place - it
always produces a new object, even if no changes were made.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
*count* is now supported as a keyword argument.
.. versionadded:: 3.6
- .. versionchanged:: next
+ .. versionchanged:: 3.15
The optional *target_time* parameter was added.
if :option:`--number` is 0, the code will run until it takes at
least this many seconds (default: 0.2)
- .. versionadded:: next
+ .. versionadded:: 3.15
.. option:: -v, --verbose
Support for ``WAVE_FORMAT_EXTENSIBLE`` headers was added, provided that the
extended format is ``KSDATAFORMAT_SUBTYPE_PCM``.
-.. versionchanged:: next
+.. versionchanged:: 3.15
Support for reading and writing ``WAVE_FORMAT_IEEE_FLOAT`` files was added.
.. versionchanged:: 3.15
*attrib* can now be a :class:`frozendict`.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
*parent* and *tag* are now positional-only parameters.
.. versionchanged:: 3.15
*attrib* can now be a :class:`frozendict`.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
*tag* is now a positional-only parameter.
:manpage:`epoll_create1 <epoll_create1(2)>` is available
but incompatible with Linux semantics.
- .. versionadded:: next
+ .. versionadded:: 3.15
C compiler options
#define PY_MINOR_VERSION 15
#define PY_MICRO_VERSION 0
#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA
-#define PY_RELEASE_SERIAL 7
+#define PY_RELEASE_SERIAL 8
/* Version as a string */
-#define PY_VERSION "3.15.0a7+"
+#define PY_VERSION "3.15.0a8"
/*--end constants--*/
-# Autogenerated by Sphinx on Tue Mar 10 14:31:07 2026
+# Autogenerated by Sphinx on Tue Apr 7 14:21:08 2026
# as part of the release process.
module_docs = {
-# Autogenerated by Sphinx on Tue Mar 10 14:31:07 2026
+# Autogenerated by Sphinx on Tue Apr 7 14:21:08 2026
# as part of the release process.
topics = {
formatting to one of the built-in types, or use a similar
formatting option syntax.
- See Format Specification Mini-Language for a description of the
+ See Format specification mini-language for a description of the
standard formatting syntax.
The return value must be a string object.
Changed in version 3.11: Starred elements are now allowed in the
expression list.
''',
- 'formatstrings': r'''Format String Syntax
+ 'formatstrings': r'''Format string syntax
********************
The "str.format()" method and the "Formatter" class share the same
preceded by a colon "':'". These specify a non-default format for the
replacement value.
-See also the Format Specification Mini-Language section.
+See also the Format specification mini-language section.
The *field_name* itself begins with an *arg_name* that is either a
number or a keyword. If it’s a number, it refers to a positional
See the Format examples section for some examples.
-Format Specification Mini-Language
+Format specification mini-language
==================================
“Format specifications” are used within replacement fields contained
within a format string to define how individual values are presented
-(see Format String Syntax, f-strings, and t-strings). They can also be
+(see Format string syntax, f-strings, and t-strings). They can also be
passed directly to the built-in "format()" function. Each formattable
type may define how the format specification is to be interpreted.
Using type-specific formatting:
- >>> import datetime
- >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
+ >>> import datetime as dt
+ >>> d = dt.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'
Changed in version 3.12: "type" is now a soft keyword.
-Changed in version 3.15.0a6 (unreleased): "lazy" is now a soft
-keyword.
+Changed in version 3.15: "lazy" is now a soft keyword.
Reserved classes of identifiers
remaining characters must be in the “letter- and digit-like” set
"xid_continue".
-These sets based on the *XID_Start* and *XID_Continue* sets as defined
-by the Unicode standard annex UAX-31. Python’s "xid_start"
+These sets are based on the *XID_Start* and *XID_Continue* sets as
+defined by the Unicode standard annex UAX-31. Python’s "xid_start"
additionally includes the underscore ("_"). Note that Python does not
necessarily conform to UAX-31.
See **PEP 810** for the full specification of lazy imports.
-Added in version 3.15.0a6 (unreleased).
+Added in version 3.15.
Future statements
Added in version 3.4.
-Note:
-
- Slicing is done exclusively with the following three methods. A
- call like
-
- a[1:2] = b
-
- is translated to
-
- a[slice(1, 2, None)] = b
-
- and so forth. Missing slice items are always filled in with "None".
-
object.__getitem__(self, subscript)
Called to implement *subscription*, that is, "self[subscript]". See
"__getitem__()" should raise an "LookupError" or one of its
subclasses ("IndexError" for sequences; "KeyError" for mappings).
+ Note:
+
+ Slicing is handled by "__getitem__()", "__setitem__()", and
+ "__delitem__()". A call like
+
+ a[1:2] = b
+
+ is translated to
+
+ a[slice(1, 2, None)] = b
+
+ and so forth. Missing slice items are always filled in with
+ "None".
+
Note:
The sequence iteration protocol (used, for example, in "for"
formatting to one of the built-in types, or use a similar
formatting option syntax.
- See Format Specification Mini-Language for a description of the
+ See Format specification mini-language for a description of the
standard formatting syntax.
The return value must be a string object.
Added in version 3.4.
-Note:
-
- Slicing is done exclusively with the following three methods. A
- call like
-
- a[1:2] = b
-
- is translated to
-
- a[slice(1, 2, None)] = b
-
- and so forth. Missing slice items are always filled in with "None".
-
object.__getitem__(self, subscript)
Called to implement *subscription*, that is, "self[subscript]". See
"__getitem__()" should raise an "LookupError" or one of its
subclasses ("IndexError" for sequences; "KeyError" for mappings).
+ Note:
+
+ Slicing is handled by "__getitem__()", "__setitem__()", and
+ "__delitem__()". A call like
+
+ a[1:2] = b
+
+ is translated to
+
+ a[slice(1, 2, None)] = b
+
+ and so forth. Missing slice items are always filled in with
+ "None".
+
Note:
The sequence iteration protocol (used, for example, in "for"
"inspect.BufferFlags" provides a convenient way to interpret the
flags. The method must return a "memoryview" object.
+ **Thread safety:** In *free-threaded* Python, implementations must
+ manage any internal export counter using atomic operations. The
+ method must be safe to call concurrently from multiple threads, and
+ the returned buffer’s underlying data must remain valid until the
+ corresponding "__release_buffer__()" call completes. See Thread
+ safety for memoryview objects for details.
+
object.__release_buffer__(self, buffer)
Called when a buffer is no longer needed. The *buffer* argument is
a "memoryview" object that was previously returned by
"__buffer__()". The method must release any resources associated
- with the buffer. This method should return "None". Buffer objects
- that do not need to perform any cleanup are not required to
- implement this method.
+ with the buffer. This method should return "None".
+
+ **Thread safety:** In *free-threaded* Python, any export counter
+ decrement must use atomic operations. Resource cleanup must be
+ thread-safe, as the final release may race with concurrent releases
+ from other threads.
+
+ Buffer objects that do not need to perform any cleanup are not
+ required to implement this method.
Added in version 3.12.
Strings also support two styles of string formatting, one providing a
large degree of flexibility and customization (see "str.format()",
-Format String Syntax and Custom String Formatting) and the other based
+Format string syntax and Custom string formatting) and the other based
on C "printf" style formatting that handles a narrower range of types
and is slightly harder to use correctly, but is often faster for the
cases it can handle (printf-style String Formatting).
>>> "{1} expects the {0} Inquisition!".format("Spanish", "Nobody")
'Nobody expects the Spanish Inquisition!'
- See Format String Syntax for a description of the various
+ See Format string syntax for a description of the various
formatting options that can be specified in format strings.
Note:
>>> '\t'.isprintable(), '\n'.isprintable()
(False, False)
+ See also "isspace()".
+
str.isspace()
Return "True" if there are only whitespace characters in the string
and there is at least one character, "False" otherwise.
+ For example:
+
+ >>> ''.isspace()
+ False
+ >>> ' '.isspace()
+ True
+ >>> '\t\n'.isspace() # TAB and BREAK LINE
+ True
+ >>> '\u3000'.isspace() # IDEOGRAPHIC SPACE
+ True
+
A character is *whitespace* if in the Unicode character database
(see "unicodedata"), either its general category is "Zs"
(“Separator, space”), or its bidirectional class is one of "WS",
"B", or "S".
+ See also "isprintable()".
+
str.istitle()
Return "True" if the string is a titlecased string and there is at
a third argument, it must be a string, whose characters will be
mapped to "None" in the result.
- Changed in version 3.15.0a6 (unreleased): *dict* can now be a
- "frozendict".
+ Changed in version 3.15: *dict* can now be a "frozendict".
str.partition(sep, /)
socket objects (and perhaps by other functions or methods provided by
extension modules).
+File objects implement common methods, listed below, to simplify usage
+in generic code. They are expected to be With Statement Context
+Managers.
+
The objects "sys.stdin", "sys.stdout" and "sys.stderr" are initialized
to file objects corresponding to the interpreter’s standard input,
output and error streams; they are all open in text mode and therefore
follow the interface defined by the "io.TextIOBase" abstract class.
+file.read(size=-1, /)
+
+ Retrieve up to *size* data from the file. As a convenience if
+ *size* is unspecified or -1 retrieve all data available.
+
+file.write(data, /)
+
+ Store *data* to the file.
+
+file.close()
+
+ Flush any buffers and close the underlying file.
+
Internal types
==============
"frozendict" is not a "dict" subclass but inherits directly from
"object".
- Added in version 3.15.0a6 (unreleased).
+ Added in version 3.15.
''',
'typesmethods': r'''Methods
*******
Return the total number of occurrences of *value* in *sequence*.
-sequence.index(value[, start[, stop])
+sequence.index(value[, start[, stop]])
Return the index of the first occurrence of *value* in *sequence*.
sequence.append(value, /)
- Append *value* to the end of the sequence This is equivalent to
+ Append *value* to the end of the sequence. This is equivalent to
writing "seq[len(seq):len(seq)] = [value]".
sequence.clear()
sequence.append(value, /)
- Append *value* to the end of the sequence This is equivalent to
+ Append *value* to the end of the sequence. This is equivalent to
writing "seq[len(seq):len(seq)] = [value]".
sequence.clear()
--- /dev/null
+.. date: 2026-03-14-17-31-39
+.. gh-issue: 145986
+.. nonce: ifSSr8
+.. release date: 2026-04-07
+.. section: Security
+
+:mod:`xml.parsers.expat`: Fixed a crash caused by unbounded C recursion when
+converting deeply nested XML content models with
+:meth:`~xml.parsers.expat.xmlparser.ElementDeclHandler`. This addresses
+:cve:`2026-4224`.
+
+..
+
+.. date: 2026-03-06-17-03-38
+.. gh-issue: 145599
+.. nonce: kchwZV
+.. section: Security
+
+Reject control characters in :class:`http.cookies.Morsel`
+:meth:`~http.cookies.Morsel.update` and
+:meth:`~http.cookies.BaseCookie.js_output`. This addresses :cve:`2026-3644`.
+
+..
+
+.. date: 2026-01-16-12-04-49
+.. gh-issue: 143930
+.. nonce: zYC5x3
+.. section: Security
+
+Reject leading dashes in URLs passed to :func:`webbrowser.open`.
+
+..
+
+.. date: 2026-04-06-11-15-46
+.. gh-issue: 148157
+.. nonce: JFnZDn
+.. section: Core and Builtins
+
+Fix an unlikely crash when parsing an invalid type comments for function
+parameters. Found by OSS Fuzz in :oss-fuzz:`492782951`.
+
+..
+
+.. date: 2026-04-06-00-00-00
+.. gh-issue: 100239
+.. nonce: binopxt
+.. section: Core and Builtins
+
+Propagate result type and uniqueness information through
+``_BINARY_OP_EXTEND`` in the tier 2 optimizer, enabling elimination of
+downstream type guards and selection of inplace float operations.
+
+..
+
+.. date: 2026-04-05-15-20-00
+.. gh-issue: 148144
+.. nonce: f7qA0x
+.. section: Core and Builtins
+
+Initialize ``_PyInterpreterFrame.visited`` when copying interpreter frames
+so incremental GC does not read an uninitialized byte from generator and
+frame-object copies.
+
+..
+
+.. date: 2026-04-05-00-00-00
+.. gh-issue: 148072
+.. nonce: xid9Pe
+.. section: Core and Builtins
+
+Cache ``pickle.dumps`` and ``pickle.loads`` per interpreter in the XIData
+framework, avoiding repeated module lookups on every cross-interpreter data
+transfer. This speeds up
+:class:`~concurrent.futures.InterpreterPoolExecutor` for mutable types
+(``list``, ``dict``) by 1.7x--3.3x.
+
+..
+
+.. date: 2026-04-04-22-20-00
+.. gh-issue: 148110
+.. nonce: cL5x2Q
+.. section: Core and Builtins
+
+Fix :func:`sys.set_lazy_imports_filter` so relative lazy imports pass the
+resolved imported module name to the filter callback. Patch by Pablo
+Galindo.
+
+..
+
+.. date: 2026-04-04-20-59-12
+.. gh-issue: 148083
+.. nonce: 9ZHNBN
+.. section: Core and Builtins
+
+Constant-fold ``_CONTAINS_OP_SET`` for :class:`frozenset`. Patch by Donghee
+Na.
+
+..
+
+.. date: 2026-04-01-12-52-31
+.. gh-issue: 144319
+.. nonce: iZk4hs
+.. section: Core and Builtins
+
+Fix a bug that could cause applications with specific allocation patterns to
+leak memory via Huge Pages if compiled with Huge Page support. Patch by
+Pablo Galindo
+
+..
+
+.. date: 2026-04-01-12-35-55
+.. gh-issue: 147985
+.. nonce: YVirHJ
+.. section: Core and Builtins
+
+Make :c:func:`PySet_Contains` attempt a lock-free lookup, similar to
+:meth:`!set.__contains__`. This avoids acquiring the set object mutex in
+the normal case.
+
+..
+
+.. date: 2026-03-31-18-07-53
+.. gh-issue: 147856
+.. nonce: 62Dwee
+.. section: Core and Builtins
+
+Allow the *count* argument of :meth:`bytes.replace` to be a keyword.
+
+..
+
+.. date: 2026-03-31-01-06-35
+.. gh-issue: 146615
+.. nonce: fix-method-get
+.. section: Core and Builtins
+
+Fix a crash in :meth:`~object.__get__` for :c:expr:`METH_METHOD` descriptors
+when an invalid (non-type) object is passed as the second argument. Patch by
+Steven Sun.
+
+..
+
+.. date: 2026-03-30-20-00-00
+.. gh-issue: 146306
+.. nonce: C45609
+.. section: Core and Builtins
+
+Optimize compact integer arithmetic in the JIT by mutating
+uniquely-referenced operands in place, avoiding allocation of a new int
+object. Speeds up the pyperformance ``spectral_norm`` benchmark by ~10%.
+
+..
+
+.. date: 2026-03-29-11-39-05
+.. gh-issue: 146587
+.. nonce: YJicXt
+.. section: Core and Builtins
+
+Fix type slot assignment incase of multiple slots for same name in type
+object implementation. Patch by Kumar Aditya.
+
+..
+
+.. date: 2026-03-27-17-14-18
+.. gh-issue: 126910
+.. nonce: hooVFQ
+.. section: Core and Builtins
+
+Set frame pointers in ``aarch64-unknown-linux-gnu`` JIT code, allowing most
+native profilers and debuggers to unwind through them. Patch by Diego Russo
+
+..
+
+.. date: 2026-03-26-11-18-45
+.. gh-issue: 146388
+.. nonce: O0u1c3
+.. section: Core and Builtins
+
+Adds a null check to handle when the JIT optimizer runs out of space when
+dealing with contradictions in ``make_bottom``.
+
+..
+
+.. date: 2026-03-24-13-06-52
+.. gh-issue: 146369
+.. nonce: 6wDI6S
+.. section: Core and Builtins
+
+Ensure ``-X lazy_imports=none``` and ``PYTHON_LAZY_IMPORTS=none``` override
+``__lazy_modules__``. Patch by Hugo van Kemenade.
+
+..
+
+.. date: 2026-03-22-19-30-00
+.. gh-issue: 146308
+.. nonce: AxnRVA
+.. section: Core and Builtins
+
+Fixed multiple error handling issues in the :mod:`!_remote_debugging` module
+including a double-free in code object caching, memory leaks on allocation
+failure, missing exception checks in binary format varint decoding,
+reference leaks on error paths in frame chain processing, and inconsistent
+thread status error reporting across platforms. Patch by Pablo Galindo.
+
+..
+
+.. date: 2026-03-22-12-00-00
+.. gh-issue: 146306
+.. nonce: 870ef4
+.. section: Core and Builtins
+
+Optimize float arithmetic in the JIT by mutating uniquely-referenced
+operands in place, avoiding allocation of a new float object. Speeds up the
+pyperformance ``nbody`` benchmark by ~19%.
+
+..
+
+.. date: 2026-03-21-15-05-14
+.. gh-issue: 146128
+.. nonce: DG1Hfa
+.. section: Core and Builtins
+
+Fix a bug which could cause constant values to be partially corrupted in
+AArch64 JIT code. This issue is theoretical, and hasn't actually been
+observed in unmodified Python interpreters.
+
+..
+
+.. date: 2026-03-21-11-55-16
+.. gh-issue: 146250
+.. nonce: ahl3O2
+.. section: Core and Builtins
+
+Fixed a memory leak in :exc:`SyntaxError` when re-initializing it.
+
+..
+
+.. date: 2026-03-21-08-48-25
+.. gh-issue: 146245
+.. nonce: cqM3_4
+.. section: Core and Builtins
+
+Fixed reference leaks in :mod:`socket` when audit hooks raise exceptions in
+:func:`socket.getaddrinfo` and :meth:`!socket.sendto`.
+
+..
+
+.. date: 2026-03-21-08-11-58
+.. gh-issue: 146151
+.. nonce: 4-lhim
+.. section: Core and Builtins
+
+:class:`memoryview` now supports the :c:expr:`float complex` and
+:c:expr:`double complex` C types: formatting characters ``'F'`` and ``'D'``
+respectively. Patch by Sergey B Kirpichev.
+
+..
+
+.. date: 2026-03-20-13-55-14
+.. gh-issue: 146196
+.. nonce: Zg70Kb
+.. section: Core and Builtins
+
+Fix potential Undefined Behavior in :c:func:`PyUnicodeWriter_WriteASCII` by
+adding a zero-length check. Patch by Shamil Abdulaev.
+
+..
+
+.. date: 2026-03-20-13-07-33
+.. gh-issue: 146227
+.. nonce: MqBPEo
+.. section: Core and Builtins
+
+Fix wrong type in ``_Py_atomic_load_uint16`` in the C11 atomics backend
+(``pyatomic_std.h``), which used a 32-bit atomic load instead of 16-bit.
+Found by Mohammed Zuhaib.
+
+..
+
+.. date: 2026-03-20-12-52-55
+.. gh-issue: 146205
+.. nonce: M4yKdf
+.. section: Core and Builtins
+
+Fixed a bug where :meth:`select.epoll.close`, :meth:`select.kqueue.close`,
+and :meth:`select.devpoll.close` silently ignored errors.
+
+..
+
+.. date: 2026-03-20-12-26-24
+.. gh-issue: 146199
+.. nonce: vV8V9s
+.. section: Core and Builtins
+
+Comparison of code objects now handles errors correctly.
+
+..
+
+.. date: 2026-03-20-11-34-17
+.. gh-issue: 145667
+.. nonce: _Agp9o
+.. section: Core and Builtins
+
+Remove the ``GET_ITER_YIELD_FROM`` instruction, modifying ``SEND`` to pair
+with ``GET_ITER`` when compiling ``yield from`` expressions.
+
+..
+
+.. date: 2026-03-20-00-39-25
+.. gh-issue: 146192
+.. nonce: 8aQ6sC
+.. section: Core and Builtins
+
+Add Base32 support to :mod:`binascii` and improve the performance of the
+Base32 converters in :mod:`base64`. Patch by James Seo.
+
+..
+
+.. date: 2026-03-19-16-16-40
+.. gh-issue: 135871
+.. nonce: jSExZ3
+.. section: Core and Builtins
+
+Improve multithreaded scaling of PyMutex in low-contention scenarios by
+reloading the lock's internal state, without slowing down high-contention
+scenarios.
+
+..
+
+.. date: 2026-03-19-01-19-34
+.. gh-issue: 146096
+.. nonce: R9tkJX
+.. section: Core and Builtins
+
+Fixed segmentation fault when called repr for BaseExceptionGroup with empty
+or 1-size tuple args.
+
+..
+
+.. date: 2026-03-18-18-52-00
+.. gh-issue: 146056
+.. nonce: r1tVSo
+.. section: Core and Builtins
+
+Fix :func:`repr` for lists and tuples containing ``NULL``\ s.
+
+..
+
+.. date: 2026-03-17-14-20-56
+.. gh-issue: 145059
+.. nonce: aB3xKm
+.. section: Core and Builtins
+
+Fixed ``sys.lazy_modules`` to include lazy modules without submodules. Patch
+by Bartosz Sławecki.
+
+..
+
+.. date: 2026-03-17-00-00-00
+.. gh-issue: 146041
+.. nonce: 7799bb
+.. section: Core and Builtins
+
+Fix free-threading scaling bottleneck in :func:`sys.intern` and
+:c:func:`PyObject_SetAttr` by avoiding the interpreter-wide lock when the
+string is already interned and immortalized.
+
+..
+
+.. date: 2026-03-15-21-45-35
+.. gh-issue: 145990
+.. nonce: tmXwRB
+.. section: Core and Builtins
+
+``python --help-env`` sections are now sorted by environment variable name.
+
+..
+
+.. date: 2026-03-15-20-47-34
+.. gh-issue: 145990
+.. nonce: 14BUzw
+.. section: Core and Builtins
+
+``python --help-xoptions`` is now sorted by ``-X`` option name.
+
+..
+
+.. date: 2026-03-13-12-24-17
+.. gh-issue: 145876
+.. nonce: LWFO2K
+.. section: Core and Builtins
+
+:exc:`AttributeError`\ s and :exc:`KeyError`\ s raised in :meth:`!keys` or
+:meth:`!__getitem__` during dictionary unpacking (``{**mymapping}`` or
+``func(**mymapping)``) are no longer masked by :exc:`TypeError`.
+
+..
+
+.. date: 2026-03-13-09-48-57
+.. gh-issue: 127958
+.. nonce: U-znTv
+.. section: Core and Builtins
+
+Support tracing from function entrypoints in the JIT. Patch by Ken Jin.
+
+..
+
+.. date: 2026-03-11-21-27-28
+.. gh-issue: 145376
+.. nonce: LfDvyw
+.. section: Core and Builtins
+
+Fix GC tracking in ``structseq.__replace__()``.
+
+..
+
+.. date: 2026-03-11-19-09-47
+.. gh-issue: 145792
+.. nonce: X5KUhc
+.. section: Core and Builtins
+
+Fix out-of-bounds access when invoking faulthandler on a CPython build
+compiled without support for VLAs.
+
+..
+
+.. date: 2026-03-11-00-13-59
+.. gh-issue: 142183
+.. nonce: 2iVhJH
+.. section: Core and Builtins
+
+Avoid a pathological case where repeated calls at a specific stack depth
+could be significantly slower.
+
+..
+
+.. date: 2026-03-10-22-38-40
+.. gh-issue: 145779
+.. nonce: 5375381d80
+.. section: Core and Builtins
+
+Improve scaling of :func:`classmethod` and :func:`staticmethod` calls in the
+free-threaded build by avoiding the descriptor ``__get__`` call.
+
+..
+
+.. date: 2026-03-10-19-00-39
+.. gh-issue: 145783
+.. nonce: dS5TM9
+.. section: Core and Builtins
+
+Fix an unlikely crash in the parser when certain errors were erroneously not
+propagated. Found by OSS Fuzz in :oss-fuzz:`491369109`.
+
+..
+
+.. date: 2026-03-10-12-52-06
+.. gh-issue: 145685
+.. nonce: 80B7gK
+.. section: Core and Builtins
+
+Improve scaling of type attribute lookups in the :term:`free-threaded build`
+by avoiding contention on the internal type lock.
+
+..
+
+.. date: 2026-03-09-00-00-00
+.. gh-issue: 145713
+.. nonce: KR6azvzI
+.. section: Core and Builtins
+
+Make :meth:`bytearray.resize` thread-safe in the free-threaded build by
+using a critical section and calling the lock-held variant of the resize
+function.
+
+..
+
+.. date: 2026-02-28-18-42-36
+.. gh-issue: 145036
+.. nonce: 70Kbfz
+.. section: Core and Builtins
+
+In free-threaded build, fix race condition when calling :meth:`!__sizeof__`
+on a :class:`list`
+
+..
+
+.. date: 2026-02-14-15-51-16
+.. gh-issue: 134584
+.. nonce: 6WFSuB
+.. section: Core and Builtins
+
+Eliminate redundant refcounting for ``MATCH_CLASS`` in the JIT.
+
+..
+
+.. date: 2026-02-14-13-07-08
+.. gh-issue: 69605
+.. nonce: 4aL4hn
+.. section: Core and Builtins
+
+Add :mod:`math.integer` to :term:`REPL` auto-completion of imports.
+
+..
+
+.. date: 2026-02-08-01-19-50
+.. gh-issue: 131798
+.. nonce: PaWDNH
+.. section: Core and Builtins
+
+Optimize ``_ITER_CHECK_RANGE`` and ``_ITER_CHECK_LIST`` in the JIT
+
+..
+
+.. date: 2026-01-31-15-15-43
+.. gh-issue: 143414
+.. nonce: Jgl4xu
+.. section: Core and Builtins
+
+Add tracking to the JIT optimizer to determine whether a reference is
+uniquely owned or shared
+
+..
+
+.. date: 2026-01-10-12-59-58
+.. gh-issue: 143636
+.. nonce: dzr26e
+.. section: Core and Builtins
+
+Fix a crash when calling :class:`SimpleNamespace.__replace__()
+<types.SimpleNamespace>` on non-namespace instances. Patch by Bénédikt Tran.
+
+..
+
+.. date: 2026-01-07-23-07-17
+.. gh-issue: 126910
+.. nonce: d8zdm-
+.. section: Core and Builtins
+
+Set frame pointers in ``x86_64-unknown-linux-gnu`` JIT code, allowing most
+native profilers and debuggers to unwind through them.
+
+..
+
+.. date: 2025-11-02-16-23-17
+.. gh-issue: 140594
+.. nonce: YIWUpl
+.. section: Core and Builtins
+
+Fix an out of bounds read when a single NUL character is read from the
+standard input. Patch by Shamil Abdulaev.
+
+..
+
+.. date: 2025-11-01-01-49-52
+.. gh-issue: 140870
+.. nonce: iknc12
+.. section: Core and Builtins
+
+Add support for module attributes in the :term:`REPL` auto-completion of
+imports.
+
+..
+
+.. date: 2026-04-07-01-04-00
+.. gh-issue: 144503
+.. nonce: argvfs
+.. section: Library
+
+Fix a regression introduced in 3.14.3 and 3.13.12 where the
+:mod:`multiprocessing` ``forkserver`` start method would fail with
+:exc:`BrokenPipeError` when the parent process had a very large
+:data:`sys.argv`. The argv is now passed to the forkserver as separate
+command-line arguments rather than being embedded in the ``-c`` command
+string, avoiding the operating system's per-argument length limit.
+
+..
+
+.. date: 2026-04-06-11-20-24
+.. gh-issue: 148153
+.. nonce: ZtsuTl
+.. section: Library
+
+:func:`base64.b32encode` now always raises :exc:`ValueError` instead of
+:exc:`AssertionError` for the value of *map01* with invalid length.
+
+..
+
+.. date: 2026-04-01-18-17-55
+.. gh-issue: 73613
+.. nonce: PLEebm
+.. section: Library
+
+Add the *padded* parameter in functions related to Base32 and Base64 codecs
+in the :mod:`binascii` and :mod:`base64` modules. In the encoding functions
+it controls whether the pad character can be added in the output, in the
+decoding functions it controls whether padding is required in input. Padding
+of input no longer required in :func:`base64.urlsafe_b64decode` by default.
+
+..
+
+.. date: 2026-04-01-11-05-36
+.. gh-issue: 146613
+.. nonce: GzjUFK
+.. section: Library
+
+:mod:`itertools`: Fix a crash in :func:`itertools.groupby` when the grouper
+iterator is concurrently mutated.
+
+..
+
+.. date: 2026-03-31-19-54-32
+.. gh-issue: 147944
+.. nonce: 3dn8GZ
+.. section: Library
+
+Accepted range for the *bytes_per_sep* argument of :meth:`bytes.hex`,
+:meth:`bytearray.hex`, :meth:`memoryview.hex`, and :func:`binascii.b2a_hex`
+is now increased, so passing ``sys.maxsize`` and ``-sys.maxsize`` is now
+valid.
+
+..
+
+.. date: 2026-03-28-13-19-20
+.. gh-issue: 146080
+.. nonce: srN12a
+.. section: Library
+
+:mod:`ssl`: fix a crash when an SNI callback tries to use an SSL object that
+has already been garbage-collected. Patch by Bénédikt Tran.
+
+..
+
+.. date: 2026-03-28-12-20-19
+.. gh-issue: 146556
+.. nonce: Y8Eson
+.. section: Library
+
+Fix :func:`annotationlib.get_annotations` hanging indefinitely when called
+with ``eval_str=True`` on a callable that has a circular ``__wrapped__``
+chain (e.g. ``f.__wrapped__ = f``). Cycle detection using an id-based
+visited set now stops the traversal and falls back to the globals found so
+far, mirroring the approach of :func:`inspect.unwrap`.
+
+..
+
+.. date: 2026-03-28-12-05-34
+.. gh-issue: 146090
+.. nonce: wf9_ef
+.. section: Library
+
+:mod:`sqlite3`: fix a crash when :meth:`sqlite3.Connection.create_collation`
+fails with `SQLITE_BUSY <https://sqlite.org/rescode.html#busy>`__. Patch by
+Bénédikt Tran.
+
+..
+
+.. date: 2026-03-28-12-01-48
+.. gh-issue: 146090
+.. nonce: wh1qJR
+.. section: Library
+
+:mod:`sqlite3`: properly raise :exc:`MemoryError` instead of
+:exc:`SystemError` when a context callback fails to be allocated. Patch by
+Bénédikt Tran.
+
+..
+
+.. date: 2026-03-27-12-00-00
+.. gh-issue: 146507
+.. nonce: 1D95A7
+.. section: Library
+
+Make :meth:`asyncio.SelectorEventLoop` stream transport's
+:meth:`~asyncio.WriteTransport.get_write_buffer_size` O(1) by maintaining a
+running byte counter instead of iterating the buffer on every call.
+
+..
+
+.. date: 2026-03-26-14-51-55
+.. gh-issue: 145056
+.. nonce: QS-6l1
+.. section: Library
+
+Fix merging of :class:`collections.OrderedDict` and :class:`frozendict`.
+
+..
+
+.. date: 2026-03-26-14-44-07
+.. gh-issue: 145056
+.. nonce: L9KPC3
+.. section: Library
+
+Add support for merging :class:`collections.UserDict` and
+:class:`frozendict`.
+
+..
+
+.. date: 2026-03-26-11-04-42
+.. gh-issue: 145633
+.. nonce: RWjlaX
+.. section: Library
+
+Fix ``struct.pack('f', float)``: use :c:func:`PyFloat_Pack4` to raise
+:exc:`OverflowError`. Patch by Sergey B Kirpichev and Victor Stinner.
+
+..
+
+.. date: 2026-03-26-02-06-52
+.. gh-issue: 146440
+.. nonce: HXjhQO
+.. section: Library
+
+:mod:`json`: Add the *array_hook* parameter to :func:`~json.load` and
+:func:`~json.loads` functions: allow a callback for JSON literal array types
+to customize Python lists in the resulting decoded object. Passing combined
+:class:`frozendict` to *object_pairs_hook* param and :class:`tuple` to
+``array_hook`` will yield a deeply nested immutable Python structure
+representing the JSON data.
+
+..
+
+.. date: 2026-03-25-21-08-51
+.. gh-issue: 146431
+.. nonce: zERPwe
+.. section: Library
+
+Add the *wrapcol* parameter to :mod:`base64` functions
+:func:`~base64.b16encode`, :func:`~base64.b32encode`,
+:func:`~base64.b32hexencode`, :func:`~base64.b85encode` and
+:func:`~base64.z85encode`, and :mod:`binascii` functions
+:func:`~binascii.b2a_base32` and :func:`~binascii.b2a_base85`. Add the
+*ignorechars* parameter to :mod:`base64` functions
+:func:`~base64.b16decode`, :func:`~base64.b32decode`,
+:func:`~base64.b32hexdecode`, :func:`~base64.b85decode` and
+:func:`~base64.z85decode`, and :mod:`binascii` functions
+:func:`~binascii.a2b_hex`, :func:`~binascii.unhexlify`,
+:func:`~binascii.a2b_base32` and :func:`~binascii.a2b_base85`.
+
+..
+
+.. date: 2026-03-24-03-49-50
+.. gh-issue: 146310
+.. nonce: WhlDir
+.. section: Library
+
+The :mod:`ensurepip` module no longer looks for ``pip-*.whl`` wheel packages
+in the current directory.
+
+..
+
+.. date: 2026-03-21-16-03-16
+.. gh-issue: 141510
+.. nonce: tKptA7
+.. section: Library
+
+Support :class:`frozendict` in :mod:`plistlib`, for serialization only.
+Patch by Hugo van Kemenade.
+
+..
+
+.. date: 2026-03-21-10-02-20
+.. gh-issue: 146238
+.. nonce: 2WpMOj
+.. section: Library
+
+Support half-floats (type code ``'e'`` of the :mod:`struct` module) in the
+:mod:`array` module. Patch by Sergey B Kirpichev.
+
+..
+
+.. date: 2026-03-21-08-23-26
+.. gh-issue: 140947
+.. nonce: owZ4r_
+.. section: Library
+
+Fix incorrect contextvars handling in server tasks created by
+:mod:`asyncio`. Patch by Kumar Aditya.
+
+..
+
+.. date: 2026-03-21-06-21-38
+.. gh-issue: 146151
+.. nonce: yNpgml
+.. section: Library
+
+Support the :c:expr:`float complex` and :c:expr:`double complex` C types in
+the :mod:`array` module: formatting characters ``'F'`` and ``'D'``
+respectively. Patch by Sergey B Kirpichev.
+
+..
+
+.. date: 2026-03-20-16-17-31
+.. gh-issue: 143387
+.. nonce: 9Waopa
+.. section: Library
+
+In importlib.metadata, when a distribution file is corrupt and there is no
+metadata file, calls to ``Distribution.metadata()`` (including implicit
+calls from other properties like ``.name`` and ``.requires``) will now raise
+a ``MetadataNotFound`` Exception. This allows callers to distinguish between
+missing metadata and a degenerate (empty) metadata. Previously, if the file
+was missing, an empty ``PackageMetadata`` would be returned and would be
+indistinguishable from the presence of an empty file.
+
+..
+
+.. date: 2026-03-20-14-53-00
+.. gh-issue: 146228
+.. nonce: OJVEDL
+.. section: Library
+
+Cached FastPath objects in importlib.metadata are now cleared on fork,
+avoiding broken references to zip files during fork.
+
+..
+
+.. date: 2026-03-20-00-28-00
+.. gh-issue: 146171
+.. nonce: P5Jk2R7v
+.. section: Library
+
+Nested :exc:`AttributeError` suggestions now include property-backed
+attributes on nested objects without executing the property getter.
+
+..
+
+.. date: 2026-03-18-23-54-36
+.. gh-issue: 145410
+.. nonce: NvLWj5
+.. section: Library
+
+On Windows, :func:`sysconfig.get_platform` now gets the platform from the
+``_sysconfig`` module instead of parsing :data:`sys.version` string. Patch
+by Victor Stinner.
+
+..
+
+.. date: 2026-03-18-16-58-17
+.. gh-issue: 146091
+.. nonce: lBbo1L
+.. section: Library
+
+Fix a bug in :func:`termios.tcsetwinsize` where passing a sequence that
+raises an exception in ``__getitem__`` would cause a :exc:`SystemError`
+instead of propagating the original exception.
+
+..
+
+.. date: 2026-03-17-20-52-24
+.. gh-issue: 146083
+.. nonce: NxZa_c
+.. section: Library
+
+Update bundled `libexpat <https://libexpat.github.io/>`_ to version 2.7.5.
+
+..
+
+.. date: 2026-03-17-20-41-27
+.. gh-issue: 146076
+.. nonce: yoBNnB
+.. section: Library
+
+:mod:`zoneinfo`: fix crashes when deleting ``_weak_cache`` from a
+:class:`zoneinfo.ZoneInfo` subclass.
+
+..
+
+.. date: 2026-03-17-19-51-05
+.. gh-issue: 123471
+.. nonce: oY4UR5
+.. section: Library
+
+Make concurrent iteration over :class:`itertools.zip_longest` safe under
+free-threading.
+
+..
+
+.. date: 2026-03-17-19-30-45
+.. gh-issue: 146075
+.. nonce: 85sCSh
+.. section: Library
+
+Errors when calling :func:`functools.partial` with a malformed keyword will
+no longer crash the interpreter.
+
+..
+
+.. date: 2026-03-17-11-46-20
+.. gh-issue: 146054
+.. nonce: udYcqn
+.. section: Library
+
+Limit the size of :func:`encodings.search_function` cache. Found by OSS Fuzz
+in :oss-fuzz:`493449985`.
+
+..
+
+.. date: 2026-03-16-00-00-00
+.. gh-issue: 146004
+.. nonce: xOptProp
+.. section: Library
+
+All :option:`-X` options from the Python command line are now propagated to
+child processes spawned by :mod:`multiprocessing`, not just a hard-coded
+subset. This makes the behavior consistent between default "spawn" and
+"forkserver" start methods and the old "fork" start method. The options
+that were previously not propagated are: ``context_aware_warnings``,
+``cpu_count``, ``disable-remote-debug``, ``int_max_str_digits``,
+``lazy_imports``, ``no_debug_ranges``, ``pathconfig_warnings``, ``perf``,
+``perf_jit``, ``presite``, ``pycache_prefix``, ``thread_inherit_context``,
+and ``warn_default_encoding``.
+
+..
+
+.. date: 2026-03-15-16-38-48
+.. gh-issue: 145980
+.. nonce: mRze5H
+.. section: Library
+
+Added the *alphabet* parameter in :func:`~binascii.b2a_base64`,
+:func:`~binascii.a2b_base64`, :func:`~binascii.b2a_base85` and
+:func:`~binascii.a2b_base85` and a number of ``*_ALPHABET`` constants in the
+:mod:`binascii` module. Removed :func:`!b2a_z85` and :func:`!a2b_z85`.
+
+..
+
+.. date: 2026-03-15-10-17-51
+.. gh-issue: 145968
+.. nonce: gZexry
+.. section: Library
+
+Fix translation in :func:`base64.b64decode` when altchars overlaps with the
+standard ones.
+
+..
+
+.. date: 2026-03-15-00-00-00
+.. gh-issue: 145966
+.. nonce: tCI0uD4I
+.. section: Library
+
+Non-:exc:`AttributeError` exceptions raised during dialect attribute lookup
+in :mod:`csv` are no longer silently suppressed.
+
+..
+
+.. date: 2026-03-12-21-01-48
+.. gh-issue: 145883
+.. nonce: lUvXcc
+.. section: Library
+
+:mod:`zoneinfo`: Fix heap buffer overflow reads from malformed TZif data.
+Found by OSS Fuzz, issues :oss-fuzz:`492245058` and :oss-fuzz:`492230068`.
+
+..
+
+.. date: 2026-03-12-12-17-39
+.. gh-issue: 145850
+.. nonce: uW3stt
+.. section: Library
+
+Changed some implementation details in :class:`struct.Struct`: calling it
+with non-ASCII string format will now raise a :exc:`ValueError` instead of
+:exc:`UnicodeEncodeError`, calling it with non-ASCII bytes format will now
+raise a :exc:`ValueError` instead of :exc:`struct.error`, getting the
+:attr:`!format` attribute of uninitialized object will now raise an
+:exc:`AttributeError` instead of :exc:`RuntimeError`.
+
+..
+
+.. date: 2026-03-11-10-25-32
+.. gh-issue: 123720
+.. nonce: TauFRx
+.. section: Library
+
+asyncio: Fix :func:`asyncio.Server.serve_forever` shutdown regression. Since
+3.12, cancelling ``serve_forever()`` could hang waiting for a handler
+blocked on a read from a client that never closed (effectively requiring two
+interrupts to stop); the shutdown sequence now ensures client streams are
+closed so ``serve_forever()`` exits promptly and handlers observe EOF.
+
+..
+
+.. date: 2026-03-10-19-50-59
+.. gh-issue: 138122
+.. nonce: CsoBEo
+.. section: Library
+
+The ``profiling.sampling`` module now supports differential flamegraph
+visualization via ``--diff-flamegraph`` to compare two profiling runs.
+Functions are colored red (regressions), blue (improvements), gray
+(neutral), or purple (new). Elided stacks show code paths that disappeared
+between runs.
+
+..
+
+.. date: 2026-03-10-14-57-15
+.. gh-issue: 145754
+.. nonce: YBL5Ko
+.. section: Library
+
+Request signature during mock autospec with ``FORWARDREF`` annotation
+format. This prevents runtime errors when an annotation uses a name that is
+not defined at runtime.
+
+..
+
+.. date: 2026-03-10-14-13-12
+.. gh-issue: 145750
+.. nonce: iQsTeX
+.. section: Library
+
+Avoid undefined behaviour from signed integer overflow when parsing format
+strings in the :mod:`struct` module. Found by OSS Fuzz in
+:oss-fuzz:`488466741`.
+
+..
+
+.. date: 2026-03-10-01-54-34
+.. gh-issue: 145719
+.. nonce: okJRoK
+.. section: Library
+
+Add ``application/efi`` MIME type to :mod:`mimetypes`.
+
+..
+
+.. date: 2026-03-10-01-48-12
+.. gh-issue: 145717
+.. nonce: dPc0Rt
+.. section: Library
+
+Add a few Microsoft-specific MIME types.
+
+..
+
+.. date: 2026-03-09-19-59-05
+.. gh-issue: 145703
+.. nonce: 4EEP7J
+.. section: Library
+
+:mod:`asyncio`: Make sure that :meth:`loop.call_at <asyncio.loop.call_at>`
+and :meth:`loop.call_later <asyncio.loop.call_later>` trigger scheduled
+events on time when the clock resolution becomes too small.
+
+..
+
+.. date: 2026-03-09-18-33-16
+.. gh-issue: 145697
+.. nonce: d6hFmm
+.. section: Library
+
+Add ``application/sql`` and ``application/vnd.sqlite3`` into ``mimetypes``.
+
+..
+
+.. date: 2026-03-09-00-00-00
+.. gh-issue: 145492
+.. nonce: 457Afc
+.. section: Library
+
+Fix infinite recursion in :class:`collections.defaultdict` ``__repr__`` when
+a ``defaultdict`` contains itself. Based on analysis by KowalskiThomas in
+:gh:`145492`.
+
+..
+
+.. date: 2026-03-08-00-00-00
+.. gh-issue: 145650
+.. nonce: LgRepr
+.. section: Library
+
+Add :meth:`~object.__repr__` support to :class:`logging.Formatter` and
+:class:`logging.Filter`, showing the format string and filter name
+respectively.
+
+..
+
+.. date: 2026-03-07-14-34-39
+.. gh-issue: 145587
+.. nonce: flFQ5-
+.. section: Library
+
+Resolved a performance regression in ``multiprocessing.connection.wait`` on
+Windows that caused infinite busy loops when called with no objects. The
+function now properly yields control to the OS to conserve CPU resources.
+Patch By Shrey Naithani
+
+..
+
+.. date: 2026-03-07-02-44-52
+.. gh-issue: 145616
+.. nonce: x8Mf23
+.. section: Library
+
+Detect Android sysconfig ABI correctly on 32-bit ARM Android on 64-bit ARM
+kernel
+
+..
+
+.. date: 2026-03-05-14-13-10
+.. gh-issue: 145546
+.. nonce: 3tnlxx
+.. section: Library
+
+Fix ``unittest.util.sorted_list_difference()`` to deduplicate remaining
+elements when one input list is exhausted before the other.
+
+..
+
+.. date: 2026-03-03-23-21-40
+.. gh-issue: 145446
+.. nonce: 0c-TJX
+.. section: Library
+
+Now :mod:`functools` is safer in free-threaded build when using keywords in
+:func:`functools.partial`
+
+..
+
+.. date: 2026-02-26-20-13-16
+.. gh-issue: 145264
+.. nonce: 4pggX_
+.. section: Library
+
+Base64 decoder (see :func:`binascii.a2b_base64`, :func:`base64.b64decode`,
+etc) no longer ignores excess data after the first padded quad in non-strict
+(default) mode. Instead, in conformance with :rfc:`4648`, section 3.3, it
+now ignores the pad character, "=", if it is present before the end of the
+encoded data.
+
+..
+
+.. date: 2026-02-23-21-28-12
+.. gh-issue: 145035
+.. nonce: J5UjS6
+.. section: Library
+
+Allows omitting the internal library ``_pyrepl`` with limited loss of
+functionality. This allows complete removal of the modern REPL, which is an
+unsupported configuration, but still desirable for some distributions.
+
+..
+
+.. date: 2026-02-19-16-34-18
+.. gh-issue: 144270
+.. nonce: wJRtSr
+.. section: Library
+
+Made the *tag* parameter of :class:`xml.etree.ElementTree.Element` and the
+*parent* and *tag* parameters of :func:`xml.etree.ElementTree.SubElement`
+positional-only, matching the behavior of the C accelerator.
+
+..
+
+.. date: 2026-02-19-12-00-00
+.. gh-issue: 144984
+.. nonce: b93995c982
+.. section: Library
+
+Fix crash in :meth:`xml.parsers.expat.xmlparser.ExternalEntityParserCreate`
+when an allocation fails. The error paths could dereference NULL
+``handlers`` and double-decrement the parent parser's reference count.
+
+..
+
+.. date: 2026-02-18-21-45-00
+.. gh-issue: 144975
+.. nonce: Ab3XyZ
+.. section: Library
+
+:meth:`wave.Wave_write.setframerate` now validates the frame rate after
+rounding to an integer, preventing values like ``0.5`` from being accepted
+and causing confusing errors later. Patch by Michiel Beijen.
+
+..
+
+.. date: 2026-02-17-03-43-07
+.. gh-issue: 140715
+.. nonce: twmcM_
+.. section: Library
+
+Add ``%n`` and ``%t`` support to :meth:`~datetime.datetime.strptime`.
+
+..
+
+.. date: 2026-02-11-21-01-30
+.. gh-issue: 144259
+.. nonce: OAhOR8
+.. section: Library
+
+Fix inconsistent display of long multiline pasted content in the REPL.
+
+..
+
+.. date: 2026-02-08-22-04-06
+.. gh-issue: 140814
+.. nonce: frzSpn
+.. section: Library
+
+:func:`multiprocessing.freeze_support` no longer sets the default start
+method as a side effect, which previously caused a subsequent
+:func:`multiprocessing.set_start_method` call to raise :exc:`RuntimeError`.
+
+..
+
+.. date: 2026-02-04-20-30-59
+.. gh-issue: 123471
+.. nonce: 1dnPvs
+.. section: Library
+
+Make concurrent iteration over :class:`itertools.accumulate` safe under
+free-threading.
+
+..
+
+.. date: 2026-01-10-16-23-21
+.. gh-issue: 143715
+.. nonce: HZrfSA
+.. section: Library
+
+Calling the ``Struct.__new__()`` without required argument now is
+deprecated. Calling :meth:`~object.__init__` method on initialized
+:class:`~struct.Struct` objects is deprecated.
+
+..
+
+.. date: 2025-12-18-00-00-00
+.. gh-issue: 142763
+.. nonce: AJpZPVG5
+.. section: Library
+
+Fix a race condition between :class:`zoneinfo.ZoneInfo` creation and
+:func:`zoneinfo.ZoneInfo.clear_cache` that could raise :exc:`KeyError`.
+
+..
+
+.. date: 2025-11-18-06-35-53
+.. gh-issue: 141707
+.. nonce: DBmQIy
+.. section: Library
+
+Don't change :class:`tarfile.TarInfo` type from ``AREGTYPE`` to ``DIRTYPE``
+when parsing GNU long name or link headers.
+
+..
+
+.. date: 2025-11-15-23-14-30
+.. gh-issue: 138577
+.. nonce: KbShrt
+.. section: Library
+
+:func:`getpass.getpass` with non-empty ``echo_char`` now handles keyboard
+shortcuts including Ctrl+A/E (cursor movement), Ctrl+K/U (kill line), Ctrl+W
+(erase word), and Ctrl+V (literal next) by reading the terminal's control
+character settings and processing them appropriately in non-canonical mode.
+Patch by Sanyam Khurana.
+
+..
+
+.. date: 2025-10-13-16-43-36
+.. gh-issue: 140049
+.. nonce: VvmAzN
+.. section: Library
+
+:func:`traceback.format_exception_only` now colorizes exception notes.
+
+..
+
+.. date: 2025-10-11-11-50-59
+.. gh-issue: 139933
+.. nonce: 05MHlx
+.. section: Library
+
+Improve :exc:`AttributeError` suggestions for classes with a custom
+:meth:`~object.__dir__` method returning a list of unsortable values. Patch
+by Bénédikt Tran.
+
+..
+
+.. date: 2025-10-05-15-38-02
+.. gh-issue: 139633
+.. nonce: l3P839
+.. section: Library
+
+The :mod:`netrc` security check is now run once per parse rather than once
+per entry.
+
+..
+
+.. date: 2025-09-19-13-54-54
+.. gh-issue: 130472
+.. nonce: LODfdk
+.. section: Library
+
+Add fancycompleter and enable it by default when using pyrepl. This gives
+colored tab completion.
+
+..
+
+.. date: 2025-02-07-00-48-07
+.. gh-issue: 112632
+.. nonce: 95MM0C
+.. section: Library
+
+Add an *expand* keyword argument for :func:`pprint.pprint`,
+:func:`pprint.pformat`, :func:`pprint.pp` by passing on all *kwargs* and
+:class:`pprint.PrettyPrinter`. Contributed by Stefan Todoran and Semyon
+Moroz.
+
+..
+
+.. date: 2024-09-25-12-47-50
+.. gh-issue: 66419
+.. nonce: DVSukU
+.. section: Library
+
+Optional argument with :ref:`nargs` equals to ``argparse.REMAINDER`` now
+consumes all remaining arguments including ``'--'``.
+
+..
+
+.. date: 2023-03-10-13-10-06
+.. gh-issue: 60729
+.. nonce: KCCHTe
+.. section: Library
+
+Add support for floating point audio wave files in :mod:`wave`.
+
+..
+
+.. bpo: 36461
+.. date: 2019-04-25-21-11-37
+.. nonce: TO5YyP
+.. section: Library
+
+Make the target time of :meth:`timeit.Timer.autorange` configurable and add
+``--target-time`` option to the command-line interface of :mod:`timeit`.
+
+..
+
+.. date: 2026-03-25-00-00-00
+.. gh-issue: 126676
+.. nonce: 052336
+.. section: Documentation
+
+Expand :mod:`argparse` documentation for ``type=bool`` with a demonstration
+of the surprising behavior and pointers to common alternatives.
+
+..
+
+.. date: 2026-03-09-00-00-00
+.. gh-issue: 145649
+.. nonce: 8BcbAB
+.. section: Documentation
+
+Fix text wrapping and formatting of ``-X`` option descriptions in the
+:manpage:`python(1)` man page by using proper roff markup.
+
+..
+
+.. date: 2026-04-03-21-37-18
+.. gh-issue: 144418
+.. nonce: PusC0S
+.. section: Tests
+
+The Android testbed's emulator RAM has been increased from 2 GB to 4 GB.
+
+..
+
+.. date: 2026-03-24-00-15-58
+.. gh-issue: 146202
+.. nonce: LgH6Bj
+.. section: Tests
+
+Fix a race condition in regrtest: make sure that the temporary directory is
+created in the worker process. Previously, temp_cwd() could fail on Windows
+if the "build" directory was not created. Patch by Victor Stinner.
+
+..
+
+.. date: 2026-03-28-02-48-51
+.. gh-issue: 146541
+.. nonce: k-zlM6
+.. section: Build
+
+The Android testbed can now be built for 32-bit ARM and x86 targets.
+
+..
+
+.. date: 2026-03-27-06-55-10
+.. gh-issue: 146498
+.. nonce: uOiCab
+.. section: Build
+
+The iOS XCframework build script now ensures libpython isn't included in
+installed app content, and is more robust in identifying standard library
+binary content that requires processing.
+
+..
+
+.. date: 2026-03-26-14-35-29
+.. gh-issue: 146450
+.. nonce: 9Kmp5Q
+.. section: Build
+
+The Android build script was modified to improve parity with other platform
+build scripts.
+
+..
+
+.. date: 2026-03-26-12-48-42
+.. gh-issue: 146446
+.. nonce: 0GyMu4
+.. section: Build
+
+The clean target for the Apple/iOS XCframework build script is now more
+selective when targeting a single architecture.
+
+..
+
+.. date: 2026-03-26-12-27-42
+.. gh-issue: 146444
+.. nonce: JKJuEa
+.. section: Build
+
+The Apple/iOS build script has been moved to the Platforms directory.
+
+..
+
+.. date: 2026-03-23-20-06-35
+.. gh-issue: 146210
+.. nonce: C01Rmq
+.. section: Build
+
+Fix building the jit stencils on Windows when the interpreter is built with
+a different clang version. Patch by Chris Eibl.
+
+..
+
+.. date: 2026-03-12-12-30-24
+.. gh-issue: 145844
+.. nonce: VOPeCU
+.. section: Build
+
+Update to WASI SDK 32.
+
+..
+
+.. date: 2026-03-11-11-58-42
+.. gh-issue: 145801
+.. nonce: iCXa3v
+.. section: Build
+
+When Python build is optimized with GCC using PGO, use
+``-fprofile-update=atomic`` option to use atomic operations when updating
+profile information. This option reduces the risk of gcov Data Files (.gcda)
+corruption which can cause random GCC crashes. Patch by Victor Stinner.
+
+..
+
+.. date: 2026-03-10-16-58-55
+.. gh-issue: 138850
+.. nonce: CkqTw6
+.. section: Build
+
+Add :option:`--disable-epoll` to ``configure``
+
+..
+
+.. date: 2026-03-08-06-18-26
+.. gh-issue: 145633
+.. nonce: Ogu-RF
+.. section: Build
+
+Remove support for ancient ARM platforms (ARMv4L and ARMv5L OABI boards),
+using mixed-endian representation for doubles. Patch by Sergey B Kirpichev.
+
+..
+
+.. date: 2026-01-08-22-27-07
+.. gh-issue: 85277
+.. nonce: TotySi
+.. section: Build
+
+Fix building without ``stropts.h`` or empty ``stropts.h``
+
+..
+
+.. date: 2025-10-19-23-44-46
+.. gh-issue: 140131
+.. nonce: AABF2k
+.. section: Windows
+
+Fix REPL cursor position on Windows when module completion suggestion line
+hits console width.
+
+..
+
+.. date: 2025-10-17-01-07-03
+.. gh-issue: 137586
+.. nonce: kVzxvp
+.. section: macOS
+
+Invoke :program:`osascript` with absolute path in :mod:`webbrowser` and
+:mod:`!turtledemo`.
+
+..
+
+.. date: 2026-03-22-00-00-00
+.. gh-issue: 135953
+.. nonce: IptOwg
+.. section: Tools/Demos
+
+Properly identify the main thread in the Gecko profiler collector by using a
+status flag from the interpreter state instead of relying on
+:func:`threading.main_thread` in the collector process.
+
+..
+
+.. date: 2026-03-15-20-59-29
+.. gh-issue: 145976
+.. nonce: rEdUI-
+.. section: Tools/Demos
+
+Remove :file:`Misc/indent.pro`, a configuration file for GNU
+:manpage:`indent(1)`.
+
+..
+
+.. date: 2026-03-15-11-32-35
+.. gh-issue: 145976
+.. nonce: mqhzmB
+.. section: Tools/Demos
+
+Remove :file:`Misc/vgrindefs` and :file:`Misc/Porting`.
+
+..
+
+.. date: 2026-03-31-13-33-41
+.. gh-issue: 146636
+.. nonce: 5do3wt
+.. section: C API
+
+The :c:data:`Py_mod_abi` slot is now mandatory for modules created from a
+slots array (using :c:func:`PyModule_FromSlotsAndSpec` or the
+:c:func:`PyModExport_* <PyModExport_modulename>` export hook).
+
+..
+
+.. date: 2026-03-19-16-50-27
+.. gh-issue: 146175
+.. nonce: pISQGX
+.. section: C API
+
+The following macros are :term:`soft deprecated`: :c:macro:`Py_ALIGNED`,
+:c:macro:`PY_FORMAT_SIZE_T`, :c:macro:`Py_LL`, :c:macro:`Py_ULL`,
+:c:macro:`PY_LONG_LONG`, :c:macro:`PY_LLONG_MIN`, :c:macro:`PY_LLONG_MAX`,
+:c:macro:`PY_ULLONG_MAX`, :c:macro:`PY_INT32_T`, :c:macro:`PY_UINT32_T`,
+:c:macro:`PY_INT64_T`, :c:macro:`PY_UINT64_T`, :c:macro:`PY_SIZE_MAX`,
+:c:macro:`Py_UNICODE_SIZE`, :c:macro:`Py_VA_COPY`.
+
+The macro :c:macro:`Py_UNICODE_WIDE`, which was scheduled for removal, is
+:term:`soft deprecated` instead.
+
+..
+
+.. date: 2026-03-18-23-44-29
+.. gh-issue: 146143
+.. nonce: pwIrJq
+.. section: C API
+
+:c:func:`PyUnicodeWriter_WriteUCS4` now accepts a pointer to a constant
+buffer of ``Py_UCS4``.
+
+..
+
+.. date: 2026-03-18-20-18-59
+.. gh-issue: 146056
+.. nonce: nnZIgp
+.. section: C API
+
+:c:func:`PyUnicodeWriter_WriteRepr` now supports ``NULL`` argument.
+
+..
+
+.. date: 2026-02-19-18-39-11
+.. gh-issue: 145010
+.. nonce: mKzjci
+.. section: C API
+
+Use GCC dialect alternatives for inline assembly in ``object.h`` so that the
+Python headers compile correctly with ``-masm=intel``.
+++ /dev/null
-Fix building without ``stropts.h`` or empty ``stropts.h``
+++ /dev/null
-Remove support for ancient ARM platforms (ARMv4L and ARMv5L OABI boards),
-using mixed-endian representation
-for doubles. Patch by Sergey B Kirpichev.
+++ /dev/null
-Add :option:`--disable-epoll` to ``configure``
+++ /dev/null
-When Python build is optimized with GCC using PGO, use
-``-fprofile-update=atomic`` option to use atomic operations when updating
-profile information. This option reduces the risk of gcov Data Files (.gcda)
-corruption which can cause random GCC crashes. Patch by Victor Stinner.
+++ /dev/null
-Update to WASI SDK 32.
+++ /dev/null
-Fix building the jit stencils on Windows when the interpreter is built with
-a different clang version. Patch by Chris Eibl.
+++ /dev/null
-The Apple/iOS build script has been moved to the Platforms directory.
+++ /dev/null
-The clean target for the Apple/iOS XCframework build script is now more
-selective when targeting a single architecture.
+++ /dev/null
-The Android build script was modified to improve parity with other platform
-build scripts.
+++ /dev/null
-The iOS XCframework build script now ensures libpython isn't included in
-installed app content, and is more robust in identifying standard library
-binary content that requires processing.
+++ /dev/null
-The Android testbed can now be built for 32-bit ARM and x86 targets.
+++ /dev/null
-Use GCC dialect alternatives for inline assembly in ``object.h`` so that the
-Python headers compile correctly with ``-masm=intel``.
+++ /dev/null
-:c:func:`PyUnicodeWriter_WriteRepr` now supports ``NULL`` argument.
+++ /dev/null
-:c:func:`PyUnicodeWriter_WriteUCS4` now accepts a pointer to a constant buffer
-of ``Py_UCS4``.
+++ /dev/null
-The following macros are :term:`soft deprecated`:
-:c:macro:`Py_ALIGNED`,
-:c:macro:`PY_FORMAT_SIZE_T`,
-:c:macro:`Py_LL`, :c:macro:`Py_ULL`,
-:c:macro:`PY_LONG_LONG`, :c:macro:`PY_LLONG_MIN`, :c:macro:`PY_LLONG_MAX`,
-:c:macro:`PY_ULLONG_MAX`, :c:macro:`PY_INT32_T`, :c:macro:`PY_UINT32_T`,
-:c:macro:`PY_INT64_T`, :c:macro:`PY_UINT64_T`, :c:macro:`PY_SIZE_MAX`,
-:c:macro:`Py_UNICODE_SIZE`,
-:c:macro:`Py_VA_COPY`.
-
-The macro :c:macro:`Py_UNICODE_WIDE`, which was scheduled for removal, is
-:term:`soft deprecated` instead.
+++ /dev/null
-The :c:data:`Py_mod_abi` slot is now mandatory for modules created from a
-slots array (using :c:func:`PyModule_FromSlotsAndSpec` or the
-:c:func:`PyModExport_* <PyModExport_modulename>` export hook).
+++ /dev/null
-Add support for module attributes in the :term:`REPL` auto-completion of
-imports.
+++ /dev/null
-Fix an out of bounds read when a single NUL character is read from the standard input.
-Patch by Shamil Abdulaev.
+++ /dev/null
-Set frame pointers in ``x86_64-unknown-linux-gnu`` JIT code, allowing
-most native profilers and debuggers to unwind through them.
+++ /dev/null
-Fix a crash when calling :class:`SimpleNamespace.__replace__()
-<types.SimpleNamespace>` on non-namespace instances. Patch by Bénédikt Tran.
+++ /dev/null
-Add tracking to the JIT optimizer to determine whether a reference is uniquely owned or shared
+++ /dev/null
-Optimize ``_ITER_CHECK_RANGE`` and ``_ITER_CHECK_LIST`` in the JIT
+++ /dev/null
-Add :mod:`math.integer` to :term:`REPL` auto-completion of imports.
+++ /dev/null
-Eliminate redundant refcounting for ``MATCH_CLASS`` in the JIT.
+++ /dev/null
-In free-threaded build, fix race condition when calling :meth:`!__sizeof__` on a :class:`list`
+++ /dev/null
-Make :meth:`bytearray.resize` thread-safe in the free-threaded build by
-using a critical section and calling the lock-held variant of the resize
-function.
+++ /dev/null
-Improve scaling of type attribute lookups in the :term:`free-threaded build` by
-avoiding contention on the internal type lock.
+++ /dev/null
-Fix an unlikely crash in the parser when certain errors were erroneously not
-propagated. Found by OSS Fuzz in :oss-fuzz:`491369109`.
+++ /dev/null
-Improve scaling of :func:`classmethod` and :func:`staticmethod` calls in
-the free-threaded build by avoiding the descriptor ``__get__`` call.
+++ /dev/null
-Avoid a pathological case where repeated calls at a specific stack depth could be significantly slower.
+++ /dev/null
-Fix out-of-bounds access when invoking faulthandler on a CPython build
-compiled without support for VLAs.
+++ /dev/null
-Fix GC tracking in ``structseq.__replace__()``.
+++ /dev/null
-Support tracing from function entrypoints in the JIT. Patch by Ken Jin.
+++ /dev/null
-:exc:`AttributeError`\ s and :exc:`KeyError`\ s raised in :meth:`!keys` or :meth:`!__getitem__`
-during dictionary unpacking (``{**mymapping}`` or ``func(**mymapping)``) are
-no longer masked by :exc:`TypeError`.
+++ /dev/null
-``python --help-xoptions`` is now sorted by ``-X`` option name.
+++ /dev/null
-``python --help-env`` sections are now sorted by environment variable name.
+++ /dev/null
-Fix free-threading scaling bottleneck in :func:`sys.intern` and
-:c:func:`PyObject_SetAttr` by avoiding the interpreter-wide lock when the string
-is already interned and immortalized.
+++ /dev/null
-Fixed ``sys.lazy_modules`` to include lazy modules without submodules. Patch by Bartosz Sławecki.
+++ /dev/null
-Fix :func:`repr` for lists and tuples containing ``NULL``\ s.
+++ /dev/null
-Fixed segmentation fault when called repr for BaseExceptionGroup with empty
-or 1-size tuple args.
+++ /dev/null
-Improve multithreaded scaling of PyMutex in low-contention scenarios by reloading the lock's internal state, without slowing down high-contention scenarios.
+++ /dev/null
-Add Base32 support to :mod:`binascii` and improve the performance of the
-Base32 converters in :mod:`base64`. Patch by James Seo.
+++ /dev/null
-Remove the ``GET_ITER_YIELD_FROM`` instruction, modifying ``SEND`` to pair
-with ``GET_ITER`` when compiling ``yield from`` expressions.
+++ /dev/null
-Comparison of code objects now handles errors correctly.
+++ /dev/null
-Fixed a bug where :meth:`select.epoll.close`, :meth:`select.kqueue.close`,\r
-and :meth:`select.devpoll.close` silently ignored errors.
+++ /dev/null
-Fix wrong type in ``_Py_atomic_load_uint16`` in the C11 atomics backend
-(``pyatomic_std.h``), which used a 32-bit atomic load instead of 16-bit.
-Found by Mohammed Zuhaib.
+++ /dev/null
-Fix potential Undefined Behavior in :c:func:`PyUnicodeWriter_WriteASCII` by
-adding a zero-length check. Patch by Shamil Abdulaev.
+++ /dev/null
-:class:`memoryview` now supports the :c:expr:`float complex` and
-:c:expr:`double complex` C types: formatting characters ``'F'`` and ``'D'``
-respectively. Patch by Sergey B Kirpichev.
+++ /dev/null
-Fixed reference leaks in :mod:`socket` when audit hooks raise exceptions in :func:`socket.getaddrinfo` and :meth:`!socket.sendto`.
+++ /dev/null
-Fixed a memory leak in :exc:`SyntaxError` when re-initializing it.
+++ /dev/null
-Fix a bug which could cause constant values to be partially corrupted in
-AArch64 JIT code. This issue is theoretical, and hasn't actually been
-observed in unmodified Python interpreters.
+++ /dev/null
-Optimize float arithmetic in the JIT by mutating uniquely-referenced
-operands in place, avoiding allocation of a new float object. Speeds up
-the pyperformance ``nbody`` benchmark by ~19%.
+++ /dev/null
-Fixed multiple error handling issues in the :mod:`!_remote_debugging` module
-including a double-free in code object caching, memory leaks on allocation
-failure, missing exception checks in binary format varint decoding, reference
-leaks on error paths in frame chain processing, and inconsistent thread status
-error reporting across platforms. Patch by Pablo Galindo.
+++ /dev/null
-Ensure ``-X lazy_imports=none``` and ``PYTHON_LAZY_IMPORTS=none``` override
-``__lazy_modules__``. Patch by Hugo van Kemenade.
+++ /dev/null
-Adds a null check to handle when the JIT optimizer runs out of space when dealing with contradictions in ``make_bottom``.
+++ /dev/null
-Set frame pointers in ``aarch64-unknown-linux-gnu`` JIT code, allowing most native profilers and debuggers to unwind through them. Patch by Diego Russo
+++ /dev/null
-Fix type slot assignment incase of multiple slots for same name in type object implementation. Patch by Kumar Aditya.
+++ /dev/null
-Optimize compact integer arithmetic in the JIT by mutating
-uniquely-referenced operands in place, avoiding allocation of a new int
-object. Speeds up the pyperformance ``spectral_norm`` benchmark by ~10%.
+++ /dev/null
-Fix a crash in :meth:`~object.__get__` for :c:expr:`METH_METHOD` descriptors
-when an invalid (non-type) object is passed as the second argument.
-Patch by Steven Sun.
+++ /dev/null
-Allow the *count* argument of :meth:`bytes.replace` to be a keyword.
+++ /dev/null
-Make :c:func:`PySet_Contains` attempt a lock-free lookup, similar to
-:meth:`!set.__contains__`. This avoids acquiring the set object mutex in the
-normal case.
+++ /dev/null
-Fix a bug that could cause applications with specific allocation patterns to
-leak memory via Huge Pages if compiled with Huge Page support. Patch by
-Pablo Galindo
+++ /dev/null
-Constant-fold ``_CONTAINS_OP_SET`` for :class:`frozenset`. Patch by Donghee Na.
+++ /dev/null
-Fix :func:`sys.set_lazy_imports_filter` so relative lazy imports pass the
-resolved imported module name to the filter callback. Patch by Pablo Galindo.
+++ /dev/null
-Cache ``pickle.dumps`` and ``pickle.loads`` per interpreter in the XIData
-framework, avoiding repeated module lookups on every cross-interpreter data
-transfer. This speeds up :class:`~concurrent.futures.InterpreterPoolExecutor`
-for mutable types (``list``, ``dict``) by 1.7x--3.3x.
+++ /dev/null
-Initialize ``_PyInterpreterFrame.visited`` when copying interpreter frames so
-incremental GC does not read an uninitialized byte from generator and
-frame-object copies.
+++ /dev/null
-Propagate result type and uniqueness information through
-``_BINARY_OP_EXTEND`` in the tier 2 optimizer, enabling elimination of
-downstream type guards and selection of inplace float operations.
+++ /dev/null
-Fix an unlikely crash when parsing an invalid type comments for function
-parameters. Found by OSS Fuzz in :oss-fuzz:`492782951`.
+++ /dev/null
-Fix text wrapping and formatting of ``-X`` option descriptions in the
-:manpage:`python(1)` man page by using proper roff markup.
+++ /dev/null
-Expand :mod:`argparse` documentation for ``type=bool`` with a demonstration
-of the surprising behavior and pointers to common alternatives.
+++ /dev/null
-Make the target time of :meth:`timeit.Timer.autorange` configurable\r
-and add ``--target-time`` option to the command-line interface of\r
-:mod:`timeit`.\r
+++ /dev/null
-Add support for floating point audio wave files in :mod:`wave`.
+++ /dev/null
-Optional argument with :ref:`nargs` equals to ``argparse.REMAINDER`` now
-consumes all remaining arguments including ``'--'``.
+++ /dev/null
-Add an *expand* keyword argument for :func:`pprint.pprint`,
-:func:`pprint.pformat`, :func:`pprint.pp` by passing on all *kwargs* and
-:class:`pprint.PrettyPrinter`. Contributed by Stefan Todoran and Semyon Moroz.
+++ /dev/null
-Add fancycompleter and enable it by default when using pyrepl. This gives colored tab completion.
+++ /dev/null
-The :mod:`netrc` security check is now run once per parse rather than once
-per entry.
+++ /dev/null
-Improve :exc:`AttributeError` suggestions for classes with a custom
-:meth:`~object.__dir__` method returning a list of unsortable values.
-Patch by Bénédikt Tran.
+++ /dev/null
-:func:`traceback.format_exception_only` now colorizes exception notes.
+++ /dev/null
-:func:`getpass.getpass` with non-empty ``echo_char`` now handles keyboard shortcuts
-including Ctrl+A/E (cursor movement), Ctrl+K/U (kill line), Ctrl+W (erase word),
-and Ctrl+V (literal next) by reading the terminal's control character settings
-and processing them appropriately in non-canonical mode. Patch by Sanyam Khurana.
+++ /dev/null
-Don't change :class:`tarfile.TarInfo` type from ``AREGTYPE`` to ``DIRTYPE`` when parsing
-GNU long name or link headers.
+++ /dev/null
-Fix a race condition between :class:`zoneinfo.ZoneInfo` creation and
-:func:`zoneinfo.ZoneInfo.clear_cache` that could raise :exc:`KeyError`.
+++ /dev/null
-Calling the ``Struct.__new__()`` without required argument now is deprecated.
-Calling :meth:`~object.__init__` method on initialized :class:`~struct.Struct`
-objects is deprecated.
+++ /dev/null
-Make concurrent iteration over :class:`itertools.accumulate` safe under free-threading.
+++ /dev/null
-:func:`multiprocessing.freeze_support` no longer sets the default start method
-as a side effect, which previously caused a subsequent
-:func:`multiprocessing.set_start_method` call to raise :exc:`RuntimeError`.
+++ /dev/null
-Fix inconsistent display of long multiline pasted content in the REPL.
+++ /dev/null
-Add ``%n`` and ``%t`` support to :meth:`~datetime.datetime.strptime`.
+++ /dev/null
-:meth:`wave.Wave_write.setframerate` now validates the frame rate after
-rounding to an integer, preventing values like ``0.5`` from being accepted
-and causing confusing errors later. Patch by Michiel Beijen.
+++ /dev/null
-Fix crash in :meth:`xml.parsers.expat.xmlparser.ExternalEntityParserCreate`\r
-when an allocation fails. The error paths could dereference NULL ``handlers``\r
-and double-decrement the parent parser's reference count.\r
+++ /dev/null
-Made the *tag* parameter of :class:`xml.etree.ElementTree.Element` and the
-*parent* and *tag* parameters of :func:`xml.etree.ElementTree.SubElement`
-positional-only, matching the behavior of the C accelerator.
+++ /dev/null
-Allows omitting the internal library ``_pyrepl`` with limited loss of
-functionality. This allows complete removal of the modern REPL, which is an
-unsupported configuration, but still desirable for some distributions.
+++ /dev/null
-Base64 decoder (see :func:`binascii.a2b_base64`, :func:`base64.b64decode`, etc) no
-longer ignores excess data after the first padded quad in non-strict
-(default) mode. Instead, in conformance with :rfc:`4648`, section 3.3, it now ignores
-the pad character, "=", if it is present before the end of the encoded data.
+++ /dev/null
-Now :mod:`functools` is safer in free-threaded build when using keywords in :func:`functools.partial`
+++ /dev/null
-Fix ``unittest.util.sorted_list_difference()`` to deduplicate remaining
-elements when one input list is exhausted before the other.
+++ /dev/null
-Detect Android sysconfig ABI correctly on 32-bit ARM Android on 64-bit ARM kernel
+++ /dev/null
-Resolved a performance regression in ``multiprocessing.connection.wait`` on Windows that caused infinite busy loops when called with no objects. The function now properly yields control to the OS to conserve CPU resources. Patch By Shrey Naithani
+++ /dev/null
-Add :meth:`~object.__repr__` support to :class:`logging.Formatter` and
-:class:`logging.Filter`, showing the format string and filter name
-respectively.
+++ /dev/null
-Fix infinite recursion in :class:`collections.defaultdict` ``__repr__``
-when a ``defaultdict`` contains itself. Based on analysis by KowalskiThomas
-in :gh:`145492`.
+++ /dev/null
-Add ``application/sql`` and ``application/vnd.sqlite3`` into ``mimetypes``.
+++ /dev/null
-:mod:`asyncio`: Make sure that :meth:`loop.call_at <asyncio.loop.call_at>` and
-:meth:`loop.call_later <asyncio.loop.call_later>` trigger scheduled events on
-time when the clock resolution becomes too small.
+++ /dev/null
-Add a few Microsoft-specific MIME types.
+++ /dev/null
-Add ``application/efi`` MIME type to :mod:`mimetypes`.
+++ /dev/null
-Avoid undefined behaviour from signed integer overflow when parsing format
-strings in the :mod:`struct` module. Found by OSS Fuzz in
-:oss-fuzz:`488466741`.
+++ /dev/null
-Request signature during mock autospec with ``FORWARDREF`` annotation format.
-This prevents runtime errors when an annotation uses a name that is not defined at runtime.
+++ /dev/null
-The ``profiling.sampling`` module now supports differential flamegraph
-visualization via ``--diff-flamegraph`` to compare two profiling runs.
-Functions are colored red (regressions), blue (improvements), gray (neutral),
-or purple (new). Elided stacks show code paths that disappeared between runs.
+++ /dev/null
-asyncio: Fix :func:`asyncio.Server.serve_forever` shutdown regression. Since
-3.12, cancelling ``serve_forever()`` could hang waiting for a handler blocked
-on a read from a client that never closed (effectively requiring two
-interrupts to stop); the shutdown sequence now ensures client streams are
-closed so ``serve_forever()`` exits promptly and handlers observe EOF.
+++ /dev/null
-Changed some implementation details in :class:`struct.Struct`: calling it
-with non-ASCII string format will now raise a :exc:`ValueError` instead of
-:exc:`UnicodeEncodeError`, calling it with non-ASCII bytes format will now
-raise a :exc:`ValueError` instead of :exc:`struct.error`, getting
-the :attr:`!format` attribute of uninitialized object will now raise an
-:exc:`AttributeError` instead of :exc:`RuntimeError`.
+++ /dev/null
-:mod:`zoneinfo`: Fix heap buffer overflow reads from malformed TZif data.
-Found by OSS Fuzz, issues :oss-fuzz:`492245058` and :oss-fuzz:`492230068`.
+++ /dev/null
-Non-:exc:`AttributeError` exceptions raised during dialect attribute lookup\r
-in :mod:`csv` are no longer silently suppressed.\r
+++ /dev/null
-Fix translation in :func:`base64.b64decode` when altchars overlaps with the
-standard ones.
+++ /dev/null
-Added the *alphabet* parameter in :func:`~binascii.b2a_base64`,
-:func:`~binascii.a2b_base64`, :func:`~binascii.b2a_base85` and
-:func:`~binascii.a2b_base85` and a number of ``*_ALPHABET`` constants in the
-:mod:`binascii` module. Removed :func:`!b2a_z85` and
-:func:`!a2b_z85`.
+++ /dev/null
-All :option:`-X` options from the Python command line are now propagated to
-child processes spawned by :mod:`multiprocessing`, not just a hard-coded
-subset. This makes the behavior consistent between default "spawn" and
-"forkserver" start methods and the old "fork" start method. The options
-that were previously not propagated are: ``context_aware_warnings``,
-``cpu_count``, ``disable-remote-debug``, ``int_max_str_digits``,
-``lazy_imports``, ``no_debug_ranges``, ``pathconfig_warnings``, ``perf``,
-``perf_jit``, ``presite``, ``pycache_prefix``, ``thread_inherit_context``,
-and ``warn_default_encoding``.
+++ /dev/null
-Limit the size of :func:`encodings.search_function` cache.
-Found by OSS Fuzz in :oss-fuzz:`493449985`.
+++ /dev/null
-Errors when calling :func:`functools.partial` with a malformed keyword will no longer crash the interpreter.
+++ /dev/null
-Make concurrent iteration over :class:`itertools.zip_longest` safe under free-threading.
+++ /dev/null
-:mod:`zoneinfo`: fix crashes when deleting ``_weak_cache`` from a
-:class:`zoneinfo.ZoneInfo` subclass.
+++ /dev/null
-Update bundled `libexpat <https://libexpat.github.io/>`_ to version 2.7.5.
+++ /dev/null
-Fix a bug in :func:`termios.tcsetwinsize` where passing a sequence that
-raises an exception in ``__getitem__`` would cause a :exc:`SystemError`
-instead of propagating the original exception.
+++ /dev/null
-On Windows, :func:`sysconfig.get_platform` now gets the platform from the
-``_sysconfig`` module instead of parsing :data:`sys.version` string. Patch
-by Victor Stinner.
+++ /dev/null
-Nested :exc:`AttributeError` suggestions now include property-backed
-attributes on nested objects without executing the property getter.
+++ /dev/null
-Cached FastPath objects in importlib.metadata are now cleared on fork,
-avoiding broken references to zip files during fork.
+++ /dev/null
-In importlib.metadata, when a distribution file is corrupt and there is no
-metadata file, calls to ``Distribution.metadata()`` (including implicit
-calls from other properties like ``.name`` and ``.requires``) will now raise
-a ``MetadataNotFound`` Exception. This allows callers to distinguish between
-missing metadata and a degenerate (empty) metadata. Previously, if the file
-was missing, an empty ``PackageMetadata`` would be returned and would be
-indistinguishable from the presence of an empty file.
+++ /dev/null
-Support the :c:expr:`float complex` and :c:expr:`double complex` C types
-in the :mod:`array` module: formatting characters ``'F'`` and ``'D'``
-respectively. Patch by Sergey B Kirpichev.
+++ /dev/null
-Fix incorrect contextvars handling in server tasks created by :mod:`asyncio`. Patch by Kumar Aditya.
+++ /dev/null
-Support half-floats (type code ``'e'`` of the :mod:`struct` module) in the
-:mod:`array` module. Patch by Sergey B Kirpichev.
+++ /dev/null
-Support :class:`frozendict` in :mod:`plistlib`, for serialization only.
-Patch by Hugo van Kemenade.
+++ /dev/null
-The :mod:`ensurepip` module no longer looks for ``pip-*.whl`` wheel packages
-in the current directory.
+++ /dev/null
-Add the *wrapcol* parameter to :mod:`base64` functions
-:func:`~base64.b16encode`, :func:`~base64.b32encode`,
-:func:`~base64.b32hexencode`, :func:`~base64.b85encode` and
-:func:`~base64.z85encode`, and :mod:`binascii` functions
-:func:`~binascii.b2a_base32` and :func:`~binascii.b2a_base85`. Add the
-*ignorechars* parameter to :mod:`base64` functions
-:func:`~base64.b16decode`, :func:`~base64.b32decode`,
-:func:`~base64.b32hexdecode`, :func:`~base64.b85decode` and
-:func:`~base64.z85decode`, and :mod:`binascii` functions
-:func:`~binascii.a2b_hex`, :func:`~binascii.unhexlify`,
-:func:`~binascii.a2b_base32` and :func:`~binascii.a2b_base85`.
+++ /dev/null
-:mod:`json`: Add the *array_hook* parameter to :func:`~json.load` and\r
-:func:`~json.loads` functions:\r
-allow a callback for JSON literal array types to customize Python lists in the\r
-resulting decoded object. Passing combined :class:`frozendict` to\r
-*object_pairs_hook* param and :class:`tuple` to ``array_hook`` will yield a\r
-deeply nested immutable Python structure representing the JSON data.\r
+++ /dev/null
-Fix ``struct.pack('f', float)``: use :c:func:`PyFloat_Pack4` to raise
-:exc:`OverflowError`. Patch by Sergey B Kirpichev and Victor Stinner.
+++ /dev/null
-Add support for merging :class:`collections.UserDict` and :class:`frozendict`.
+++ /dev/null
-Fix merging of :class:`collections.OrderedDict` and :class:`frozendict`.
+++ /dev/null
-Make :meth:`asyncio.SelectorEventLoop` stream transport's
-:meth:`~asyncio.WriteTransport.get_write_buffer_size` O(1) by maintaining a
-running byte counter instead of iterating the buffer on every call.
+++ /dev/null
-:mod:`sqlite3`: properly raise :exc:`MemoryError` instead of :exc:`SystemError`
-when a context callback fails to be allocated. Patch by Bénédikt Tran.
+++ /dev/null
-:mod:`sqlite3`: fix a crash when :meth:`sqlite3.Connection.create_collation`
-fails with `SQLITE_BUSY <https://sqlite.org/rescode.html#busy>`__. Patch by
-Bénédikt Tran.
+++ /dev/null
-Fix :func:`annotationlib.get_annotations` hanging indefinitely when called
-with ``eval_str=True`` on a callable that has a circular ``__wrapped__``
-chain (e.g. ``f.__wrapped__ = f``). Cycle detection using an id-based
-visited set now stops the traversal and falls back to the globals found
-so far, mirroring the approach of :func:`inspect.unwrap`.
+++ /dev/null
-:mod:`ssl`: fix a crash when an SNI callback tries to use an SSL object that
-has already been garbage-collected. Patch by Bénédikt Tran.
+++ /dev/null
-Accepted range for the *bytes_per_sep* argument of :meth:`bytes.hex`,
-:meth:`bytearray.hex`, :meth:`memoryview.hex`, and :func:`binascii.b2a_hex`
-is now increased, so passing ``sys.maxsize`` and ``-sys.maxsize`` is now
-valid.
+++ /dev/null
-:mod:`itertools`: Fix a crash in :func:`itertools.groupby` when\r
-the grouper iterator is concurrently mutated.\r
+++ /dev/null
-Add the *padded* parameter in functions related to Base32 and Base64 codecs
-in the :mod:`binascii` and :mod:`base64` modules.
-In the encoding functions it controls whether the pad character can be added
-in the output, in the decoding functions it controls whether padding is
-required in input.
-Padding of input no longer required in :func:`base64.urlsafe_b64decode`
-by default.
+++ /dev/null
-:func:`base64.b32encode` now always raises :exc:`ValueError` instead of
-:exc:`AssertionError` for the value of *map01* with invalid length.
+++ /dev/null
-Fix a regression introduced in 3.14.3 and 3.13.12 where the
-:mod:`multiprocessing` ``forkserver`` start method would fail with
-:exc:`BrokenPipeError` when the parent process had a very large
-:data:`sys.argv`. The argv is now passed to the forkserver as separate
-command-line arguments rather than being embedded in the ``-c`` command
-string, avoiding the operating system's per-argument length limit.
+++ /dev/null
-Reject leading dashes in URLs passed to :func:`webbrowser.open`.
+++ /dev/null
-Reject control characters in :class:`http.cookies.Morsel`
-:meth:`~http.cookies.Morsel.update` and
-:meth:`~http.cookies.BaseCookie.js_output`.
-This addresses :cve:`2026-3644`.
+++ /dev/null
-:mod:`xml.parsers.expat`: Fixed a crash caused by unbounded C recursion when
-converting deeply nested XML content models with
-:meth:`~xml.parsers.expat.xmlparser.ElementDeclHandler`.
-This addresses :cve:`2026-4224`.
+++ /dev/null
-Fix a race condition in regrtest: make sure that the temporary directory is
-created in the worker process. Previously, temp_cwd() could fail on Windows if
-the "build" directory was not created. Patch by Victor Stinner.
+++ /dev/null
-The Android testbed's emulator RAM has been increased from 2 GB to 4 GB.
+++ /dev/null
-Remove :file:`Misc/vgrindefs` and :file:`Misc/Porting`.
+++ /dev/null
-Remove :file:`Misc/indent.pro`, a configuration file for GNU
-:manpage:`indent(1)`.
+++ /dev/null
-Properly identify the main thread in the Gecko profiler collector by
-using a status flag from the interpreter state instead of relying on
-:func:`threading.main_thread` in the collector process.
+++ /dev/null
-Fix REPL cursor position on Windows when module completion suggestion line\r
-hits console width.\r
+++ /dev/null
-Invoke :program:`osascript` with absolute path in :mod:`webbrowser` and :mod:`!turtledemo`.
-This is Python version 3.15.0 alpha 7
+This is Python version 3.15.0 alpha 8
=====================================
.. image:: https://github.com/python/cpython/actions/workflows/build.yml/badge.svg?branch=main&event=push