chore(deps): update all dependencies #9
Loading…
Reference in a new issue
No description provided.
Delete branch "renovate/all"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
de0fac2→fbc6f390.1.5→0.1.82.1.0→2.3.02.4.6→2.5.19.0.3→9.1.19.0.3→9.1.10.15.14→0.16.00.15.14→0.16.00.0.39→0.0.650.25.1→0.27.0Release Notes
python/mypy (mypy)
v2.3.0Compare Source
v2.2.0Compare Source
numpy/numpy (numpy)
v2.5.1: (July 4, 2026)Compare Source
NumPy 2.5.1 Release Notes
The NumPy 2.5.1 is a patch release that fixes bugs discovered after the 2.5.0
release. The most noticeable is the fix is to the numpy datetime cython API
which should allow downstream to support NumPy versions older than 2.5.
Preparation for Python 3.15 continues along with typing improvements.
This release supports Python versions 3.12-3.14
Changes
The minimum supported GCC version has been updated from 9.3.0 to 10.3.0
(gh-31843)
Contributors
A total of 10 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
Pull requests merged
A total of 20 pull requests were merged for this release.
cython-linterrors (#31711)flatiter.__next__return type forobject_and...asarray([])(#31732)np.ma.masked_array2.5.0 regressionv2.5.0: (June 21, 2026)Compare Source
NumPy 2.5.0 Release Notes
Numpy 2.5.0 is a transitional release. It drops support for Python 3.11,
marking the end of distutils, and expires a large number of deprecations made
in the 2.0.x release. It also improves free threading and brings sorting into
compliance with the array-api standard with the addition of descending sorts.
There is also a fair amount of preparation for Python 3.15, which will be
supported starting with the first rc.
This release supports Python versions 3.12-3.14.
Highlights
See New Features below for other additions.
Deprecations
numpy.char.chararrayis deprecated. Use anndarraywith a string or bytes dtype instead.(gh-30605)
numpy.takenow correctly checks if the result can be cast to the providedout=outunder the same-kind rule. ADeprecationWarningis given nowwhen this check fails. Previously,
takeincorrectly checked ifoutcould be cast to the result (the wrong direction). This deprecation also
affects
compressand possibly other functions. (Future versions of NumPymay tighten the casting check further.)
(gh-30615)
The
numpy.char.[as]arrayfunctions are deprecated. Use annumpy.[as]arraywith a string or bytes dtype instead.(gh-30802)
Setting the dtype attribute is deprecated because mutating an array is unsafe
if an array is shared, especially by multiple threads. As an alternative,
you can create a view with a new dtype via
array.view(dtype=new_dtype).(gh-29244)
Setting the
shapeattribute is deprecated because mutating an array isunsafe if an array is shared, especially by multiple threads. As an
alternative, you can create a new view via
np.reshapeornp.ndarray.reshape. For example:x = np.arange(15); x = np.reshape(x, (3, 5)).To ensure no copy is made from the data, one can use
np.reshape(..., copy=False).While setting the shape on an array is discouraged, for cases where it is
difficult to work around, e.g., in
__array_finalize__, it is possiblewith the private method
np.ndarray._set_shape.(gh-29536)
Using the
genericunit innumpy.timedelta64is deprecated since thiscan lead to unexpected behavior such as non-transitive comparison, see
gh-28287 for details. As
an alternative, specify an explicit unit such as
's'(seconds) or'D'(days) when constructing
numpy.timedelta64. Due to this change, operationsthat implicitly rely on the
genericunit are also deprecated. Forexample:
1is implicitly converted to generic timedelta64(gh-29619)
Resizing a Numpy array in place is deprecated since mutating an array is
unsafe if an array is shared, especially by multiple threads. As an
alternative, you can create a resized array via
np.resize.(gh-30181)
numpy.fixis deprecated, usenumpy.truncinstead. It is faster andfollows the Array API standard. Both functions provide identical
functionality: rounding array elements towards zero.
(gh-30644)
numpy.ma.round_is deprecated.numpy.ma.roundcan be used as areplacement.
(gh-30738)
numpy.typenameis deprecated because the names returned by it wereoutdated and inconsistent.
numpy.dtype.namecan be used as areplacement.
(gh-30774)
Inputs other than integers are deprecated for
numpy.triu_indicesandnumpy.tril_indices. Non-integer values for theM,kandNparameters of
numpy.triare deprecated. Non-integer values for thekparameter of both
numpy.tril_indices_fromandnumpy.triu_indices_fromare deprecated.
(gh-30869)
Deprecations in custom
dtypeproperty and__array_finalize__.Previously
arr.view(dtype=new_dtype)calledarr.dtype = new_dtypealso for subclasses, i.e., the attribute setting. That path is now
deprecated and refined, meaning that even subclasses that do not see this
DeprecationWarningmay wish to update their code.A subclass that does any
dtypespecific logic (i.e. verifying the dtypein
__array_finalize__or has adtypeproperty) should now:_set_dtype = Nonein which casearr.view(dtype=new_dtype)will call
__array_finalize__with the new dtype, ensuring thatany validation
__array_finalize__will run is done._set_dtypeas a function (callingndarray._set_dtype()to avoidDeprecationWarnings.(Future versions might migrate towards the
_set_dtype = Nonepath.)Ideally, follow NumPy's deprecation to prevent
dtypemutation by users.The use of
ndarray._set_dtype()may be necessary for some subclassfinalization patterns, but should otherwise be avoided.
(gh-31293)
Expired deprecations
numpy.distutilshas been removed(gh-30340)
Passing
Noneas dtype tonp.finfowill now raise aTypeError(deprecated since 1.25)
(gh-30460)
numpy.crossno longer supports 2-dimensional vectors.(Deprecated since 2.0)
(gh-30461)
numpy._core.numerictypes.maximum_sctypehas been removed.(deprecated since 2.0)
(gh-30462)
numpy.row_stackhas been removed in favor ofnumpy.vstack.(deprecated since 2.0)
(gh-30463)
get_array_wraphas been removed.(deprecated since 2.0)
(gh-30463)
recfromtxtandrecfromcsvhave been removed fromnumpy.lib._npyioin favor of
numpy.genfromtxt.(deprecated since 2.0)
(gh-30467)
The
numpy.chararrayre-export ofnumpy.char.chararrayhas been removed.(deprecated since 2.0)
(gh-30604)
bincountnow raises aTypeErrorfor non-integer inputs.(deprecated since 2.1)
(gh-30610)
The
numpy.lib.mathalias for the standard librarymathmodule hasbeen removed.
(deprecated since 1.25)
(gh-30612)
Data type alias
'a'was removed in favor of'S'.(deprecated since 2.0)
(gh-30613)
_add_newdoc_ufunc(ufunc, newdoc)has been removed in favor ofufunc.__doc__ = newdoc.(deprecated since 2.2)
(gh-30614)
Compatibility notes
linalg.eigandlinalg.eigvalsnow always return complex arraysPreviously, the return values depended on whether the eigenvalues happen to lie
on the real line (which, for a general, non-symmetric matrix, is not
guaranteed).
This change makes consistent what was a value-dependent result. To retain the
previous behavior, do:
If your matrix is symmetrix/hermitian, use
eighandeigvalshinstead ofeigandeigvals. These are guaranteed to return real values. A commoncase is covariance matrices, which are symmetric and positive definite by
construction.
(gh-30411)
MSVC support
NumPy now requires minimum MSVC 19.35 toolchain version on Windows platforms.
This corresponds to Visual Studio 2022 version 17.5 Preview 2 or newer.
(gh-30489)
Cython support
NumPy's Cython headers (accessed via
cimport numpy) now require Cython 3.0or newer to build. If you try to compile a project that depends on NumPy's
Cython headers using Cython 0.29 or older, you will see a message like this:
versions.
See init.cython-30.pxd for the real Cython header
Note that the invalid integer is not a bug in NumPy - we are intentionally
generating this error to avoid triggering a more obscure error later in the
build when an older Cython version tries to use a Cython feature that was not
available in the old Cython version.
(gh-30770)
numpy.whereno longer truncates Python integersPreviously, if the
xoryargument ofnumpy.wherewas a Pythoninteger that was out of range of the output type, it would be silently
truncated. Now, an
OverflowErrorwill be raised instead.This change also applies to the underlying C API function
PyArray_Where.(gh-30803)
Default memory allocator change
NumPy now uses
PyMem_RawMallocandPyMem_RawFreeas the default memoryallocator, instead of system's
mallocandfreedirectly.(gh-30846)
from_dlpackraisesBufferErrorinstead ofRuntimeErrornp.from_dlpacknow raisesBufferErrorinstead ofRuntimeErrorwhenthe incoming DLPack tensor has an unsupported device, dtype, or exceeds the
maximum number of dimensions. This aligns with the DLPack and Array API
specifications, which recommend
BufferErrorfor data that cannot beimported.
(gh-30937)
Corrections to the BTPE binomial sampler
Two independent errors in the Stirling series of the acceptance/rejection step
of the BTPE algorithm used by
numpy.random.Generator.binomialhave beencorrected:
error was inherited from section 5.3 of the original 1988 paper by
Kachitvichyanukul & Schmeiser, which incorrectly adds all four terms.
13680instead of13860) that was introduced in the initial implementation.As a result,
Generator.binomialandGenerator.multinomial, which usesbinomial internally, may now return different samples for the same seed.
The legacy
numpy.random.RandomState.binomialandnumpy.random.RandomState.multinomialare not affected: they preserve theoriginal (incorrect) behavior, so existing streams remain reproducible.
(gh-31238)
datetime64/timedelta64arithmetic raises on overflowAddition, subtraction, and integer multiplication of
datetime64andtimedelta64values now raiseOverflowErrorwhen the result wouldoverflow
int64or land on theNaTsentinel value. Previously theseoperations silently wrapped, often producing a value that was indistinguishable
from
NaT. This matches the overflow checking already performed byunit-conversion casts.
(gh-31378)
C API changes
It is now possible to register
"real"and"imag"ArrayMethods viaPyUFunc_AddLoopsFromSpecs. These will be used forimagandrealand should normally set
*view_offsetin theirresolve_descriptorsfunction to allow the array attributes to return views.
(gh-30984)
New
PyDataType_TYPE,PyDataType_KIND,PyDataType_BYTEORDERandPyDataType_TYPEOBJaccessor macros to the C API. Together with the otheraccessor macros added for the NumPy 2.0 transition, these allow accessing the
fields of
PyArray_Descrstructs without any direct field accesses.(gh-30994)
NumPy now supports the stable ABI for free-threaded Python as described in
803{.interpreted-text role="pep"}.(gh-31091)
PyArray_DescrFromScalarnow returns the full dtype descriptor for scalarsof user-defined parametric data types, including any dtype parameters.
Parameters were previously silently discarded, which could cause incorrect
results in operations like
astypeon scalar objects. Internally, thefunction now delegates to
discover_descr_from_pyobject, which handlesparametric dtypes correctly.
(gh-31067)
New Features
It is now possible to register user-dtypes for dlpack export and import
via
numpy.dtypes.register_dlpack_dtype. This functionality is meant tobe used with care by user-dtype authors.
(gh-31256)
Pixi package definitions
Pixi package definitions have been added for different kinds
of from-source builds of NumPy. These can be used in
downstream Pixi workspaces via the
pixi-buildfeature.Definitions for both
defaultand AddressSanitizer-instrumented(
asan) builds are available in the source code under thepixi-packages/directory.linux-64andosx-arm64platforms are supported.(gh-30381)
numpy.ndarraynow supports structural pattern matchingnumpy.ndarrayand its subclasses now have thePy_TPFLAGS_SEQUENCEflagset, enabling structural pattern matching (PEP 634) with
match/casestatements. This also enables Cython to optimize integer indexing operations.
See
`arrays.ndarray.pattern-matching{.interpreted-text role="ref"}` for details.(gh-30653)
Added N-D evaluation functions to the polynomial package
New functions
polyvalnd,chebvalnd,legvalnd,hermvalnd,hermevalnd, andlagvalndhave been added to evaluate polynomialsin arbitrary dimensions, analogous to the existing 2D and 3D evaluators.
(gh-30857)
New "descending" keyword argument for
numpy.sortandnumpy.argsortUsers can now pass the
descending=Truekeyword argument tonumpy.sortand
numpy.argsortto sort and argsort arrays in descending order. NaNvalues, if present, are sorted to the end of the array in both ascending and
descending sorts. This feature is available for all built-in dtypes except
void,object, andgeneric. Note that SIMD optimizations for sortingare currently not available for descending sorts, so performance may be slower.
(gh-31345)
Improvements
For
f2py, the behaviour ofintent(inplace)has improved. Previously,if an input array did not have the right dtype or order, the input array was
modified in-place, changing its dtype and replacing its data by a corrected
copy. Now, instead, the corrected copy is kept a separate array, which, after
being passed and presumably modified by the fortran routine, is copied back to
the input routine. The above means one no longer has the risk that
pre-existing views or slices of the input array start pointing to unallocated
memory (at the price of increased overhead for the write-back copy at the end
of the call).
A potential problem would be that one might get very different results if one,
e.g., previously passed in an integer array where a double array was expected:
the writeback to integer would likely give wrong results. To avoid such
situations,
intent(inplace)will now only allow arrays that have equivalenttype to that used in the fortran routine, i.e.,
dtype.kindis the same. Forinstance, a routine expecting double would be able to receive float, but would
raise on integer input.
(gh-29929)
f2pymodules now show allocatable arrays indir()Allocatable module variables wrapped by
f2pynow appear indir()output, matching their accessibility by name.
(gh-30965)
StringDTypecomparisons now correctly handle embedded NULL bytes.(gh-31662)
Performance improvements and changes
Improved performance of
numpy.searchsortedThe C++ binary search implementation used by
numpy.searchsortednow has amuch better performance when searching for multiple keys. The new
implementation batches binary search steps across all keys to leverage cache
locality and out-of-order execution. Benchmarks show the new implementation can
be up to 20 times faster for hundreds of thousands keys while single-key
performance remains comparable to previous versions.
(gh-30517)
Improved scaling of ufuncs on free-threading
NumPy's ufuncs now scale significantly better on free-threading builds
of CPython due to the following optimizations:
a lock-free concurrent hash map, allowing multiple threads to call ufuncs
without contention.
handlers, have been made immortal. This effectively reduces reference
counting contention across threads.
PyMem_RawMallocandPyMem_RawFreefor memory allocation. On Python 3.15 and newer, thisleverages
mimallocand significantly reduces memory allocation overheadin multi-threaded workloads.
(gh-30846)
Faster reductions on small/medium contiguous arrays
numpy.sum,numpy.prod,numpy.any,numpy.all, and otherreductions with an identity value now use a fast path when the input is a
contiguous, aligned, non-object array and the reduction covers all axes
(
axis=None) with no special arguments. Typical speedup is ~1.3x on smallarrays;
numpy.any/numpy.allon contiguous boolean arrays can seespeedup up to 1.9x.
(gh-31274)
Typing improvements and changes
numpy.linalgtyping improvements and preliminary shape-typing supportInput and output dtypes for
numpy.linalgfunctions are now more precise.Several of these functions also gain preliminary shape-typing support while
remaining backward compatible. For example, the return type of
numpy.linalg.matmulnow depends on the shape-type of its inputs, or fallback to the backward-compatible return type if the shape-types are unknown at
type-checking time. Because of limitations in Python's type system and current
type-checkers, shape-typing cannot cover every situation and is often only
implemented for the most common lower-rank cases.
(gh-30480)
numpy.matyping annotationsThe
numpy.mamodule is now fully covered by typing annotations. Thisincludes annotations for masked arrays, masks, and various functions and
methods. With this, NumPy has achieved 100% typing coverage across all its
submodules.
(gh-30566)
Shape-typing support for many functions and methods
Many functions and methods now have shape-aware return type annotations.
Type-checkers can now infer the number of dimensions of the returned array
through common operations. For example,
np.linspace(0, 1)is now typed as a1-d
float64array, andnp.sum(x, keepdims=True)has the same number ofdimensions as
x.This covers
numpy.linalgfunctions, array creation functions (likeasarray,from{buffer,string,file,iter,regex}), range functions(
linspace,logspace,geomspace), aggregation functions and methods(
sum,mean,std,var,min,max,all,any,etc.), sorting (
sort,argsort,argpartition), cumulative operations(
cumsum,cumprod, etc.), set operations (unique_values,intersect1d,union1d, etc.), and various other functions includingnonzero,transpose,diagonal,atleast_{1,2,3}d,clip,round,inner,bincount, andfft.fftfreq. Several of these alsogained more precise return dtype annotations as part of this work.
Shape-typing is still a work-in-progress, so coverage is not yet complete.
Because of limitations in Python's type system and current type-checkers,
shape-typing is often only implemented for the most common lower-rank cases.
(gh-31172)
numpy.ffttyping improvements and preliminary shape-typing supportThe
numpy.fftfunctions now support non-float64/complex128dtypesand gain preliminary shape-typing support. For example, the return type of
numpy.fft.fftnow depends on the shape-type of its inputs, falling back tothe backward-compatible return type when the shape-types are unknown at
type-checking time.
(gh-31226)
Changes
Structured array copies now use
memcpyfor contiguous dtypesCopying structured arrays with identical dtypes now uses
memcpyinstead offield-by-field transfer when the dtype has a contiguous layout (no gaps between
fields). A new
NPY_NOT_TRIVIALLY_COPYABLEdtype flag is set on structureddtypes that have gaps in their memory layout, such as those created with
explicit
offsetsor via multi-field indexing. Only these dtypes continue touse the slower field-by-field copy.
This means that padding bytes in contiguous structured dtypes (e.g. those
created without explicit
offsets) may now be copied as part of thememcpy, whereas previously they were left untouched. Code that relies onpadding bytes being preserved during structured array copies may be affected.
(gh-29270)
numpy.ctypeslib.as_ctypesnow does not support scalar typesThe function
numpy.ctypeslib.as_ctypeshas been updated to only acceptnumpy.ndarray. Passing a scalar type (e.g.,numpy.int32(5)) will nowraise a
TypeError. This change was made to avoid the issuegh-30354 and to enforce the
readonly nature of scalar types in NumPy. The previous behavior relied on
undocumented implicit temporary arrays and was not well-defined. Users who
need to convert scalar types to ctypes should first convert them to an array
(e.g.,
numpy.asarray) before passing them tonumpy.ctypeslib.as_ctypes.(gh-30538)
__array_interface__changes on scalarsScalars now export the
__array_interface__directly rather than includingan array copy as a
__refentry. This means that scalars are now exported asread-only while they previously exported as writeable. The path via
__refwas undocumented and not consistently used even within NumPy itself.
(gh-30538)
meshgridnow always returns a tuplenp.meshgridpreviously used to return a list whensparsewas true andcopywas false. Now, it always returns a tuple regardless of thearguments.
(gh-30707)
numpy.triu_indicesnow acceptsunsigned integersnumpy.triu_indicespreviously used to error in some cases whenunsigned integerswere given as arguments. Now, it accepts them in all cases.
(gh-30869)
objectdtype in.realand.imagand related functionsThe array attributes
.realand.imagnow behave differently for objectarrays and return
getattr(element, "real", element)orgetattr(element, "imag", 0)elementwise. Additionally, the return for both is now read-only to avoid possible
in-place changes having no effect.
This change also affects
np.isreal()which usesarr.imag.Previously,
.imagalways returned0while.realreturned theoriginal array unmodified. The new behavior now returnes the correct values
for complex Python objects but may also lead to surprises for example if
element.real()is a method and not a property.(gh-30984)
NumPy's internal memory allocations now use
PyMem_RawMallocNumPy's internal memory allocations now use
PyMem_RawMallocinstead ofmallocand can be tracked bytracemalloc.(gh-31503)
pytest-dev/pytest (pytest)
v9.1.1Compare Source
pytest 9.1.1 (2026-06-19)
Bug fixes
pytest.RaisesGroupwhich would might cause it to display incorrect "It matches FooError() which was paired with BarError" messages.list-itemtyping errors from mypy in@pytest.mark.parametrize <pytest.mark.parametrize ref>argvaluesparameter.conftest.pyfiles located in<invocation dir>/test*were no longer loaded as initial conftests when invoked without arguments.This could cause certain hooks (like
pytest_addoption) in these files to not fire.v9.1.0Compare Source
pytest 9.1.0 (2026-06-13)
Removals and backward incompatible breaking changes
#14533: When using
--doctest-modules, autouse fixtures withmodule,packageorsessionscope that are defined inline in Python test modules (not plugins or conftests) will now possibly execute twice.If this is undesirable, move the fixture definition to a
conftest.pyfile if possible.Technical explanation for those interested:
When using --doctest-modules, pytest possibly collects Python modules twice, once as
pytest.Moduleand once as aDoctestModule(depending on the configuration).Due to improvements in pytest's fixture implementation, if e.g. the
DoctestModulecollects a fixture, it is now visible to it only, and not to theModule.This means that both need to register the fixtures independently.
Deprecations (removal in next major release)
#10819: Added a deprecation warning for class-scoped fixtures defined as instance methods (without
@classmethod). Such fixtures set attributes on a different instance than the test methods use, leading to unexpected behavior. Use@classmethoddecorator instead -- byyastcher.See
10819and14011.#12882: Calling
request.getfixturevalue() <pytest.FixtureRequest.getfixturevalue>during teardown to request a fixture that was not already requested is now deprecated and will become an error in pytest 10.See
dynamic-fixture-request-during-teardownfor details.#13409: Using non-
~collections.abc.Collectioniterables (such as generators, iterators, or custom iterable objects) for theargvaluesparameter in@pytest.mark.parametrize <pytest.mark.parametrize ref>andmetafunc.parametrize <pytest.Metafunc.parametrize>is now deprecated.These iterables get exhausted after the first iteration,
leading to tests getting unexpectedly skipped in cases such as running
pytest.main()multiple times,using class-level parametrize decorators,
or collecting tests multiple times.
See
parametrize-iteratorsfor details and suggestions.#13946: The private
config.inicfgattribute is now deprecated.Use
config.getini() <pytest.Config.getini>to access configuration values instead.See
config-inicfgfor more details.#14004: Passing
baseidto~pytest.FixtureDefornodeidstrings to fixture registration APIs is now deprecated. These are internal pytest APIs that are used by some plugins.Use the
nodeparameter instead for fixture scoping. This enables more robust node-basedmatching instead of string prefix matching.
If you've used
nodeid=None, passnode=sessioninstead.This will be removed in pytest 10.
#14335: The method of configuring hooks using markers, deprecated since pytest 7.2, is now scheduled to be removed in pytest 10.
See
hook-markersfor more details.#14434: The
--pastebinoption is now deprecated.The same functionality is now available in an external plugin,
pytest-pastebin.See
pastebin-deprecatedfor more details.#14513: The private
FixtureDef.has_locationattribute is now deprecated and will be removed in pytest 10.See
fixturedef-has-location-deprecatedfor details.#1764:
pytest.console_mainis now deprecated and will be removed in pytest 10.It was never intended for programmatic use; use
pytest.maininstead.New features
#12376: Added
pytest.register_fixture()to register fixtures using an imperative interface.This is an advanced function intended for use by plugins.
Normally, fixtures should be registered declaratively using the
@pytest.fixture <pytest.fixture>decorator.Pytest looks for these fixture definitions during the collection phase and registers them automatically.
For some plugin usecases the declarative interface can be cumbersome or unviable, in which case this imperative interface can be used.
#14023: Added --report-chars long CLI option.
#14371: Added
--max-warningscommand-line option andmax_warningsconfiguration option to fail the test run when the number of warnings exceeds a given threshold -- bymiketheman.#6757: Added the
assertion_text_diff_styleconfiguration option, allowingstring equality failures to be rendered as separate
Left:andRight:blocks instead of
ndiffoutput.#8395: Added support for
~datetime.datetimeand~datetime.timedeltacomparisons withpytest.approx. An explicitabsorreltolerance as a~datetime.timedeltais required and relative tolerance is not supported for datetime comparisons -- byhamza-mobeen.Improvements in existing functionality
#11225:
pytest.warnsnow shows "Regex pattern did not match" instead of "DID NOT WARN" when warnings were emitted but thematchpattern did not match.#11295: Improved output of
--fixtures-per-testby excluding internal-implementation fixtures generated by@pytest.mark.parametrizeand similar.#13241:
pytest.raises,pytest.warnsandpytest.deprecated_callnow usesParamSpecfor the type hint to the (old and not recommended) callable overload, instead ofAny. This allows type checkers to raise errors when passing incorrect function parameters.funccan now also be passed as a kwarg, which the type hint previously showed as possible but didn't accept.#13862: Improved the readability of "DID NOT RAISE" error messages by using the exception type's name instead of its repr.
#14026: Added test coverage for compiled regex patterns in
pytest.raisesmatch parameter.#14137: pytest.ScopeName is now public to allow using it in function signatures.
#14342: Marked
yield_fixtureas deprecated to type checkers using thedeprecateddecorator. Note ithas originally been deprecated <yield-fixture-deprecated>in pytest 6.2 already.#14373: Added type annotations for
pytest.approx.#14430: When using
--setup-show, a space is now printed after the test name (and possibly used fixtures), to separate it from the test result.#14441: Reduced the default number of
gc.collect()passes in theunraisableexceptionplugin from 5 to 1 on CPython, where reference counting makes a single pass sufficient. PyPy retains 5 passes due to object resurrection via__del__. This can noticeably speed up test suites that trigger many pytester runs.#14461: Improved assertion failure explanations for equality comparisons between mapping objects that are not
dictinstances.#14513: The order in which fixture definitions overriding each other are resolved is now determined first by their visibility in the collection tree rather than by the order in which they are registered.
A fixture defined for a more specific node (e.g. a module or an item) now always takes precedence over one with the same name defined for a more general node (e.g. the session), even when the more general one was registered later.
Fixtures with non-comparable visibility or the same visibility keep the existing behavior of "last registered wins".
This change is supposed to only affect plugins which register multiple fixtures programmatically with the same name.
#14524: Add official Python 3.15 support.
#1764: Improved argparse program name to show
pytest,python -m pytest, orpytest.main()based on how pytest was invoked, making help and error messages clearer.#8265: Emit a
PytestCollectionWarningwhen a module-level__getattr__returnsNoneforpytestmarkinstead of raisingAttributeError.Previously this caused a cryptic
TypeError: got None instead of Markerror.Now pytest issues a helpful warning and continues collecting the module normally.
Bug fixes
#13192: Fixed | (pipe) not being treated as a regex meta-character that needs escaping in
pytest.raises(match=...) <pytest.raises>.#13484: Fixed
-Woption values being duplicated inConfig.known_args_namespace.#13626: Fixed function-scoped fixture values being kept alive after a test was interrupted by
KeyboardInterruptor early exit,allowing them to potentially be released more promptly.
#13784: Fixed
capteesysproducing doubled output when used with--capture=no(-s).#13817: Fixed a secondary AttributeError masking the original error when an option argument fails to initialize.
#13884: Fixed rare internal IndexError caused by builtins.compile being overridden in client code.
#13885: Fixed autouse fixtures defined inside a
unittest.TestCaseclass running even when the class is decorated withunittest.skiporunittest.skipIf-- regression since pytest 8.1.0.#13917:
unittest.SkipTestis no longer considered an interactive exception, i.e.pytest_exception_interactis no longer called for it.#13963: Fixed subtests running with
pytest-xdistwhen their contexts contain objects that are not JSON-serializable.Fixes pytest-dev/pytest-xdist#1273.
#14004: Fixed conftest.py fixture scoping when
testpathspoints outside of therootdir <rootdir>.Previously, fixtures from nested conftest.py files would incorrectly leak to sibling directories
when using a relative
testpathslike../tests/sdk.Conftest fixtures are now parsed during
Directory <pytest.Directory>collection, using theDirectorynode for proper scoping.#14050: Display dictionary differences in assertion failures using the original key insertion order instead of sorted order.
#14080: fix missing type annotations on
Pytester.makepyfileandPytester.maketxtfilemethods.#14114: An exception from
pytest_fixture_post_finalizerno longer prevents fixtures from being torn down, causing additional errors in the following tests.#14161: Fixed
monkeypatch.setattr() <pytest.MonkeyPatch.setattr>leaving a stale entry on the undo stack when the underlyingsetattr()call fails (e.g. on immutable targets), causing anAttributeErrorcrash during teardown.#14214: Fixed
-vhint inpytest.raisesmatch diff not working because assertion verbosity was not propagated.#14234: Allow
pytest.HIDDEN_PARAM <hidden-param>in@pytest.mark.parametrize(ids=...) <pytest.mark.parametrize ref>typing.#14248: Fixed direct parametrization causing the static fixture closure (as reflected in
request.fixturenames <pytest.FixtureRequest.fixturenames>) to omit fixtures that are requested transitively from overridden fixtures.#14263: Unraisable exceptions from finalizers are now collected during
pytest_unconfigure, before pytest tears down the warning filters installed for the session. Previously the collection ran from a cleanup callback whose order relative to other plugins' cleanups was not guaranteed, so an activeerrorfilter could be removed before the exception surfaced and a late resource leak would pass silently. A-W errorfilter, or any filter matchingpytest.PytestUnraisableExceptionWarning, now promotes these exceptions to failures regardless of plugin cleanup order.#14377: Fixed crash in Config.get_terminal_writer when an assertion fails with the
terminalreporterplugin disabled.#14381: Fixed
-V(short form of--version) to properly display the current version.#14389: Improved
pytest.raises(..., match=...) <pytest.raises>failures to suppress the mismatched exception as a cause of the resultingAssertionError.#14392: Fixed a bug in
pytest.raises(match=...) <pytest.raises>"fully escaped" detection, causing the regex diff display to be shown in some instances when the raw string diff display should be shown instead.#14442: Fixed a regression in pytest 9.0 where
--strict-markersand--strict-configspecified throughaddoptswere silently ignored.Note that when targeting pytest >= 9.0, it's nicer to use
strict_markersandstrict_config, orstrict mode <strict mode>.#14456: Fixed
pytest.approxnot recognizing types with__array_interface__as numpy-like arrays.#14474: Fixed a regression where
-kand-mexpressions containing both backslash characters in identifiers and string literal arguments would incorrectly raise aSyntaxErrorabout escaping.#14483: Fixed JUnit XML report incorrectly escaping high Unicode codepoints (supplementary plane characters like emoji) in test failure messages. -- by
EternalRights#14492: Fixed
Code.getargs()incorrectly including local variable names in the returned argument tuple for functions with*argsand/or**kwargs. The method was usingco_flagsbitmask values (4and8) directly as counts instead of converting them to1viabool(), and was not accounting forco_kwonlyargcountwhenvar=True.#3697: Logging capture now works for non-propagating loggers.
Previously only logs which reached the root logger were captured.
This includes
caplogand the "Captured log calls" test reporting.#3850: Fixed JUnit XML report: the
testsattribute of the<testsuite>element now always matches the number of<testcase>elements in the file. In some cases (test passes but fails during teardown) thetestsattribute would report an incorrect number of testcases in the XML file.#5848:
pytest_fixture_post_finalizeris no longer called extra times for the same fixture teardown in some cases.#719: Fixed
@pytest.mark.parametrize <pytest.mark.parametrize ref>not unpacking single-element tuple values when using a string argnames with a trailing comma (e.g.,"arg,").The trailing comma form now correctly behaves like the tuple form
("arg",), treating argvalues as a list of tuples to unpack.Improved documentation
@pytest.hookimpl(specname=...)only works for function names starting withpytest_.requestfixture provides indirect parametrization values viarequest.param.conftest.pyfiles are not available to other plugins during theirpytest_addoption()execution, as conftest files are discovered and loaded after builtin and third-party plugins have been initialized. However, initial conftest files themselves can implementpytest_addoption()to add their own command-line options.ini options refsection of the API Reference now specified the type and default value of every configuration option.pytestconfig.cacheaccess pattern when thecacheproviderplugin is disabled.newhooks.pyfile inpytest-xdistat tagv3.8.0instead of an unrelated 2017-era commit under the old layout. Pointing at a tag keeps the example in sync with the version users actually install, while remaining stable when the project's main branch moves on.Miscellaneous internal changes
astral-sh/ruff (ruff)
v0.16.0Compare Source
Released on 2026-07-23.
Check out the blog post for a migration
guide and overview of the changes!
Breaking changes
Ruff now enables a much larger set of rules by default (413, up from 59). See the blog post for
more details and the new Default Rules page for a
full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more
opinionated pycodestyle (
E) and pyflakes (F) rules have been removed from the default set:E401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,E742,E743,F403,F405,F406, andF722.Ruff can now format Python code blocks in Markdown files and will do this by default. See the
documentation for more details.
Ruff now supports
ruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:Fixes are now shown in
checkandformat --checkoutput:This example also shows off the Markdown formatting.
format --checknow supports the same output formats as the linter, including thegithubandgitlaboutputs for rendering annotations in CI:See the CLI help or documentation for the
full list of supported formats.
The
filename,location,end_location,fix.edits[].location, andfix.edits[].end_locationfields in the JSON output format may now be
nullrather than defaulting to the empty string androw 1, column 1, respectively.
Stabilization
The following rules have been stabilized and are no longer in preview:
airflow3-incompatible-function-signature(
AIR303)missing-copyright-notice(
CPY001)unnecessary-from-float(FURB164)sorted-min-max(FURB192)implicit-string-concatenation-in-collection-literal(
ISC004)log-exception-outside-except-handler(
LOG004)invalid-bool-return-type(
PLE0304)too-many-positional-arguments(
PLR0917)stop-iteration-return(PLR1708)none-not-at-end-of-union(
RUF036)access-annotations-from-class-dict(
RUF063)duplicate-entry-in-dunder-all(
RUF068)The following behaviors have been stabilized:
blind-except(BLE001) is now suppressed whenthe exception is logged via
loggingmethods other thancritical,errorandexception.future-required-type-annotation(
FA102) now checks for additional PEP 585-compatibleAPIs, such as those from
collections.abc.f-string-in-get-text-func-call(
INT001),format-in-get-text-func-call(
INT002), andprintf-in-get-text-func-call(
INT003) now check for additional common ways of using thegettextmodule, such as assigningit to
builtins._.suspicious-url-open-usage(
S310) now resolves local string literal bindings to avoid more false positives.snmp-insecure-version(S508) andsnmp-weak-cryptography(S509) nowsupport the recommended API from newer versions of PySNMP.
typing-text-str-alias(UP019) nowrecognizes
typing_extensions.Textin addition totyping.Text.Preview features
pyupgrade] Fix false positive withTypeVardefault before Python 3.13 (UP040) (#26888)Bug fixes
ruff] Fix missing check on unrecognized early bound (RUF016) (#26986)Rule changes
Performance
pyupgrade] Speed upunnecessary-future-import(UP010) (#27047)Documentation
ruff] Add missing period in "Why is this bad?" section (RUF200) (#26930)flake8-simplify] Clarifyos.environbehavior on Windows (SIM112) (#26972)pydocstyle] Document fix safety (D400) (#26971)Contributors
v0.15.22Compare Source
Release Notes
Released on 2026-07-16.
Preview features
pycodestyle] Add an autofix forE402(#22212)refurb] Allow subclassing builtins in stub files (FURB189) (#26812)ruff] Add rule to replacenoqacomments withruff:ignore(RUF105) (#26423)ruff] Add rule to use human-readable names inruff:ignorecomments (RUF106) (#26682)ruff] Add rule to use human-readable names in configuration selectors (RUF201) (#26772)Bug fixes
flake8-pyi] Fix false positive in__all__(PYI053) (#26872)Rule changes
pylint] Ignore mutable type updates inredefined-loop-name(PLW2901) (#25733)Performance
Documentation
flake8-datetimez] Clarify naming guidance fordatetime.today(DTZ002) (#26658)pycodestyle] DocumentE731fix safety (#26847)ruff] Clarify intentional async contexts forunused-async(RUF029) (#26641)Contributors
Install ruff 0.15.22
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Download ruff 0.15.22
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
You can also download the attestation from GitHub and verify against that directly:
v0.15.21Compare Source
Release Notes
Released on 2026-07-09.
Preview features
--add-ignorefor addingruff:ignorecomments (#26346)flake8-comprehensions] DropC409tuple comprehension preview behavior (#25707)pyupgrade] Lint and fix use of deprecatedabcdecorators (UP051) (#26417)Bug fixes
flake8-implicit-str-concat] FixISC003autofix incorrectly stripping+from comments (#26554)Rule changes
flake8-executable] MarkEXE004fix as unsafe (#26033)flake8-pyi] MarkPYI061fixes as unsafe in Python files (#26533)pydocstyle] Skipoverload-with-docstringin stub files (D418) (#26318)Performance
fits_elementin formatter (#26429)Formatter
--extend-excludetoruff format(#26372)Documentation
flake8-bandit] Fix misleading docstring formako-templates(S702) (#26432)ruff] Fix non-triggering example forif-key-in-dict-del(RUF051) (#26433)Contributors
Install ruff 0.15.21
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Download ruff 0.15.21
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
You can also download the attestation from GitHub and verify against that directly:
v0.15.20Compare Source
Release Notes
Released on 2026-06-25.
Preview features
noqashebang handling inruff:ignorecomments (#26286)ruff] Removepytest-fixture-autouse(RUF076) (#26240, #26371)Documentation
ruff_python_parserREADME for crates.io (#26315)perflint] Clarify thatPERF402applies to any iterable (#26242)Contributors
Install ruff 0.15.20
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Download ruff 0.15.20
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
You can also download the attestation from GitHub and verify against that directly:
v0.15.19Compare Source
Release Notes
Released on 2026-06-23.
Preview features
Bug fixes
Rule changes
pylint] Update fix suggestions for__floor__,__trunc__,__length_hint__, and__matmul__variants (PLC2801) (#26239)Performance
Documentation
flake8-pyi] Note thatPYI051is an opinionated stylistic rule (#26179)pyupgrade] ClarifyUP029as a Python 2 compatibility rule (#26243)Other changes
Contributors
Install ruff 0.15.19
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Download ruff 0.15.19
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
You can also download the attestation from GitHub and verify against that directly:
v0.15.18Compare Source
Release Notes
Released on 2026-06-18.
Preview features
ruff:ignorecomments (#25791)pydocstyle] Prevent property docstrings starting with verbs (D421) (#23775)flake8-pyi] ExtendPYI033to Python files (#26129)Bug fixes
Rule changes
flake8-pyi] RenamePYI033tolegacy-type-comment(#26131)Performance
ThinVecfor call keywords (#25999)Server
Documentation
flake8-tidy-imports] Add fix safety section (TID252) (#17491)Parser
__debug__lambda parameters (#26022)_as a match-pattern target (#25977)yieldexpressions after commas (#26024)Playground
Contributors
Install ruff 0.15.18
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Download ruff 0.15.18
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
You can also download the attestation from GitHub and verify against that directly:
v0.15.17Compare Source
Release Notes
Released on 2026-06-11.
Preview features
ignorecomments within adisable/enablepair (#25845)ruff:ignoresuppressions (#25673)flake8-async] Addtrio.as_safe_channelto safe decorators (ASYNC119) (#25775)flake8-pytest-style] Also checkpytest_asynciofixtures (#25375)ruff] Banpytestautouse fixtures (RUF076) (#25477)pyupgrade] Addfrom __future__ import annotationsautomatically (UP007,UP045) (#23259)Bug fixes
ruff:enableorruff:disableappears whereruff:ignoreis expected (#25700)pyupgrade] Preserve leading empty literals to avoid syntax errors (UP032) (#25491)Rule changes
flake8-pytest-style] Clarify diagnostic message for single parameters (PT007) (#25592)numpy] Drop autofix fornp.in1d(NPY201) (#25612)pylint] Exempt Python version comparisons (PLR2004) (#25743)Performance
Vecs with correct capacity for common cases (#25451)Formatter
CLI
ruff rule(#25640)Other changes
Contributors
Install ruff 0.15.17
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Download ruff 0.15.17
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
You can also download the attestation from GitHub and verify against that directly:
v0.15.16Compare Source
Release Notes
Released on 2026-06-04.
Preview features
flake8-async] Implementyield-in-context-manager-in-async-generator(ASYNC119) (#24644)pylint] Narrow diagnostic range and exclude cases without exception handlers (PLW0717) (#25440)ruff] Treatyieldbeforebreakfrom a terminal loop as terminal (RUF075) (#25447)Bug fixes
eradicate] Avoid flaggingruff:ignorecomments as code (ERA001) (#25537)eradicate] FixERA001/RUF100conflict whennoqais on commented-out code (#25414)pyflakes] Avoid removing theformatcall when it would change behavior (F523) (#25320)pylint] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (PLE2510,PLE2512,PLE2513,PLE2514,PLE2515) (#25544)pyupgrade] Avoid convertingformatcalls with more kinds of side effects (UP032) (#25484)Rule changes
flake8-pytest-style] Avoid fixes for ambiguousargnamesandargvaluescombinations (PT006) (#24776)Performance
Documentation
pydocstyle] Improve discoverability of rules enabled for each convention (#24973)ruff] Restore example code for Python versions before 3.15 (RUF017) (#25439)bin/active→bin/activatein tutorial (#25473)Other changes
Contributors
Install ruff 0.15.16
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Download ruff 0.15.16
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
You can also download the attestation from GitHub and verify against that directly:
v0.15.15Compare Source
Release Notes
Released on 2026-05-28.
Preview features
pyflakes] Report duplicate imports intyping.TYPE_CHECKINGblock (F811) (#22560)Bug fixes
pyflakes] Treat function-scope bare annotations as locals per PEP 526 (F821) (#21540)Performance
TokenValuedrops in the lexer (#25300)Vecsize (#25354)ThinVecin AST to shrinkStmt(#25361)Documentation
line-lengthexample for--configoption (#25389)flake8-comprehensions] DocumentRecursionErroredge case in__len__(C416) (#25286)mccabe] Improve example (C901) (#25287)pyupgrade] Clarify fix safety docs (UP007,UP045) (#25288)refurb] DocumentFURB192exception change for empty sequences (#25317)ruff] Document false negative for user-defined types (RUF013) (#25289)Formatter
Server
codeAction/resolverequests that contain no or no valid URL (#25365)Other changes
Contributors
Install ruff 0.15.15
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
Download ruff 0.15.15
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
You can also download the attestation from GitHub and verify against that directly:
astral-sh/ty (ty)
v0.0.65Compare Source
Released on 2026-07-29.
LSP server
Library support
__replace__for models (#27220)Diagnostics
ParamSpecforwarded-argument diagnostic locations (#27263)functools.partialdiagnostic sources (#27265)Core type checking
Performance
Contributors
v0.0.64Compare Source
Released on 2026-07-27.
Bug fixes
LSP server
textDocument/implementationrequest (#25410)CLI
--exclude-scriptsand--include-scripts(#27169)Diagnostics
--add-ignoreto add space after the colon forty: ignore(#27120)missing-override-decoratorsuggestion before Python 3.12 (#27166)Configuration
Core type checking
Selfin__new__calls (#27003)Performance
ModuleTypeglobals (#27182)TypedDictunions (#27108)Contributors
v0.0.63Compare Source
Released on 2026-07-23.
Core type checking
typing.TypeAlias) type aliases (#27092)str(#27104)typeandTypeForm(#27099)matchstatement leads a variablexto be inferred asA & B, infer the type ofx.attras<type of A.attr> & <type of B.attr>(#27103)Library support
BaseSettingsmodels (#27098)Performance
matchsubjects (#27100)Contributors
v0.0.62Compare Source
Released on 2026-07-21.
Bug fixes
ProtocolandTypedDictrelations (#26990)Diagnostics
--add-ignore(#26925)Configuration
rulesandanalysisin PEP 723 script metadata configurations (#26671)Core type checking
__setattr__assignments (#27015)Callableisinstancereachability (#26970)Just[float]protocol matching (#27053)Selfbinding for classmethod__new__constructors (#27030)TypedDictPEP 728 parameters by Python version (#26968)matchreachability inference around value-pattern branches (#26979)__setattr__for class attributes (#27000)Performance
Selfbinding (#26997)Contributors
v0.0.61Compare Source
Released on 2026-07-17.
Bug fixes
LSP server
Library support
Annotatedaliases (#26885)Diagnostics
--add-ignore(#26808)Core type checking
isinstanceresults for aliases and type variables (#26961)isinstanceresults for fixed class tuples (#26935)to_instance(#26892)TypeVarTupleandUnpack(#25240)Performance
ignorecrate (#26933)Contributors
v0.0.60Compare Source
Released on 2026-07-15.
Bug fixes
Awaitable[T](#26761)LSP server
Library support
populate_by_nameand custom initializers (#26764)Diagnostics
invalid-type-guard-call(#26809)Core type checking
matchcases (#26807)type[Protocol](#26649)Performance
PathBoundsfast-path to support both upper and lower bounds (#26782)Selftype scans for non-generic instances (#26703)Contributors
v0.0.59Compare Source
Released on 2026-07-12.
Bug fixes
init=Falsein dataclass field-order checks (#26749)Library support
__init__methods (#26699)Annotated(#26650)Core type checking
LSP server
CLI
Performance
Contributors
v0.0.58Compare Source
Released on 2026-07-09.
Bug fixes
Diagnostics
Library support
validate_by_{name,alias}(#26598)validation_alias(#26629)BaseSettingsfields optional by default (#26628)RootModelfields (#26634)Core type checking
__contains__semantics (#25964)ModuleType.__doc__asstrin the presence of a docstring (#26505)Performance
TypeCollector(#26593)Contributors
v0.0.57Compare Source
Released on 2026-07-07.
Bug fixes
LSP server
__slots__string when renaming an attribute (#26438)Documentation
Library support
Core type checking
@propertyprotocol members (#25332)isinstanceagainst intersections containing invalid member (#26545)functools.partialsignatures (#24583)Performance
CompactString(#26546)is_subclass_of(#26585)Contributors
v0.0.56Compare Source
Released on 2026-07-01.
Bug fixes
intandstrenum value normalization (#26349)CLI
Performance
Core type checking
Contributors
v0.0.55Compare Source
Released on 2026-06-26.
LSP server
Documentation
Performance
Core type checking
__match_args__(#26195)Contributors
v0.0.54Compare Source
Released on 2026-06-25.
Bug fixes
TypeOfcycle recovery (#26339)__class__closure cells in methods (#26329)LSP server
Performance
Diagnostics
Core type checking
typing.TypedDictfromtyping_extensions.TypedDict(#25843)type[...]in attribute lookup (#26146)matchstatements: make class-pattern fallthrough member-aware (#26283)matchstatements: prove TypedDict structural patterns exhaustive (#26285)matchstatements: resolve positional class-pattern exhaustiveness (#26284)enum.Flags) (#26277)builtins.sentinel(#26341)rangecalls as non-empty for reachability (#25220)Contributors
v0.0.53Compare Source
Released on 2026-06-23.
Bug fixes
Divergent(#26288)TypeOfcycle recovery monotonic (#26275)LSP server
ty_extensions(#26263)Performance
is_never_satisfiedresults (#26261)Core type checking
Anyspecializations (#26127)Contributors
v0.0.52Compare Source
Released on 2026-06-22.
Bug fixes
TypeOfacross multiple union arms (#26230)TypeOfgrowth during cycle recovery (#26163)LSP server
Divergent(#26162)CLI
error-on-warningthe default (#26157)Diagnostics
Performance
CycleDetector::seen(#26181)Core type checking
Contributors
v0.0.51Compare Source
Released on 2026-06-18.
Bug fixes
Annotated[Any, ...]as a class base (#26133)LSP server
Core type checking
AnyorUnknownbases are descriptors (#26120)Diagnostics
Performance
Documentation
Contributors
v0.0.50Compare Source
Released on 2026-06-17.
Bug fixes
Finalas a special form on hover (#26029)LSP server
TYPE_CHECKING(#26051)Diagnostics
duplicate-basediagnostics (#26107)@no_type_checkin function validation (#25994)Performance
Core type checking
&and~(#26035)==,!=, andmatch(#25788)__match_args__(#25934)Contributors
v0.0.49Compare Source
Released on 2026-06-11.
Bug fixes
Diagnostics
Performance
Core type checking
enum.propertyinstances (#25849)Contributors
v0.0.48Compare Source
Released on 2026-06-10.
Performance
Core type checking
extra_items(#25591)closed=TrueTypedDict precision (#25651)Contributors
v0.0.47Compare Source
Released on 2026-06-10.
Bug fixes
Core type checking
Performance and memory-usage improvements
Box<SystemPath>etc. inFiles(#25554)Contributors
v0.0.46Compare Source
Released on 2026-06-08.
Bug fixes
Core type checking
Callable()in match statement class patterns (#25541)enum.property(#25681)Contributors
v0.0.45Compare Source
Released on 2026-06-08.
Bug fixes
Diagnostics
missing-type-argumentlint rule (#25617)Core type checking
Performance
Arc(#25735)Contributors
v0.0.44Compare Source
Released on 2026-06-04.
Bug fixes
sys.implementation.versionlikesys.version_info(#25608)LSP server
Performance
Core type checking
Contributors
v0.0.43Compare Source
Released on 2026-06-03.
Bug fixes
Unknownfrom non-callable elements of intersection call (#25538)possibly-missing-attribute(#25561)LSP server
Performance
Diagnostics
Core type checking
typing.Callablefromcollections.abc.Callable(#24954)global/nonlocalbindings in type inference (#25387)Selfin type aliases (#25529)__len__methods for literals (#25600)Contributors
v0.0.42Compare Source
Released on 2026-06-01.
Bug fixes
Core type checking
Generatorassignability workaround to Python 3.13+ (#25472)Performance
Contributors
v0.0.41Compare Source
Released on 2026-05-31.
Bug fixes
boolfornotapplied to dynamic values (#25445)LSP server
completeFunctionParentheseseditor setting (#3513)Diagnostics
missing-override-decoratorrule (#25111)Callabletype (#25308)Core type checking
TypeForminty_extensions(#25421)Performance
Contributors
v0.0.40Compare Source
Released on 2026-05-27.
Bug fixes
LiteralStringwhen hovering over an inline of a literal string in an IDE (#25373)LSP server
Diagnostics
invalid-generic-classdiagnostics regarding incompatible variance (#25385)Core type checking
type(...),types.new_type(...), etc. (#25413)Literalenum subsets (#25379)typing.TypeForm(#25334)Contributors
fastapi/typer (typer)
v0.27.0Compare Source
Breaking Changes
Internal
v0.26.8Compare Source
Fixes
metavar. PR #1410 by @svlandeg.NoSuchOption.format_message(). PR #1843 by @foomunleong.Docs
Internal
v0.26.7Compare Source
Fixes
v0.26.6Compare Source
Fixes
Internal
v0.26.5Compare Source
Fixes
Internal
v0.26.4Compare Source
Features
Internal
releasePR. PR #1807 by @tiangolo.release. PR #1806 by @tiangolo.v0.26.3Compare Source
Refactors
Internal
v0.26.2Compare Source
Fixes
typer.Optionlist is split on whitespace. PR #1791 by @svlandeg.v0.26.1Compare Source
Fixes
typer.Optionworks as expected. PR #1788 by @svlandeg.Internal
v0.26.0Compare Source
Breaking Changes
Docs
Internal
>= 8.2.1, < 8.4temporarily to prevent incompatibilities. PR #1753 by @tiangolo.Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate.
📋 Changelog
📦 Version Information
0.2.80.2.8Unreleased (22978b4..22978b4)
Miscellaneous Chores
Generated by cocogitto
chore(deps): update https://code.forgejo.org/actions/checkout digest to fbc6f39to chore(deps): update all dependencies⚠️ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
The artifact failure details are included below:
File name: uv.lock