array-api-extra 0.10.0__tar.gz → 0.10.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/.all-contributorsrc +34 -1
  2. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/CONTRIBUTORS.md +6 -1
  3. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/PKG-INFO +11 -4
  4. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/README.md +9 -2
  5. array_api_extra-0.10.3/docs/_templates/autosummary/class.rst +5 -0
  6. array_api_extra-0.10.3/docs/_templates/autosummary/function.rst +5 -0
  7. array_api_extra-0.10.3/docs/_templates/testing-function.rst +5 -0
  8. array_api_extra-0.10.0/docs/api-reference.md → array_api_extra-0.10.3/docs/api-assorted.md +2 -1
  9. array_api_extra-0.10.3/docs/api-lazy.md +26 -0
  10. array_api_extra-0.10.3/docs/api-testing.md +19 -0
  11. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/docs/conf.py +2 -0
  12. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/docs/index.md +5 -2
  13. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/lefthook.yml +5 -0
  14. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/meson.build +1 -1
  15. array_api_extra-0.10.3/pixi.toml +219 -0
  16. array_api_extra-0.10.3/pyproject.toml +225 -0
  17. array_api_extra-0.10.3/run_deps_tests/test_run_deps.py +15 -0
  18. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/__init__.py +7 -3
  19. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_delegation.py +157 -0
  20. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/_at.py +21 -6
  21. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/_backends.py +2 -1
  22. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/_funcs.py +59 -120
  23. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/_lazy.py +4 -4
  24. array_api_extra-0.10.3/src/array_api_extra/_lib/_testing.py +37 -0
  25. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/_utils/_helpers.py +2 -34
  26. array_api_extra-0.10.3/src/array_api_extra/testing.py +1001 -0
  27. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/tests/test_at.py +11 -12
  28. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/tests/test_funcs.py +246 -158
  29. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/tests/test_helpers.py +13 -14
  30. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/tests/test_lazy.py +26 -26
  31. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/tests/test_testing.py +256 -64
  32. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/typos.toml +1 -0
  33. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/vendor_tests/_array_api_compat_vendor.py +5 -2
  34. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/vendor_tests/test_vendor.py +15 -5
  35. array_api_extra-0.10.0/docs/api-lazy.md +0 -15
  36. array_api_extra-0.10.0/pyproject.toml +0 -378
  37. array_api_extra-0.10.0/src/array_api_extra/_lib/_testing.py +0 -304
  38. array_api_extra-0.10.0/src/array_api_extra/testing.py +0 -415
  39. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/.dprint.jsonc +0 -0
  40. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/.editorconfig +0 -0
  41. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/LICENSE +0 -0
  42. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/docs/contributing.md +0 -0
  43. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/docs/contributors.md +0 -0
  44. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/__init__.py +0 -0
  45. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/_utils/__init__.py +0 -0
  46. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/_utils/_compat.py +0 -0
  47. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/_utils/_compat.pyi +0 -0
  48. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/_utils/_typing.py +0 -0
  49. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/_lib/_utils/_typing.pyi +0 -0
  50. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/src/array_api_extra/py.typed +0 -0
  51. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/tests/__init__.py +0 -0
  52. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/tests/conftest.py +0 -0
  53. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/tests/meson.build +0 -0
  54. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/tests/test_version.py +0 -0
  55. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/vendor_tests/__init__.py +0 -0
  56. {array_api_extra-0.10.0 → array_api_extra-0.10.3}/vendor_tests/meson.build +0 -0
@@ -233,7 +233,8 @@
233
233
  "profile": "https://github.com/NeilGirdhar",
234
234
  "contributions": [
235
235
  "code",
236
- "test"
236
+ "test",
237
+ "review"
237
238
  ]
238
239
  },
239
240
  {
@@ -308,6 +309,38 @@
308
309
  "ideas",
309
310
  "test"
310
311
  ]
312
+ },
313
+ {
314
+ "login": "steppi",
315
+ "name": "Albert Steppi",
316
+ "avatar_url": "https://avatars.githubusercontent.com/u/1953382?v=4",
317
+ "profile": "http://steppi.github.io",
318
+ "contributions": [
319
+ "code",
320
+ "ideas",
321
+ "test"
322
+ ]
323
+ },
324
+ {
325
+ "login": "prady0t",
326
+ "name": "Pradyot Ranjan",
327
+ "avatar_url": "https://avatars.githubusercontent.com/u/99216956?v=4",
328
+ "profile": "https://github.com/prady0t",
329
+ "contributions": [
330
+ "code",
331
+ "doc",
332
+ "ideas",
333
+ "test"
334
+ ]
335
+ },
336
+ {
337
+ "login": "lundybernard",
338
+ "name": "Lundy Bernard",
339
+ "avatar_url": "https://avatars.githubusercontent.com/u/17297695?v=4",
340
+ "profile": "https://github.com/lundybernard",
341
+ "contributions": [
342
+ "review"
343
+ ]
311
344
  }
