array-api-extra 0.5.0__tar.gz → 0.6.1__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 (58) hide show
  1. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/.all-contributorsrc +39 -20
  2. array_api_extra-0.6.1/.editorconfig +14 -0
  3. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/.github/workflows/cd.yml +1 -1
  4. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/.github/workflows/ci.yml +6 -6
  5. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/.github/workflows/docs-build.yml +2 -2
  6. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/.github/workflows/docs-deploy.yml +1 -1
  7. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/CONTRIBUTORS.md +4 -2
  8. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/PKG-INFO +20 -15
  9. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/README.md +19 -3
  10. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/RELEASING.md +2 -2
  11. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/codecov.yml +2 -0
  12. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/docs/api-reference.md +4 -0
  13. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/docs/conf.py +3 -0
  14. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/docs/contributing.md +47 -8
  15. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/docs/index.md +46 -25
  16. array_api_extra-0.6.1/docs/testing-utils.md +14 -0
  17. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/pixi.lock +7774 -2886
  18. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/pyproject.toml +63 -62
  19. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/src/array_api_extra/__init__.py +9 -4
  20. array_api_extra-0.6.1/src/array_api_extra/_delegation.py +174 -0
  21. array_api_extra-0.6.1/src/array_api_extra/_lib/__init__.py +5 -0
  22. array_api_extra-0.6.1/src/array_api_extra/_lib/_at.py +432 -0
  23. array_api_extra-0.6.1/src/array_api_extra/_lib/_backends.py +51 -0
  24. {array_api_extra-0.5.0/src/array_api_extra → array_api_extra-0.6.1/src/array_api_extra/_lib}/_funcs.py +224 -395
  25. array_api_extra-0.6.1/src/array_api_extra/_lib/_testing.py +192 -0
  26. array_api_extra-0.6.1/src/array_api_extra/_lib/_utils/__init__.py +1 -0
  27. array_api_extra-0.6.1/src/array_api_extra/_lib/_utils/_compat.py +67 -0
  28. array_api_extra-0.6.1/src/array_api_extra/_lib/_utils/_compat.pyi +36 -0
  29. array_api_extra-0.6.1/src/array_api_extra/_lib/_utils/_helpers.py +177 -0
  30. {array_api_extra-0.5.0/src/array_api_extra/_lib → array_api_extra-0.6.1/src/array_api_extra/_lib/_utils}/_typing.py +2 -2
  31. array_api_extra-0.6.1/src/array_api_extra/testing.py +262 -0
  32. array_api_extra-0.6.1/tests/__init__.py +1 -0
  33. array_api_extra-0.6.1/tests/conftest.py +158 -0
  34. array_api_extra-0.6.1/tests/test_at.py +261 -0
  35. array_api_extra-0.6.1/tests/test_funcs.py +768 -0
  36. array_api_extra-0.6.1/tests/test_helpers.py +150 -0
  37. array_api_extra-0.6.1/tests/test_testing.py +204 -0
  38. array_api_extra-0.6.1/vendor_tests/test_vendor.py +69 -0
  39. array_api_extra-0.5.0/src/array_api_extra/_lib/__init__.py +0 -1
  40. array_api_extra-0.5.0/src/array_api_extra/_lib/_compat.py +0 -25
  41. array_api_extra-0.5.0/src/array_api_extra/_lib/_compat.pyi +0 -22
  42. array_api_extra-0.5.0/src/array_api_extra/_lib/_utils.py +0 -89
  43. array_api_extra-0.5.0/tests/test_at.py +0 -158
  44. array_api_extra-0.5.0/tests/test_funcs.py +0 -418
  45. array_api_extra-0.5.0/tests/test_utils.py +0 -31
  46. array_api_extra-0.5.0/vendor_tests/test_vendor.py +0 -32
  47. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/.gitattributes +0 -0
  48. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/.github/dependabot.yml +0 -0
  49. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/.github/workflows/dependabot-auto-merge.yml +0 -0
  50. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/.gitignore +0 -0
  51. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/.pre-commit-config.yaml +1 -1
  52. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/LICENSE +0 -0
  53. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/docs/contributors.md +0 -0
  54. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/docs/requirements.txt +0 -0
  55. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/src/array_api_extra/py.typed +0 -0
  56. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/tests/test_version.py +0 -0
  57. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/vendor_tests/__init__.py +0 -0
  58. {array_api_extra-0.5.0 → array_api_extra-0.6.1}/vendor_tests/_array_api_compat_vendor.py +0 -0
