array-api-compat 1.13.0__tar.gz → 1.15.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 (112) hide show
  1. array_api_compat-1.15.0/.git-blame-ignore-revs +2 -0
  2. array_api_compat-1.15.0/.gitattributes +2 -0
  3. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/dependabot.yml +2 -0
  4. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/array-api-tests.yml +4 -1
  5. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/dependabot-auto-merge.yml +1 -1
  6. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/docs-build.yml +4 -2
  7. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/docs-deploy.yml +1 -1
  8. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/publish-package.yml +8 -8
  9. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/tests.yml +6 -0
  10. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.gitignore +2 -0
  11. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/CHANGELOG.md +71 -3
  12. {array_api_compat-1.13.0/array_api_compat.egg-info → array_api_compat-1.15.0}/PKG-INFO +4 -35
  13. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/cupy-xfails.txt +26 -5
  14. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/dask-xfails.txt +30 -0
  15. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/changelog.md +71 -3
  16. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/dev/releasing.md +9 -5
  17. array_api_compat-1.15.0/meson.build +75 -0
  18. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/numpy-1-22-xfails.txt +25 -2
  19. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/numpy-1-26-xfails.txt +28 -8
  20. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/numpy-dev-xfails.txt +12 -11
  21. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/numpy-xfails.txt +13 -11
  22. array_api_compat-1.15.0/pixi.lock +2824 -0
  23. array_api_compat-1.15.0/pixi.toml +65 -0
  24. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/pyproject.toml +32 -20
  25. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/__init__.py +2 -2
  26. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/common/_helpers.py +28 -10
  27. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/common/_linalg.py +4 -0
  28. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/cupy/__init__.py +3 -3
  29. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/cupy/_aliases.py +41 -1
  30. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/cupy/_info.py +1 -1
  31. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/cupy/linalg.py +17 -2
  32. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/dask/array/__init__.py +3 -3
  33. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/dask/array/_info.py +2 -2
  34. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/dask/array/linalg.py +1 -1
  35. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/numpy/__init__.py +3 -4
  36. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/numpy/_info.py +2 -2
  37. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/numpy/linalg.py +80 -0
  38. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/torch/__init__.py +3 -3
  39. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/torch/_aliases.py +98 -13
  40. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/torch/_info.py +1 -1
  41. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/torch/fft.py +10 -10
  42. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/test_cupy.sh +1 -1
  43. array_api_compat-1.15.0/tests/meson.build +17 -0
  44. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/test_all.py +7 -1
  45. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/test_copies_or_views.py +12 -0
  46. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/test_isdtype.py +1 -1
  47. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/test_no_dependencies.py +3 -3
  48. array_api_compat-1.15.0/tests/test_numpy.py +19 -0
  49. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/test_torch.py +39 -1
  50. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/torch-xfails.txt +21 -15
  51. array_api_compat-1.15.0/vendor_tests/meson.build +11 -0
  52. {array_api_compat-1.13.0/tests → array_api_compat-1.15.0/vendor_tests}/test_vendoring.py +5 -4
  53. {array_api_compat-1.13.0/vendor_test → array_api_compat-1.15.0/vendor_tests}/uses_cupy.py +1 -1
  54. {array_api_compat-1.13.0/vendor_test → array_api_compat-1.15.0/vendor_tests}/uses_dask.py +2 -2
  55. {array_api_compat-1.13.0/vendor_test → array_api_compat-1.15.0/vendor_tests}/uses_numpy.py +1 -1
  56. {array_api_compat-1.13.0/vendor_test → array_api_compat-1.15.0/vendor_tests}/uses_torch.py +1 -1
  57. array_api_compat-1.13.0/PKG-INFO +0 -60
  58. array_api_compat-1.13.0/array_api_compat.egg-info/SOURCES.txt +0 -103
  59. array_api_compat-1.13.0/array_api_compat.egg-info/dependency_links.txt +0 -1
  60. array_api_compat-1.13.0/array_api_compat.egg-info/requires.txt +0 -39
  61. array_api_compat-1.13.0/array_api_compat.egg-info/top_level.txt +0 -1
  62. array_api_compat-1.13.0/setup.cfg +0 -4
  63. array_api_compat-1.13.0/vendor_test/vendored/__init__.py +0 -0
  64. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/array-api-tests-dask.yml +0 -0
  65. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/array-api-tests-numpy-1-22.yml +0 -0
  66. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/array-api-tests-numpy-1-26.yml +0 -0
  67. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/array-api-tests-numpy-dev.yml +0 -0
  68. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/array-api-tests-numpy-latest.yml +0 -0
  69. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/array-api-tests-torch.yml +0 -0
  70. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/.github/workflows/ruff.yml +0 -0
  71. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/CONTRIBUTING.md +0 -0
  72. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/LICENSE +0 -0
  73. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/README.md +0 -0
  74. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/dask-skips.txt +0 -0
  75. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/Makefile +0 -0
  76. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/_static/custom.css +0 -0
  77. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/_static/favicon.png +0 -0
  78. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/conf.py +0 -0
  79. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/dev/implementation-notes.md +0 -0
  80. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/dev/index.md +0 -0
  81. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/dev/special-considerations.md +0 -0
  82. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/dev/tests.md +0 -0
  83. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/helper-functions.rst +0 -0
  84. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/index.md +0 -0
  85. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/make.bat +0 -0
  86. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/docs/supported-array-libraries.md +0 -0
  87. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/numpy-skips.txt +0 -0
  88. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/_internal.py +0 -0
  89. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/common/__init__.py +0 -0
  90. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/common/_aliases.py +0 -0
  91. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/common/_fft.py +0 -0
  92. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/common/_typing.py +0 -0
  93. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/cupy/_typing.py +0 -0
  94. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/cupy/fft.py +0 -0
  95. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/dask/__init__.py +0 -0
  96. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/dask/array/_aliases.py +0 -0
  97. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/dask/array/fft.py +0 -0
  98. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/numpy/_aliases.py +0 -0
  99. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/numpy/_typing.py +0 -0
  100. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/numpy/fft.py +0 -0
  101. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/py.typed +0 -0
  102. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/torch/_typing.py +0 -0
  103. {array_api_compat-1.13.0 → array_api_compat-1.15.0/src}/array_api_compat/torch/linalg.py +0 -0
  104. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/__init__.py +0 -0
  105. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/_helpers.py +0 -0
  106. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/test_array_namespace.py +0 -0
  107. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/test_common.py +0 -0
  108. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/test_cupy.py +0 -0
  109. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/test_dask.py +0 -0
  110. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/tests/test_jax.py +0 -0
  111. {array_api_compat-1.13.0 → array_api_compat-1.15.0}/torch-skips.txt +0 -0
  112. {array_api_compat-1.13.0/vendor_test → array_api_compat-1.15.0/vendor_tests}/__init__.py +0 -0