312
345
  ]
313
346
  }
@@ -33,7 +33,7 @@ This project exists thanks to the following contributors
33
33
  <td align="center" valign="top" width="14.28%"><a href="http://www.vanderplas.com/"><img src="https://avatars.githubusercontent.com/u/781659?v=4?s=100" width="100px;" alt="Jake Vanderplas"/><br /><sub><b>Jake Vanderplas</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Ajakevdp" title="Reviewed Pull Requests">👀</a></td>
34
34
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/KotlinIsland"><img src="https://avatars.githubusercontent.com/u/65446343?v=4?s=100" width="100px;" alt="kotlinisland"/><br /><sub><b>kotlinisland</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Akotlinisland" title="Reviewed Pull Requests">👀</a></td>
35
35
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/DetachHead"><img src="https://avatars.githubusercontent.com/u/57028336?v=4?s=100" width="100px;" alt="detachhead"/><br /><sub><b>detachhead</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Adetachhead" title="Reviewed Pull Requests">👀</a></td>
36
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/NeilGirdhar"><img src="https://avatars.githubusercontent.com/u/730137?v=4?s=100" width="100px;" alt="Neil Girdhar"/><br /><sub><b>Neil Girdhar</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Tests">⚠️</a></td>
36
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/NeilGirdhar"><img src="https://avatars.githubusercontent.com/u/730137?v=4?s=100" width="100px;" alt="Neil Girdhar"/><br /><sub><b>Neil Girdhar</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Tests">⚠️</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3ANeilGirdhar" title="Reviewed Pull Requests">👀</a></td>
37
37
  </tr>
38
38
  <tr>
39
39
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/lithomas1"><img src="https://avatars.githubusercontent.com/u/47963215?v=4?s=100" width="100px;" alt="Thomas Li"/><br /><sub><b>Thomas Li</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/issues?q=author%3Alithomas1" title="Bug reports">🐛</a> <a href="#tool-lithomas1" title="Tools">🔧</a></td>
@@ -44,6 +44,11 @@ This project exists thanks to the following contributors
44
44
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/adriagarp"><img src="https://avatars.githubusercontent.com/u/96059447?v=4?s=100" width="100px;" alt="Adrián García Pitarch"/><br /><sub><b>Adrián García Pitarch</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=adriagarp" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=adriagarp" title="Tests">⚠️</a></td>
45
45
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/cakedev0"><img src="https://avatars.githubusercontent.com/u/25986961?v=4?s=100" width="100px;" alt="Arthur Lacote"/><br /><sub><b>Arthur Lacote</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=cakedev0" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=cakedev0" title="Documentation">📖</a> <a href="#ideas-cakedev0" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=cakedev0" title="Tests">⚠️</a></td>
46
46
  </tr>
47
+ <tr>
48
+ <td align="center" valign="top" width="14.28%"><a href="http://steppi.github.io"><img src="https://avatars.githubusercontent.com/u/1953382?v=4?s=100" width="100px;" alt="Albert Steppi"/><br /><sub><b>Albert Steppi</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=steppi" title="Code">💻</a> <a href="#ideas-steppi" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=steppi" title="Tests">⚠️</a></td>
49
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/prady0t"><img src="https://avatars.githubusercontent.com/u/99216956?v=4?s=100" width="100px;" alt="Pradyot Ranjan"/><br /><sub><b>Pradyot Ranjan</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=prady0t" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=prady0t" title="Documentation">📖</a> <a href="#ideas-prady0t" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=prady0t" title="Tests">⚠️</a></td>
50
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/lundybernard"><img src="https://avatars.githubusercontent.com/u/17297695?v=4?s=100" width="100px;" alt="Lundy Bernard"/><br /><sub><b>Lundy Bernard</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Alundybernard" title="Reviewed Pull Requests">👀</a></td>
51
+ </tr>
47
52
  </tbody>
48
53
  </table>
49
54
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: array-api-extra
3
- Version: 0.10.0
3
+ Version: 0.10.3
4
4
  Summary: Extra array functions built on top of the array API standard.
5
5
  Author-Email: Lucas Colley <lucas.colley8@gmail.com>
6
6
  License-Expression: MIT
@@ -20,7 +20,7 @@ Project-URL: Homepage, https://github.com/data-apis/array-api-extra
20
20
  Project-URL: Bug Tracker, https://github.com/data-apis/array-api-extra/issues