@@ -90,14 +90,17 @@
90
90
  ]
91
91
  },
92
92
  {
93
- "login": "rgommers",
94
- "name": "Ralf Gommers",
95
- "avatar_url": "https://avatars.githubusercontent.com/u/98330?v=4",
96
- "profile": "https://github.com/rgommers/",
93
+ "login": "crusaderky",
94
+ "name": "Guido Imperiale",
95
+ "avatar_url": "https://avatars.githubusercontent.com/u/6213168?v=4",
96
+ "profile": "https://github.com/crusaderky",
97
97
  "contributions": [
98
- "ideas",
99
- "infra",
100
- "review"
98
+ "code",
99
+ "doc",
100
+ "tool",
101
+ "test",
102
+ "example",
103
+ "bug"
101
104
  ]
102
105
  },
103
106
  {
@@ -155,6 +158,17 @@
155
158
  "code"
156
159
  ]
157
160
  },
161
+ {
162
+ "login": "rgommers",
163
+ "name": "Ralf Gommers",
164
+ "avatar_url": "https://avatars.githubusercontent.com/u/98330?v=4",
165
+ "profile": "https://github.com/rgommers/",
166
+ "contributions": [
167
+ "ideas",
168
+ "infra",
169
+ "review"
170
+ ]
171
+ },
158
172
  {
159
173
  "login": "ogrisel",
160
174
  "name": "Olivier Grisel",
@@ -164,19 +178,6 @@
164
178
  "code"
165
179
  ]
166
180
  },
167
- {
168
- "login": "crusaderky",
169
- "name": "Guido Imperiale",
170
- "avatar_url": "https://avatars.githubusercontent.com/u/6213168?v=4",
171
- "profile": "https://github.com/crusaderky",
172
- "contributions": [
173
- "code",
174
- "doc",
175
- "tool",
176
- "test",
177
- "example"
178
- ]
179
- },
180
181
  {
181
182
  "login": "ev-br",
182
183
  "name": "Evgeni Burovski",
@@ -195,6 +196,24 @@
195
196
  "contributions": [
196
197
  "review"
197
198
  ]
199
+ },
200
+ {
201
+ "login": "kotlinisland",
202
+ "name": "kotlinisland",
203
+ "avatar_url": "https://avatars.githubusercontent.com/u/65446343?v=4",
204
+ "profile": "https://github.com/KotlinIsland",
205
+ "contributions": [
206
+ "review"
207
+ ]
208
+ },
209
+ {
210
+ "login": "detachhead",
211
+ "name": "detachhead",
212
+ "avatar_url": "https://avatars.githubusercontent.com/u/57028336?v=4",
213
+ "profile": "https://github.com/DetachHead",
214
+ "contributions": [
215
+ "review"
216
+ ]
198
217
  }
199
218
  ]
200
219
  }
@@ -0,0 +1,14 @@
1
+ root = true
2
+
3
+ [*.{py,md}]
4
+ indent_style = space
5
+ end_of_line = lf
6
+ trim_trailing_whitespace = true
7
+ insert_final_newline = true
8
+
9
+ [*.py]
10
+ max_line_length = 88
11
+ indent_size = 4
12
+
13
+ [*.md]
14
+ max_line_length = 80
@@ -37,7 +37,7 @@ jobs:
37
37
  path: dist
38
38
 
39
39
  - name: Generate artifact attestation for sdist and wheel
40
- uses: actions/attest-build-provenance@v2.1.0
40
+ uses: actions/attest-build-provenance@v2.2.0
41
41
  with:
42
42
  subject-path: "dist/*"
43
43
 
@@ -30,9 +30,9 @@ jobs:
30
30
  - uses: pre-commit/action@v3.0.1
31
31
  with:
32
32
  extra_args: --hook-stage manual --all-files
33
- - uses: prefix-dev/setup-pixi@v0.8.1
33
+ - uses: prefix-dev/setup-pixi@v0.8.3
34
34
  with:
35
- pixi-version: v0.39.0
35
+ pixi-version: v0.40.3
36
36
  cache: true
37
37
  environments: lint
38
38
  - name: Run Pylint, Mypy & Pyright
@@ -48,7 +48,7 @@ jobs:
48
48
  strategy:
49
49
  fail-fast: false
50
50
  matrix:
51
- environment: [ci-py310, ci-py313, ci-backends]
51
+ environment: [tests-py310, tests-py313, tests-backends]
52
52
  runs-on: [ubuntu-latest]
53
53
 
54
54
  steps:
@@ -56,9 +56,9 @@ jobs:
56
56
  with:
57
57
  fetch-depth: 0
58
58
 
59
- - uses: prefix-dev/setup-pixi@v0.8.1
59
+ - uses: prefix-dev/setup-pixi@v0.8.3
60
60
  with:
61
- pixi-version: v0.39.0
61
+ pixi-version: v0.40.3
62
62
  cache: true
63
63
  environments: ${{ matrix.environment }}
64
64
 
@@ -66,6 +66,6 @@ jobs:
66
66
  run: pixi run -e ${{ matrix.environment }} tests-ci
67
67
 
68
68
  - name: Upload coverage report
69
- uses: codecov/codecov-action@v5.1.2
69
+ uses: codecov/codecov-action@v5.3.1
70
70
  with:
71
71
  token: ${{ secrets.CODECOV_TOKEN }}
@@ -7,9 +7,9 @@ jobs:
7
7
  runs-on: ubuntu-latest
8
8
  steps:
9
9
  - uses: actions/checkout@v4
10
- - uses: prefix-dev/setup-pixi@v0.8.1
10
+ - uses: prefix-dev/setup-pixi@v0.8.3
11
11
  with:
12
- pixi-version: v0.39.0
12
+ pixi-version: v0.40.3
13
13
  cache: true
14
14
  environments: docs
15
15
  - name: Build Docs
@@ -16,7 +16,7 @@ jobs:
16
16
  steps:
17
17
  - uses: actions/checkout@v4
18
18
  - name: Download Artifact
19
- uses: dawidd6/action-download-artifact@v7
19
+ uses: dawidd6/action-download-artifact@v8
20
20
  with:
21
21
  workflow: docs-build.yml
22
22
  name: docs-build
@@ -18,7 +18,7 @@ This project exists thanks to the following contributors
18
18
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/vnmabus"><img src="https://avatars.githubusercontent.com/u/2364173?v=4?s=100" width="100px;" alt="Carlos Ramos Carreño"/><br /><sub><b>Carlos Ramos Carreño</b></sub></a><br /><a href="#ideas-vnmabus" title="Ideas, Planning, & Feedback">🤔</a></td>
19
19
  </tr>
20
20
  <tr>
21
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/rgommers/"><img src="https://avatars.githubusercontent.com/u/98330?v=4?s=100" width="100px;" alt="Ralf Gommers"/><br /><sub><b>Ralf Gommers</b></sub></a><br /><a href="#ideas-rgommers" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-rgommers" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Argommers" title="Reviewed Pull Requests">👀</a></td>
21
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/crusaderky"><img src="https://avatars.githubusercontent.com/u/6213168?v=4?s=100" width="100px;" alt="Guido Imperiale"/><br /><sub><b>Guido Imperiale</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Documentation">📖</a> <a href="#tool-crusaderky" title="Tools">🔧</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Tests">⚠️</a> <a href="#example-crusaderky" title="Examples">💡</a> <a href="https://github.com/data-apis/array-api-extra/issues?q=author%3Acrusaderky" title="Bug reports">🐛</a></td>
22
22
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/jorenham"><img src="https://avatars.githubusercontent.com/u/6208662?v=4?s=100" width="100px;" alt="Joren Hammudoglu"/><br /><sub><b>Joren Hammudoglu</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Ajorenham" title="Reviewed Pull Requests">👀</a></td>
23
23
  <td align="center" valign="top" width="14.28%"><a href="https://www.thomasjpfan.com/"><img src="https://avatars.githubusercontent.com/u/5402633?v=4?s=100" width="100px;" alt="Thomas J. Fan"/><br /><sub><b>Thomas J. Fan</b></sub></a><br /><a href="#ideas-thomasjpfan" title="Ideas, Planning, & Feedback">🤔</a></td>
