For NEP 47/array API standard, do we have a sense for how far off numpy.array_api is from passing a tagged version of the conformance test suite? Can you do something like "import numpy.array_api as np" and then "export ARRAY_API_TESTS_MODULE=numpy"? Probably not exactly that, but you likely know what I mean. I'm guessing someone has already checked this, but maybe posting a short summary of the current test suite result on the project board item would be nice. Incidentally, is there a short summary of how well the other major libs are doing with this suite somewhere?
Would you turn that test suite on in a subset of the CI to enforce conformance moving forward when the time is right? On Sun, 15 Jan 2023 at 05:46, Ralf Gommers <ralf.gomm...@gmail.com> wrote: > > > On Wed, Jan 11, 2023 at 1:59 PM Sebastian Berg <sebast...@sipsolutions.net> > wrote: > >> Hi all, >> >> as brought up many times, I would like to aim for a NumPy 2.0. The >> current hope would be to release within the year and start adding small >> breaking changes soon, but hidden behind feature flags. Similar to what is >> already the case for NEP 50 >> <https://numpy.org/neps/nep-0050-scalar-promotion.html> with `export >> NPY_PROMOTION_STATE=weak`. >> >> Below, is a draft version for a NEP, I have also created the >> corresponding project board on github. >> Clearly, especially specific changes will need more discussion, but there >> are some clearer bigger ones as well as small changes that are breaking but >> should be easy to adapt for. >> >> Thanks to Inessa and Ralf who helped draft and revise this! >> > > Thanks for drafting this proposal and leading this effort Sebastian! > > It seems like no one wants to be the first to reply here, so I'll try to > get us started:) My opinion has always been that NumPy 2.0 should be a > "major" thing, and either reserved for a needed ABI break or if we'd have > other compelling features or needs. It looks to me like we have now reached > that point. In particular, Sebastian as the main developer of new dtype and > ufunc internals features, seems to have reached the point where the need > for backwards compatibility in the C API is imposing too much of a burden. > Making that work easier is enough of a reason for me to be +1 on a NumPy > 2.0. After so many years, saying that it's fine to have a breaking release > to clean things up is very likely a good thing long term. > > With that need established, other important improvements that are already > in the pipeline and best done in a 2.0 release, like enabling NEP 50 and > Python API improvements, make the overall picture a compelling one. > > I also like the proposed logistics: any major change needs to land on a > roadmap for 2.0, and for that it needs to have two champions who commit to > getting it done. Not breaking our regular 6-monthly releases schedules > looks like a good plan. Having a feature flag for the 1.25.0 release (June) > and then making breaking changes the default in the July-December period > seems very reasonable. > > Cheers, > Ralf > > > >> >> >> Road to NumPy 2.0 >> >> *Note:* This is a living document. We are prepared to modify it through >> continued dialogue with the community. Its acceptance indicates consensus >> on the process and timelines. >> >> <#m_-5453977658075525012_m_-4971028583323681657_Abstract>Abstract >> NumPy 2.0 release is an opportunity to make some complex changes for >> which a normal deprecation wouldn’t be viable as the user impact may be >> larger than is normally considered acceptable for a minor release. Yet, >> NumPy 2.0 is *not* meant to be a large breaking release. Most users >> should not need to worry about introduced changes. >> This document contains essential information about the work on NumPy 2.0 >> release. >> <#m_-5453977658075525012_m_-4971028583323681657_Motivation-and-impact>Motivation >> and impact >> NumPy 2.0 release is required for fixing old bugs and modernizing NumPy’s >> code base. It is not planned to be a “break the world release”. This means: >> >> - It must be possible to compile downstream packages to be compatible >> with both new and old NumPy versions. However, the C-API is expected to be >> broken. The path to achieve this compatibility will be defined as a *high >> priority* project. >> - The *majority* of users should not require code updates or such >> updates should be very easy to do. Expert users are likely to notice >> changes though. >> - We accept that some NumPy users may not able to adopt NumPy 2.0 >> immediately or may have to wait until following releases for adoption. >> >> One should keep in mind that even bug fixes can break the code of a small >> number of users. >> <#m_-5453977658075525012_m_-4971028583323681657_Timeline>Timeline >> NumPy 2.0 will be scheduled for release in Jan 2024. Projects and changes >> should be proposed as soon as possible. We propose a NumPy team meeting >> around April 2023 (details to be discussed) in order to finalize >> high-impact projects and review all candidate projects. >> Projects not proposed by this time may not be prioritized for a final 2.0 >> release. >> Changes which can be implemented using a feature-flag are strongly >> encouraged as it simplifies keeping projects moving. >> <#m_-5453977658075525012_m_-4971028583323681657_Project-selection-process>Project >> selection process >> To determine the scope of work for NumPy 2.0 release, we suggest >> introducing three categories of projects/proposals: >> >> 1. *high*: proposal requires high visibility or may be critical for >> the NumPy 2.0 release, >> 2. *normal*, >> 3. *candidate*: changes which are in an early planning stage. >> >> High priority proposals will be listed explicitly in this NEP. >> A project board <https://github.com/orgs/numpy/projects/9> will track >> all projects proposed for NumPy 2.0, distinguishing the category and >> progress. >> >> <#m_-5453977658075525012_m_-4971028583323681657_Proposing-a-project-for-NumPy-20-release>Proposing >> a project for NumPy 2.0 release >> To start a project, there is one important thing: Believe that your >> change makes NumPy better and commit to trying to make it happen. >> To have a proposal listed on the NumPy 2.0 project board, we require the >> following: >> >> - At least two champions for each proposal, one of whom must be a >> NumPy core developer or similar to one in standing. >> - A brief assessment of the anticipated impact on downstream and >> end-users. This means assessing how many users/what groups of users are >> affected and in what way. >> - Support by the NumPy community or Steering Council (ideally both). >> Positive feedback to your proposal on the NumPy mailing list is a strong >> indicator of the community support. >> >> If *any* of the above requirements are not met, proposals will be listed >> as “candidate”. NumPy maintainers will review “candidate” projects on a >> case by case basis. >> We suggest including a brief header in every proposal (issue or PR): >> >> * **Champions**: >> * **Severity**: How does it affect users? >> * **Affects**: Who/how many users does it affect? >> >> Any further details or adjustments shall be added on request. Large >> changes may require their own NEP when requested by a maintainer. >> As a *suggestion*, “affects” could be roughly guided by the number of >> users: *rare*, *limited*, *common*, and *ubiquitous*. While “severity” >> could be *minor*, *typical* (code update needed), *severe* (e.g. large >> change/difficult to find), *critical* (incorrect results or no clear >> path for fixing things). The two together can then be used as a basis >> for decision making and discussion. >> <#m_-5453977658075525012_m_-4971028583323681657_Scope-of-work>Scope of >> work >> <#m_-5453977658075525012_m_-4971028583323681657_High-priority-projects>*High >> priority projects* >> The projects in this section are considered high impact from the >> compatibility point of view. >> Unless otherwise noted, these are currently proposals, most of these >> changes have their own NEPs which should be accepted. >> <#m_-5453977658075525012_m_-4971028583323681657_Enable-breaking-the-C-API>Enable >> breaking the C-API >> NumPy needs to define a process for breaking C-API. This project does not >> define *what* is broke, this is done separately on a case-by-case basis. >> We simply assume that sufficient changes will be done to make this >> worthwhile. >> >> - *Status*: Planning >> - *Champion*: Matti Picus (?), Sebastian Berg (?) >> - *Severity*: Severe (for maintainers without a plan), typical for >> users >> - *Affects*: Library maintainers, some users >> - *Notes*: >> - Many users may have issues if pip installing a very new NumPy >> version without updating other libraries. We assume that this isn’t a >> common scenario and will mostly result in clear errors. >> - All libraries will have to be recompiled. The transition plan >> will ensure that libraries adhering to best practices will have an easy >> transition. >> >> *Note:* A full plan is still outstanding and may require its own NEP. >> >> <#m_-5453977658075525012_m_-4971028583323681657_Adopt-NEP-50>Adopt NEP 50 >> Adopting NEP 50 changes the promotion behavior of NumPy scalars by >> removing any value-based casting. Details for this change are discussed >> in :ref:NEP50. >> >> - *Status*: Largely implemented, but open for discussions and open >> questions to be addressed. >> - *Champion*: Sebastian Berg, … >> - *Severity*: High in rare cases, some results can change or memory >> can bloat. >> - *Affects*: Many users, but hopefully not most as one needs to use >> smaller than default precision types to be affected. >> >> >> <#m_-5453977658075525012_m_-4971028583323681657_A-thorough-cleanup-of-the-Python-API>A >> thorough cleanup of the Python API >> The NumPy API is quite messy, with many functions and aliases that are >> not recommended for use, namespaces that are private but missing >> underscores, inconsistencies in argument names, and more. Changes will >> include removing aliases and outdated functionality (including many things >> that have been doc-deprecated already), making namespaces private, and >> making function signatures more consistent. >> >> - *Status*: Needs a separate NEP, and deprecations in 1.25.0 for what >> can be deprecated in a sensible way. >> - *Champion*: Ralf Gommers, Stefan van der Walt, … >> - *Severity*: Medium. It is expected that a lot of projects and users >> will see some breakage, but also that code changes to more idiomatic usage >> will be straightforward and compatible with both numpy 1.X and 2.0 >> - *Affects*: Many users and downstream projects >> >> >> <#m_-5453977658075525012_m_-4971028583323681657_Add-array-API-standard-support-to-the-main-namespace>Add >> array API standard support to the main namespace >> The main reason NEP 47 >> <https://numpy.org/neps/nep-0047-array-api-standard.html#backward-compatibility> >> aimed for a separate numpy.array_api submodule rather than the main >> namespace is that casting rules differed too much. With NEP 50 (see above), >> that will be resolved in NumPy 2.0. Having NumPy be a superset of the array >> API standard will be a significant improvement for code portability to >> other libraries (CuPy, JAX, PyTorch, etc.) and thereby address one of the >> top user requests from the 2020 NumPy user survey >> <https://numpy.org/user-survey-2020/> (GPU support). See the >> numpy.array_api API docs >> <https://numpy.org/devdocs/reference/array_api.html#table-of-differences-between-numpy-array-api-and-numpy> >> for an overview of differences between it and the main namespace (the >> “strictness” ones are not applicable). >> >> - *Status*: separate NEP to be written. >> - *Champion*: Aaron Meurer, Ralf Gommers >> - *Severity*: Medium. Most impact of breaking changes is likely >> concentrated in a few widely used APIs (e.g., change semantics of >> copy=False keyword to actually mean “don’t copy” rather than “copy if >> needed”) >> - *Affects*: most users and downstream projects >> >> <#m_-5453977658075525012_m_-4971028583323681657_Other-projects>*Other >> projects* >> See the project board <https://github.com/orgs/numpy/projects/9>. >> _______________________________________________ >> NumPy-Discussion mailing list -- numpy-discussion@python.org >> To unsubscribe send an email to numpy-discussion-le...@python.org >> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ >> Member address: ralf.gomm...@googlemail.com >> > _______________________________________________ > NumPy-Discussion mailing list -- numpy-discussion@python.org > To unsubscribe send an email to numpy-discussion-le...@python.org > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > Member address: tyler.je.re...@gmail.com >
_______________________________________________ NumPy-Discussion mailing list -- numpy-discussion@python.org To unsubscribe send an email to numpy-discussion-le...@python.org https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ Member address: arch...@mail-archive.com