array-api-extra 0.10.1__tar.gz → 0.11.0__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.1 → array_api_extra-0.11.0}/.all-contributorsrc +32 -1
  2. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/CONTRIBUTORS.md +4 -1
  3. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/PKG-INFO +9 -4
  4. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/README.md +7 -2
  5. array_api_extra-0.11.0/docs/_templates/autosummary/class.rst +5 -0
  6. array_api_extra-0.11.0/docs/_templates/autosummary/function.rst +5 -0
  7. array_api_extra-0.11.0/docs/_templates/testing-function.rst +5 -0
  8. array_api_extra-0.10.1/docs/api-reference.md → array_api_extra-0.11.0/docs/api-assorted.md +3 -1
  9. array_api_extra-0.11.0/docs/api-lazy.md +26 -0
  10. array_api_extra-0.11.0/docs/api-testing.md +19 -0
  11. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/docs/conf.py +2 -0
  12. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/docs/index.md +7 -4
  13. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/lefthook.yml +5 -0
  14. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/meson.build +2 -1
  15. array_api_extra-0.11.0/pixi.toml +218 -0
  16. array_api_extra-0.11.0/pyproject.toml +227 -0
  17. array_api_extra-0.11.0/run_deps_tests/test_run_deps.py +15 -0
  18. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/__init__.py +7 -3
  19. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_delegation.py +175 -7
  20. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/_at.py +21 -6
  21. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/_backends.py +2 -1
  22. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/_funcs.py +59 -120
  23. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/_lazy.py +4 -4
  24. array_api_extra-0.11.0/src/array_api_extra/_lib/_testing.py +37 -0
  25. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/_utils/_helpers.py +25 -34
  26. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/testing.py +506 -16
  27. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/tests/conftest.py +3 -0
  28. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/tests/meson.build +1 -0
  29. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/tests/test_at.py +11 -12
  30. array_api_extra-0.11.0/tests/test_deprecation.py +15 -0
  31. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/tests/test_funcs.py +248 -158
  32. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/tests/test_helpers.py +13 -14
  33. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/tests/test_lazy.py +26 -26
  34. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/tests/test_testing.py +135 -65
  35. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/typos.toml +1 -0
  36. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/vendor_tests/_array_api_compat_vendor.py +5 -2
  37. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/vendor_tests/test_vendor.py +15 -5
  38. array_api_extra-0.10.1/docs/api-lazy.md +0 -15
  39. array_api_extra-0.10.1/pyproject.toml +0 -379
  40. array_api_extra-0.10.1/src/array_api_extra/_lib/_testing.py +0 -304
  41. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/.dprint.jsonc +0 -0
  42. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/.editorconfig +0 -0
  43. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/LICENSE +0 -0
  44. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/docs/contributing.md +0 -0
  45. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/docs/contributors.md +0 -0
  46. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/__init__.py +0 -0
  47. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/_utils/__init__.py +0 -0
  48. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/_utils/_compat.py +0 -0
  49. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/_utils/_compat.pyi +0 -0
  50. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/_utils/_typing.py +0 -0
  51. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/_lib/_utils/_typing.pyi +0 -0
  52. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/src/array_api_extra/py.typed +0 -0
  53. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/tests/__init__.py +0 -0
  54. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/tests/test_version.py +0 -0
  55. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/vendor_tests/__init__.py +0 -0
  56. {array_api_extra-0.10.1 → array_api_extra-0.11.0}/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
  {
@@ -319,6 +320,36 @@
319
320
  "ideas",
320
321
  "test"
321
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
+ ]
344
+ },
345
+ {
346
+ "login": "Cyril-36",
347
+ "name": "Chaitanya Pudota",
348
+ "avatar_url": "https://avatars.githubusercontent.com/u/138621648?v=4",
349
+ "profile": "https://github.com/Cyril-36",
350
+ "contributions": [
351
+ "code"
352
+ ]
322
353
  }
323
354
  ]
324
355
  }
@@ -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>
@@ -46,6 +46,9 @@ This project exists thanks to the following contributors
46
46
  </tr>
47
47
  <tr>
48
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
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Cyril-36"><img src="https://avatars.githubusercontent.com/u/138621648?v=4?s=100" width="100px;" alt="Chaitanya Pudota"/><br /><sub><b>Chaitanya Pudota</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=Cyril-36" title="Code">💻</a></td>
49
52
  </tr>
50
53
  </tbody>
51
54
  </table>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: array-api-extra
3
- Version: 0.10.1
3
+ Version: 0.11.0
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>
@@ -126,6 +128,9 @@ This project exists thanks to the following contributors
126
128
  </tr>
127
129
  <tr>
