numpy
numpy copied to clipboard
DOC: the recommended ruff rule for migration to numpy2 is missing many detections and fixes
Issue with current documentation:
Hello, Numpy folks!
There is a ruff rule (NPY201
) that is recommended for migration from numpy to numpy2. I did a thorough comparison between Python API removals and deprecations with what the NPY201
rule provides. There are many removals and deprecations that are in the documentation but the ruff rule does not consider.
In many of the cases, a fix could be performed automatically.
Here is a summary of what is missing from the rule NPY201
:
Changes that are not detected at all
-
np.geterrobj
,np.seterrobj
and the related ufunc keyword argumentextobj=
have been removed. The preferred replacement for all of these is using the context managerwith np.errstate():
. - removed
ERR_*
,SHIFT_*
,np.kernel_version
,np.numarray
,np.oldnumeric
andnp.set_numeric_ops
. - removed namespaces:
np.FLOATING_POINT_SUPPORT
,np.FPE_*
,np.CLIP
,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
. -
np.issctype
,np.maximum_sctype
,np.obj2sctype
,np.sctype2char
,np.sctypes
were all removed from the main namespace without replacement, as they where niche members. -
np.compare_chararrays
has been removed from the main namespace. Usenp.char.compare_chararrays
instead. - The
charrarray
in the main namespace has been deprecated. It can be imported without a deprecation warning fromnp.char.chararray
for now, but we are planning to fully deprecate and removechararray
in the future. -
np.format_parser
has been removed from the main namespace. Usenp.rec.format_parser
instead. - The experimental
numpy.array_api
submodule has been removed. Use the main numpy namespace for regular usage instead, or the separatearray-api-strict
package for the compliance testing use case for whichnumpy.array_api
was mostly used. - Support for seven data type string aliases has been removed from
np.dtype
:int0
,uint0
,void0
,object0
,str0
,bytes0
andbool8
. -
np.trapz
has been deprecated. Usenp.trapezoid
or ascipy.integrate
function instead. -
np.in1d
has been deprecated. Usenp.isin
instead. - Arrays of 2-dimensional vectors for
np.cross
have been deprecated. Use arrays of 3-dimensional vectors instead. -
np.dtype("a")
alias fornp.dtype(np.bytes_)
was deprecated. Usenp.dtype("S")
alias instead. - Use of keyword arguments
x
andy
with functionsassert_array_equal
andassert_array_almost_equal
has been deprecated. Pass the first two arguments as positional arguments instead.
Changes that are detected but no automatic fix is provided
-
np.cast
has been removed. The literal replacement fornp.cast[dtype](arg)
isnp.asarray(arg, dtype=dtype)
. -
np.set_string_function
has been removed. Usenp.set_printoptions
instead with a formatter for custom printing of NumPy objects. -
np.recfromcsv
andrecfromtxt
are now only available fromnp.lib.npyio
. -
np.asfarray
has been removed. Usenp.asarray
with a properdtype
instead. -
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.nbytes
has been removed. Usenp.dtype(<dtype>).itemsize
instead.
Idea or request for content:
My suggestion is to add these changes to the ruff rule. Otherwise, it would be really helpful if the provided and not-provided changes were documented (either in the corresponding ruff rule page or the migration guide) so the users would know what they were getting (and not getting) by applying the rule.