24
24
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/izaid"><img src="https://avatars.githubusercontent.com/u/482179?v=4?s=100" width="100px;" alt="Irwin Zaid"/><br /><sub><b>Irwin Zaid</b></sub></a><br /><a href="#ideas-izaid" title="Ideas, Planning, & Feedback">🤔</a></td>
@@ -27,10 +27,12 @@ This project exists thanks to the following contributors
27
27
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/OmarManzoor"><img src="https://avatars.githubusercontent.com/u/17495884?v=4?s=100" width="100px;" alt="Omar Salman"/><br /><sub><b>Omar Salman</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=OmarManzoor" title="Code">💻</a></td>
28
28
  </tr>
29
29
  <tr>
30
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/rgommers/"><img src="https://avatars.githubusercontent.com/u/98330?v=4?s=100" width="100px;" alt="Ralf Gommers"/><br /><sub><b>Ralf Gommers</b></sub></a><br /><a href="#ideas-rgommers" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-rgommers" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Argommers" title="Reviewed Pull Requests">👀</a></td>
30
31
  <td align="center" valign="top" width="14.28%"><a href="https://ogrisel.com"><img src="https://avatars.githubusercontent.com/u/89061?v=4?s=100" width="100px;" alt="Olivier Grisel"/><br /><sub><b>Olivier Grisel</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=ogrisel" title="Code">💻</a></td>
31
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/crusaderky"><img src="https://avatars.githubusercontent.com/u/6213168?v=4?s=100" width="100px;" alt="Guido Imperiale"/><br /><sub><b>Guido Imperiale</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Documentation">📖</a> <a href="#tool-crusaderky" title="Tools">🔧</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Tests">⚠️</a> <a href="#example-crusaderky" title="Examples">💡</a></td>
32
32
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/ev-br"><img src="https://avatars.githubusercontent.com/u/2133832?v=4?s=100" width="100px;" alt="Evgeni Burovski"/><br /><sub><b>Evgeni Burovski</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=ev-br" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=ev-br" title="Documentation">📖</a></td>
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
+ <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
+ <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>
34
36
  </tr>
35
37
  </tbody>
36
38
  </table>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: array-api-extra
3
- Version: 0.5.0
3
+ Version: 0.6.1
4
4
  Summary: Extra array functions built on top of the array API standard.
5
5
  Project-URL: Homepage, https://github.com/data-apis/array-api-extra
6
6
  Project-URL: Bug Tracker, https://github.com/data-apis/array-api-extra/issues
@@ -41,17 +41,6 @@ Classifier: Programming Language :: Python :: 3.13
41
41
  Classifier: Typing :: Typed
42
42
  Requires-Python: >=3.10
43
43
  Requires-Dist: array-api-compat<2,>=1.10.0
44
- Provides-Extra: docs
45
- Requires-Dist: furo>=2023.08.17; extra == 'docs'
46
- Requires-Dist: myst-parser>=0.13; extra == 'docs'
47
- Requires-Dist: sphinx-autodoc-typehints; extra == 'docs'
48
- Requires-Dist: sphinx-copybutton; extra == 'docs'
49
- Requires-Dist: sphinx>=7.0; extra == 'docs'
50
- Provides-Extra: tests
51
- Requires-Dist: array-api-strict; extra == 'tests'
52
- Requires-Dist: numpy; extra == 'tests'
53
- Requires-Dist: pytest-cov>=3; extra == 'tests'
54
- Requires-Dist: pytest>=6; extra == 'tests'
55
44
  Description-Content-Type: text/markdown
56
45
 
57
46
  # array-api-extra
@@ -66,6 +55,7 @@ Description-Content-Type: text/markdown
66
55
  [![PyPI version][pypi-version]][pypi-link]
67
56
  [![Conda-Forge][conda-badge]][conda-link]
68
57
  [![PyPI platforms][pypi-platforms]][pypi-link]