128
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
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Cyril-36"><img src="https://avatars.githubusercontent.com/u/138621648?v=4?s=100" width="100px;" alt="Chaitanya Pudota"/><br /><sub><b>Chaitanya Pudota</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=Cyril-36" title="Code">💻</a></td>
129
134
  </tr>
130
135
  </tbody>
131
136
  </table>
@@ -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>
@@ -101,6 +103,9 @@ This project exists thanks to the following contributors
101
103
  </tr>
102
104
  <tr>
103
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
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Cyril-36"><img src="https://avatars.githubusercontent.com/u/138621648?v=4?s=100" width="100px;" alt="Chaitanya Pudota"/><br /><sub><b>Chaitanya Pudota</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=Cyril-36" title="Code">💻</a></td>
104
109
  </tr>
105
110
  </tbody>
106
111
  </table>
@@ -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
@@ -23,6 +24,7 @@
23
24
  one_hot
24
25
  pad
25
26
  partition
27
+ searchsorted
26
28
  setdiff1d
27
29
  sinc
28
30
  union1d
@@ -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)=
@@ -59,8 +62,8 @@ a specific version, or vendor the library inside your own.
59
62
 
60
63
  ```{note}
61
64
  This library depends on `array-api-compat`. We aim for compatibility with
62
- the latest released version of array-api-compat, and your mileage may vary
63
- with older or dev versions.
65
+ the latest released versions of the standard and array-api-compat,
66
+ and your mileage may vary with older or dev/draft versions.
64
67
  ```
65
68
 
66
69
  (vendoring)=
@@ -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.1'
3
+ version: '0.11.0'
4
4
  )
5
5
 
6
6
  py = import('python').find_installation()