21
21
  Project-URL: Changelog, https://github.com/data-apis/array-api-extra/releases
22
22
  Requires-Python: >=3.11
23
- Requires-Dist: array-api-compat<2,>=1.13.0
23
+ Requires-Dist: array-api-compat<2,>=1.14.0
24
24
  Description-Content-Type: text/markdown
25
25
 
26
26
  # array-api-extra
@@ -61,8 +61,10 @@ Used by:
61
61
 
62
62
  - [SciPy](https://github.com/scipy/scipy) — Fundamental algorithms for
63
63
  scientific computing.
64
- - [scikit-learn](https://github.com/scikit-learn/scikit-learn) — Machine
64
+ - [scikit-learn](https://github.com/scikit-learn/scikit-learn) — Machine
65
65
  Learning in Python.
66
+ - [SysIdentPy](https://github.com/wilsonrljr/sysidentpy) — System Identification Using NARMAX Models.
67
+ - [GLASS](https://github.com/glass-dev/glass) — Generator for Large Scale Structure.
66
68
  - *your library? Let us know!*
67
69
 
68
70
  ## Installation
@@ -113,7 +115,7 @@ This project exists thanks to the following contributors
113
115
  <td align="center" valign="top" width="14.28%"><a href="http://www.vanderplas.com/"><img src="https://avatars.githubusercontent.com/u/781659?v=4?s=100" width="100px;" alt="Jake Vanderplas"/><br /><sub><b>Jake Vanderplas</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Ajakevdp" title="Reviewed Pull Requests">👀</a></td>
114
116
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/KotlinIsland"><img src="https://avatars.githubusercontent.com/u/65446343?v=4?s=100" width="100px;" alt="kotlinisland"/><br /><sub><b>kotlinisland</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Akotlinisland" title="Reviewed Pull Requests">👀</a></td>
115
117
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/DetachHead"><img src="https://avatars.githubusercontent.com/u/57028336?v=4?s=100" width="100px;" alt="detachhead"/><br /><sub><b>detachhead</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Adetachhead" title="Reviewed Pull Requests">👀</a></td>
116
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/NeilGirdhar"><img src="https://avatars.githubusercontent.com/u/730137?v=4?s=100" width="100px;" alt="Neil Girdhar"/><br /><sub><b>Neil Girdhar</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Tests">⚠️</a></td>
118
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/NeilGirdhar"><img src="https://avatars.githubusercontent.com/u/730137?v=4?s=100" width="100px;" alt="Neil Girdhar"/><br /><sub><b>Neil Girdhar</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Tests">⚠️</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3ANeilGirdhar" title="Reviewed Pull Requests">👀</a></td>
117
119
  </tr>
118
120
  <tr>
119
121
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/lithomas1"><img src="https://avatars.githubusercontent.com/u/47963215?v=4?s=100" width="100px;" alt="Thomas Li"/><br /><sub><b>Thomas Li</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/issues?q=author%3Alithomas1" title="Bug reports">🐛</a> <a href="#tool-lithomas1" title="Tools">🔧</a></td>
@@ -124,6 +126,11 @@ This project exists thanks to the following contributors
124
126
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/adriagarp"><img src="https://avatars.githubusercontent.com/u/96059447?v=4?s=100" width="100px;" alt="Adrián García Pitarch"/><br /><sub><b>Adrián García Pitarch</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=adriagarp" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=adriagarp" title="Tests">⚠️</a></td>
125
127
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/cakedev0"><img src="https://avatars.githubusercontent.com/u/25986961?v=4?s=100" width="100px;" alt="Arthur Lacote"/><br /><sub><b>Arthur Lacote</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=cakedev0" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=cakedev0" title="Documentation">📖</a> <a href="#ideas-cakedev0" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=cakedev0" title="Tests">⚠️</a></td>
126
128
  </tr>
129
+ <tr>
130
+ <td align="center" valign="top" width="14.28%"><a href="http://steppi.github.io"><img src="https://avatars.githubusercontent.com/u/1953382?v=4?s=100" width="100px;" alt="Albert Steppi"/><br /><sub><b>Albert Steppi</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=steppi" title="Code">💻</a> <a href="#ideas-steppi" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=steppi" title="Tests">⚠️</a></td>
131
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/prady0t"><img src="https://avatars.githubusercontent.com/u/99216956?v=4?s=100" width="100px;" alt="Pradyot Ranjan"/><br /><sub><b>Pradyot Ranjan</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=prady0t" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=prady0t" title="Documentation">📖</a> <a href="#ideas-prady0t" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=prady0t" title="Tests">⚠️</a></td>
132
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/lundybernard"><img src="https://avatars.githubusercontent.com/u/17297695?v=4?s=100" width="100px;" alt="Lundy Bernard"/><br /><sub><b>Lundy Bernard</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Alundybernard" title="Reviewed Pull Requests">👀</a></td>
133
+ </tr>
127
134
  </tbody>
128
135
  </table>
129
136
 
@@ -36,8 +36,10 @@ Used by:
36
36
 
37
37
  - [SciPy](https://github.com/scipy/scipy) — Fundamental algorithms for
38
38
  scientific computing.
39
- - [scikit-learn](https://github.com/scikit-learn/scikit-learn) — Machine
39
+ - [scikit-learn](https://github.com/scikit-learn/scikit-learn) — Machine
40
40
  Learning in Python.
41
+ - [SysIdentPy](https://github.com/wilsonrljr/sysidentpy) — System Identification Using NARMAX Models.
42
+ - [GLASS](https://github.com/glass-dev/glass) — Generator for Large Scale Structure.
41
43
  - *your library? Let us know!*
42
44
 
43
45
  ## Installation
@@ -88,7 +90,7 @@ This project exists thanks to the following contributors
88
90
  <td align="center" valign="top" width="14.28%"><a href="http://www.vanderplas.com/"><img src="https://avatars.githubusercontent.com/u/781659?v=4?s=100" width="100px;" alt="Jake Vanderplas"/><br /><sub><b>Jake Vanderplas</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Ajakevdp" title="Reviewed Pull Requests">👀</a></td>
89
91
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/KotlinIsland"><img src="https://avatars.githubusercontent.com/u/65446343?v=4?s=100" width="100px;" alt="kotlinisland"/><br /><sub><b>kotlinisland</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Akotlinisland" title="Reviewed Pull Requests">👀</a></td>
90
92
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/DetachHead"><img src="https://avatars.githubusercontent.com/u/57028336?v=4?s=100" width="100px;" alt="detachhead"/><br /><sub><b>detachhead</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Adetachhead" title="Reviewed Pull Requests">👀</a></td>
91
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/NeilGirdhar"><img src="https://avatars.githubusercontent.com/u/730137?v=4?s=100" width="100px;" alt="Neil Girdhar"/><br /><sub><b>Neil Girdhar</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Tests">⚠️</a></td>
93
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/NeilGirdhar"><img src="https://avatars.githubusercontent.com/u/730137?v=4?s=100" width="100px;" alt="Neil Girdhar"/><br /><sub><b>Neil Girdhar</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=NeilGirdhar" title="Tests">⚠️</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3ANeilGirdhar" title="Reviewed Pull Requests">👀</a></td>
92
94
  </tr>
93
95
  <tr>
94
96
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/lithomas1"><img src="https://avatars.githubusercontent.com/u/47963215?v=4?s=100" width="100px;" alt="Thomas Li"/><br /><sub><b>Thomas Li</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/issues?q=author%3Alithomas1" title="Bug reports">🐛</a> <a href="#tool-lithomas1" title="Tools">🔧</a></td>
@@ -99,6 +101,11 @@ This project exists thanks to the following contributors
99
101
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/adriagarp"><img src="https://avatars.githubusercontent.com/u/96059447?v=4?s=100" width="100px;" alt="Adrián García Pitarch"/><br /><sub><b>Adrián García Pitarch</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=adriagarp" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=adriagarp" title="Tests">⚠️</a></td>
100
102
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/cakedev0"><img src="https://avatars.githubusercontent.com/u/25986961?v=4?s=100" width="100px;" alt="Arthur Lacote"/><br /><sub><b>Arthur Lacote</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=cakedev0" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=cakedev0" title="Documentation">📖</a> <a href="#ideas-cakedev0" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=cakedev0" title="Tests">⚠️</a></td>
101
103
  </tr>
104
+ <tr>
105
+ <td align="center" valign="top" width="14.28%"><a href="http://steppi.github.io"><img src="https://avatars.githubusercontent.com/u/1953382?v=4?s=100" width="100px;" alt="Albert Steppi"/><br /><sub><b>Albert Steppi</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=steppi" title="Code">💻</a> <a href="#ideas-steppi" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=steppi" title="Tests">⚠️</a></td>
106
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/prady0t"><img src="https://avatars.githubusercontent.com/u/99216956?v=4?s=100" width="100px;" alt="Pradyot Ranjan"/><br /><sub><b>Pradyot Ranjan</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=prady0t" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=prady0t" title="Documentation">📖</a> <a href="#ideas-prady0t" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=prady0t" title="Tests">⚠️</a></td>
107
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/lundybernard"><img src="https://avatars.githubusercontent.com/u/17297695?v=4?s=100" width="100px;" alt="Lundy Bernard"/><br /><sub><b>Lundy Bernard</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Alundybernard" title="Reviewed Pull Requests">👀</a></td>
108
+ </tr>
102
109
  </tbody>
103
110
  </table>
104
111
 
@@ -0,0 +1,5 @@
1
+ {{ name | escape | underline }}
2
+
3
+ .. currentmodule:: {{ module }}
4
+
5
+ .. autoclass:: {{ fullname }}
@@ -0,0 +1,5 @@
1
+ {{ name | escape | underline }}
2
+
3
+ .. currentmodule:: {{ module }}
4
+
5
+ .. autofunction:: {{ fullname }}
@@ -0,0 +1,5 @@
1
+ {{ fullname.split('.')[-2:] | join('.') | escape | underline }}
2
+
3
+ .. currentmodule:: {{ module }}
4
+
5
+ .. autofunction:: {{ fullname }}
@@ -1,4 +1,4 @@
1
- # API Reference
1
+ # Assorted functions
2
2
 
3
3
  ```{eval-rst}
4
4
  .. currentmodule:: array_api_extra
@@ -6,6 +6,7 @@
6
6
  :nosignatures:
7
7
  :toctree: generated
8
8
 
9
+ angle
9
10
  apply_where
10
11
  argpartition
11
12
  at
@@ -0,0 +1,26 @@
1
+ # Tools for lazy backends
2
+
3
+ Additional functions with special behaviour for lazy backends,
4
+ e.g. Dask or JAX:
5
+
6
+ ```{eval-rst}
7
+ .. currentmodule:: array_api_extra
8
+ .. autosummary::
9
+ :nosignatures:
10
+ :toctree: generated
11
+
12
+ lazy_apply
13
+ ```
14
+
15
+ Testing utilities:
16
+
17
+ ```{eval-rst}
18
+ .. currentmodule:: array_api_extra
19
+ .. autosummary::
20
+ :nosignatures:
21
+ :template: testing-function.rst
22
+ :toctree: generated
23
+
24
+ testing.lazy_xp_function
25
+ testing.patch_lazy_xp_functions
26
+ ```
@@ -0,0 +1,19 @@
1
+ # Testing utilities (`xpx.testing`)
2
+
3
+ These testing utilities are intended to help transition from using
4
+ {py:mod}`numpy.testing`.
5
+
6
+ ```{eval-rst}
7
+ .. currentmodule:: array_api_extra.testing
8
+ .. autosummary::
9
+ :nosignatures:
10
+ :template: testing-function.rst
11
+ :toctree: generated
12
+
13
+ assert_close
14
+ assert_close_nulp
15
+ assert_equal
16
+ assert_less
17
+ ```
18
+
19
+ See also utilities specific to testing lazy backends in {doc}`api-lazy`.
@@ -66,4 +66,6 @@ nitpick_ignore = [
66
66
  ("py:class", "_io.BytesIO"),
67
67
  ]
68
68
 
69
+ templates_path = ["_templates"]
70
+
69
71
  always_document_param_types = True
@@ -4,7 +4,8 @@
4
4
  :maxdepth: 2
5
5
  :hidden:
6
6
  self
7
- api-reference.md
7
+ api-assorted.md
8
+ api-testing.md
8
9
  api-lazy.md
9
10
  contributing.md
10
11
  contributors.md
@@ -27,6 +28,8 @@ It is currently used by:
27
28
  scientific computing.
28
29
  - [scikit-learn](https://github.com/scikit-learn/scikit-learn) — Machine
29
30
  Learning in Python.
31
+ - [SysIdentPy](https://github.com/wilsonrljr/sysidentpy) — System Identification Using NARMAX Models.
32
+ - [GLASS](https://github.com/glass-dev/glass) — Generator for Large Scale Structure.
30
33
  - *your library? Let us know!*
31
34
 
32
35
  (installation)=
@@ -114,7 +117,7 @@ def array_namespace(*xs, **kwargs):
114
117
  See [an example of this in SciPy][scipy-vendor-example].
115
118
  ```
116
119
 
117
- [scipy-vendor-example]: https://github.com/scipy/scipy/blob/main/scipy/_lib/_array_api_compat_vendor.py
120
+ [scipy-vendor-example]: https://github.com/scipy/scipy/blob/main/scipy/_external/_array_api_compat_vendor.py
118
121
 
119
122
  ## Versioning
120
123
 
@@ -39,11 +39,16 @@ pre-commit:
39
39
  - name: mypy
40
40
  glob: "*.{py,pyi}"
41
41
  run: pixi {run} mypy
42
+ - name: pyrefly
43
+ glob: "*.{py, pyi}"
44
+ run: pixi {run} pyrefly
42
45
  - name: typos
43
46
  stage_fixed: true
44
47
  run: pixi {run} typos
45
48
  - name: actionlint
46
49
  run: pixi {run} actionlint
50
+ - name: zizmor
51
+ run: pixi {run} zizmor
47
52
  - name: blacken-docs
48
53
  glob: "*.md"
49
54
  stage_fixed: true
@@ -1,6 +1,6 @@
1
1
  project(
2
2
  'array-api-extra',
3
- version: '0.10.0'
3
+ version: '0.10.3'
4
4
  )
5
5
 
6
6
  py = import('python').find_installation()
@@ -0,0 +1,219 @@
1
+ [workspace]
2
+ channels = ["https://prefix.dev/conda-forge"]
3
+ platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"]
4
+ preview = ["pixi-build"]
5
+ requires-pixi = ">=0.68.0"
6
+
7
+ ### array-api-extra package definition ###
8
+
9
+ [package.build.backend]
10
+ name = "pixi-build-python"
11
+ version = "*"
12
+
13
+ [package.host-dependencies]
14
+ meson-python = "*"
15
+ uv = "*" # interfaces with meson-python instead of pip
16
+
17
+ [package.run-dependencies]
18
+ array-api-compat = "*"
19
+
20
+ ### workspace environments ###
21
+
22
+ [environments]
23
+ default = { features = ["py314"], solve-group = "py314" }
24
+ lint = { features = ["py314", "lint"], solve-group = "py314" }
25
+ docs = { features = ["py314", "docs"], solve-group = "py314" }
26
+ tests = { features = ["py314", "tests"], solve-group = "py314" }
27
+ tests-py314 = { features = ["py314", "tests"], solve-group = "py314" } # alias of tests
28
+ tests-run-deps = { features = ["py314", "tests-run-deps"], solve-group = "py314" }
29
+
30
+ # Some backends may pin numpy; use separate solve-group
31
+ dev = { features = ["py314", "lint", "tests", "docs", "dev", "backends"], solve-group = "backends" }
32
+ tests-backends = { features = ["py314", "tests", "backends"], solve-group = "backends" }
33
+ tests-backends-py311 = { features = ["py311", "tests", "backends"] }
34
+
35
+ # CUDA not available on free github actions and on some developers' PCs
36
+ dev-cuda = { features = ["py314", "lint", "tests", "docs", "dev", "backends", "cuda-backends"], solve-group = "cuda" }
37
+ tests-cuda = { features = ["py314", "tests", "backends", "cuda-backends"], solve-group = "cuda" }
38
+ tests-cuda-py311 = { features = ["py311", "tests", "backends", "cuda-backends"] }
39
+
40
+ # Ungrouped environments
41
+ tests-numpy1 = ["py311", "tests", "numpy1"]
42
+ tests-py311 = ["py311", "tests"]
43
+ tests-nogil = ["nogil", "tests"]
44
+
45
+ ### default feature definition ###
46
+
47
+ [dev]
48
+ # this pulls in array-api-extra's host and run dependencies
49
+ array-api-extra.path = "."
50
+
51
+ [dependencies]
52
+ array-api-extra.path = "."
53
+
54
+ ### non-default feature definitions ###
55
+
56
+ [feature.lint.dependencies]
57
+ typing-extensions = ">=4.15.0"
58
+ pylint = ">=4.0.5"
59
+ mypy = ">=1.20.2"
60
+ basedpyright = ">=1.39.5"
61
+ numpydoc = ">=1.10.0,<2"
62
+ # import dependencies for mypy:
63
+ array-api-strict = ">=2.5,<2.6"
64
+ numpy = ">=2.1.3"
65
+ hypothesis = ">=6.152.2"
66
+ dask-core = ">=2026.3.0" # No distributed, tornado, etc.
67
+ dprint = ">=0.50.0,<0.51"
68
+ lefthook = ">=2.1.8,<3"
69
+ ruff = ">=0.15.13,<0.16"
70
+ typos = ">=1.46.2,<2"
71
+ actionlint = ">=1.7.12,<2"
72
+ blacken-docs = ">=1.20.0,<2"
73
+ pytest = ">=9.0.3,<10"
74
+ validate-pyproject = ">=0.25,<0.26"
75
+ pyrefly = ">=1.0.0,<1.1"
76
+ zizmor = ">=1.25.2,<1.26"
77
+ # NOTE: don't add cupy, jax, pytorch, or sparse here,
78
+ # as they slow down mypy and are not portable across target OSs
79
+
80
+ [feature.lint.tasks]
81
+ lefthook = { cmd = "lefthook", description = "Run lefthook", default-environment = "lint" }
82
+ hooks = { cmd = "lefthook install", description = "Install pre-commit hooks", default-environment = "lint" }
83
+ pre-commit = { cmd = "lefthook run pre-commit", description = "Run pre-commit checks", default-environment = "lint" }
84
+ pylint = { cmd = "pylint array_api_extra", cwd = "src", description = "Lint with pylint", default-environment = "lint" }
85
+ mypy = { cmd = "mypy", description = "Type check with mypy", default-environment = "lint" }
86
+ pyrefly = { cmd = "pyrefly check", description = "Type check with pyrefly", default-environment = "lint" }
87
+ pyright = { cmd = "basedpyright", description = "Type check with basedpyright", default-environment = "lint" }
88
+ ruff-check = { cmd = "ruff check --fix", description = "Lint with ruff", default-environment = "lint" }
89
+ ruff-format = { cmd = "ruff format", description = "Format with ruff", default-environment = "lint" }
90
+ dprint = { cmd = "dprint fmt", description = "Format with dprint", default-environment = "lint" }
91
+ typos = { cmd = "typos --write-changes --force-exclude", description = "Fix typos", default-environment = "lint" }
92
+ actionlint = { cmd = "actionlint", description = "Lint actions with actionlint", default-environment = "lint" }
93
+ zizmor = { cmd = "zizmor .github -p", description = "GHA static analysis with zizmor", default-environment = "lint" }
94
+ blacken-docs = { cmd = "blacken-docs", description = "Format Python markdown blocks with Black", default-environment = "lint" }
95
+ validate-pyproject = { cmd = "validate-pyproject pyproject.toml", description = "Validate pyproject.toml", default-environment = "lint" }
96
+ numpydoc = { cmd = "numpydoc lint", description = "Validate docstrings with numpydoc", default-environment = "lint" }
97
+ lint = { cmd = "lefthook run pre-commit --all-files --force", description = "Run all linters", default-environment = "lint" }
98
+
99
+ [feature.tests.dependencies]
100
+ pytest = ">=9.0.3"
101
+ pytest-cov = ">=7.1.0"
102
+ hypothesis = ">=6.152.2"
103
+ array-api-strict = ">=2.5,<2.6"
104
+ numpy = ">=1.22.0"
105
+ scipy = ">=1.15.2,<2"
106
+
107
+ [feature.tests.tasks]
108
+ tests = { cmd = "pytest -v", description = "Run tests", default-environment = "tests" }
109
+ tests-cov = { cmd = "pytest -v -ra --cov --cov-report=xml --cov-report=term --durations=20", description = "Run tests with coverage", default-environment = "tests" }
110
+
111
+ clean-vendor-compat = { cmd = "rm -rf vendor_tests/array_api_compat", description = "Delete the existing vendored version of array-api-compat", default-environment = "tests" }
112
+ clean-vendor-extra = { cmd = "rm -rf vendor_tests/array_api_extra", description = "Delete the existing vendored version of array-api-extra", default-environment = "tests" }
113
+ copy-vendor-compat = { cmd = "cp -r $(python -c 'import site; print(site.getsitepackages()[0])')/array_api_compat vendor_tests/", depends-on = ["clean-vendor-compat"], description = "Vendor a clean copy of array-api-compat", default-environment = "tests" }
114
+ copy-vendor-extra = { cmd = "cp -r src/array_api_extra vendor_tests/", depends-on = ["clean-vendor-extra"], description = "Vendor a clean copy of array-api-extra", default-environment = "tests" }
115
+ tests-vendor = { cmd = "pytest -v vendor_tests", depends-on = ["copy-vendor-compat", "copy-vendor-extra"], description = "Check that array-api-extra and array-api-compat can be vendored together", default-environment = "tests" }
116
+
117
+ tests-ci = { depends-on = ["tests-cov", "tests-vendor"], description = "Run tests with coverage and vendor tests" }
118
+ coverage = { cmd = "coverage html", depends-on = ["tests-cov"], description = "Generate test coverage html report", default-environment = "tests" }
119
+ open-coverage = { cmd = "open htmlcov/index.html", depends-on = ["coverage"], description = "Open test coverage report", default-environment = "tests" }
120
+
121
+ # tests with only run dependencies
122
+ [feature.tests-run-deps.dependencies]
123
+ pytest = ">=9.0.3"
124
+ pytest-cov = ">=7.1.0"
125
+
126
+ [feature.tests-run-deps.tasks.tests-run-deps]
127
+ cmd = "pytest -v run_deps_tests"
128
+ description = "Run run-dependency tests"
129
+ default-environment = "tests-run-deps"
130
+
131
+ [feature.tests-run-deps.tasks.tests-run-deps-cov]
132
+ cmd = "pytest -v -ra --cov --cov-report=xml --cov-report=term --durations=20 run_deps_tests"
133
+ description = "Run run-dependency tests with coverage"
134
+ default-environment = "tests-run-deps"
135
+
136
+ [feature.docs.dependencies]
137
+ sphinx = ">=7.4.7"
138
+ furo = ">=2025.12.19"
139
+ myst-parser = ">=5.1.0"
140
+ sphinx-copybutton = ">=0.5.2"
141
+ sphinx-autodoc-typehints = ">=1.25.3"
142
+ # Needed to import parsed modules with autodoc
143
+ dask-core = ">=2026.3.0" # No distributed, tornado, etc.
144
+ pytest = ">=9.0.3"
145
+ typing-extensions = ">=4.15.0"
146
+ numpy = ">=2.1.3"
147
+
148
+ [feature.docs.tasks]
149
+ docs = { cmd = "sphinx-build -E -W . build/", cwd = "docs", description = "Build docs", default-environment = "docs" }
150
+ open-docs = { cmd = "open build/index.html", cwd = "docs", depends-on = ["docs"], description = "Open the generated docs", default-environment = "docs" }
151
+
152
+ [feature.dev.dependencies]
153
+ ipython = ">=9.13.0"
154
+
155
+ [feature.dev.tasks]
156
+ ipython = { cmd = "ipython", description = "Launch ipython", default-environment = "dev" }
157
+
158
+ [feature.py311.dependencies]
159
+ python = "~=3.11.0"
160
+
161
+ [feature.py314.dependencies]
162
+ python = "~=3.14.0"
163
+
164
+ [feature.numpy1.dependencies]
165
+ # Oldest NumPy version supported by scikit-learn.
166
+ # Note that this is older than what SPEC0 recommends.
167
+ numpy = "=1.24.1"
168
+
169
+ # Backends that can run on CPU-only hosts
170
+ # Note: JAX and PyTorch will install CPU variants.
171
+ [feature.backends.dependencies]
172
+ pytorch = ">=2.10.0"
173
+ dask-core = ">=2026.3.0" # No distributed, tornado, etc.
174
+ sparse = ">=0.18.0"
175
+
176
+ [feature.backends.target.linux-64.dependencies]
177
+ jax = ">=0.9.2"
178
+
179
+ [feature.backends.target.osx-64.dependencies]
180
+ jax = ">=0.9.2"
181
+
182
+ [feature.backends.target.osx-arm64.dependencies]
183
+ jax = ">=0.9.2"
184
+
185
+ [feature.backends.target.win-64.dependencies]
186
+ # jax = "*" # unavailable
187
+
188
+ # Backends that require a GPU host and a CUDA driver.
189
+ # Note that JAX and PyTorch automatically prefer CUDA variants
190
+ # thanks to the `system-requirements` below, *if available*.
191
+ # We request them explicitly below to ensure that we don't
192
+ # quietly revert to CPU-only in the future, e.g. when CUDA 13
193
+ # is released and CUDA 12 builds are dropped upstream.
194
+ [feature.cuda-backends]
195
+ system-requirements = { cuda = "12" }
196
+
197
+ [feature.cuda-backends.target.linux.dependencies]
198
+ cupy = ">=14.0.1"
199
+ jaxlib = { version = ">=0.9.2", build = "cuda12*" }
200
+ pytorch = { version = ">=2.10.0", build = "cuda12*" }
201
+
202
+ [feature.cuda-backends.target.osx.dependencies]
203
+ # cupy = "*" # unavailable
204
+ # jaxlib = { version = "*", build = "cuda12*" } # unavailable
205
+ # pytorch = { version = "*", build = "cuda12*" } # unavailable
206
+
207
+ [feature.cuda-backends.target.win.dependencies]
208
+ cupy = ">=14.0.1"
209
+ # jaxlib = { version = "*", build = "cuda12*" } # unavailable
210
+ pytorch = { version = ">=2.10.0", build = "cuda12*" }
211
+
212
+ [feature.nogil.dependencies]
213
+ python-freethreading = "~=3.13.0"
214
+ pytest-run-parallel = ">=0.8.2"
215
+ numpy = ">=2.3.5"
216
+ # pytorch = "*" # Not available on Python 3.13t yet
217
+ dask-core = ">=2026.3.0" # No distributed, tornado, etc.
218
+ # sparse = "*" # numba not available on Python 3.13t yet
219
+ # jax = "*" # ml_dtypes not available on Python 3.13t yet