|
| 1 | ++++ |
| 2 | +date = "2025-03-19T08:00:00+00:00" |
| 3 | +author = "Athan Reines" |
| 4 | +title = "2025 release of the Array API Standard" |
| 5 | +tags = ["APIs", "standard", "consortium", "arrays", "community"] |
| 6 | +categories = ["Consortium", "Standardization"] |
| 7 | +description = "The 2025 revision of the array API standard has been finalized and is ready for adoption by conforming array libraries." |
| 8 | +draft = false |
| 9 | +weight = 30 |
| 10 | ++++ |
| 11 | + |
| 12 | +We're pleased to announce the 2025 revision of the Array API standard. |
| 13 | + |
| 14 | +Since its initial release in 2021, the Array API standard has aimed to reduce |
| 15 | +fragmentation across array libraries by defining a common, minimal interface |
| 16 | +for multidimensional array operations. Over the past several years, the |
| 17 | +standard has matured alongside its ecosystem, with increasing adoption across |
| 18 | +libraries such as NumPy, CuPy, PyTorch, JAX, and others. |
| 19 | + |
| 20 | +The 2025 revision marks another step forward in that evolution. This release |
| 21 | +focuses on improving usability, clarifying semantics, and addressing feedback |
| 22 | +from downstream libraries and users who are building on top of the standard. |
| 23 | + |
| 24 | +## What's new in 2025 |
| 25 | + |
| 26 | +This year's revision is less about expanding surface area and more about |
| 27 | +refinement. As adoption has grown, so too has the need to ensure that the |
| 28 | +specification is both practical and predictable in real-world usage. |
| 29 | + |
| 30 | +### Smoother edges for downstream libraries |
| 31 | + |
| 32 | +One of the primary goals of this revision is to make the standard easier to |
| 33 | +implement and depend on. |
| 34 | + |
| 35 | +Over the past year, we've worked closely with maintainers of downstream |
| 36 | +libraries, such as SciPy, scikit-learn, and others, to identify friction points |
| 37 | +when targeting the Array API. In response, the 2025 revision includes: |
| 38 | + |
| 39 | +- Clarifications to ambiguous or under-specified behaviors. |
| 40 | +- Improved consistency across related APIs. |
| 41 | +- Better alignment between specification language and existing implementations. |
| 42 | + |
| 43 | +These changes reduce the amount of special-casing required in downstream code |
| 44 | +and make it easier to write libraries that are backend-agnostic. |
| 45 | + |
| 46 | +### Continued investment in consistency |
| 47 | + |
| 48 | +Consistency remains a core design principle of the Array API standard. In this |
| 49 | +revision, we've continued to refine naming, argument conventions, and behavior |
| 50 | +to ensure that APIs feel coherent and predictable. Where inconsistencies or |
| 51 | +surprising behaviors were identified in earlier versions, we've taken steps to |
| 52 | +resolve them while carefully balancing backward compatibility concerns. |
| 53 | + |
| 54 | +### Expanded and clarified semantics |
| 55 | + |
| 56 | +As more libraries adopt the standard, subtle semantic mismatches become more |
| 57 | +visible. The 2025 revision addresses these by: |
| 58 | + |
| 59 | +- Tightening definitions for edge cases. |
| 60 | +- Clarifying broadcasting and type promotion behavior. |
| 61 | +- Providing more precise guarantees around function outputs and error |
| 62 | + conditions. |
| 63 | + |
| 64 | +These improvements are especially important for authors of numerical libraries, |
| 65 | +where small inconsistencies can propagate into larger correctness issues. |
| 66 | + |
| 67 | +### New API Additions |
| 68 | + |
| 69 | +Several new APIs have been introduced in this release to expand functionality |
| 70 | +and improve usability: |
| 71 | + |
| 72 | +- `broadcast_shapes`: broadcasts one or more shapes against one another. |
| 73 | +- `isin`: tests for each element in an array whether the element is in |
| 74 | + another array. |
| 75 | +- `linalg.eig`: returns the eigenvalues and eigenvectors of a real or complex |
| 76 | + matrix. |
| 77 | +- `linalg.eigvals`: returns the eigenvalues of a real or complex matrix. |
| 78 | + |
| 79 | +These additions further close the gap between the Array API standard and |
| 80 | +established numerical computing libraries. |
| 81 | + |
| 82 | +### Breaking Changes |
| 83 | + |
| 84 | +With progress comes necessary refinements. This year's update includes one |
| 85 | +significant breaking change: |
| 86 | + |
| 87 | +- **Consistently return tuples rather than lists**: Previously, for |
| 88 | + `broadcast_arrays`, `meshgrid`, and `__array_namespace_info__().devices`, the |
| 89 | + functions returned lists. Guidance has now been updated to require always |
| 90 | + returning tuples. Prior guidance originated from early specification |
| 91 | + discussions, and, since that time, array libraries have moved away from |
| 92 | + returning lists to always returning tuples. This change ensures that the |
| 93 | + specification matches ecosystem conventions and further ensures consistency |
| 94 | + throughout the specification. |
| 95 | + |
| 96 | +### Changelog |
| 97 | + |
| 98 | +For a complete list of changes, please see the full changelog: |
| 99 | + |
| 100 | +[https://data-apis.org/array-api/latest/changelog.html](https://data-apis.org/array-api/latest/changelog.html) |
| 101 | + |
| 102 | +## Growing ecosystem adoption |
| 103 | + |
| 104 | +The Array API standard continues to see strong adoption across the scientific |
| 105 | +Python ecosystem. Major array libraries have either implemented or are actively |
| 106 | +working toward compliance, and an increasing number of downstream libraries are |
| 107 | +using the standard as a portability layer. This enables users to write code once |
| 108 | +and run it across multiple array backends, including CPU and GPU implementations. |
| 109 | + |
| 110 | +In parallel, the [`array-api-extra`](https://github.com/data-apis/array-api-extra) |
| 111 | +project continues to expand, providing higher-level utilities that build |
| 112 | +on top of the core specification and address common needs in downstream |
| 113 | +libraries and user applications. |
| 114 | + |
| 115 | +## Looking ahead |
| 116 | + |
| 117 | +As the Array API standard matures, our focus is shifting from defining the core |
| 118 | +interface to ensuring long-term stability, usability, and ecosystem |
| 119 | +integration. Future work will continue to prioritize: |
| 120 | + |
| 121 | +- Improving the developer experience for downstream libraries. |
| 122 | +- Ensuring consistency across implementations. |
| 123 | +- Expanding supporting tools and libraries around the standard. |
| 124 | + |
| 125 | +We remain committed to working closely with the community to ensure that the |
| 126 | +standard evolves in a way that reflects real-world usage and needs. |
| 127 | + |
| 128 | +## Get involved |
| 129 | + |
| 130 | +The Array API standard is developed in the open, and we welcome feedback and |
| 131 | +contributions from the community. |
| 132 | + |
| 133 | +- Specification: [https://data-apis.org/array-api/](https://data-apis.org/array-api/) |
| 134 | +- GitHub: [https://github.com/data-apis/array-api](https://github.com/data-apis/array-api) |
| 135 | +- Public calendar: [https://calendar.google.com/calendar/embed?src=8fe9013a2cb5d3409bb236d04eca73fa5227eac01c02ea8f6bc4a6a3cf982fa3%40group.calendar.google.com](https://calendar.google.com/calendar/embed?src=8fe9013a2cb5d3409bb236d04eca73fa5227eac01c02ea8f6bc4a6a3cf982fa3%40group.calendar.google.com) |
| 136 | + |
| 137 | +If you're building a library, experimenting with backend-agnostic code, or |
| 138 | +encountering challenges with the standard, we'd love to hear from you. |
| 139 | + |
| 140 | +## Acknowledgments |
| 141 | + |
| 142 | +This release would not have been possible without the continued efforts of |
| 143 | +contributors across the scientific Python ecosystem. We're grateful to everyone |
| 144 | +who has provided feedback, implemented the standard, and helped move the |
| 145 | +project forward. |
| 146 | + |
| 147 | +### Funding Acknowledgment |
| 148 | + |
| 149 | +This project has been made possible in part by grant number EOSS6-0000000621 |
| 150 | +from the Chan Zuckerberg Initiative DAF, an advised fund of Silicon Valley |
| 151 | +Community Foundation. Athan Reines is the grant's principal investigator and |
| 152 | +Quansight, PBC is the entity receiving and executing on the grant. |
0 commit comments