@@ -11,6 +11,7 @@ sources = {
11
11
  'array_api_extra': files(
12
12
  'src/array_api_extra/__init__.py',
13
13
  'src/array_api_extra/_delegation.py',
14
+ 'src/array_api_extra/py.typed',
14
15
  'src/array_api_extra/testing.py',
15
16
  ),
16
17
  'array_api_extra/_lib': files(
@@ -0,0 +1,218 @@
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
+
16
+ [package.run-dependencies]
17
+ array-api-compat = "*"
18
+
19
+ ### workspace environments ###
20
+
21
+ [environments]
22
+ default = { features = ["py314"], solve-group = "py314" }
23
+ lint = { features = ["py314", "lint"], solve-group = "py314" }
24
+ docs = { features = ["py314", "docs"], solve-group = "py314" }
25
+ tests = { features = ["py314", "tests"], solve-group = "py314" }
26
+ tests-py314 = { features = ["py314", "tests"], solve-group = "py314" } # alias of tests
27
+ tests-run-deps = { features = ["py314", "tests-run-deps"], solve-group = "py314" }
28
+
29
+ # Some backends may pin numpy; use separate solve-group
30
+ dev = { features = ["py314", "lint", "tests", "docs", "dev", "backends"], solve-group = "backends" }
31
+ tests-backends = { features = ["py314", "tests", "backends"], solve-group = "backends" }
32
+ tests-backends-py311 = { features = ["py311", "tests", "backends"] }
33
+
34
+ # CUDA not available on free github actions and on some developers' PCs
35
+ dev-cuda = { features = ["py314", "lint", "tests", "docs", "dev", "backends", "cuda-backends"], solve-group = "cuda" }
36
+ tests-cuda = { features = ["py314", "tests", "backends", "cuda-backends"], solve-group = "cuda" }
37
+ tests-cuda-py311 = { features = ["py311", "tests", "backends", "cuda-backends"] }
38
+
39
+ # Ungrouped environments
40
+ tests-numpy1 = ["py311", "tests", "numpy1"]
41
+ tests-py311 = ["py311", "tests"]
42
+ tests-nogil = ["nogil", "tests"]
43
+
44
+ ### default feature definition ###
45
+
46
+ [dev]
47
+ # this pulls in array-api-extra's host and run dependencies
48
+ array-api-extra.path = "."
49
+
50
+ [dependencies]
51
+ array-api-extra.path = "."
52
+
53
+ ### non-default feature definitions ###
54
+
55
+ [feature.lint.dependencies]
56
+ typing-extensions = ">=4.15.0"
57
+ pylint = ">=4.0.5"
58
+ mypy = ">=1.20.2"
59
+ basedpyright = ">=1.39.6"
60
+ numpydoc = ">=1.10.0,<2"
61
+ # import dependencies for mypy:
62
+ array-api-strict = ">=2.5,<2.6"
63
+ numpy = ">=2.1.3"
64
+ hypothesis = ">=6.153.0"
65
+ dask-core = ">=2026.3.0" # No distributed, tornado, etc.
66
+ dprint = ">=0.50.0,<0.51"
67
+ lefthook = ">=2.1.8,<3"
68
+ ruff = ">=0.15.14,<0.16"
69
+ typos = ">=1.46.3,<2"
70
+ actionlint = ">=1.7.12,<2"
71
+ blacken-docs = ">=1.20.0,<2"
72
+ pytest = ">=9.0.3,<10"
73
+ validate-pyproject = ">=0.25,<0.26"
74
+ pyrefly = ">=1.0.0,<1.1"
75
+ zizmor = ">=1.25.2,<1.26"
76
+ # NOTE: don't add cupy, jax, pytorch, or sparse here,
77
+ # as they slow down mypy and are not portable across target OSs
78
+
79
+ [feature.lint.tasks]
80
+ lefthook = { cmd = "lefthook", description = "Run lefthook", default-environment = "lint" }
81
+ hooks = { cmd = "lefthook install", description = "Install pre-commit hooks", default-environment = "lint" }
82
+ pre-commit = { cmd = "lefthook run pre-commit", description = "Run pre-commit checks", default-environment = "lint" }
83
+ pylint = { cmd = "pylint array_api_extra", cwd = "src", description = "Lint with pylint", default-environment = "lint" }
84
+ mypy = { cmd = "mypy", description = "Type check with mypy", default-environment = "lint" }
85
+ pyrefly = { cmd = "pyrefly check", description = "Type check with pyrefly", default-environment = "lint" }
86
+ pyright = { cmd = "basedpyright", description = "Type check with basedpyright", default-environment = "lint" }
87
+ ruff-check = { cmd = "ruff check --fix", description = "Lint with ruff", default-environment = "lint" }
88
+ ruff-format = { cmd = "ruff format", description = "Format with ruff", default-environment = "lint" }
89
+ dprint = { cmd = "dprint fmt", description = "Format with dprint", default-environment = "lint" }
90
+ typos = { cmd = "typos --write-changes --force-exclude", description = "Fix typos", default-environment = "lint" }
91
+ actionlint = { cmd = "actionlint", description = "Lint actions with actionlint", default-environment = "lint" }
92
+ zizmor = { cmd = "zizmor .github -p", description = "GHA static analysis with zizmor", default-environment = "lint" }
93
+ blacken-docs = { cmd = "blacken-docs", description = "Format Python markdown blocks with Black", default-environment = "lint" }
94
+ validate-pyproject = { cmd = "validate-pyproject pyproject.toml", description = "Validate pyproject.toml", default-environment = "lint" }
95
+ numpydoc = { cmd = "numpydoc lint", description = "Validate docstrings with numpydoc", default-environment = "lint" }
96
+ lint = { cmd = "lefthook run pre-commit --all-files --force", description = "Run all linters", default-environment = "lint" }
97
+
98
+ [feature.tests.dependencies]
99
+ pytest = ">=9.0.3"
100
+ pytest-cov = ">=7.1.0"
101
+ hypothesis = ">=6.153.0"
102
+ array-api-strict = ">=2.5,<2.6"
103
+ numpy = ">=1.22.0"
104
+ scipy = ">=1.15.2,<2"
105
+
106
+ [feature.tests.tasks]
107
+ tests = { cmd = "pytest -v", description = "Run tests", default-environment = "tests" }
108
+ tests-cov = { cmd = "pytest -v -ra --cov --cov-report=xml --cov-report=term --durations=20", description = "Run tests with coverage", default-environment = "tests" }
109
+
110
+ clean-vendor-compat = { cmd = "rm -rf vendor_tests/array_api_compat", description = "Delete the existing vendored version of array-api-compat", default-environment = "tests" }
111
+ clean-vendor-extra = { cmd = "rm -rf vendor_tests/array_api_extra", description = "Delete the existing vendored version of array-api-extra", default-environment = "tests" }
112
+ copy-vendor-compat = { cmd = "cp -r $(python -c 'import site; print(site.getsitepackages()[0])')/array_api_compat vendor_tests/ && rm -rf vendor_tests/array_api_compat/vendor_tests && rm -rf vendor_tests/array_api_compat/tests", depends-on = ["clean-vendor-compat"], description = "Vendor a clean copy of array-api-compat", default-environment = "tests" }
113
+ 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" }
114
+ 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" }
115
+
116
+ tests-ci = { depends-on = ["tests-cov", "tests-vendor"], description = "Run tests with coverage and vendor tests" }
117
+ coverage = { cmd = "coverage html", depends-on = ["tests-cov"], description = "Generate test coverage html report", default-environment = "tests" }
118
+ open-coverage = { cmd = "open htmlcov/index.html", depends-on = ["coverage"], description = "Open test coverage report", default-environment = "tests" }
119
+
120
+ # tests with only run dependencies
121
+ [feature.tests-run-deps.dependencies]
122
+ pytest = ">=9.0.3"
123
+ pytest-cov = ">=7.1.0"
124
+
125
+ [feature.tests-run-deps.tasks.tests-run-deps]
126
+ cmd = "pytest -v run_deps_tests"
127
+ description = "Run run-dependency tests"
128
+ default-environment = "tests-run-deps"
129
+
130
+ [feature.tests-run-deps.tasks.tests-run-deps-cov]
131
+ cmd = "pytest -v -ra --cov --cov-report=xml --cov-report=term --durations=20 run_deps_tests"
132
+ description = "Run run-dependency tests with coverage"
133
+ default-environment = "tests-run-deps"
134
+
135
+ [feature.docs.dependencies]
136
+ sphinx = ">=7.4.7"
137
+ furo = ">=2025.12.19"
138
+ myst-parser = ">=5.1.0"
139
+ sphinx-copybutton = ">=0.5.2"
140
+ sphinx-autodoc-typehints = ">=1.25.3"
141
+ # Needed to import parsed modules with autodoc
142
+ dask-core = ">=2026.3.0" # No distributed, tornado, etc.
143
+ pytest = ">=9.0.3"
144
+ typing-extensions = ">=4.15.0"
145
+ numpy = ">=2.1.3"
146
+
147
+ [feature.docs.tasks]
148
+ docs = { cmd = "sphinx-build -E -W . build/", cwd = "docs", description = "Build docs", default-environment = "docs" }
149
+ open-docs = { cmd = "open build/index.html", cwd = "docs", depends-on = ["docs"], description = "Open the generated docs", default-environment = "docs" }
150
+
151
+ [feature.dev.dependencies]
152
+ ipython = ">=9.13.0"
153
+
154
+ [feature.dev.tasks]
155
+ ipython = { cmd = "ipython", description = "Launch ipython", default-environment = "dev" }
156
+
157
+ [feature.py311.dependencies]
158
+ python = "~=3.11.0"
159
+
160
+ [feature.py314.dependencies]
161
+ python = "~=3.14.0"
162
+
163
+ [feature.numpy1.dependencies]
164
+ # Oldest NumPy version supported by scikit-learn.
165
+ # Note that this is older than what SPEC0 recommends.
166
+ numpy = "=1.24.1"
167
+
168
+ # Backends that can run on CPU-only hosts
169
+ # Note: JAX and PyTorch will install CPU variants.
170
+ [feature.backends.dependencies]
171
+ pytorch = ">=2.10.0"
172
+ dask-core = ">=2026.3.0" # No distributed, tornado, etc.
173
+ sparse = ">=0.18.0"
174
+
175
+ [feature.backends.target.linux-64.dependencies]
176
+ jax = ">=0.9.2"
177
+
178
+ [feature.backends.target.osx-64.dependencies]
179
+ jax = ">=0.9.2"
180
+
181
+ [feature.backends.target.osx-arm64.dependencies]
182
+ jax = ">=0.9.2"
183
+
184
+ [feature.backends.target.win-64.dependencies]
185
+ # jax = "*" # unavailable
186
+
187
+ # Backends that require a GPU host and a CUDA driver.
188
+ # Note that JAX and PyTorch automatically prefer CUDA variants
189
+ # thanks to the `system-requirements` below, *if available*.
190
+ # We request them explicitly below to ensure that we don't
191
+ # quietly revert to CPU-only in the future, e.g. when CUDA 13
192
+ # is released and CUDA 12 builds are dropped upstream.
193
+ [feature.cuda-backends]
194
+ system-requirements = { cuda = "12" }
195
+
196
+ [feature.cuda-backends.target.linux.dependencies]
197
+ cupy = ">=14.1.0"
198
+ jaxlib = { version = ">=0.9.2", build = "cuda12*" }
199
+ pytorch = { version = ">=2.10.0", build = "cuda12*" }
200
+
201
+ [feature.cuda-backends.target.osx.dependencies]
202
+ # cupy = "*" # unavailable
203
+ # jaxlib = { version = "*", build = "cuda12*" } # unavailable
204
+ # pytorch = { version = "*", build = "cuda12*" } # unavailable
205
+
206
+ [feature.cuda-backends.target.win.dependencies]
207
+ cupy = ">=14.1.0"
208
+ # jaxlib = { version = "*", build = "cuda12*" } # unavailable
209
+ pytorch = { version = ">=2.10.0", build = "cuda12*" }
210
+
211
+ [feature.nogil.dependencies]
212
+ python-freethreading = "~=3.13.0"
213
+ pytest-run-parallel = ">=0.8.2"
214
+ numpy = ">=2.3.5"
215
+ # pytorch = "*" # Not available on Python 3.13t yet
216
+ dask-core = ">=2026.3.0" # No distributed, tornado, etc.
217
+ # sparse = "*" # numba not available on Python 3.13t yet
218
+ # jax = "*" # ml_dtypes not available on Python 3.13t yet