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:
==1.26.4
->==2.1.1
Release Notes
numpy/numpy (numpy)
v2.1.1
Compare Source
v2.1.0
Compare Source
v2.0.2
: NumPy 2.0.2 release (Aug 26, 2024)Compare Source
NumPy 2.0.2 Release Notes
NumPy 2.0.2 is a maintenance release that fixes bugs and regressions
discovered after the 2.0.1 release.
The Python versions supported by this release are 3.9-3.12.
Contributors
A total of 13 people contributed to this release. People with a "+" by
their names contributed a patch for the first time.
Pull requests merged
A total of 19 pull requests were merged for this release.
alltrue
andsometrue
npyv_loadable_stride_
functions for ldexp and...np.save
Checksums
MD5
SHA256
v2.0.1
Compare Source
v2.0.0
Compare Source
NumPy 2.0.0 Release Notes
NumPy 2.0.0 is the first major release since 2006. It is the result of
11 months of development since the last feature release and is the work
of 212 contributors spread over 1078 pull requests. It contains a large
number of exciting new features as well as changes to both the Python
and C APIs.
This major release includes breaking changes that could not happen in a
regular minor (feature) release - including an ABI break, changes to
type promotion rules, and API changes which may not have been emitting
deprecation warnings in 1.26.x. Key documents related to how to adapt to
changes in NumPy 2.0, in addition to these release notes, include:
Highlights
Highlights of this release include:
numpy.dtypes.StringDType
and a newnumpy.strings
namespace with performant ufuncs for string operations,float32
andlongdouble
in allnumpy.fft
functions,numpy
namespace.
sort
,argsort
,partition
,argpartition
have beenaccelerated through the use of the Intel x86-simd-sort and
Google Highway libraries, and may see large (hardware-specific)
speedups,
significant performance improvements for linear algebra
operations on macOS, and wheels that are about 3 times smaller,
numpy.char
fixed-length string operations havebeen accelerated by implementing ufuncs that also support
numpy.dtypes.StringDType
in addition to thefixed-length string dtypes,
numpy.lib.introspect.opt_func_info
, to determinewhich hardware-specific kernels are available and will be
dispatched to.
numpy.save
now uses pickle protocol version 4 for savingarrays with object dtype, which allows for pickle objects larger
than 4GB and improves saving speed by about 5% for large arrays.
structure and each public function now available in a single place.
should make it easier to learn and use NumPy. The number of
objects in the main namespace decreased by ~10% and in
numpy.lib
by ~80%.Canonical dtype names and a new
numpy.isdtype` introspectionfunction,
internals hidden to ease future extensibility,
PyArray_ImportNumPyAPI
and
PyUFunc_ImportUFuncAPI
.This fixes many user surprises about promotions which previously often
depended on data values of input arrays rather than only their dtypes.
Please see the NEP and the numpy-2-migration-guide for details as this
change can lead to changes in output dtypes and lower precision results
for mixed-dtype operations.
int64
rather thanint32
, matching the behavior on other platforms,there is now documentation on NumPy's
module structure,
Furthermore there are many changes to NumPy internals, including
continuing to migrate code from C to C++, that will make it easier to
improve and maintain NumPy in the future.
The "no free lunch" theorem dictates that there is a price to pay for
all these API and behavior improvements and better future extensibility.
This price is:
Backwards compatibility. There are a significant number of breaking
changes to both the Python and C APIs. In the majority of cases,
there are clear error messages that will inform the user how to
adapt their code. However, there are also changes in behavior for
which it was not possible to give such an error message - these
cases are all covered in the Deprecation and Compatibility sections
below, and in the numpy-2-migration-guide.
Note that there is a
ruff
mode to auto-fix many things in Pythoncode.
Breaking changes to the NumPy ABI. As a result, binaries of packages
that use the NumPy C API and were built against a NumPy 1.xx release
will not work with NumPy 2.0. On import, such packages will see an
ImportError
with a message about binary incompatibility.It is possible to build binaries against NumPy 2.0 that will work at
runtime with both NumPy 2.0 and 1.x. See numpy-2-abi-handling for more
details.
All downstream packages that depend on the NumPy ABI are advised
to do a new release built against NumPy 2.0 and verify that that
release works with both 2.0 and 1.26 - ideally in the period between
2.0.0rc1 (which will be ABI-stable) and the final 2.0.0 release to
avoid problems for their users.
The Python versions supported by this release are 3.9-3.12.
NumPy 2.0 Python API removals
np.geterrobj
,np.seterrobj
and the related ufunc keywordargument
extobj=
have been removed. The preferred replacement forall of these is using the context manager
with np.errstate():
.(gh-23922)
np.cast
has been removed. The literal replacement fornp.cast[dtype](arg)
isnp.asarray(arg, dtype=dtype)
.np.source
has been removed. The preferred replacement isinspect.getsource
.np.lookfor
has been removed.(gh-24144)
numpy.who
has been removed. As an alternative for the removedfunctionality, one can use a variable explorer that is available in
IDEs such as Spyder or Jupyter Notebook.
(gh-24321)
Warnings and exceptions present in
numpy.exceptions
,e.g,
numpy.exceptions.ComplexWarning
,numpy.exceptions.VisibleDeprecationWarning
, are nolonger exposed in the main namespace.
Multiple niche enums, expired members and functions have been
removed from the main namespace, such as:
ERR_*
,SHIFT_*
,np.fastCopyAndTranspose
,np.kernel_version
,np.numarray
,np.oldnumeric
andnp.set_numeric_ops
.(gh-24316)
Replaced
from ... import *
in thenumpy/__init__.py
withexplicit imports. As a result, these main namespace members got
removed:
np.FLOATING_POINT_SUPPORT
,np.FPE_*
,np.NINF
,np.PINF
,np.NZERO
,np.PZERO
,np.CLIP
,np.WRAP
,np.WRAP
,np.RAISE
,np.BUFSIZE
,np.UFUNC_BUFSIZE_DEFAULT
,np.UFUNC_PYVALS_NAME
,np.ALLOW_THREADS
,np.MAXDIMS
,np.MAY_SHARE_EXACT
,np.MAY_SHARE_BOUNDS
,add_newdoc
,np.add_docstring
andnp.add_newdoc_ufunc
.(gh-24357)
Alias
np.float_
has been removed. Usenp.float64
instead.Alias
np.complex_
has been removed. Usenp.complex128
instead.Alias
np.longfloat
has been removed. Usenp.longdouble
instead.Alias
np.singlecomplex
has been removed. Usenp.complex64
instead.
Alias
np.cfloat
has been removed. Usenp.complex128
instead.Alias
np.longcomplex
has been removed. Usenp.clongdouble
instead.
Alias
np.clongfloat
has been removed. Usenp.clongdouble
instead.
Alias
np.string_
has been removed. Usenp.bytes_
instead.Alias
np.unicode_
has been removed. Usenp.str_
instead.Alias
np.Inf
has been removed. Usenp.inf
instead.Alias
np.Infinity
has been removed. Usenp.inf
instead.Alias
np.NaN
has been removed. Usenp.nan
instead.Alias
np.infty
has been removed. Usenp.inf
instead.Alias
np.mat
has been removed. Usenp.asmatrix
instead.np.issubclass_
has been removed. Use theissubclass
builtininstead.
np.asfarray
has been removed. Usenp.asarray
with a proper dtypeinstead.
np.set_string_function
has been removed. Usenp.set_printoptions
instead with a formatter for custom printing of NumPy objects.
np.tracemalloc_domain
is now only available fromnp.lib
.np.recfromcsv
andrecfromtxt
are now only available fromnp.lib.npyio
.np.issctype
,np.maximum_sctype
,np.obj2sctype
,np.sctype2char
,np.sctypes
,np.issubsctype
were all removedfrom the main namespace without replacement, as they where niche
members.
Deprecated
np.deprecate
andnp.deprecate_with_doc
has beenremoved from the main namespace. Use
DeprecationWarning
instead.Deprecated
np.safe_eval
has been removed from the main namespace.Use
ast.literal_eval
instead.(gh-24376)
np.find_common_type
has been removed. Usenumpy.promote_types
ornumpy.result_type
instead. To achieve semantics for thescalar_types
argument, usenumpy.result_type
and pass0
,0.0
, or0j
as a Python scalar instead.np.round_
has been removed. Usenp.round
instead.np.nbytes
has been removed. Usenp.dtype(<dtype>).itemsize
instead.
(gh-24477)
np.compare_chararrays
has been removed from the main namespace.Use
np.char.compare_chararrays
instead.The
charrarray
in the main namespace has been deprecated. It canbe imported without a deprecation warning from
np.char.chararray
for now, but we are planning to fully deprecate and remove
chararray
in the future.np.format_parser
has been removed from the main namespace. Usenp.rec.format_parser
instead.(gh-24587)
Support for seven data type string aliases has been removed from
np.dtype
:int0
,uint0
,void0
,object0
,str0
,bytes0
and
bool8
.(gh-24807)
The experimental
numpy.array_api
submodule has been removed. Usethe main
numpy
namespace for regular usage instead, or theseparate
array-api-strict
package for the compliance testing usecase for which
numpy.array_api
was mostly used.(gh-25911)
__array_prepare__
is removedUFuncs called
__array_prepare__
before running computations for normalufunc calls (not generalized ufuncs, reductions, etc.). The function was
also called instead of
__array_wrap__
on the results of some linearalgebra functions.
It is now removed. If you use it, migrate to
__array_ufunc__
or relyon
__array_wrap__
which is called with a context in all cases,although only after the result array is filled. In those code paths,
__array_wrap__
will now be passed a base class, rather than a subclassarray.
(gh-25105)
Deprecations
np.compat
has been deprecated, as Python 2 is no longer supported.numpy.int8
and similar classes will no longer support conversionof out of bounds python integers to integer arrays. For example,
conversion of 255 to int8 will not return -1.
numpy.iinfo(dtype)
can be used to check the machine limits for data types. For example,
np.iinfo(np.uint16)
returns min = 0 and max = 65535.np.array(value).astype(dtype)
will give the desired result.np.safe_eval
has been deprecated.ast.literal_eval
should beused instead.
(gh-23830)
np.recfromcsv
,np.recfromtxt
,np.disp
,np.get_array_wrap
,np.maximum_sctype
,np.deprecate
andnp.deprecate_with_doc
havebeen deprecated.
(gh-24154)
np.trapz
has been deprecated. Usenp.trapezoid
or ascipy.integrate
function instead.np.in1d
has been deprecated. Usenp.isin
instead.Alias
np.row_stack
has been deprecated. Usenp.vstack
directly.(gh-24445)
__array_wrap__
is now passedarr, context, return_scalar
andsupport for implementations not accepting all three are deprecated.
Its signature should be
__array_wrap__(self, arr, context=None, return_scalar=False)
(gh-25409)
Arrays of 2-dimensional vectors for
np.cross
have been deprecated.Use arrays of 3-dimensional vectors instead.
(gh-24818)
np.dtype("a")
alias fornp.dtype(np.bytes_)
was deprecated. Usenp.dtype("S")
alias instead.(gh-24854)
Use of keyword arguments
x
andy
with functionsassert_array_equal
andassert_array_almost_equal
has beendeprecated. Pass the first two arguments as positional arguments
instead.
(gh-24978)
numpy.fft
deprecations for n-D transforms with None values in argumentsUsing
fftn
,ifftn
,rfftn
,irfftn
,fft2
,ifft2
,rfft2
orirfft2
with thes
parameter set to a value that is notNone
andthe
axes
parameter set toNone
has been deprecated, in line with thearray API standard. To retain current behaviour, pass a sequence [0,
..., k-1] to
axes
for an array of dimension k.Furthermore, passing an array to
s
which containsNone
values isdeprecated as the parameter is documented to accept a sequence of
integers in both the NumPy docs and the array API specification. To use
the default behaviour of the corresponding 1-D transform, pass the value
matching the default for its
n
parameter. To use the default behaviourfor every axis, the
s
argument can be omitted.(gh-25495)
np.linalg.lstsq
now defaults to a newrcond
valuenumpy.linalg.lstsq
now uses the new rcond value of themachine precision times
max(M, N)
. Previously, the machine precisionwas used but a FutureWarning was given to notify that this change will
happen eventually. That old behavior can still be achieved by passing
rcond=-1
.(gh-25721)
Expired deprecations
The
np.core.umath_tests
submodule has been removed from the publicAPI. (Deprecated in NumPy 1.15)
(gh-23809)
The
PyDataMem_SetEventHook
deprecation has expired and it isremoved. Use
tracemalloc
and thenp.lib.tracemalloc_domain
domain. (Deprecated in NumPy 1.23)
(gh-23921)
The deprecation of
set_numeric_ops
and the C functionsPyArray_SetNumericOps
andPyArray_GetNumericOps
has been expiredand the functions removed. (Deprecated in NumPy 1.16)
(gh-23998)
The
fasttake
,fastclip
, andfastputmask
ArrFuncs
deprecationis now finalized.
The deprecated function
fastCopyAndTranspose
and its C counterpartare now removed.
The deprecation of
PyArray_ScalarFromObject
is now finalized.(gh-24312)
np.msort
has been removed. For a replacement,np.sort(a, axis=0)
should be used instead.
(gh-24494)
np.dtype(("f8", 1)
will now return a shape 1 subarray dtype ratherthan a non-subarray one.
(gh-25761)
Assigning to the
.data
attribute of an ndarray is disallowed andwill raise.
np.binary_repr(a, width)
will raise if width is too small.Using
NPY_CHAR
inPyArray_DescrFromType()
will raise, useNPY_STRING
NPY_UNICODE
, orNPY_VSTRING
instead.(gh-25794)
Compatibility notes
loadtxt
andgenfromtxt
default encoding changedloadtxt
andgenfromtxt
now both default toencoding=None
which maymainly modify how
converters
work. These will now be passedstr
rather than
bytes
. Pass the encoding explicitly to always get the newor old behavior. For
genfromtxt
the change also means that returnedvalues will now be unicode strings rather than bytes.
(gh-25158)
f2py
compatibility notesf2py
will no longer accept ambiguous-m
and.pyf
CLIcombinations. When more than one
.pyf
file is passed, an error israised. When both
-m
and a.pyf
is passed, a warning is emittedand the
-m
provided name is ignored.(gh-25181)
The
f2py.compile()
helper has been removed because it leakedmemory, has been marked as experimental for several years now, and
was implemented as a thin
subprocess.run
wrapper. It was also oneof the test bottlenecks. See
gh-25122 for the full
rationale. It also used several
np.distutils
features which aretoo fragile to be ported to work with
meson
.Users are urged to replace calls to
f2py.compile
with calls tosubprocess.run("python", "-m", "numpy.f2py",...
instead, and touse environment variables to interact with
meson
. Nativefiles are also an
option.
(gh-25193)
Minor changes in behavior of sorting functions
Due to algorithmic changes and use of SIMD code, sorting functions with
methods that aren't stable may return slightly different results in
2.0.0 compared to 1.26.x. This includes the default method of
numpy.argsort
andnumpy.argpartition
.Removed ambiguity when broadcasting in
np.solve
The broadcasting rules for
np.solve(a, b)
were ambiguous whenb
had1 fewer dimensions than
a
. This has been resolved in abackward-incompatible way and is now compliant with the Array API. The
old behaviour can be reconstructed by using
np.solve(a, b[..., None])[..., 0]
.(gh-25914)
Modified representation for
Polynomial
The representation method for
numpy.polynomial.polynomial.Polynomial
was updated toinclude the domain in the representation. The plain text and latex
representations are now consistent. For example the output of
str(np.polynomial.Polynomial([1, 1], domain=[.1, .2]))
used to be1.0 + 1.0 x
, but now is1.0 + 1.0 (-3.0000000000000004 + 20.0 x)
.(gh-21760)
C API changes
The
PyArray_CGT
,PyArray_CLT
,PyArray_CGE
,PyArray_CLE
,PyArray_CEQ
,PyArray_CNE
macros have been removed.PyArray_MIN
andPyArray_MAX
have been moved fromndarraytypes.h
tonpy_math.h
.(gh-24258)
A C API for working with
numpy.dtypes.StringDType
arrays has been exposed. This includes functions for acquiring and
releasing mutexes which lock access to the string data, as well as
packing and unpacking UTF-8 bytestreams from array entries.
NPY_NTYPES
has been renamed toNPY_NTYPES_LEGACY
as it does notinclude new NumPy built-in DTypes. In particular the new string
DType will likely not work correctly with code that handles legacy
DTypes.
(gh-25347)
The C-API now only exports the static inline function versions of
the array accessors (previously this depended on using "deprecated
API"). While we discourage it, the struct fields can still be used
directly.
(gh-25789)
NumPy now defines
PyArray_Pack
to set an individual memory address.Unlike
PyArray_SETITEM
this function is equivalent to setting anindividual array item and does not require a NumPy array input.
(gh-25954)
The
->f
slot has been removed fromPyArray_Descr
. If you use this slot,replace accessing it with
PyDataType_GetArrFuncs
(see its documentationand the
numpy-2-migration-guide
). In some cases using other functionslike
PyArray_GETITEM
may be an alternatives.PyArray_GETITEM
andPyArray_SETITEM
now require the import ofthe NumPy API table to be used and are no longer defined in
ndarraytypes.h
.(gh-25812)
Due to runtime dependencies, the definition for functionality
accessing the dtype flags was moved from
numpy/ndarraytypes.h
andis only available after including
numpy/ndarrayobject.h
as itrequires
import_array()
. This includesPyDataType_FLAGCHK
,PyDataType_REFCHK
andNPY_BEGIN_THREADS_DESCR
.The dtype flags on
PyArray_Descr
must now be accessed through thePyDataType_FLAGS
inline function to be compatible with both 1.xand 2.x. This function is defined in
npy_2_compat.h
to allowbackporting. Most or all users should use
PyDataType_FLAGCHK
whichis available on 1.x and does not require backporting. Cython users
should use Cython 3. Otherwise access will go through Python unless
they use
PyDataType_FLAGCHK
instead.(gh-25816)
Datetime functionality exposed in the C API and Cython bindings
The functions
NpyDatetime_ConvertDatetime64ToDatetimeStruct
,NpyDatetime_ConvertDatetimeStructToDatetime64
,NpyDatetime_ConvertPyDateTimeToDatetimeStruct
,NpyDatetime_GetDatetimeISO8601StrLen
,NpyDatetime_MakeISO8601Datetime
, andNpyDatetime_ParseISO8601Datetime
have been added to the C API tofacilitate converting between strings, Python datetimes, and NumPy
datetimes in external libraries.
(gh-21199)
Const correctness for the generalized ufunc C API
The NumPy C API's functions for constructing generalized ufuncs
(
PyUFunc_FromFuncAndData
,PyUFunc_FromFuncAndDataAndSignature
,PyUFunc_FromFuncAndDataAndSignatureAndIdentity
) taketypes
anddata
arguments that are not modified by NumPy's internals. Like thename
anddoc
arguments, third-party Python extension modules arelikely to supply these arguments from static constants. The
types
anddata
arguments are now const-correct: they are declared asconst char *types
andvoid *const *data
, respectively. C code shouldnot be affected, but C++ code may be.
(gh-23847)
Larger
NPY_MAXDIMS
andNPY_MAXARGS
,NPY_RAVEL_AXIS
introducedNPY_MAXDIMS
is now 64, you may want to review its use. This is usuallyused in a stack allocation, where the increase should be safe. However,
we do encourage generally to remove any use of
NPY_MAXDIMS
andNPY_MAXARGS
to eventually allow removing the constraint completely.For the conversion helper and C-API functions mirroring Python ones such as
take
,NPY_MAXDIMS
was used to meanaxis=None
. Such usage must be replacedwith
NPY_RAVEL_AXIS
. See alsomigration_maxdims
.(gh-25149)
NPY_MAXARGS
not constant andPyArrayMultiIterObject
size changeSince
NPY_MAXARGS
was increased, it is now a runtime constant and notcompile-time constant anymore. We expect almost no users to notice this.
But if used for stack allocations it now must be replaced with a custom
constant using
NPY_MAXARGS
as an additional runtime check.The
sizeof(PyArrayMultiIterObject)
no longer includes the full size ofthe object. We expect nobody to notice this change. It was necessary to
avoid issues with Cython.
(gh-25271)
Required changes for custom legacy user dtypes
In order to improve our DTypes it is unfortunately necessary to break
the ABI, which requires some changes for dtypes registered with
PyArray_RegisterDataType
. Please see the documentation ofPyArray_RegisterDataType
for how to adapt your code and achievecompatibility with both 1.x and 2.x.
(gh-25792)
New Public DType API
The C implementation of the NEP 42 DType API is now public. While the
DType API has shipped in NumPy for a few versions, it was only usable in
sessions with a special environment variable set. It is now possible to
write custom DTypes outside of NumPy using the new DType API and the
normal
import_array()
mechanism for importing the numpy C API.See
dtype-api
for more details about the API. As always with a new feature,please report any bugs you run into implementing or using a new DType. It is
likely that downstream C code that works with dtypes will need to be updated to
work correctly with new DTypes.
(gh-25754)
New C-API import functions
We have now added
PyArray_ImportNumPyAPI
andPyUFunc_ImportUFuncAPI
as static inline functions to import the NumPy C-API tables. The new
functions have two advantages over
import_array
andimport_ufunc
:light-weight if not, allowing to add them judiciously (although this
is not preferable in most cases).
a
return
statement.The
PyArray_ImportNumPyAPI()
function is included innpy_2_compat.h
for simpler backporting.
(gh-25866)
Structured dtype information access through functions
The dtype structures fields
c_metadata
,names
,fields
, andsubarray
must now be accessed through new functions following the samenames, such as
PyDataType_NAMES
. Direct access of the fields is notvalid as they do not exist for all
PyArray_Descr
instances. Themetadata
field is kept, but the macro version should also bepreferred.
(gh-25802)
Descriptor
elsize
andalignment
accessUnless compiling only with NumPy 2 support, the
elsize
andaligment
fields must now be accessed via
PyDataType_ELSIZE
,PyDataType_SET_ELSIZE
, andPyDataType_ALIGNMENT
. In cases where thedescriptor is attached to an array, we advise using
PyArray_ITEMSIZE
as it exists on all NumPy versions. Please see
migration_c_descr
for more information.(gh-25943)
NumPy 2.0 C API removals
npy_interrupt.h
and the corresponding macros likeNPY_SIGINT_ON
have been removed. We recommend querying
PyErr_CheckSignals()
orPyOS_InterruptOccurred()
periodically (these do currently requireholding the GIL though).
The
noprefix.h
header has been removed. Replace missing symbolswith their prefixed counterparts (usually an added
NPY_
ornpy_
).(gh-23919)
PyUFunc_GetPyVals
,PyUFunc_handlefperr
, andPyUFunc_checkfperr
have been removed. If needed, a new backwards compatible function to
raise floating point errors could be restored. Reason for removal:
there are no known users and the functions would have made
with np.errstate()
fixes much more difficult).(gh-23922)
The
numpy/old_defines.h
which was part of the API deprecated sinceNumPy 1.7 has been removed. This removes macros of the form
PyArray_CONSTANT
. Thereplace_old_macros.sed
script may be useful to convert them to the
NPY_CONSTANT
version.(gh-24011)
The
legacy_inner_loop_selector
member of the ufunc struct isremoved to simplify improvements to the dispatching system. There
are no known users overriding or directly accessing this member.
(gh-24271)
NPY_INTPLTR
has been removed to avoid confusion (seeintp
redefinition).
(gh-24888)
The advanced indexing
MapIter
and related API has been removed.The (truly) public part of it was not well tested and had only one
known user (Theano). Making it private will simplify improvements to
speed up
ufunc.at
, make advanced indexing more maintainable, andwas important for increasing the maximum number of dimensions of
arrays to 64. Please let us know if this API is important to you so
we can find a solution together.
(gh-25138)
The
NPY_MAX_ELSIZE
macro has been removed, as it only everreflected builtin numeric types and served no internal purpose.
(gh-25149)
PyArray_REFCNT
andNPY_REFCOUNT
are removed. UsePy_REFCNT
instead.
(gh-25156)
PyArrayFlags_Type
andPyArray_NewFlagsObject
as well asPyArrayFlagsObject
are private now. There is no known use-case;use the Python API if needed.
PyArray_MoveInto
,PyArray_CastTo
,PyArray_CastAnyTo
areremoved use
PyArray_CopyInto
and if absolutely neededPyArray_CopyAnyInto
(the latter does a flat copy).PyArray_FillObjectArray
is removed, its only true use was forimplementing
np.empty
. Create a new empty array or usePyArray_FillWithScalar()
(decrefs existing objects).PyArray_CompareUCS4
andPyArray_CompareString
are removed. Usethe standard C string comparison functions.
PyArray_ISPYTHON
is removed as it is misleading, has no knownuse-cases, and is easy to replace.
PyArray_FieldNames
is removed, as it is unclear what it would beuseful for. It also has incorrect semantics in some possible
use-cases.
PyArray_TypestrConvert
is removed, since it seems a misnomer andunlikely to be used by anyone. If you know the size or are limited
to few types, just use it explicitly, otherwise go via Python
strings.
(gh-25292)
PyDataType_GetDatetimeMetaData
is removed, it did not actually doanything since at least NumPy 1.7.
(gh-25802)
PyArray_GetCastFunc
is removed. Note that custom legacy userdtypes can still provide a castfunc as their implementation, but any
access to them is now removed. The reason for this is that NumPy
never used these internally for many years. If you use simple
numeric types, please just use C casts directly. In case you require
an alternative, please let us know so we can create new API such as
PyArray_CastBuffer()
which could use old or new cast functionsdepending on the NumPy version.
(gh-25161)
New Features
np.add
was extended to work withunicode
andbytes
dtypes.A new
bitwise_count
functionThis new function counts the number of 1-bits in a number.
numpy.bitwise_count
works on all the numpy integer typesand integer-like objects.
(gh-19355)
macOS Accelerate support, including the ILP64
Support for the updated Accelerate BLAS/LAPACK library, including ILP64
(64-bit integer) support, in macOS 13.3 has been added. This brings
arm64 support, and significant performance improvements of up to 10x for
commonly used linear algebra operations. When Accelerate is selected at
build time, or if no explicit BLAS library selection is done, the 13.3+
version will automatically be used if available.
(gh-24053)
Binary wheels are also available. On macOS >=14.0, users who install
NumPy from PyPI will get wheels built against Accelerate rather than
OpenBLAS.
(gh-25255)
Option to use weights for quantile and percentile functions
A
weights
keyword is now available fornumpy.quantile
,numpy.percentile
,numpy.nanquantile
andnumpy.nanpercentile
. Onlymethod="inverted_cdf"
supports weights.
(gh-24254)
Improved CPU optimization tracking
A new tracer mechanism is available which enables tracking of the
enabled targets for each optimized function (i.e., that uses
hardware-specific SIMD instructions) in the NumPy library. With this
enhancement, it becomes possible to precisely monitor the enabled CPU
dispatch targets for the dispatched functions.
A new function named
opt_func_info
has been added to the new namespacenumpy.lib.introspect
, offering this tracing capability. This function allowsyou to retrieve information about the enabled targets based on function names
and data type signatures.
(gh-24420)
A new Meson backend for
f2py
f2py
in compile mode (i.e.f2py -c
) now accepts the--backend meson
option. This is the default option for Python >=3.12.For older Python versions,
f2py
will still default to--backend distutils
.To support this in realistic use-cases, in compile mode
f2py
takes a--dep
flag one or many times which maps todependency()
calls in themeson
backend, and does nothing in thedistutils
backend.There are no changes for users of
f2py
only as a code generator, i.e.without
-c
.(gh-24532)
bind(c)
support forf2py
Both functions and subroutines can be annotated with
bind(c)
.f2py
will handle both the correct type mapping, and preserve the unique label
for other C interfaces.
Note:
bind(c, name = 'routine_name_other_than_fortran_routine')
isnot honored by the
f2py
bindings by design, sincebind(c)
with thename
is meant to guarantee only the same name in C and Fortran, not inPython and Fortran.
(gh-24555)
A new
strict
option for several testing functionsThe
strict
keyword is now available fornumpy.testing.assert_allclose
,numpy.testing.assert_equal
, andnumpy.testing.assert_array_less
. Settingstrict=True
will disable the broadcasting behaviour for scalars and ensurethat input arrays have the same data type.
(gh-24680,
gh-24770,
gh-24775)
Add
np.core.umath.find
andnp.core.umath.rfind
UFuncsAdd two
find
andrfind
UFuncs that operate on unicode or bytestrings and are used in
np.char
. They operate similar tostr.find
and
str.rfind
.(gh-24868)
diagonal
andtrace
fornumpy.linalg
numpy.linalg.diagonal
andnumpy.linalg.trace
have been added, which arearray API standard-compatible variants of
numpy.diagonal
andnumpy.trace
.They differ in the default axis selection which define 2-D sub-arrays.
(gh-24887)
New
long
andulong
dtypesnumpy.long
andnumpy.ulong
have been added as NumPy integers mapping toC's
long
andunsigned long
. Prior to NumPy 1.24,numpy.long
was an aliasto Python's
int
.(gh-24922)
svdvals
fornumpy.linalg
numpy.linalg.svdvals
has been added. It computes singular values for (a stackof) matrices. Executing
np.svdvals(x)
is the same as callingnp.svd(x, compute_uv=False, hermitian=False)
. This function is compatible with the arrayAPI standard.
(gh-24940)
A new
isdtype
functionnumpy.isdtype
was added to provide a canonical way to classify NumPy'sdtypes in compliance with the array API standard.
(gh-25054)
A new
astype
functionnumpy.astype
was added to provide an array API standard-compatiblealternative to the
numpy.ndarray.astype
method.(gh-25079)
Array API compatible functions' aliases
13 aliases for existing functions were added to improve compatibility
with the array API standard:
acos
,acosh
,asin
,asinh
,atan
,atanh
,atan2
.bitwise_left_shift
,bitwise_invert
,bitwise_right_shift
.concat
,permute_dims
,pow
.numpy.linalg
:tensordot
,matmul
.(gh-25086)
New
unique_*
functionsThe
numpy.unique_all
,numpy.unique_counts
,numpy.unique_inverse
, andnumpy.unique_values
functions have been added. They provide functionality ofnumpy.unique
with different sets of flags. They are array APIstandard-compatible, and because the number of arrays they return does not
depend on the values of input arguments, they are easier to target for JIT
compilation.
(gh-25088)
Matrix transpose support for ndarrays
NumPy now offers support for calculating the matrix transpose of an
array (or stack of arrays). The matrix transpose is equivalent to
swapping the last two axes of an array. Both
np.ndarray
andnp.ma.MaskedArray
now expose a.mT
attribute, and there is amatching new
numpy.matrix_transpose
function.(gh-23762)
Array API compatible functions for
numpy.linalg
Six new functions and two aliases were added to improve compatibility
with the Array API standard for `numpy.linalg`:
numpy.linalg.matrix_norm
- Computes the matrix norm ofa matrix (or a stack of matrices).
numpy.linalg.vector_norm
- Computes the vector norm ofa vector (or batch of vectors).
numpy.vecdot
- Computes the (vector) dot product oftwo arrays.
numpy.linalg.vecdot
- An alias fornumpy.vecdot
.numpy.linalg.matrix_transpose
- An alias fornumpy.matrix_transpose
.(gh-25155)
numpy.linalg.outer
has been added. It computes theouter product of two vectors. It differs from
numpy.outer
by accepting one-dimensional arrays only.This function is compatible with the array API standard.
(gh-25101)
numpy.linalg.cross
has been added. It computes thecross product of two (arrays of) 3-dimensional vectors. It differs
from
numpy.cross
by accepting three-dimensionalvectors only. This function is compatible with the array API
standard.
(gh-25145)
A
correction
argument forvar
andstd
A
correction
argument was added tonumpy.var
andnumpy.std
, which is anarray API standard compatible alternative to
ddof
. As both arguments serve asimilar purpose, only one of them can be provided at the same time.
(gh-25169)
ndarray.device
andndarray.to_device
An
ndarray.device
attribute andndarray.to_device
method were addedto
numpy.ndarray
for array API standard compatibility.Additionally,
device
keyword-only arguments were added to:numpy.asarray
,numpy.arange
,numpy.empty
,numpy.empty_like
,numpy.eye
,numpy.full
,numpy.full_like
,numpy.linspace
,numpy.ones
,numpy.ones_like
,numpy.zeros
, andnumpy.zeros_like
.For all these new arguments, only
device="cpu"
is supported.(gh-25233)
StringDType has been added to NumPy
We have added a new variable-width UTF-8 encoded string data type, implementing
a "NumPy array of Python strings", including support for a user-provided
missing data sentinel. It is intended as a drop-in replacement for arrays of
Python strings and missing data sentinels using the object dtype. See
NEP 55 and the documentation
of stringdtype for more details.
(gh-25347)
New keywords for
cholesky
andpinv
The
upper
andrtol
keywords were added tonumpy.linalg.cholesky
andnumpy.linalg.pinv
,respectively, to improve array API standard compatibility.
For
numpy.linalg.pinv
, if neitherrcond
norrtol
isspecified, the
rcond
's default is used. We plan to deprecate andremove
rcond
in the future.(gh-25388)
New keywords for
sort
,argsort
andlinalg.matrix_rank
New keyword parameters were added to improve array API standard
compatibility:
rtol
was added tonumpy.linalg.matrix_rank
.stable
was added tonumpy.sort
andnumpy.argsort
.(gh-25437)
New
numpy.strings
namespace for string ufuncsNumPy now implements some string operations as ufuncs. The old
np.char
namespace is still available, and where possible the string manipulation
functions in that namespace have been updated to use the new ufuncs,
substantially improving their performance.
Where possible, we suggest updating code to use functions in
np.strings
instead ofnp.char
. In the future we may deprecatenp.char
in favor ofnp.strings
.(gh-25463)
numpy.fft
support for different precisions and in-place calculationsThe various FFT routines in
numpy.fft
now do theircalculations natively in float, double, or long double precision,
depending on the input precision, instead of always calculating in
double precision. Hence, the calculation will now be less precise for
single and more precise for long double precision. The data type of the
output array will now be adjusted accordingly.
Furthermore, all FFT routines have gained an
out
argument that can beused for in-place calculations.
(gh-25536)
configtool and pkg-config support
A new
numpy-config
CLI script is available that can be queried for theNumPy version and for compile flags needed to use the NumPy C API. This
will allow build systems to better support the use of NumPy as a
dependency. Also, a
numpy.pc
pkg-config file is now included withNumpy. In order to find its location for use with
PKG_CONFIG_PATH
, usenumpy-config --pkgconfigdir
.(gh-25730)
Array API standard support in the main namespace
The main
numpy
namespace now supports the array API standard. Seearray-api-standard-compatibility
fordetails.
([gh-25911](https://redirect.github.co
Configuration
📅 Schedule: 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.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.