58
+ [![EffVer Versioning](https://img.shields.io/badge/version_scheme-EffVer-0097a7)](https://jacobtomlinson.dev/effver)
69
59
 
70
60
  <!-- SPHINX-START -->
71
61
 
@@ -90,7 +80,20 @@ Used by:
90
80
 
91
81
  - [SciPy](https://github.com/scipy/scipy) - Fundamental algorithms for
92
82
  scientific computing.
93
- - ...
83
+ - _your library? Let us know!_
84
+
85
+ ## Installation
86
+
87
+ See https://data-apis.org/array-api-extra/#installation.
88
+
89
+ ## Versioning
90
+
91
+ This project uses [EffVer](https://jacobtomlinson.dev/effver/). TL;DR:
92
+
93
+ - To bump from version `x.y.z` to `x.(y+1).0` of array-api-extra, expect that
94
+ you may need to put in some work.
95
+ - To bump from version `x.y.z` to `x.y.(z+1)`, any work needed on your side
96
+ should be minimal. Please open an issue if this is not the case!
94
97
 
95
98
  ## Contributors
96
99
 
@@ -112,7 +115,7 @@ This project exists thanks to the following contributors
112
115
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/vnmabus"><img src="https://avatars.githubusercontent.com/u/2364173?v=4?s=100" width="100px;" alt="Carlos Ramos Carreño"/><br /><sub><b>Carlos Ramos Carreño</b></sub></a><br /><a href="#ideas-vnmabus" title="Ideas, Planning, & Feedback">🤔</a></td>
113
116
  </tr>
114
117
  <tr>
115
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/rgommers/"><img src="https://avatars.githubusercontent.com/u/98330?v=4?s=100" width="100px;" alt="Ralf Gommers"/><br /><sub><b>Ralf Gommers</b></sub></a><br /><a href="#ideas-rgommers" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-rgommers" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Argommers" title="Reviewed Pull Requests">👀</a></td>
118
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/crusaderky"><img src="https://avatars.githubusercontent.com/u/6213168?v=4?s=100" width="100px;" alt="Guido Imperiale"/><br /><sub><b>Guido Imperiale</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Documentation">📖</a> <a href="#tool-crusaderky" title="Tools">🔧</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Tests">⚠️</a> <a href="#example-crusaderky" title="Examples">💡</a> <a href="https://github.com/data-apis/array-api-extra/issues?q=author%3Acrusaderky" title="Bug reports">🐛</a></td>
116
119
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/jorenham"><img src="https://avatars.githubusercontent.com/u/6208662?v=4?s=100" width="100px;" alt="Joren Hammudoglu"/><br /><sub><b>Joren Hammudoglu</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Ajorenham" title="Reviewed Pull Requests">👀</a></td>
117
120
  <td align="center" valign="top" width="14.28%"><a href="https://www.thomasjpfan.com/"><img src="https://avatars.githubusercontent.com/u/5402633?v=4?s=100" width="100px;" alt="Thomas J. Fan"/><br /><sub><b>Thomas J. Fan</b></sub></a><br /><a href="#ideas-thomasjpfan" title="Ideas, Planning, & Feedback">🤔</a></td>
118
121
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/izaid"><img src="https://avatars.githubusercontent.com/u/482179?v=4?s=100" width="100px;" alt="Irwin Zaid"/><br /><sub><b>Irwin Zaid</b></sub></a><br /><a href="#ideas-izaid" title="Ideas, Planning, & Feedback">🤔</a></td>
@@ -121,10 +124,12 @@ This project exists thanks to the following contributors
121
124
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/OmarManzoor"><img src="https://avatars.githubusercontent.com/u/17495884?v=4?s=100" width="100px;" alt="Omar Salman"/><br /><sub><b>Omar Salman</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=OmarManzoor" title="Code">💻</a></td>
122
125
  </tr>
123
126
  <tr>
127
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/rgommers/"><img src="https://avatars.githubusercontent.com/u/98330?v=4?s=100" width="100px;" alt="Ralf Gommers"/><br /><sub><b>Ralf Gommers</b></sub></a><br /><a href="#ideas-rgommers" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-rgommers" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Argommers" title="Reviewed Pull Requests">👀</a></td>
124
128
  <td align="center" valign="top" width="14.28%"><a href="https://ogrisel.com"><img src="https://avatars.githubusercontent.com/u/89061?v=4?s=100" width="100px;" alt="Olivier Grisel"/><br /><sub><b>Olivier Grisel</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=ogrisel" title="Code">💻</a></td>
125
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/crusaderky"><img src="https://avatars.githubusercontent.com/u/6213168?v=4?s=100" width="100px;" alt="Guido Imperiale"/><br /><sub><b>Guido Imperiale</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Documentation">📖</a> <a href="#tool-crusaderky" title="Tools">🔧</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Tests">⚠️</a> <a href="#example-crusaderky" title="Examples">💡</a></td>
126
129
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/ev-br"><img src="https://avatars.githubusercontent.com/u/2133832?v=4?s=100" width="100px;" alt="Evgeni Burovski"/><br /><sub><b>Evgeni Burovski</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=ev-br" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=ev-br" title="Documentation">📖</a></td>
127
130
  <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>
131
+ <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>
132
+ <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>
128
133
  </tr>
129
134
  </tbody>
130
135
  </table>
@@ -10,6 +10,7 @@
10
10
  [![PyPI version][pypi-version]][pypi-link]
11
11
  [![Conda-Forge][conda-badge]][conda-link]
12
12
  [![PyPI platforms][pypi-platforms]][pypi-link]
13
+ [![EffVer Versioning](https://img.shields.io/badge/version_scheme-EffVer-0097a7)](https://jacobtomlinson.dev/effver)
13
14
 
14
15
  <!-- SPHINX-START -->
15
16
 
@@ -34,7 +35,20 @@ Used by:
34
35
 
35
36
  - [SciPy](https://github.com/scipy/scipy) - Fundamental algorithms for
36
37
  scientific computing.
37
- - ...
38
+ - _your library? Let us know!_
39
+
40
+ ## Installation
41
+
42
+ See https://data-apis.org/array-api-extra/#installation.
43
+
44
+ ## Versioning
45
+
46
+ This project uses [EffVer](https://jacobtomlinson.dev/effver/). TL;DR:
47
+
48
+ - To bump from version `x.y.z` to `x.(y+1).0` of array-api-extra, expect that
49
+ you may need to put in some work.
50
+ - To bump from version `x.y.z` to `x.y.(z+1)`, any work needed on your side
51
+ should be minimal. Please open an issue if this is not the case!
38
52
 
39
53
  ## Contributors
40
54
 
@@ -56,7 +70,7 @@ This project exists thanks to the following contributors
56
70
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/vnmabus"><img src="https://avatars.githubusercontent.com/u/2364173?v=4?s=100" width="100px;" alt="Carlos Ramos Carreño"/><br /><sub><b>Carlos Ramos Carreño</b></sub></a><br /><a href="#ideas-vnmabus" title="Ideas, Planning, & Feedback">🤔</a></td>
57
71
  </tr>
58
72
  <tr>
59
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/rgommers/"><img src="https://avatars.githubusercontent.com/u/98330?v=4?s=100" width="100px;" alt="Ralf Gommers"/><br /><sub><b>Ralf Gommers</b></sub></a><br /><a href="#ideas-rgommers" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-rgommers" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Argommers" title="Reviewed Pull Requests">👀</a></td>
73
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/crusaderky"><img src="https://avatars.githubusercontent.com/u/6213168?v=4?s=100" width="100px;" alt="Guido Imperiale"/><br /><sub><b>Guido Imperiale</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Documentation">📖</a> <a href="#tool-crusaderky" title="Tools">🔧</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Tests">⚠️</a> <a href="#example-crusaderky" title="Examples">💡</a> <a href="https://github.com/data-apis/array-api-extra/issues?q=author%3Acrusaderky" title="Bug reports">🐛</a></td>
60
74
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/jorenham"><img src="https://avatars.githubusercontent.com/u/6208662?v=4?s=100" width="100px;" alt="Joren Hammudoglu"/><br /><sub><b>Joren Hammudoglu</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Ajorenham" title="Reviewed Pull Requests">👀</a></td>
61
75
  <td align="center" valign="top" width="14.28%"><a href="https://www.thomasjpfan.com/"><img src="https://avatars.githubusercontent.com/u/5402633?v=4?s=100" width="100px;" alt="Thomas J. Fan"/><br /><sub><b>Thomas J. Fan</b></sub></a><br /><a href="#ideas-thomasjpfan" title="Ideas, Planning, & Feedback">🤔</a></td>
62
76
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/izaid"><img src="https://avatars.githubusercontent.com/u/482179?v=4?s=100" width="100px;" alt="Irwin Zaid"/><br /><sub><b>Irwin Zaid</b></sub></a><br /><a href="#ideas-izaid" title="Ideas, Planning, & Feedback">🤔</a></td>
@@ -65,10 +79,12 @@ This project exists thanks to the following contributors
65
79
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/OmarManzoor"><img src="https://avatars.githubusercontent.com/u/17495884?v=4?s=100" width="100px;" alt="Omar Salman"/><br /><sub><b>Omar Salman</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=OmarManzoor" title="Code">💻</a></td>
66
80
  </tr>
67
81
  <tr>
82
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/rgommers/"><img src="https://avatars.githubusercontent.com/u/98330?v=4?s=100" width="100px;" alt="Ralf Gommers"/><br /><sub><b>Ralf Gommers</b></sub></a><br /><a href="#ideas-rgommers" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-rgommers" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Argommers" title="Reviewed Pull Requests">👀</a></td>
68
83
  <td align="center" valign="top" width="14.28%"><a href="https://ogrisel.com"><img src="https://avatars.githubusercontent.com/u/89061?v=4?s=100" width="100px;" alt="Olivier Grisel"/><br /><sub><b>Olivier Grisel</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=ogrisel" title="Code">💻</a></td>
69
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/crusaderky"><img src="https://avatars.githubusercontent.com/u/6213168?v=4?s=100" width="100px;" alt="Guido Imperiale"/><br /><sub><b>Guido Imperiale</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Documentation">📖</a> <a href="#tool-crusaderky" title="Tools">🔧</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=crusaderky" title="Tests">⚠️</a> <a href="#example-crusaderky" title="Examples">💡</a></td>
70
84
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/ev-br"><img src="https://avatars.githubusercontent.com/u/2133832?v=4?s=100" width="100px;" alt="Evgeni Burovski"/><br /><sub><b>Evgeni Burovski</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=ev-br" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=ev-br" title="Documentation">📖</a></td>
71
85
  <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>
86
+ <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>
87
+ <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>
72
88
  </tr>
73
89
  </tbody>
74
90
  </table>
@@ -1,8 +1,8 @@
1
1
  1. Update the version in `src/array_api_extra/__init__.py`
2
- 2. Update the lockfile with `pixi update` and `pixi install`
2
+ 2. Update the lockfile with `pixi update && pixi install`
3
3
  3. Push your changes
4
4
  4. Cut a release via the GitHub GUI
5
5
  5. Update the version to `{next micro version}.dev0`
6
- 6. Update the lockfile
6
+ 6. `pixi clean cache --pypi && pixi update && pixi install`
7
7
  7. Push your changes
8
8
  8. Merge the automated PR to conda-forge/array-api-extra-feedstock
@@ -1,4 +1,6 @@
1
1
  comment: false
2
+ github_checks:
3
+ annotations: false
2
4
  ignore:
3
5
  - "src/array_api_extra/_lib/_compat"
4
6
  - "src/array_api_extra/_lib/_typing"
@@ -8,10 +8,14 @@
8
8
 
9
9
  at
10
10
  atleast_nd
11
+ broadcast_shapes
11
12
  cov
12
13
  create_diagonal
13
14
  expand_dims
15
+ isclose
14
16
  kron
17
+ nunique
18
+ pad
15
19
  setdiff1d
16
20
  sinc
17
21
  ```
@@ -53,6 +53,9 @@ myst_enable_extensions = [
53
53
 
54
54
  intersphinx_mapping = {
55
55
  "python": ("https://docs.python.org/3", None),
56
+ "array-api": ("https://data-apis.org/array-api/draft", None),
57
+ "dask": ("https://docs.dask.org/en/stable", None),
58
+ "numpy": ("https://numpy.org/doc/stable", None),
56
59
  "jax": ("https://jax.readthedocs.io/en/latest", None),
57
60
  }
58
61
 
@@ -6,11 +6,14 @@ converting code to consume the standard.
6
6
 
7
7
  Thanks to [all contributors](contributors.md) so far!
8
8
 
9
- ## How to contribute a function
9
+ ## How to contribute a new function
10
10
 
11
11
  - [Open an issue](https://github.com/data-apis/array-api-extra/issues/new) to
12
- propose the new function.
13
- - Add the implementation of your function to `src/array_api_extra/_funcs.py`.
12
+ propose the new function. You may want to wait for initial feedback on the
13
+ issue before diving into an implementation. Feel free to skip this step if
14
+ there is already an open issue for the function.
15
+ - Add the implementation of your function to
16
+ `src/array_api_extra/_lib/_funcs.py`.
14
17
  - Ensure that your function includes type annotations and a
15
18
  [numpydoc-style docstring](https://numpydoc.readthedocs.io/en/latest/format.html).
16
19
  - Add your function to `__all__` at the top of the file.
@@ -20,6 +23,33 @@ Thanks to [all contributors](contributors.md) so far!
20
23
  - Add your function to `docs/api-reference.md`.
21
24
  - [Make a PR!](https://github.com/data-apis/array-api-extra/pulls)
22
25
 
26
+ ## How to add delegation to a function
27
+
28
+ See [the tracker for adding delegation][delegation-tracker].
29
+
30
+ [delegation-tracker]: https://github.com/data-apis/array-api-extra/issues/100
31
+
32
+ - If you would like to discuss the task before diving into the implementation,
33
+ click on the three dots next to the function on the tracker issue, and choose
34
+ "Convert to sub-issue".
35
+ - Create a function in `src/array_api_extra/_delegation.py` with a signature
36
+ matching the function in `src/array_api_extra/_lib/_funcs.py`, and move the
37
+ docstring to the new function. Leave a one-line docstring in `_funcs.py`,
38
+ pointing to `_delegation.py` to see the full docstring.
39
+ - Also move the initial `array_namespace` call and any input validation over to
40
+ the new function.
41
+ - Add delegation to backends using the `if _delegate` pattern. See
42
+ `src/array_api_extra/_lib/_backends.py` for the full list of backends we have
43
+ worked with so far.
44
+ - After all delegation layers, return the result from the implementation in
45
+ `_funcs`.
46
+ - Simplify the signature in `_funcs.py` to remove impossible arguments now that
47
+ it is only called internally via `_delegation`. For example, the `xp`
48
+ parameter can be changed from type `ModuleType | None` to `ModuleType`.
49
+ - Don't worry if you are not sure how to do some of the above steps or think you
50
+ might have done something wrong -
51
+ [make a PR!](https://github.com/data-apis/array-api-extra/pulls)
52
+
23
53
  ## Development workflow
24
54
 
25
55
  If you are an experienced contributor to Python packages, feel free to develop
@@ -76,7 +106,7 @@ pixi run pre-commit-install
76
106
  - To run the lint suite:
77
107
 
78
108
  ```
79
- pixi run lint
109
+ pixi run -e lint lint
80
110
  ```
81
111
 
82
112
  - To enter an interactive Python prompt:
@@ -88,10 +118,10 @@ pixi run ipython
88
118
  - To run individual parts of the lint suite separately:
89
119
 
90
120
  ```
91
- pixi run pre-commit
92
- pixi run pylint
93
- pixi run mypy
94
- pixi run pyright
121
+ pixi run -e lint pre-commit
122
+ pixi run -e lint pylint
123
+ pixi run -e lint mypy
124
+ pixi run -e lint pyright
95
125
  ```
96
126
 
97
127
  Alternative environments are available with a subset of the dependencies and
@@ -100,5 +130,14 @@ tasks available in the `dev` environment:
100
130
  ```
101
131
  pixi shell -e docs
102
132
  pixi shell -e tests
133
+ pixi shell -e tests-backends
103
134
  pixi shell -e lint
104
135
  ```
136
+
137
+ If you run on a host with CUDA hardware, you can enable extra tests:
138
+
139
+ ```
140
+ pixi shell -e dev-cuda
141
+ pixi shell -e tests-cuda
142
+ pixi run -e tests-cuda tests
143
+ ```