DOC: the recommended ruff rule for migration to numpy2 is missing many detections and fixes
@mtsokol is already working on this.
Since Jun 26, 2024.
- Dominant language
- Python
- Stars
- 32.8k
- Forks
- 12.8k
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 197
Description
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.seterrobjand 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.oldnumericandnp.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.sctypeswere all removed from the main namespace without replacement, as they where niche members.np.compare_chararrayshas been removed from the main namespace. Usenp.char.compare_chararraysinstead.- The
charrarrayin the main namespace has been deprecated. It can be imported without a deprecation warning fromnp.char.chararrayfor now, but we are planning to fully deprecate and removechararrayin the future. np.format_parserhas been removed from the main namespace. Usenp.rec.format_parserinstead.- The experimental
numpy.array_apisubmodule has been removed. Use the main numpy namespace for regular usage instead, or the separatearray-api-strictpackage for the compliance testing use case for whichnumpy.array_apiwas mostly used. - Support for seven data type string aliases has been removed from
np.dtype:int0,uint0,void0,object0,str0,bytes0andbool8. np.trapzhas been deprecated. Usenp.trapezoidor ascipy.integratefunction instead.np.in1dhas been deprecated. Usenp.isininstead.- Arrays of 2-dimensional vectors for
np.crosshave 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
xandywith functionsassert_array_equalandassert_array_almost_equalhas been deprecated. Pass the first two arguments as positional arguments instead.
Changes that are detected but no automatic fix is provided
np.casthas been removed. The literal replacement fornp.cast[dtype](arg)isnp.asarray(arg, dtype=dtype).np.set_string_functionhas been removed. Usenp.set_printoptionsinstead with a formatter for custom printing of NumPy objects.np.recfromcsvandrecfromtxtare now only available fromnp.lib.npyio.np.asfarrayhas been removed. Usenp.asarraywith a properdtypeinstead.np.find_common_typehas been removed. Usenumpy.promote_typesornumpy.result_typeinstead. To achieve semantics for thescalar_typesargument, usenumpy.result_typeand pass0,0.0, or0jas a Python scalar instead.np.nbyteshas been removed. Usenp.dtype(<dtype>).itemsizeinstead.
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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.