You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix: the HTML report used typographic niceties to make file paths more
readable by adding a small amount of space around slashes. Those spaces
interfered with searching the page for file paths of interest. Now the report
uses CSS to accomplish the same visual tweak so that searches with slashes
work correctly. Closes issue 2170_.
Add a 3.16 PyPI classifier <hugo-316_>_ since we test on the 3.16 main
branch.
Feature: now when running one of the reporting commands, if there are
parallel data files that need combining, they will be implicitly combined
before creating the report. There is no option to avoid the combination; let
us know if you have a use case that requires it. Thanks, Tim Hatch <pull 2162_>. Closes issue 1781.
Fix: the output from combine was too verbose, listing each file
considered. Now it shows a single line with the counts of files combined,
files skipped, and files with errors. The -q flag suppresses this line.
The old detailed lines are available with the new --debug=combine option.
Fix: running a Python file through a symlink now sets the sys.path correctly,
matching regular Python behavior. Fixes issue 2157_.
Fix: Collector.flush_data could fail with "RuntimeError: Set changed
size during iteration" when a tracer in another thread added a line to the
per-file set that add_lines (or add_arcs) was iterating. The values
passed to CoverageData are now snapshotted via dict.copy() and set.copy(), which are atomic under the GIL. Thanks, Alex Vandiver <pull 2165_>_.
Fix: the soft keyword lazy is now bolded in HTML reports.
We are no longer testing eventlet support. Eventlet started issuing stern
deprecation warnings that break our tests. Our support code is still there.
Fix: issue 2138_ describes a memory leak that happened when repeatedly
using the Coverage API with in-memory data. This is now fixed.
Fix: the markdown-formatted coverage report didn't fully escape special
characters in file paths (issue 2141). This would be very unlikely to
cause a problem, but now it's done properly, thanks to Ellie Ayla <pull 2142_>.
Fix: the C extension wouldn't build on VS2019, but now it does (issue 2145_).
Fix: the third-party code fix in 7.13.3 required examining the parent
directories where coverage was run. In the unusual situation that one of the
parent directories is unreadable, a PermissionError would occur, as
described in issue 2129_. This is now fixed.
Fix: in test suites that change sys.path, coverage.py could fail with
"RuntimeError: Set changed size during iteration" as described and fixed in pull 2130_. Thanks, Noah Fatsi.
We now publish ppc64le wheels, thanks to Pankhudi Jain <pull 2121_>_.
Fix: in some situations, third-party code was measured when it shouldn't have
been, slowing down test execution. This happened with layered virtual
environments such as uv sometimes makes. The problem is fixed, closing issue 2082_. Now any directory on sys.path that is inside a virtualenv is
considered third-party code.
Fix: when Python is installed via symlinks, for example with Homebrew, the
standard library files could be incorrectly included in coverage reports.
This is now fixed, closing issue 2115_.
Fix: if a data file is created with no read permissions, the combine step
would fail completely. Now a warning is issued and the file is skipped.
Closes issue 2117_.
Added: the JSON report now includes a "start_line" key for function and
class regions, indicating the first line of the region in the source. Closes issue 2110_.
Added: The debug data command now takes file names as arguments on the
command line, so you can inspect specific data files without needing to set
the COVERAGE_FILE environment variable.
Fix: the JSON report used to report module docstrings as executed lines,
which no other report did, as described in issue 2105_. This is now fixed,
thanks to Jianrong Zhao.
Fix: coverage.py uses a more disciplined approach to detecting where
third-party code is installed, and avoids measuring it. This shouldn't change
any behavior. If you find that it does, please get in touch.
Performance: data files that will be combined now record their hash as part
of the file name. This lets us skip duplicate data more quickly, speeding the
combining step.
Docs: added a section explaining more about what is considered a missing
branch and how it is reported: :ref:branch_explain, as requested in issue 1597. Thanks to Ayisha Mohammed <pull 2092_>.
Tests: the test suite misunderstood what core was being tested if COVERAGE_CORE wasn't set on 3.14+. This is now fixed, closing issue 2109_.
Feature: coverage.py now supports :file:.coveragerc.toml configuration
files. These files use TOML syntax and take priority over
:file:pyproject.toml but lower priority than :file:.coveragerc files.
Closes issue 1643_ thanks to Olena Yefymenko <pull 1952_>_.
Fix: we now include a permanent .pth file which is installed with the code,
fixing issue 2084. In 7.12.1b1 this was done incorrectly: it didn't work
when using the source wheel (py3-none-any). This is now fixed. Thanks, Henry Schreiner <pull 2100_>.
Deprecated: when coverage.py is installed, it creates three command entry
points: coverage, coverage3, and coverage-3.10 (if installed for
Python 3.10). The second and third of these are not needed and will
eventually be removed. They still work for now, but print a message about
their deprecation.
The known link attributes in lxml.html.defs.link_attrs were missing xlink:href,
which can be used for URL bypass attacks in embedded SVG/MathML/etc. content. GHSA-4jhm-jv67-739f
This release fixes a possible external entity injection (XXE) vulnerability in iterparse() and the ETCompatXMLParser.
Features added
GH#486: The HTML ARIA accessibility attributes were added to the set of safe attributes
in lxml.html.defs. This allows lxml_html_clean to pass them through.
Patch by oomsveta.
The default chunk size for reading from file-likes in iterparse() is now configurable
with a new chunk_size argument.
Bugs fixed
LP#2146291: The resolve_entities option was still set to True for iterparse and ETCompatXMLParser, allowing for external entity injection (XXE)
when using these parsers without setting this option explicitly.
The default was now changed to 'internal' only (as for the normal XML and HTML parsers
since lxml 5.0).
Issue found by Sihao Qiu as CVE-2026-41066.
The NumPy 2.4.4 is a patch release that fixes bugs discovered after the 2.4.3
release. It should finally close issue #30816, the OpenBLAS threading problem
on ARM.
This release supports Python versions 3.11-3.14
Contributors
A total of 8 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
Charles Harris
Daniel Haag +
Denis Prokopenko +
Harshith J +
Koki Watanabe
Marten van Kerkwijk
Matti Picus
Nathan Goldbaum
Pull requests merged
A total of 7 pull requests were merged for this release.
#30978: MAINT: Prepare 2.4.x for further development
The NumPy 2.4.1 is a patch release that fixes bugs discoved after the
2.4.0 release. In particular, the typo SeedlessSequence is preserved to
enable wheels using the random Cython API and built against NumPy < 2.4.0
to run without errors.
This release supports Python versions 3.11-3.14
Contributors
A total of 9 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
Alexander Shadchin
Bill Tompkins +
Charles Harris
Joren Hammudoglu
Marten van Kerkwijk
Nathan Goldbaum
Raghuveer Devulapalli
Ralf Gommers
Sebastian Berg
Pull requests merged
A total of 15 pull requests were merged for this release.
#30490: MAINT: Prepare 2.4.x for further development
The NumPy 2.4.0 release continues the work to improve free threaded Python
support, user dtypes implementation, and annotations. There are many expired
deprecations and bug fixes as well.
This release supports Python versions 3.11-3.14
Highlights
Apart from annotations and same_value kwarg, the 2.4 highlights are mostly
of interest to downstream developers. They should help in implementing new user
dtypes.
Many annotation improvements. In particular, runtime signature introspection.
New casting kwarg 'same_value' for casting by value.
New PyUFunc_AddLoopsFromSpec function that can be used to add user sort
loops using the ArrayMethod API.
New __numpy_dtype__ protocol.
Deprecations
Setting the strides attribute is deprecated
Setting the strides attribute is now deprecated since mutating
an array is unsafe if an array is shared, especially by multiple
threads. As an alternative, you can create a new view (no copy) via:
np.lib.stride_tricks.strided_window_view if applicable,
np.lib.stride_tricks.as_strided for the general case,
or the np.ndarray constructor (buffer is the original array) for a
light-weight version.
Positional out argument to np.maximum, np.minimum is deprecated
Passing the output array out positionally to numpy.maximum and numpy.minimum is deprecated. For example, np.maximum(a, b, c) will emit
a deprecation warning, since c is treated as the output buffer rather than
a third input.
Always pass the output with the keyword form, e.g. np.maximum(a, b, out=c).
This makes intent clear and simplifies type annotations.
When creating a new dtype a VisibleDeprecationWarning will be given if align= is not a boolean. This is mainly to prevent accidentally passing a
subarray align flag where it has no effect, such as np.dtype("f8", 3)
instead of np.dtype(("f8", 3)). We strongly suggest to always pass align= as a keyword argument.
Assertion and warning control utilities are deprecated
np.testing.assert_warns and np.testing.suppress_warnings are
deprecated. Use warnings.catch_warnings, warnings.filterwarnings, pytest.warns, or pytest.filterwarnings instead.
The numpy.fix function will be deprecated in a future release. It is
recommended to use numpy.trunc instead, as it provides the same
functionality of truncating decimal values to their integer parts. Static type
checkers might already report a warning for the use of numpy.fix.
in-place modification of ndarray.shape is pending deprecation
Setting the ndarray.shape attribute directly will be deprecated in a future
release. Instead of modifying the shape in place, it is recommended to use the numpy.reshape function. Static type checkers might already report a
warning for assignments to ndarray.shape.
Raise TypeError on attempt to convert array with ndim > 0 to scalar
Conversion of an array with ndim > 0 to a scalar was deprecated in NumPy
1.25. Now, attempting to do so raises TypeError. Ensure you extract a
single element from your array before performing this operation.
The fix_imports parameter was deprecated in NumPy 2.1.0 and is now removed.
This flag has been ignored since NumPy 1.17 and was only needed to support
loading files in Python 2 that were written in Python 3.
The newshape parameter was deprecated in NumPy 2.1.0 and has been
removed from numpy.reshape. Pass it positionally or use shape=
on newer NumPy versions.
numpy.array2string and numpy.sum deprecations finalized
The following long-deprecated APIs have been removed or converted to errors:
The style parameter has been removed from numpy.array2string.
This argument had no effect since Numpy 1.14.0. Any arguments following
it, such as formatter have now been made keyword-only.
Calling np.sum(generator) directly on a generator object now raises a TypeError. This behavior was deprecated in NumPy 1.15.0. Use np.sum(np.fromiter(generator)) or the python sum builtin instead.
NumPy's C extension modules have begun to use multi-phase initialisation, as
defined by PEP 489. As part of this, a new explicit check has been added that
each such module is only imported once per Python process. This comes with
the side-effect that deleting numpy from sys.modules and re-importing
it will now fail with an ImportError. This has always been unsafe, with
unexpected side-effects, though did not previously raise an error.
numpy.round now always returns a copy. Previously, it returned a view
for integer inputs for decimals >= 0 and a copy in all other cases.
This change brings round in line with ceil, floor and trunc.
Type-checkers will no longer accept calls to numpy.arange with start as a keyword argument. This was done for compatibility with
the Array API standard. At runtime it is still possible to use numpy.arange with start as a keyword argument.
The Macro NPY_ALIGNMENT_REQUIRED has been removed The macro was defined in
the npy_cpu.h file, so might be regarded as semi public. As it turns out,
with modern compilers and hardware it is almost always the case that
alignment is required, so numpy no longer uses the macro. It is unlikely
anyone uses it, but you might want to compile with the -Wundef flag or
equivalent to be sure.
The NPY_SORTKIND enum has been enhanced with new variables
This is of interest if you are using PyArray_Sort or PyArray_ArgSort.
We have changed the semantics of the old names in the NPY_SORTKIND enum and
added new ones. The changes are backward compatible, and no recompilation is
needed. The new names of interest are:
NPY_SORT_DEFAULT -- default sort (same value as NPY_QUICKSORT)
NPY_SORT_STABLE -- the sort must be stable (same value as NPY_MERGESORT)
NPY_SORT_DESCENDING -- the sort must be descending
The semantic change is that NPY_HEAPSORT is mapped to NPY_QUICKSORT when used.
Note that NPY_SORT_DESCENDING is not yet implemented.
New NPY_DT_get_constant slot for DType constant retrieval
A new slot NPY_DT_get_constant has been added to the DType API, allowing
dtype implementations to provide constant values such as machine limits and
special values. The slot function has the signature:
int get_constant(PyArray_Descr *descr, int constant_id, void *ptr)
It returns 1 on success, 0 if the constant is not available, or -1 on error.
The function is always called with the GIL held and may write to unaligned memory.
Integer constants (marked with the 1 << 16 bit) return npy_intp values,
while floating-point constants return values of the dtype's native type.
Implementing this can be used by user DTypes to provide numpy.finfo values.
A new PyUFunc_AddLoopsFromSpecs convenience function has been added to the C API.
This function allows adding multiple ufunc loops from their specs in one call
using a NULL-terminated array of PyUFunc_LoopSlot structs. It allows
registering sorting and argsorting loops using the new ArrayMethod API.
The casting kwarg now has a 'same_value' option that checks the actual
values can be round-trip cast without changing value. Currently it is only
implemented in ndarray.astype. This will raise a ValueError if any of the
values in the array would change as a result of the cast, including rounding of
floats or overflowing of ints.
StringDType fill_value support in numpy.ma.MaskedArray
Masked arrays now accept and preserve a Python str as their fill_value
when using the variable‑width StringDType (kind 'T'), including through
slicing and views. The default is 'N/A' and may be overridden by any valid
string. This fixes issue gh‑29421
and was implemented in pull request gh‑29423.
The ndmax option is now available for numpy.array.
It explicitly limits the maximum number of dimensions created from nested sequences.
This is particularly useful when creating arrays of list-like objects with dtype=object.
By default, NumPy recurses through all nesting levels to create the highest possible
dimensional array, but this behavior may not be desired when the intent is to preserve
nested structures as objects. The ndmax parameter provides explicit control over
this recursion depth.
Ufuncs called with a where mask and without an out positional or kwarg will
now emit a warning. This usage tends to trip up users who expect some value in
output locations where the mask is False (the ufunc will not touch those
locations). The warning can be suppressed by using out=None.
DType sorting and argsorting supports the ArrayMethod API
User-defined dtypes can now implement custom sorting and argsorting using the ArrayMethod API. This mechanism can be used in place of the PyArray_ArrFuncs slots which may be deprecated in the future.
The sorting and argsorting methods are registered by passing the arraymethod
specs that implement the operations to the new PyUFunc_AddLoopsFromSpecs
function. See the ArrayMethod API documentation for details.
NumPy now has a new __numpy_dtype__ protocol. NumPy will check
for this attribute when converting to a NumPy dtype via np.dtype(obj)
or any dtype= argument.
Downstream projects are encouraged to implement this for all dtype like
objects which may previously have used a .dtype attribute that returned
a NumPy dtype.
We expect to deprecate .dtype in the future to prevent interpreting
array-like objects with a .dtype attribute as a dtype.
If you wish you can implement __numpy_dtype__ to ensure an earlier
warning or error (.dtype is ignored if this is found).
The flatiter object now shares the same index preparation logic as ndarray, ensuring consistent behavior and fixing several issues where
invalid indices were previously accepted or misinterpreted.
Key fixes and improvements:
Stricter index validation
Boolean non-array indices like arr.flat[[True, True]] were
incorrectly treated as arr.flat[np.array([1, 1], dtype=int)].
They now raise an index error. Note that indices that match the
iterator's shape are expected to not raise in the future and be
handled as regular boolean indices. Use np.asarray(<index>) if
you want to match that behavior.
Float non-array indices were also cast to integer and incorrectly
treated as arr.flat[np.array([1.0, 1.0], dtype=int)]. This is now
deprecated and will be removed in a future version.
0-dimensional boolean indices like arr.flat[True] are also
deprecated and will be removed in a future version.
Consistent error types:
Certain invalid flatiter indices that previously raised ValueError
now correctly raise IndexError, aligning with ndarray behavior.
Improved error messages:
The error message for unsupported index operations now provides more
specific details, including explicitly listing the valid index types,
instead of the generic IndexError: unsupported index operation.
The error message generated by assert_array_compare which is used by functions
like assert_allclose, assert_array_less etc. now also includes information
about the indices at which the assertion fails.
Show unit information in __repr__ for datetime64("NaT")
When a datetime64 object is "Not a Time" (NaT), its __repr__ method now
includes the time unit of the datetime64 type. This makes it consistent with
the behavior of a timedelta64 object.
The speed of calculations on scalars has been improved by about a factor 6 for
ufuncs that take only one input (like np.sin(scalar)), reducing the speed
difference from their math equivalents from a factor 19 to 3 (the speed
for arrays is left unchanged).
The numpy.finfo class has been completely refactored to obtain floating-point
constants directly from C compiler macros rather than deriving them at runtime.
This provides better accuracy, platform compatibility and corrected
several attribute calculations:
Constants like eps, min, max, smallest_normal, and smallest_subnormal now come directly from standard C macros (FLT_EPSILON, DBL_MIN, etc.), ensuring platform-correct values.
The deprecated MachAr runtime discovery mechanism has been removed.
Derived attributes have been corrected to match standard definitions: machep and negep now use int(log2(eps)); nexp accounts for
all exponent patterns; nmant excludes the implicit bit; and minexp
follows the C standard definition.
longdouble constants, Specifically smallest_normal now follows the
C standard definitions as per respecitive platform.
Special handling added for PowerPC's IBM double-double format.
New test suite added in test_finfo.py to validate all finfo properties against expected machine arithmetic values for
float16, float32, and float64 types.
Multiple axes are now supported in numpy.trim_zeros
The axis argument of numpy.trim_zeros now accepts a sequence; for example np.trim_zeros(x, axis=(0, 1)) will trim the zeros from a multi-dimensional
array x along axes 0 and 1. This fixes issue gh‑29945 and was implemented
in pull request gh‑29947.
Runtime signature introspection support has been significantly improved
Many NumPy functions, classes, and methods that previously raised ValueError when passed to inspect.signature() now return meaningful
signatures. This improves support for runtime type checking, IDE autocomplete,
documentation generation, and runtime introspection capabilities across the
NumPy API.
Over three hundred classes and functions have been updated in total, including,
but not limited to, core classes such as ndarray, generic, dtype, ufunc, broadcast, nditer, etc., most methods of ndarray and
scalar types, array constructor functions (array, empty, arange, fromiter, etc.), all ufuncs, and many other commonly used functions,
including dot, concat, where, bincount, can_cast, and
numerous others.
Performance improvements to np.unique for string dtypes
The hash-based algorithm for unique extraction provides an order-of-magnitude
speedup on large string arrays. In an internal benchmark with about 1 billion
string elements, the hash-based np.unique completed in roughly 33.5 seconds,
compared to 498 seconds with the sort-based method -- about 15× faster for
unsorted unique operations on strings. This improvement greatly reduces the
time to find unique values in very large string datasets.
The numpy.ndindex function now uses itertools.product internally,
providing significant improvements in performance for large iteration spaces,
while maintaining the original behavior and interface. For example, for an
array of shape (50, 60, 90) the NumPy ndindex benchmark improves
performance by a factor 5.2.
Performance improvements to np.unique for complex dtypes
The hash-based algorithm for unique extraction now also supports
complex dtypes, offering noticeable performance gains.
In our benchmarks on complex128 arrays with 200,000 elements,
the hash-based approach was about 1.4--1.5× faster
than the sort-based baseline when there were 20% of unique values,
and about 5× faster when there were 0.2% of unique values.
Multiplication between a string and integer now raises OverflowError instead
of MemoryError if the result of the multiplication would create a string that
is too large to be represented. This follows Python's behavior.
unique_values for string dtypes may return unsorted data
np.unique now supports hash‐based duplicate removal for string dtypes.
This enhancement extends the hash-table algorithm to byte strings ('S'),
Unicode strings ('U'), and the experimental string dtype ('T', StringDType).
As a result, calling np.unique() on an array of strings will use
the faster hash-based method to obtain unique values.
Note that this hash-based method does not guarantee that the returned unique values will be sorted.
This also works for StringDType arrays containing None (missing values)
when using equal_nan=True (treating missing values as equal).
IMPORTANT: The default setting for cpu-baseline on x86 has been raised
to x86-64-v2 microarchitecture. This can be changed to none during build
time to support older CPUs, though SIMD optimizations for pre-2009 processors
are no longer maintained.
NumPy has reorganized x86 CPU features into microarchitecture-based groups
instead of individual features, aligning with Linux distribution standards and
Google Highway requirements.
Key changes:
Replaced individual x86 features with microarchitecture levels: X86_V2, X86_V3, and X86_V4
Raised the baseline to X86_V2
Improved - operator behavior to properly exclude successor features that
imply the excluded feature
Added meson redirections for removed feature names to maintain backward
compatibility
Removed compiler compatibility workarounds for partial feature support (e.g.,
AVX512 without mask operations)
Removed legacy AMD features (XOP, FMA4) and discontinued Intel Xeon Phi
support
The array interface now accepts NULL pointers (NumPy will do its own dummy
allocation, though). Previously, these incorrectly triggered an undocumented
scalar path. In the unlikely event that the scalar path was actually desired,
you can (for now) achieve the previous behavior via the correct scalar path by
not providing a data field at all.
unique_values for complex dtypes may return unsorted data
np.unique now supports hash‐based duplicate removal for complex dtypes. This
enhancement extends the hash‐table algorithm to all complex types ('c'), and
their extended precision variants. The hash‐based method provides faster
extraction of unique values but does not guarantee that the result will be
sorted.
Sorting kind='heapsort' now maps to kind='quicksort'
It is unlikely that this change will be noticed, but if you do see a change in
execution time or unstable argsort order, that is likely the cause. Please let
us know if there is a performance regression. Congratulate us if it is improved
:)
The npymath and npyrandom libraries now have a .lib rather than a .a file extension on win-arm64, for compatibility for building with MSVC
and setuptools. Please note that using these static libraries is
discouraged and for existing projects using it, it's best to use it with a
matching compiler toolchain, which is clang-cl on Windows on Arm.
- Migrate the ``dev``, ``docs``, and ``tests`` package extras to dependency groups by @​kurtmckee in `#​1152 <https://github.com/jpadilla/pyjwt/pull/1152>`__
`v2.12.1 <https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1>`__
------------------------------------------------------------------------
Fixed
~~~~~
- Add missing ``typing_extensions`` dependency for Python < 3.11 in `#​1150 <https://github.com/jpadilla/pyjwt/issues/1150>`__
`v2.12.0 <https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0>`__
-----------------------------------------------------------------------
Fixed
~~~~~
- Annotate PyJWKSet.keys for pyright by @​tamird in `#​1134 <https://github.com/jpadilla/pyjwt/pull/1134>`__
- Close ``HTTPError`` response to prevent ``ResourceWarning`` on Python 3.14 by @​veeceey in `#​1133 <https://github.com/jpadilla/pyjwt/pull/1133>`__
- Do not keep ``algorithms`` dict in PyJWK instances by @​akx in `#​1143 <https://github.com/jpadilla/pyjwt/pull/1143>`__
- Validate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by @​dmbs335 in `GHSA-752w-5fwx-jx9f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f>`__
- Use PyJWK algorithm
> ✂ **Note**
>
> PR body was truncated to here.
</details>
---
### Configuration
📅 **Schedule**: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **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](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/pixee/codemodder-python).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4zMi4yIiwidXBkYXRlZEluVmVyIjoiNDMuMjE5LjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->
Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
>=7.12,<7.13→>=7.14,<7.15~=1.2.0→~=1.3.0~=4.25.0→~=4.26.0>=6.0.0,<6.1.0→>=6.1.1,<6.2.0~= 2.3.0→~=2.4.6~=2.10.0→~=2.13.0~=4.0.0→~=4.1.0~=2.32.1→~=2.34.2>=1.144,<1.145→>=1.166,<1.167~=0.13.0→~=0.15.0==0.7.0.20250822→==0.7.0.20260504==3.2.1.20250809→==3.2.1.20260518Release Notes
coveragepy/coveragepy (coverage)
v7.14.1Compare Source
Fix: the HTML report used typographic niceties to make file paths more
readable by adding a small amount of space around slashes. Those spaces
interfered with searching the page for file paths of interest. Now the report
uses CSS to accomplish the same visual tweak so that searches with slashes
work correctly. Closes
issue 2170_.Add a 3.16 PyPI classifier <hugo-316_>_ since we test on the 3.16 mainbranch.
.. _issue 2170: #2170
.. _hugo-316: https://mastodon.social/@hugovk/116588523571204490
.. _changes_7-14-0:
v7.14.0Compare Source
Feature: now when running one of the reporting commands, if there are
parallel data files that need combining, they will be implicitly combined
before creating the report. There is no option to avoid the combination; let
us know if you have a use case that requires it. Thanks,
Tim Hatch <pull 2162_>. Closesissue 1781.Fix: the output from
combinewas too verbose, listing each fileconsidered. Now it shows a single line with the counts of files combined,
files skipped, and files with errors. The
-qflag suppresses this line.The old detailed lines are available with the new
--debug=combineoption.Fix: running a Python file through a symlink now sets the sys.path correctly,
matching regular Python behavior. Fixes
issue 2157_.Fix:
Collector.flush_datacould fail with "RuntimeError: Set changedsize during iteration" when a tracer in another thread added a line to the
per-file set that
add_lines(oradd_arcs) was iterating. The valuespassed to
CoverageDataare now snapshotted viadict.copy()andset.copy(), which are atomic under the GIL. Thanks,Alex Vandiver <pull 2165_>_.Fix: the soft keyword
lazyis now bolded in HTML reports.We are no longer testing eventlet support. Eventlet started issuing stern
deprecation warnings that break our tests. Our support code is still there.
.. _issue 1781: #1781
.. _issue 2157: #2157
.. _pull 2162: #2162
.. _pull 2165: #2165
.. _changes_7-13-5:
v7.13.5Compare Source
Fix:
issue 2138_ describes a memory leak that happened when repeatedlyusing the Coverage API with in-memory data. This is now fixed.
Fix: the markdown-formatted coverage report didn't fully escape special
characters in file paths (
issue 2141). This would be very unlikely tocause a problem, but now it's done properly, thanks to
Ellie Ayla <pull 2142_>.Fix: the C extension wouldn't build on VS2019, but now it does (
issue 2145_)... _issue 2138: #2138
.. _issue 2141: #2141
.. _pull 2142: #2142
.. _issue 2145: #2145
.. _changes_7-13-4:
v7.13.4Compare Source
Fix: the third-party code fix in 7.13.3 required examining the parent
directories where coverage was run. In the unusual situation that one of the
parent directories is unreadable, a PermissionError would occur, as
described in
issue 2129_. This is now fixed.Fix: in test suites that change sys.path, coverage.py could fail with
"RuntimeError: Set changed size during iteration" as described and fixed in
pull 2130_. Thanks, Noah Fatsi.We now publish ppc64le wheels, thanks to
Pankhudi Jain <pull 2121_>_... _pull 2121: #2121
.. _issue 2129: #2129
.. _pull 2130: #2130
.. _changes_7-13-3:
v7.13.3Compare Source
been, slowing down test execution. This happened with layered virtual
environments such as uv sometimes makes. The problem is fixed, closing
issue 2082_. Now any directory on sys.path that is inside a virtualenv isconsidered third-party code.
.. _issue 2082: #2082
.. _changes_7-13-2:
v7.13.2Compare Source
Fix: when Python is installed via symlinks, for example with Homebrew, the
standard library files could be incorrectly included in coverage reports.
This is now fixed, closing
issue 2115_.Fix: if a data file is created with no read permissions, the combine step
would fail completely. Now a warning is issued and the file is skipped.
Closes
issue 2117_... _issue 2115: #2115
.. _issue 2117: #2117
.. _changes_7-13-1:
v7.13.1Compare Source
Added: the JSON report now includes a
"start_line"key for function andclass regions, indicating the first line of the region in the source. Closes
issue 2110_.Added: The
debug datacommand now takes file names as arguments on thecommand line, so you can inspect specific data files without needing to set
the
COVERAGE_FILEenvironment variable.Fix: the JSON report used to report module docstrings as executed lines,
which no other report did, as described in
issue 2105_. This is now fixed,thanks to Jianrong Zhao.
Fix: coverage.py uses a more disciplined approach to detecting where
third-party code is installed, and avoids measuring it. This shouldn't change
any behavior. If you find that it does, please get in touch.
Performance: data files that will be combined now record their hash as part
of the file name. This lets us skip duplicate data more quickly, speeding the
combining step.
Docs: added a section explaining more about what is considered a missing
branch and how it is reported: :ref:
branch_explain, as requested inissue 1597. Thanks toAyisha Mohammed <pull 2092_>.Tests: the test suite misunderstood what core was being tested if
COVERAGE_COREwasn't set on 3.14+. This is now fixed, closingissue 2109_... _issue 1597: #1597
.. _pull 2092: #2092
.. _issue 2105: #2105
.. _issue 2109: #2109
.. _issue 2110: #2110
.. _changes_7-13-0:
v7.13.0Compare Source
Feature: coverage.py now supports :file:
.coveragerc.tomlconfigurationfiles. These files use TOML syntax and take priority over
:file:
pyproject.tomlbut lower priority than :file:.coveragercfiles.Closes
issue 1643_ thanks toOlena Yefymenko <pull 1952_>_.Fix: we now include a permanent .pth file which is installed with the code,
fixing
issue 2084. In 7.12.1b1 this was done incorrectly: it didn't workwhen using the source wheel (
py3-none-any). This is now fixed. Thanks,Henry Schreiner <pull 2100_>.Deprecated: when coverage.py is installed, it creates three command entry
points:
coverage,coverage3, andcoverage-3.10(if installed forPython 3.10). The second and third of these are not needed and will
eventually be removed. They still work for now, but print a message about
their deprecation.
.. _issue 1643: #1643
.. _pull 1952: #1952
.. _pull 2100: #2100
.. _changes_7-12-1b1:
python-jsonschema/jsonschema (jsonschema)
v4.26.0Compare Source
=======
urllib.request(#1416).lxml/lxml (lxml)
v6.1.1Compare Source
==================
Bugs fixed
The known link attributes in
lxml.html.defs.link_attrswere missingxlink:href,which can be used for URL bypass attacks in embedded SVG/MathML/etc. content.
GHSA-4jhm-jv67-739f
The Linux wheels use a patched libxslt 1.1.43, fixing CVE-2025-7424 and CVE-2025-11731.
The Windows wheels use libxslt 1.1.45, fixing CVE-2025-7424 and CVE-2025-11731.
v6.1.0Compare Source
==================
This release fixes a possible external entity injection (XXE) vulnerability in
iterparse()and theETCompatXMLParser.Features added
GH#486: The HTML ARIA accessibility attributes were added to the set of safe attributes
in
lxml.html.defs. This allowslxml_html_cleanto pass them through.Patch by oomsveta.
The default chunk size for reading from file-likes in
iterparse()is now configurablewith a new
chunk_sizeargument.Bugs fixed
resolve_entitiesoption was still set toTrueforiterparseandETCompatXMLParser, allowing for external entity injection (XXE)when using these parsers without setting this option explicitly.
The default was now changed to
'internal'only (as for the normal XML and HTML parserssince lxml 5.0).
Issue found by Sihao Qiu as CVE-2026-41066.
numpy/numpy (numpy)
v2.4.6Compare Source
v2.4.5: (May 15, 2026)Compare Source
NumPy 2.4.5 Release Notes
NumPy 2.4.5 is a patch release that fixes bugs discovered after the 2.4.4
release, has some typing improvements, and maintains infrastructure.
This release supports Python versions 3.11-3.14
Contributors
A total of 17 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
Pull requests merged
A total of 28 pull requests were merged for this release.
np.shapeassignability issue for python lists (#31171)pack_inner...tile: accept numpy scalars and arrays as second argument...ix_fix for boolean and non-1d input (#31218)_NestedSequencetype parameter default to work around...DTypeLikeruntime type-checker support (#31425)v2.4.4: 2.4.4 (Mar 29, 2026)Compare Source
NumPy 2.4.4 Release Notes
The NumPy 2.4.4 is a patch release that fixes bugs discovered after the 2.4.3
release. It should finally close issue #30816, the OpenBLAS threading problem
on ARM.
This release supports Python versions 3.11-3.14
Contributors
A total of 8 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
Pull requests merged
A total of 7 pull requests were merged for this release.
sprintfwithsnprintf...v2.4.3Compare Source
v2.4.2Compare Source
v2.4.1: 2.4.1 (Jan 10, 2026)Compare Source
NumPy 2.4.1 Release Notes
The NumPy 2.4.1 is a patch release that fixes bugs discoved after the
2.4.0 release. In particular, the typo
SeedlessSequenceis preserved toenable wheels using the random Cython API and built against NumPy < 2.4.0
to run without errors.
This release supports Python versions 3.11-3.14
Contributors
A total of 9 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
Pull requests merged
A total of 15 pull requests were merged for this release.
numpy.select: fixdefaultparameter docstring...numpy.select: allow passing array-likedefault...v2.4.0: 2.4.0 (Dec 20, 2025)Compare Source
NumPy 2.4.0 Release Notes
The NumPy 2.4.0 release continues the work to improve free threaded Python
support, user dtypes implementation, and annotations. There are many expired
deprecations and bug fixes as well.
This release supports Python versions 3.11-3.14
Highlights
Apart from annotations and
same_valuekwarg, the 2.4 highlights are mostlyof interest to downstream developers. They should help in implementing new user
dtypes.
castingkwarg'same_value'for casting by value.PyUFunc_AddLoopsFromSpecfunction that can be used to add user sortloops using the
ArrayMethodAPI.__numpy_dtype__protocol.Deprecations
Setting the
stridesattribute is deprecatedSetting the strides attribute is now deprecated since mutating
an array is unsafe if an array is shared, especially by multiple
threads. As an alternative, you can create a new view (no copy) via:
np.lib.stride_tricks.strided_window_viewif applicable,np.lib.stride_tricks.as_stridedfor the general case,np.ndarrayconstructor (bufferis the original array) for alight-weight version.
(gh-28925)
Positional
outargument tonp.maximum,np.minimumis deprecatedPassing the output array
outpositionally tonumpy.maximumandnumpy.minimumis deprecated. For example,np.maximum(a, b, c)will emita deprecation warning, since
cis treated as the output buffer rather thana third input.
Always pass the output with the keyword form, e.g.
np.maximum(a, b, out=c).This makes intent clear and simplifies type annotations.
(gh-29052)
align=must be passed as boolean tonp.dtype()When creating a new
dtypeaVisibleDeprecationWarningwill be given ifalign=is not a boolean. This is mainly to prevent accidentally passing asubarray align flag where it has no effect, such as
np.dtype("f8", 3)instead of
np.dtype(("f8", 3)). We strongly suggest to always passalign=as a keyword argument.(gh-29301)
Assertion and warning control utilities are deprecated
np.testing.assert_warnsandnp.testing.suppress_warningsaredeprecated. Use
warnings.catch_warnings,warnings.filterwarnings,pytest.warns, orpytest.filterwarningsinstead.(gh-29550)
np.fixis pending deprecationThe
numpy.fixfunction will be deprecated in a future release. It isrecommended to use
numpy.truncinstead, as it provides the samefunctionality of truncating decimal values to their integer parts. Static type
checkers might already report a warning for the use of
numpy.fix.(gh-30168)
in-place modification of
ndarray.shapeis pending deprecationSetting the
ndarray.shapeattribute directly will be deprecated in a futurerelease. Instead of modifying the shape in place, it is recommended to use the
numpy.reshapefunction. Static type checkers might already report awarning for assignments to
ndarray.shape.(gh-30282)
Deprecation of
numpy.lib.user_array.containerThe
numpy.lib.user_array.containerclass is deprecated and will be removedin a future version.
(gh-30284)
Expired deprecations
Removed deprecated
MachArruntime discovery mechanism.(gh-29836)
Raise
TypeErroron attempt to convert array withndim > 0to scalarConversion of an array with
ndim > 0to a scalar was deprecated in NumPy1.25. Now, attempting to do so raises
TypeError. Ensure you extract asingle element from your array before performing this operation.
(gh-29841)
Removed numpy.linalg.linalg and numpy.fft.helper
The following were deprecated in NumPy 2.0 and have been moved to private
modules:
numpy.linalg.linalgUse
numpy.linalginstead.numpy.fft.helperUse
numpy.fftinstead.(gh-29909)
Removed
interpolationparameter from quantile and percentile functionsThe
interpolationparameter was deprecated in NumPy 1.22.0 and has beenremoved from the following functions:
numpy.percentilenumpy.nanpercentilenumpy.quantilenumpy.nanquantileUse the
methodparameter instead.(gh-29973)
Removed
numpy.in1dnumpy.in1dhas been deprecated since NumPy 2.0 and is now removed in favor ofnumpy.isin.(gh-29978)
Removed
numpy.ndindex.ndincr()The
ndindex.ndincr()method has been deprecated since NumPy 1.20 and is nowremoved; use
next(ndindex)instead.(gh-29980)
Removed
fix_importsparameter fromnumpy.saveThe
fix_importsparameter was deprecated in NumPy 2.1.0 and is now removed.This flag has been ignored since NumPy 1.17 and was only needed to support
loading files in Python 2 that were written in Python 3.
(gh-29984)
Removal of four undocumented
ndarray.ctypesmethodsFour undocumented methods of the
ndarray.ctypesobject have been removed:_ctypes.get_data()(use_ctypes.datainstead)_ctypes.get_shape()(use_ctypes.shapeinstead)_ctypes.get_strides()(use_ctypes.stridesinstead)_ctypes.get_as_parameter()(use_ctypes._as_parameter_instead)These methods have been deprecated since NumPy 1.21.
(gh-29986)
Removed
newshapeparameter fromnumpy.reshapeThe
newshapeparameter was deprecated in NumPy 2.1.0 and has beenremoved from
numpy.reshape. Pass it positionally or useshape=on newer NumPy versions.
(gh-29994)
Removal of deprecated functions and arguments
The following long-deprecated APIs have been removed:
numpy.trapz--- deprecated since NumPy 2.0 (2023-08-18). Usenumpy.trapezoidorscipy.integratefunctions instead.dispfunction --- deprecated from 2.0 release and no longer functional. Useyour own printing function instead.
biasandddofarguments innumpy.corrcoef--- these had no effectsince NumPy 1.10.
(gh-29997)
Removed
delimitorparameter fromnumpy.ma.mrecords.fromtextfile()The
delimitorparameter was deprecated in NumPy 1.22.0 and has beenremoved from
numpy.ma.mrecords.fromtextfile(). Usedelimiterinstead.(gh-30021)
numpy.array2stringandnumpy.sumdeprecations finalizedThe following long-deprecated APIs have been removed or converted to errors:
styleparameter has been removed fromnumpy.array2string.This argument had no effect since Numpy 1.14.0. Any arguments following
it, such as
formatterhave now been made keyword-only.np.sum(generator)directly on a generator object now raises aTypeError. This behavior was deprecated in NumPy 1.15.0. Usenp.sum(np.fromiter(generator))or the pythonsumbuiltin instead.(gh-30068)
Compatibility notes
NumPy's C extension modules have begun to use multi-phase initialisation, as
defined by PEP 489. As part of this, a new explicit check has been added that
each such module is only imported once per Python process. This comes with
the side-effect that deleting
numpyfromsys.modulesand re-importingit will now fail with an
ImportError. This has always been unsafe, withunexpected side-effects, though did not previously raise an error.
(gh-29030)
numpy.roundnow always returns a copy. Previously, it returned a viewfor integer inputs for
decimals >= 0and a copy in all other cases.This change brings
roundin line withceil,floorandtrunc.(gh-29137)
Type-checkers will no longer accept calls to
numpy.arangewithstartas a keyword argument. This was done for compatibility withthe Array API standard. At runtime it is still possible to use
numpy.arangewithstartas a keyword argument.(gh-30147)
The Macro NPY_ALIGNMENT_REQUIRED has been removed The macro was defined in
the
npy_cpu.hfile, so might be regarded as semi public. As it turns out,with modern compilers and hardware it is almost always the case that
alignment is required, so numpy no longer uses the macro. It is unlikely
anyone uses it, but you might want to compile with the
-Wundefflag orequivalent to be sure.
(gh-29094)
C API changes
The NPY_SORTKIND enum has been enhanced with new variables
This is of interest if you are using
PyArray_SortorPyArray_ArgSort.We have changed the semantics of the old names in the
NPY_SORTKINDenum andadded new ones. The changes are backward compatible, and no recompilation is
needed. The new names of interest are:
NPY_SORT_DEFAULT-- default sort (same value asNPY_QUICKSORT)NPY_SORT_STABLE-- the sort must be stable (same value asNPY_MERGESORT)NPY_SORT_DESCENDING-- the sort must be descendingThe semantic change is that
NPY_HEAPSORTis mapped toNPY_QUICKSORTwhen used.Note that
NPY_SORT_DESCENDINGis not yet implemented.(gh-29642)
New
NPY_DT_get_constantslot for DType constant retrievalA new slot
NPY_DT_get_constanthas been added to the DType API, allowingdtype implementations to provide constant values such as machine limits and
special values. The slot function has the signature:
It returns 1 on success, 0 if the constant is not available, or -1 on error.
The function is always called with the GIL held and may write to unaligned memory.
Integer constants (marked with the
1 << 16bit) returnnpy_intpvalues,while floating-point constants return values of the dtype's native type.
Implementing this can be used by user DTypes to provide
numpy.finfovalues.(gh-29836)
A new
PyUFunc_AddLoopsFromSpecsconvenience function has been added to the C API.This function allows adding multiple ufunc loops from their specs in one call
using a NULL-terminated array of
PyUFunc_LoopSlotstructs. It allowsregistering sorting and argsorting loops using the new ArrayMethod API.
(gh-29900)
New Features
Let
np.sizeaccept multiple axes.(gh-29240)
Extend
numpy.padto accept a dictionary for thepad_widthargument.(gh-29273)
'same_value'for casting by valueThe
castingkwarg now has a'same_value'option that checks the actualvalues can be round-trip cast without changing value. Currently it is only
implemented in
ndarray.astype. This will raise aValueErrorif any of thevalues in the array would change as a result of the cast, including rounding of
floats or overflowing of ints.
(gh-29129)
StringDTypefill_value support innumpy.ma.MaskedArrayMasked arrays now accept and preserve a Python
stras theirfill_valuewhen using the variable‑width
StringDType(kind'T'), including throughslicing and views. The default is
'N/A'and may be overridden by any validstring. This fixes issue gh‑29421
and was implemented in pull request gh‑29423.
(gh-29423)
ndmaxoption fornumpy.arrayThe
ndmaxoption is now available fornumpy.array.It explicitly limits the maximum number of dimensions created from nested sequences.
This is particularly useful when creating arrays of list-like objects with
dtype=object.By default, NumPy recurses through all nesting levels to create the highest possible
dimensional array, but this behavior may not be desired when the intent is to preserve
nested structures as objects. The
ndmaxparameter provides explicit control overthis recursion depth.
(gh-29569)
Warning emitted when using
wherewithoutoutUfuncs called with a
wheremask and without anoutpositional or kwarg willnow emit a warning. This usage tends to trip up users who expect some value in
output locations where the mask is
False(the ufunc will not touch thoselocations). The warning can be suppressed by using
out=None.(gh-29813)
DType sorting and argsorting supports the ArrayMethod API
User-defined dtypes can now implement custom sorting and argsorting using the
ArrayMethodAPI. This mechanism can be used in place of thePyArray_ArrFuncsslots which may be deprecated in the future.The sorting and argsorting methods are registered by passing the arraymethod
specs that implement the operations to the new
PyUFunc_AddLoopsFromSpecsfunction. See the
ArrayMethodAPI documentation for details.(gh-29900)
New
__numpy_dtype__protocolNumPy now has a new
__numpy_dtype__protocol. NumPy will checkfor this attribute when converting to a NumPy dtype via
np.dtype(obj)or any
dtype=argument.Downstream projects are encouraged to implement this for all dtype like
objects which may previously have used a
.dtypeattribute that returneda NumPy dtype.
We expect to deprecate
.dtypein the future to prevent interpretingarray-like objects with a
.dtypeattribute as a dtype.If you wish you can implement
__numpy_dtype__to ensure an earlierwarning or error (
.dtypeis ignored if this is found).(gh-30179)
Improvements
Fix
flatiterindexing edge casesThe
flatiterobject now shares the same index preparation logic asndarray, ensuring consistent behavior and fixing several issues whereinvalid indices were previously accepted or misinterpreted.
Key fixes and improvements:
Stricter index validation
arr.flat[[True, True]]wereincorrectly treated as
arr.flat[np.array([1, 1], dtype=int)].They now raise an index error. Note that indices that match the
iterator's shape are expected to not raise in the future and be
handled as regular boolean indices. Use
np.asarray(<index>)ifyou want to match that behavior.
treated as
arr.flat[np.array([1.0, 1.0], dtype=int)]. This is nowdeprecated and will be removed in a future version.
arr.flat[True]are alsodeprecated and will be removed in a future version.
Consistent error types:
Certain invalid
flatiterindices that previously raisedValueErrornow correctly raise
IndexError, aligning withndarraybehavior.Improved error messages:
The error message for unsupported index operations now provides more
specific details, including explicitly listing the valid index types,
instead of the generic
IndexError: unsupported index operation.(gh-28590)
Improved error handling in
np.quantile[np.quantile]{.title-ref} now raises errors if:
np.nannp.inf(gh-28595)
Improved error message for
assert_array_compareThe error message generated by
assert_array_comparewhich is used by functionslike
assert_allclose,assert_array_lessetc. now also includes informationabout the indices at which the assertion fails.
(gh-29112)
Show unit information in
__repr__fordatetime64("NaT")When a
datetime64object is "Not a Time" (NaT), its__repr__method nowincludes the time unit of the datetime64 type. This makes it consistent with
the behavior of a
timedelta64object.(gh-29396)
Performance increase for scalar calculations
The speed of calculations on scalars has been improved by about a factor 6 for
ufuncs that take only one input (like
np.sin(scalar)), reducing the speeddifference from their
mathequivalents from a factor 19 to 3 (the speedfor arrays is left unchanged).
(gh-29819)
numpy.finfoRefactorThe
numpy.finfoclass has been completely refactored to obtain floating-pointconstants directly from C compiler macros rather than deriving them at runtime.
This provides better accuracy, platform compatibility and corrected
several attribute calculations:
eps,min,max,smallest_normal, andsmallest_subnormalnow come directly from standard C macros (FLT_EPSILON,DBL_MIN, etc.), ensuring platform-correct values.MachArruntime discovery mechanism has been removed.machepandnegepnow useint(log2(eps));nexpaccounts forall exponent patterns;
nmantexcludes the implicit bit; andminexpfollows the C standard definition.
smallest_normalnow follows theC standard definitions as per respecitive platform.
test_finfo.pyto validate allfinfoproperties against expected machine arithmetic values forfloat16, float32, and float64 types.
(gh-29836)
Multiple axes are now supported in
numpy.trim_zerosThe
axisargument ofnumpy.trim_zerosnow accepts a sequence; for examplenp.trim_zeros(x, axis=(0, 1))will trim the zeros from a multi-dimensionalarray
xalong axes 0 and 1. This fixes issuegh‑29945 and was implemented
in pull request gh‑29947.
(gh-29947)
Runtime signature introspection support has been significantly improved
Many NumPy functions, classes, and methods that previously raised
ValueErrorwhen passed toinspect.signature()now return meaningfulsignatures. This improves support for runtime type checking, IDE autocomplete,
documentation generation, and runtime introspection capabilities across the
NumPy API.
Over three hundred classes and functions have been updated in total, including,
but not limited to, core classes such as
ndarray,generic,dtype,ufunc,broadcast,nditer, etc., most methods ofndarrayandscalar types, array constructor functions (
array,empty,arange,fromiter, etc.), allufuncs, and many other commonly used functions,including
dot,concat,where,bincount,can_cast, andnumerous others.
(gh-30208)
Performance improvements and changes
Performance improvements to
np.uniquefor string dtypesThe hash-based algorithm for unique extraction provides an order-of-magnitude
speedup on large string arrays. In an internal benchmark with about 1 billion
string elements, the hash-based np.unique completed in roughly 33.5 seconds,
compared to 498 seconds with the sort-based method -- about 15× faster for
unsorted unique operations on strings. This improvement greatly reduces the
time to find unique values in very large string datasets.
(gh-28767)
Rewrite of
np.ndindexusingitertools.productThe
numpy.ndindexfunction now usesitertools.productinternally,providing significant improvements in performance for large iteration spaces,
while maintaining the original behavior and interface. For example, for an
array of shape (50, 60, 90) the NumPy
ndindexbenchmark improvesperformance by a factor 5.2.
(gh-29165)
Performance improvements to
np.uniquefor complex dtypesThe hash-based algorithm for unique extraction now also supports
complex dtypes, offering noticeable performance gains.
In our benchmarks on complex128 arrays with 200,000 elements,
the hash-based approach was about 1.4--1.5× faster
than the sort-based baseline when there were 20% of unique values,
and about 5× faster when there were 0.2% of unique values.
(gh-29537)
Changes
Multiplication between a string and integer now raises OverflowError instead
of MemoryError if the result of the multiplication would create a string that
is too large to be represented. This follows Python's behavior.
(gh-29060)
The accuracy of
np.quantileandnp.percentilefor 16- and 32-bitfloating point input data has been improved.
(gh-29105)
unique_valuesfor string dtypes may return unsorted datanp.unique now supports hash‐based duplicate removal for string dtypes.
This enhancement extends the hash-table algorithm to byte strings ('S'),
Unicode strings ('U'), and the experimental string dtype ('T', StringDType).
As a result, calling np.unique() on an array of strings will use
the faster hash-based method to obtain unique values.
Note that this hash-based method does not guarantee that the returned unique values will be sorted.
This also works for StringDType arrays containing None (missing values)
when using equal_nan=True (treating missing values as equal).
(gh-28767)
Modulate dispatched x86 CPU features
IMPORTANT: The default setting for
cpu-baselineon x86 has been raisedto
x86-64-v2microarchitecture. This can be changed to none during buildtime to support older CPUs, though SIMD optimizations for pre-2009 processors
are no longer maintained.
NumPy has reorganized x86 CPU features into microarchitecture-based groups
instead of individual features, aligning with Linux distribution standards and
Google Highway requirements.
Key changes:
X86_V2,X86_V3, andX86_V4X86_V2-operator behavior to properly exclude successor features thatimply the excluded feature
compatibility
AVX512 without mask operations)
support
New Feature Group Hierarchy:
Name Implies Includes
X86_V2SSESSE2SSE3SSSE3SSE4_1SSE4_2POPCNTCX16LAHFX86_V3X86_V2AVXAVX2FMA3BMIBMI2LZCNTF16CMOVBEX86_V4X86_V3AVX512FAVX512CDAVX512VLAVX512BWAVX512DQAVX512_ICLX86_V4AVX512VBMIAVX512VBMI2AVX512VNNIAVX512BITALGAVX512VPOPCNTDQAVX512IFMAVAESGFNIVPCLMULQDQAVX512_SPRAVX512_ICLAVX512FP16These groups correspond to CPU generations:
X86_V2: x86-64-v2 microarchitectures (CPUs since 2009)X86_V3: x86-64-v3 microarchitectures (CPUs since 2015)X86_V4: x86-64-v4 microarchitectures (AVX-512 capable CPUs)AVX512_ICL: Intel Ice Lake and similar CPUsAVX512_SPR: Intel Sapphire Rapids and newer CPUsOn 32-bit x86,
cx16is excluded fromX86_V2.Documentation has been updated with details on using these new feature groups
with the current meson build system.
(gh-28896)
Fix bug in
matmulfor non-contiguous out kwarg parameterIn some cases, if
outwas non-contiguous,np.matmulwould cause memorycorruption or a c-level assert. This was new to v2.3.0 and fixed in v2.3.1.
(gh-29179)
__array_interface__with NULL pointer changedThe array interface now accepts NULL pointers (NumPy will do its own dummy
allocation, though). Previously, these incorrectly triggered an undocumented
scalar path. In the unlikely event that the scalar path was actually desired,
you can (for now) achieve the previous behavior via the correct scalar path by
not providing a
datafield at all.(gh-29338)
unique_valuesfor complex dtypes may return unsorted datanp.unique now supports hash‐based duplicate removal for complex dtypes. This
enhancement extends the hash‐table algorithm to all complex types ('c'), and
their extended precision variants. The hash‐based method provides faster
extraction of unique values but does not guarantee that the result will be
sorted.
(gh-29537)
Sorting
kind='heapsort'now maps tokind='quicksort'It is unlikely that this change will be noticed, but if you do see a change in
execution time or unstable argsort order, that is likely the cause. Please let
us know if there is a performance regression. Congratulate us if it is improved
:)
(gh-29642)
numpy.typing.DTypeLikeno longer acceptsNoneThe type alias
numpy.typing.DTypeLikeno longer acceptsNone. Instead ofit should now be
instead.
(gh-29739)
The
npymathandnpyrandomlibraries now have a.librather than a.afile extension on win-arm64, for compatibility for building with MSVCand
setuptools. Please note that using these static libraries isdiscouraged and for existing projects using it, it's best to use it with a
matching compiler toolchain, which is
clang-clon Windows on Arm.(gh-29750)
jpadilla/pyjwt (pyjwt)
v2.13.0Compare Source
v2.12.1Compare Source
Changed