@@ -0,0 +1,2 @@
1
+ # refactor to `src` layout
2
+ 0d15d23693dd3f6b82e007793ef9b6c8d43e5eac
@@ -0,0 +1,2 @@
1
+ # SCM syntax highlighting & preventing 3-way merges
2
+ pixi.lock merge=binary linguist-language=YAML linguist-generated=true -diff
@@ -5,6 +5,8 @@ updates:
5
5
  directory: "/"
6
6
  schedule:
7
7
  interval: "weekly"
8
+ cooldown:
9
+ default-days: 7 # optional
8
10
  groups:
9
11
  actions:
10
12
  patterns:
@@ -78,13 +78,16 @@ jobs:
78
78
  python -m pip install -r ${GITHUB_WORKSPACE}/array-api-tests/requirements.txt
79
79
  python -m pip install pytest-xdist
80
80
 
81
+ - name: Install array-api-compat
82
+ run: python -m pip install ${GITHUB_WORKSPACE}/array-api-compat
83
+
81
84
  - name: Dump pip environment
82
85
  run: pip freeze
83
86
 
84
87
  - name: Run the array API testsuite (${{ inputs.package-name }})
85
88
  env:
86
89
  ARRAY_API_TESTS_MODULE: array_api_compat.${{ inputs.module-name || inputs.package-name }}
87
- ARRAY_API_TESTS_VERSION: 2024.12
90
+ ARRAY_API_TESTS_VERSION: 2025.12
88
91
  # This enables the NEP 50 type promotion behavior (without it a lot of
89
92
  # tests fail on bad scalar type promotion behavior)
90
93
  NPY_PROMOTION_STATE: weak
@@ -13,7 +13,7 @@ jobs:
13
13
  steps:
14
14
  - name: Dependabot metadata
15
15
  id: metadata
16
- uses: dependabot/fetch-metadata@v2
16
+ uses: dependabot/fetch-metadata@v3
17
17
  with:
18
18
  github-token: "${{ secrets.GITHUB_TOKEN }}"
19
19
  - name: Enable auto-merge for Dependabot PRs
@@ -10,13 +10,15 @@ jobs:
10
10
  - uses: actions/setup-python@v6
11
11
  - name: Install Dependencies
12
12
  run: |
13
- python -m pip install .[docs]
13
+ python -m pip install --upgrade pip
14
+ python -m pip install .
15
+ python -m pip install --group docs
14
16
  - name: Build Docs
15
17
  run: |
16
18
  cd docs
17
19
  make html
18
20
  - name: Upload Artifact
19
- uses: actions/upload-artifact@v6
21
+ uses: actions/upload-artifact@v7
20
22
  with:
21
23
  name: docs-build
22
24
  path: docs/_build/html
@@ -13,7 +13,7 @@ jobs:
13
13
  steps:
14
14
  - uses: actions/checkout@v6
15
15
  - name: Download Artifact
16
- uses: dawidd6/action-download-artifact@v11
16
+ uses: dawidd6/action-download-artifact@v21
17
17
  with:
18
18
  workflow: docs-build.yml
19
19
  name: docs-build
@@ -4,8 +4,8 @@ on:
4
4
  branches:
5
5
  - main
6
6
  tags:
7
- - '[0-9]+.[0-9]+'
8
- - '[0-9]+.[0-9]+.[0-9]+'
7
+ - '*.*'
8
+ - '*.*.*'
9
9
  pull_request:
10
10
  branches:
11
11
  - main
@@ -41,7 +41,7 @@ jobs:
41
41
 
42
42
  - name: Install python-build and twine
43
43
  run: |
44
- python -m pip install --upgrade pip "setuptools<=67"
44
+ python -m pip install --upgrade pip meson-python
45
45
  python -m pip install build twine
46
46
  python -m pip list
47
47
 
@@ -60,7 +60,7 @@ jobs:
60
60
  run: python -m zipfile --list dist/array_api_compat-*.whl
61
61
 
62
62
  - name: Upload distribution artifact
63
- uses: actions/upload-artifact@v6
63
+ uses: actions/upload-artifact@v7
64
64
  with:
65
65
  name: dist-artifact
66
66
  path: dist
@@ -81,7 +81,7 @@ jobs:
81
81
 
82
82
  steps:
83
83
  - name: Download distribution artifact
84
- uses: actions/download-artifact@v7
84
+ uses: actions/download-artifact@v8
85
85
  with:
86
86
  name: dist-artifact
87
87
  path: dist
@@ -95,19 +95,19 @@ jobs:
95
95
  # if: >-
96
96
  # (github.event_name == 'push' && startsWith(github.ref, 'refs/tags'))
97
97
  # || (github.event_name == 'workflow_dispatch' && github.event.inputs.publish == 'true')
98
- # uses: pypa/gh-action-pypi-publish@v1.13.0
98
+ # uses: pypa/gh-action-pypi-publish@v1.14.0
99
99
  # with:
100
100
  # repository-url: https://test.pypi.org/legacy/
101
101
  # print-hash: true
102
102
 
103
103
  - name: Publish distribution 📦 to PyPI
104
104
  if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
105
- uses: pypa/gh-action-pypi-publish@v1.13.0
105
+ uses: pypa/gh-action-pypi-publish@v1.14.0
106
106
  with:
107
107
  print-hash: true
108
108
 
109
109
  - name: Create GitHub Release from a Tag
110
- uses: softprops/action-gh-release@v2
110
+ uses: softprops/action-gh-release@v3
111
111
  if: startsWith(github.ref, 'refs/tags/')
112
112
  with:
113
113
  files: dist/*
@@ -66,3 +66,9 @@ jobs:
66
66
 
67
67
  - name: Run Tests
68
68
  run: pytest -v
69
+
70
+ - name: Run vendoring tests
71
+ run: |
72
+ rm -rf vendor_tests/array_api_compat
73
+ cp -r src/array_api_compat vendor_tests/
74
+ pytest -v vendor_tests
@@ -1,3 +1,5 @@
1
+ vendor_tests/array_api_compat
2
+
1
3
  # Byte-compiled / optimized / DLL files
2
4
  __pycache__/
3
5
  *.py[cod]
@@ -1,5 +1,73 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.15.0 (2026-06-07)
4
+
5
+ ### Major changes
6
+
7
+ - `array_namespace` can now be used under `torch.compile`.
8
+ - The build system has changed from `setuptools` to `meson-python`.
9
+ Projects vendoring array-api-compat inside a meson project can now
10
+ rely on the in-tree meson project definition, which exposes the Python
11
+ sources via the `sources` variable. For example:
12
+ ```meson
13
+ array_api_compat = subproject('array_api_compat')
14
+ array_api_compat_sources = array_api_compat.get_variable('sources')
15
+ foreach prefix, files : array_api_compat_sources
16
+ py3.install_sources(files, subdir: external_dir / prefix)
17
+ endforeach
18
+ ```
19
+
20
+ ### Minor changes
21
+
22
+ - `torch.round` now supports complex input.
23
+ - `torch.arange` now works around missing dtype implementations instead of raising
24
+ an exception.
25
+
26
+ Bug fixes:
27
+ - `np.matrix` instances are no longer considered to be standard array objects.
28
+ - `torch.meshgrid` now correctly handles the case of no input arrays.
29
+
30
+ ### Contributors
31
+
32
+ The following users contributed to this release:
33
+
34
+ Lucas Colley,
35
+ Evgeni Burovski,
36
+ Chris Ninham,
37
+ Dimitri Papadopoulos Orfanos.
38
+
39
+ ## 1.14.0 (2026-02-26)
40
+
41
+ ### Major changes
42
+
43
+ This release targets the 2025.12 Array API revision. This includes
44
+
45
+ - `__array_api_version__` for the wrapped APIs is now set to `2025.12`;
46
+ - wrappers for `linalg.eig` and `linalg.eigvals`;
47
+ - wrappers for `isin` and `searchsorted` to accept Python scalars;
48
+ - wrappers for `expand_dims` accepting tuple axes;
49
+ - `broadcast_arrays`, `meshgrid` and `__array_api_info__().devices()` have been
50
+ changed to return tuples, not lists;
51
+
52
+ Additionally,
53
+
54
+ - `clip` wrappers have been fixed to be compatible with `torch.vmap`.
55
+
56
+
57
+ ### Minor changes
58
+
59
+ - `expand_dims` wrappers have been fixed to accept its `axis` argument as a keyword
60
+ or positional argument;
61
+ - `torch.clip` wrappers have been fixed to correctly handle `nan` scalars;
62
+ - `torch.repeat` wrapper has been fixed to not error out for short integers;
63
+
64
+
65
+ The following users contributed to this release:
66
+
67
+ Evgeni Burovski,
68
+ Josh Soref.
69
+
70
+
3
71
  ## 1.13.0 (2025-12-28)
4
72
 
5
73
 
@@ -221,11 +289,11 @@ Thomas Li
221
289
  `xp.__array_namespace_info__()`.
222
290
  - Various fixes to the `clip()` wrappers.
223
291
 
224
- - `torch.conj` now wrapps `torch.conj_physical`, which makes a copy rather
292
+ - `torch.conj` now wraps `torch.conj_physical`, which makes a copy rather
225
293
  than setting the conjugation bit, as arrays with the conjugation bit set do
226
294
  not support some APIs.
227
295
 
228
- - `torch.sign` is now wrapped to support complex numbers and propogate nans
296
+ - `torch.sign` is now wrapped to support complex numbers and propagate nans
229
297
  properly.
230
298
 
231
299
  ### Minor Changes
@@ -298,7 +366,7 @@ Thomas Li
298
366
 
299
367
  - New flag `use_compat` to {func}`~.array_namespace` to force the use or
300
368
  non-use of the compat wrapper namespace. The default is to return a compat
301
- namespace when it is appropiate.
369
+ namespace when it is appropriate.
302
370
 
303
371
  - Fix the `copy` flag to `asarray` for NumPy, CuPy, and Dask.
304
372
 
@@ -1,53 +1,22 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: array-api-compat
3
- Version: 1.13.0
3
+ Version: 1.15.0
4
4
  Summary: A wrapper around NumPy and other array libraries to make them compatible with the Array API standard
5
5
  Author: Consortium for Python Data API Standards
6
6
  License-Expression: MIT
7
- Project-URL: homepage, https://data-apis.org/array-api-compat/
8
- Project-URL: repository, https://github.com/data-apis/array-api-compat/
9
7
  Classifier: Operating System :: OS Independent
10
8
  Classifier: Programming Language :: Python :: 3
11
9
  Classifier: Programming Language :: Python :: 3.10
12
10
  Classifier: Programming Language :: Python :: 3.11
13
11
  Classifier: Programming Language :: Python :: 3.12
14
12
  Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Programming Language :: Python :: 3.14
15
14
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
16
15
  Classifier: Typing :: Typed
16
+ Project-URL: homepage, https://data-apis.org/array-api-compat/
17
+ Project-URL: repository, https://github.com/data-apis/array-api-compat/
17
18
  Requires-Python: >=3.10
18
19
  Description-Content-Type: text/markdown
19
- License-File: LICENSE
20
- Provides-Extra: cupy
21
- Requires-Dist: cupy; extra == "cupy"
22
- Provides-Extra: dask
23
- Requires-Dist: dask>=2024.9.0; extra == "dask"
24
- Provides-Extra: jax
25
- Requires-Dist: jax; extra == "jax"
26
- Provides-Extra: numpy
27
- Requires-Dist: numpy>=1.22; extra == "numpy"
28
- Provides-Extra: pytorch
29
- Requires-Dist: torch; extra == "pytorch"
30
- Provides-Extra: sparse
31
- Requires-Dist: sparse>=0.15.1; extra == "sparse"
32
- Provides-Extra: ndonnx
33
- Requires-Dist: ndonnx; extra == "ndonnx"
34
- Provides-Extra: docs
35
- Requires-Dist: furo; extra == "docs"
36
- Requires-Dist: linkify-it-py; extra == "docs"
37
- Requires-Dist: myst-parser; extra == "docs"
38
- Requires-Dist: sphinx; extra == "docs"
39
- Requires-Dist: sphinx-copybutton; extra == "docs"
40
- Requires-Dist: sphinx-autobuild; extra == "docs"
41
- Provides-Extra: dev
42
- Requires-Dist: array-api-strict; extra == "dev"
43
- Requires-Dist: dask[array]>=2024.9.0; extra == "dev"
44
- Requires-Dist: jax[cpu]; extra == "dev"
45
- Requires-Dist: ndonnx; extra == "dev"
46
- Requires-Dist: numpy>=1.22; extra == "dev"
47
- Requires-Dist: pytest; extra == "dev"
48
- Requires-Dist: torch; extra == "dev"
49
- Requires-Dist: sparse>=0.15.1; extra == "dev"
50
- Dynamic: license-file
51
20
 
52
21
  # Array API compatibility library
53
22
 
@@ -24,6 +24,10 @@ array_api_tests/test_has_names.py::test_has_names[array_attribute-mT]
24
24
 
25
25
  array_api_tests/test_linalg.py::test_solve
26
26
 
27
+ # 2025.12 support; {eig,eigvals} are new in CuPy 14
28
+ array_api_tests/test_linalg.py::test_eig
29
+ array_api_tests/test_linalg.py::test_eigvals
30
+
27
31
  # We cannot modify array methods
28
32
  array_api_tests/test_operators_and_elementwise_functions.py::test_divide[__truediv__(x, s)]
29
33
  array_api_tests/test_operators_and_elementwise_functions.py::test_floor_divide[__floordiv__(x, s)]
@@ -44,6 +48,11 @@ array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_sc
44
48
  array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[copysign]
45
49
  array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[divide]
46
50
  array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[maximum]
51
+ array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[add]
52
+ array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[minimum]
53
+ array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[multiply]
54
+ array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[subtract]
55
+
47
56
 
48
57
  # cupy (arg)min/max wrong with infinities
49
58
  # https://github.com/cupy/cupy/issues/7424
@@ -176,6 +185,18 @@ array_api_tests/test_special_cases.py::test_unary[tan(x_i is -0) -> -0]
176
185
  array_api_tests/test_special_cases.py::test_unary[tanh(x_i is -0) -> -0]
177
186
  array_api_tests/test_special_cases.py::test_unary[trunc(x_i is -0) -> -0]
178
187
 
188
+ # complex spec cases
189
+ array_api_tests/test_special_cases.py::test_unary[acosh(real(x_i) is +0 and imag(x_i) is NaN) -> NaN \xb1 \u03c0j/2]
190
+ array_api_tests/test_special_cases.py::test_unary[log(real(x_i) is -0 and imag(x_i) is +0) -> -infinity + \u03c0j]
191
+ array_api_tests/test_special_cases.py::test_unary[log((real(x_i) is +infinity or real(x_i) == -infinity) and imag(x_i) is NaN) -> +infinity + NaN j]
192
+ array_api_tests/test_special_cases.py::test_unary[log(real(x_i) is NaN and imag(x_i) is +infinity) -> +infinity + NaN j]
193
+ array_api_tests/test_special_cases.py::test_unary[log1p((real(x_i) is +infinity or real(x_i) == -infinity) and imag(x_i) is NaN) -> +infinity + NaN j]
194
+ array_api_tests/test_special_cases.py::test_unary[log1p(real(x_i) is NaN and imag(x_i) is +infinity) -> +infinity + NaN j]
195
+ array_api_tests/test_special_cases.py::test_unary[sqrt(real(x_i) is +infinity and isfinite(imag(x_i)) and imag(x_i) > 0) -> +0 + infinity j]
196
+ array_api_tests/test_special_cases.py::test_unary[tanh(real(x_i) is +0 and imag(x_i) is +infinity) -> +0 + NaN j]
197
+ array_api_tests/test_special_cases.py::test_unary[tanh(real(x_i) is +0 and imag(x_i) is NaN) -> +0 + NaN j]
198
+ array_api_tests/test_special_cases.py::test_unary[tanh(real(x_i) is +infinity and isfinite(imag(x_i)) and imag(x_i) > 0) -> 1 + 0j]
199
+
179
200
  # CuPy gives the wrong shape for n-dim fft funcs. See
180
201
  # https://github.com/data-apis/array-api-compat/pull/78#issuecomment-1984527870
181
202
  array_api_tests/test_fft.py::test_fftn
@@ -192,12 +213,12 @@ array_api_tests/test_signatures.py::test_func_signature[from_dlpack]
192
213
  array_api_tests/test_signatures.py::test_array_method_signature[__dlpack__]
193
214
 
194
215
  # 2024.12 support
195
- array_api_tests/test_signatures.py::test_func_signature[bitwise_and]
196
- array_api_tests/test_signatures.py::test_func_signature[bitwise_left_shift]
197
- array_api_tests/test_signatures.py::test_func_signature[bitwise_or]
198
- array_api_tests/test_signatures.py::test_func_signature[bitwise_right_shift]
199
- array_api_tests/test_signatures.py::test_func_signature[bitwise_xor]
200
216
  array_api_tests/test_special_cases.py::test_binary[nextafter(x1_i is +0 and x2_i is -0) -> -0]
201
217
 
202
218
  # cupy 13.x follows numpy 1.x w/o weak promotion: result_type(int32, uint8, 1) != result_type(int32, uint8)
203
219
  array_api_tests/test_data_type_functions.py::TestResultType::test_with_scalars
220
+
221
+ # CuPy 14 does not support copy= dlpack argument
222
+ array_api_tests/test_dlpack.py::test_dunder_dlpack
223
+ array_api_tests/test_dlpack.py::test_from_dlpack
224
+
@@ -129,6 +129,19 @@ array_api_tests/test_linalg.py::test_matrix_norm
129
129
  array_api_tests/test_linalg.py::test_qr
130
130
  array_api_tests/test_manipulation_functions.py::test_roll
131
131
 
132
+ # 2025.12 support
133
+ array_api_tests/test_has_names.py::test_has_names[manipulation-broadcast_shapes]
134
+ array_api_tests/test_signatures.py::test_func_signature[broadcast_shapes]
135
+ array_api_tests/test_data_type_functions.py::TestBroadcastShapes::test_broadcast_shapes
136
+ array_api_tests/test_data_type_functions.py::TestBroadcastShapes::test_empty
137
+ array_api_tests/test_data_type_functions.py::TestBroadcastShapes::test_error
138
+ array_api_tests/test_searching_functions.py::test_searchsorted_with_scalars
139
+
140
+ array_api_tests/test_linalg.py::test_eig
141
+ array_api_tests/test_linalg.py::test_eigvals
142
+
143
+ array_api_tests/test_manipulation_functions.py::TestExpandDims::test_expand_dims_tuples
144
+
132
145
  # Stubs have a comment: (**note**: libraries may return ``NaN`` to match Python behavior.)
133
146
  array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is +infinity and isfinite(x2_i) and x2_i > 0) -> +infinity]
134
147
  array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is +infinity and isfinite(x2_i) and x2_i < 0) -> -infinity]
@@ -148,3 +161,20 @@ array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is -infinity
148
161
  array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is -infinity and isfinite(x2_i) and x2_i < 0) -> +infinity]
149
162
  array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> -0]
150
163
  array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> -0]
164
+
165
+ # complex cases
166
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is +infinity and imag(x_i) is +0) -> +infinity + 0j]
167
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is -infinity and imag(x_i) is +infinity) -> -1 + 0j]
168
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is +infinity and imag(x_i) is +infinity) -> infinity + NaN j]
169
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is -infinity and imag(x_i) is NaN) -> -1 + 0j]
170
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is +infinity and imag(x_i) is NaN) -> infinity + NaN j]
171
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is NaN and imag(x_i) is +0) -> NaN + 0j]
172
+ array_api_tests/test_special_cases.py::test_unary[sqrt(real(x_i) is +infinity and isfinite(imag(x_i)) and imag(x_i) > 0) -> +0 + infinity j]
173
+ array_api_tests/test_special_cases.py::test_unary[tanh(real(x_i) is +infinity and isfinite(imag(x_i)) and imag(x_i) > 0) -> 1 + 0j]
174
+ array_api_tests/test_special_cases.py::test_unary[expm1((real(x_i) is +0 or real(x_i) == -0) and imag(x_i) is +0) -> 0 + 0j]
175
+ array_api_tests/test_special_cases.py::test_unary[acosh(real(x_i) is +0 and imag(x_i) is NaN) -> NaN \xb1 \u03c0j/2]
176
+
177
+ # no dlpack support
178
+ array_api_tests/test_dlpack.py::test_dlpack_device
179
+ array_api_tests/test_dlpack.py::test_dunder_dlpack
180
+ array_api_tests/test_dlpack.py::test_from_dlpack
@@ -1,5 +1,73 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.15.0 (2026-06-07)
4
+
5
+ ### Major changes
6
+
7
+ - `array_namespace` can now be used under `torch.compile`.
8
+ - The build system has changed from `setuptools` to `meson-python`.
9
+ Projects vendoring array-api-compat inside a meson project can now
10
+ rely on the in-tree meson project definition, which exposes the Python
11
+ sources via the `sources` variable. For example:
12
+ ```meson
13
+ array_api_compat = subproject('array_api_compat')
14
+ array_api_compat_sources = array_api_compat.get_variable('sources')
15
+ foreach prefix, files : array_api_compat_sources
16
+ py3.install_sources(files, subdir: external_dir / prefix)
17
+ endforeach
18
+ ```
19
+
20
+ ### Minor changes
21
+
22
+ - `torch.round` now supports complex input.
23
+ - `torch.arange` now works around missing dtype implementations instead of raising
24
+ an exception.
25
+
26
+ Bug fixes:
27
+ - `np.matrix` instances are no longer considered to be standard array objects.
28
+ - `torch.meshgrid` now correctly handles the case of no input arrays.
29
+
30
+ ### Contributors
31
+
32
+ The following users contributed to this release:
33
+
34
+ Lucas Colley,
35
+ Evgeni Burovski,
36
+ Chris Ninham,
37
+ Dimitri Papadopoulos Orfanos.
38
+
39
+ ## 1.14.0 (2026-02-26)
40
+
41
+ ### Major changes
42
+
43
+ This release targets the 2025.12 Array API revision. This includes
44
+
45
+ - `__array_api_version__` for the wrapped APIs is now set to `2025.12`;
46
+ - wrappers for `linalg.eig` and `linalg.eigvals`;
47
+ - wrappers for `isin` and `searchsorted` to accept Python scalars;
48
+ - wrappers for `expand_dims` accepting tuple axes;
49
+ - `broadcast_arrays`, `meshgrid` and `__array_api_info__().devices()` have been
50
+ changed to return tuples, not lists;
51
+
52
+ Additionally,
53
+
54
+ - `clip` wrappers have been fixed to be compatible with `torch.vmap`.
55
+
56
+
57
+ ### Minor changes
58
+
59
+ - `expand_dims` wrappers have been fixed to accept its `axis` argument as a keyword
60
+ or positional argument;
61
+ - `torch.clip` wrappers have been fixed to correctly handle `nan` scalars;
62
+ - `torch.repeat` wrapper has been fixed to not error out for short integers;
63
+
64
+
65
+ The following users contributed to this release:
66
+
67
+ Evgeni Burovski,
68
+ Josh Soref.
69
+
70
+
3
71
  ## 1.13.0 (2025-12-28)
4
72
 
5
73
 
@@ -221,11 +289,11 @@ Thomas Li
221
289
  `xp.__array_namespace_info__()`.
222
290
  - Various fixes to the `clip()` wrappers.
223
291
 
224
- - `torch.conj` now wrapps `torch.conj_physical`, which makes a copy rather
292
+ - `torch.conj` now wraps `torch.conj_physical`, which makes a copy rather
225
293
  than setting the conjugation bit, as arrays with the conjugation bit set do
226
294
  not support some APIs.
227
295
 
228
- - `torch.sign` is now wrapped to support complex numbers and propogate nans
296
+ - `torch.sign` is now wrapped to support complex numbers and propagate nans
229
297
  properly.
230
298
 
231
299
  ### Minor Changes
@@ -298,7 +366,7 @@ Thomas Li
298
366
 
299
367
  - New flag `use_compat` to {func}`~.array_namespace` to force the use or
300
368
  non-use of the compat wrapper namespace. The default is to return a compat
301
- namespace when it is appropiate.
369
+ namespace when it is appropriate.
302
370
 
303
371
  - Fix the `copy` flag to `asarray` for NumPy, CuPy, and Dask.
304
372
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  This does mean you can ignore CI failures, but ideally you should fix any
26
26
  failures or update the `*-xfails.txt` files before tagging, so that CI and
27
- the CuPy tests fully pass. Otherwise it will be hard to tell what things are
27
+ the CuPy tests fully pass. Otherwise, it will be hard to tell what things are
28
28
  breaking in the future. It's also a good idea to remove any xpasses from
29
29
  those files (but be aware that some xfails are from flaky failures, so
30
30
  unless you know the underlying issue has been fixed, an xpass test is
@@ -44,15 +44,14 @@
44
44
 
45
45
  - [ ] **Update the version.**
46
46
 
47
- You must edit
47
+ You must edit the version in:
48
48
 
49
49
  ```
50
50
  array_api_compat/__init__.py
51
+ pyproject.toml
52
+ meson.build
51
53
  ```
52
54
 
53
- and update the version (the version is not computed from the tag because
54
- that would break vendorability).
55
-
56
55
  - [ ] **Update the [changelog](../changelog.md).**
57
56
 
58
57
  Edit
@@ -100,6 +99,11 @@
100
99
  docs update (the docs are published automatically from the sources on
101
100
  `main`).
102
101
 
102
+ - [ ] **Bump the `__version__` attribute in `__init__.py`**
103
+
104
+ After an M.N.0 release, further development is towards version `M.(N+1).0`, thus the main branch's
105
+ version is `M.(N+1).0.dev0`.
106
+
103
107
  - [ ] **Update conda-forge.**
104
108
 
105
109
  After the PyPI package is published, the conda-forge bot should update the
@@ -0,0 +1,75 @@
1
+ project(
2
+ 'array_api_compat',
3
+ version: '1.15.0',
4
+ license: 'MIT',
5
+ license_files: ['LICENSE']
6
+ )
7
+
8
+ py = import('python').find_installation()
9
+
10
+ sources_raw = {
11
+ 'array_api_compat': [
12
+ 'src/array_api_compat/__init__.py',
13
+ 'src/array_api_compat/_internal.py',
14
+ ],
15
+
16
+ 'array_api_compat/common': [
17
+ 'src/array_api_compat/common/__init__.py',
18
+ 'src/array_api_compat/common/_aliases.py',
19
+ 'src/array_api_compat/common/_fft.py',
20
+ 'src/array_api_compat/common/_helpers.py',
21
+ 'src/array_api_compat/common/_linalg.py',
22
+ 'src/array_api_compat/common/_typing.py',
23
+ ],
24
+
25
+ 'array_api_compat/cupy': [
26
+ 'src/array_api_compat/cupy/__init__.py',
27
+ 'src/array_api_compat/cupy/_aliases.py',
28
+ 'src/array_api_compat/cupy/_info.py',
29
+ 'src/array_api_compat/cupy/_typing.py',
30
+ 'src/array_api_compat/cupy/fft.py',
31
+ 'src/array_api_compat/cupy/linalg.py',
32
+ ],
33
+
34
+ 'array_api_compat/dask': [
35
+ 'src/array_api_compat/dask/__init__.py',
36
+ ],
37
+
38
+ 'array_api_compat/dask/array': [
39
+ 'src/array_api_compat/dask/array/__init__.py',
40
+ 'src/array_api_compat/dask/array/_aliases.py',
41
+ 'src/array_api_compat/dask/array/_info.py',
42
+ 'src/array_api_compat/dask/array/fft.py',
43
+ 'src/array_api_compat/dask/array/linalg.py',
44
+ ],
45
+
46
+ 'array_api_compat/numpy': [
47
+ 'src/array_api_compat/numpy/__init__.py',
48
+ 'src/array_api_compat/numpy/_aliases.py',
49
+ 'src/array_api_compat/numpy/_info.py',
50
+ 'src/array_api_compat/numpy/_typing.py',
51
+ 'src/array_api_compat/numpy/fft.py',
52
+ 'src/array_api_compat/numpy/linalg.py',
53
+ ],
54
+
55
+ 'array_api_compat/torch': [
56
+ 'src/array_api_compat/torch/__init__.py',
57
+ 'src/array_api_compat/torch/_aliases.py',
58
+ 'src/array_api_compat/torch/_info.py',
59
+ 'src/array_api_compat/torch/_typing.py',
60
+ 'src/array_api_compat/torch/fft.py',
61
+ 'src/array_api_compat/torch/linalg.py',
62
+ ],
63
+ }
64
+
65
+ sources = {}
66
+ foreach subdir, paths : sources_raw
67
+ sources += { subdir : files(paths) }
68
+ endforeach
69
+
70
+ foreach subdir, files : sources
71
+ py.install_sources(files, subdir: subdir)
72
+ endforeach
73
+
74
+ subdir('tests')
75
+ subdir('vendor_tests')
@@ -143,8 +143,6 @@ array_api_tests/test_operators_and_elementwise_functions.py::test_where_with_sca
143
143
  array_api_tests/test_has_names.py::test_has_names[creation-from_dlpack]
144
144
  array_api_tests/test_signatures.py::test_func_signature[from_dlpack]
145
145
  array_api_tests/test_signatures.py::test_array_method_signature[__dlpack__]
146
- # uint64 repeats not supported
147
- array_api_tests/test_manipulation_functions.py::test_repeat
148
146
 
149
147
  # 2024.12 support
150
148
  array_api_tests/test_signatures.py::test_func_signature[bitwise_and]
@@ -154,6 +152,13 @@ array_api_tests/test_signatures.py::test_func_signature[bitwise_right_shift]
154
152
  array_api_tests/test_signatures.py::test_func_signature[bitwise_xor]
155
153
  array_api_tests/test_data_type_functions.py::TestResultType::test_with_scalars
156
154
 
155
+ # 2025.12 support
156
+
157
+ # older numpies return lists not tuples
158
+ array_api_tests/test_creation_functions.py::test_meshgrid
159
+ array_api_tests/test_data_type_functions.py::test_broadcast_arrays
160
+
161
+
157
162
  # Stubs have a comment: (**note**: libraries may return ``NaN`` to match Python behavior.); Apparently,NumPy does just that
158
163
  array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is +infinity and isfinite(x2_i) and x2_i > 0) -> +infinity]
159
164
  array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is +infinity and isfinite(x2_i) and x2_i < 0) -> -infinity]
@@ -173,3 +178,21 @@ array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is -infinity
173
178
  array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is -infinity and isfinite(x2_i) and x2_i < 0) -> +infinity]
174
179
  array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> -0]
175
180
  array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> -0]
181
+
182
+ # complex special cases
183
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is +infinity and imag(x_i) is +0) -> +infinity + 0j]
184
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is -infinity and imag(x_i) is +infinity) -> -1 + 0j]
185
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is +infinity and imag(x_i) is +infinity) -> infinity + NaN j]
186
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is -infinity and imag(x_i) is NaN) -> -1 + 0j]
187
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is +infinity and imag(x_i) is NaN) -> infinity + NaN j]
188
+ array_api_tests/test_special_cases.py::test_unary[expm1(real(x_i) is NaN and imag(x_i) is +0) -> NaN + 0j]
189
+ array_api_tests/test_special_cases.py::test_unary[expm1((real(x_i) is +0 or real(x_i) == -0) and imag(x_i) is +0) -> 0 + 0j]
190
+
191
+ array_api_tests/test_special_cases.py::test_unary[sqrt(real(x_i) is +infinity and isfinite(imag(x_i)) and imag(x_i) > 0) -> +0 + infinity j]
192
+ array_api_tests/test_special_cases.py::test_unary[acosh(real(x_i) is +0 and imag(x_i) is NaN) -> NaN \xb1 \u03c0j/2]
193
+ array_api_tests/test_special_cases.py::test_unary[tanh(real(x_i) is +infinity and isfinite(imag(x_i)) and imag(x_i) > 0) -> 1 + 0j]
194
+
195
+ # no dlpack support
196
+ array_api_tests/test_dlpack.py::test_dlpack_device
197
+ array_api_tests/test_dlpack.py::test_dunder_dlpack
198
+ array_api_tests/test_dlpack.py::test_from_dlpack