Skip to content

Commit b6b5f84

Browse files
committed
Remove xp_extension() for top-level linalg tests
1 parent 54f3a35 commit b6b5f84

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

array_api_tests/test_linalg.py

+19-3
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@
3535
from ._array_module import linalg
3636

3737

38-
pytestmark = [pytest.mark.xp_extension('linalg')]
39-
40-
4138
# Standin strategy for not yet implemented tests
4239
todo = none()
4340

@@ -79,6 +76,7 @@ def _test_namedtuple(res, fields, func_name):
7976
assert hasattr(res, field), f"{func_name}() result namedtuple doesn't have the '{field}' field"
8077
assert res[i] is getattr(res, field), f"{func_name}() result namedtuple '{field}' field is not in position {i}"
8178

79+
@pytest.mark.xp_extension('linalg')
8280
@given(
8381
x=positive_definite_matrices(),
8482
kw=kwargs(upper=booleans())
@@ -126,6 +124,7 @@ def cross_args(draw, dtype_objects=numeric_dtype_objects):
126124
)
127125
return draw(arrays1), draw(arrays2), kw
128126

127+
@pytest.mark.xp_extension('linalg')
129128
@given(
130129
cross_args()
131130
)
@@ -164,6 +163,7 @@ def test_cross(x1_x2_kw):
164163
], dtype=res.dtype)
165164
assert_exactly_equal(res_stack, exact_cross)
166165

166+
@pytest.mark.xp_extension('linalg')
167167
@given(
168168
x=xps.arrays(dtype=xps.floating_dtypes(), shape=square_matrix_shapes),
169169
)
@@ -177,6 +177,7 @@ def test_det(x):
177177

178178
# TODO: Test that res actually corresponds to the determinant of x
179179

180+
@pytest.mark.xp_extension('linalg')
180181
@given(
181182
x=xps.arrays(dtype=dtypes, shape=matrix_shapes),
182183
# offset may produce an overflow if it is too large. Supporting offsets
@@ -211,6 +212,7 @@ def true_diag(x_stack):
211212

212213
_test_stacks(linalg.diagonal, x, **kw, res=res, dims=1, true_val=true_diag)
213214

215+
@pytest.mark.xp_extension('linalg')
214216
@given(x=symmetric_matrices(finite=True))
215217
def test_eigh(x):
216218
res = linalg.eigh(x)
@@ -234,6 +236,7 @@ def test_eigh(x):
234236
# TODO: Test that res actually corresponds to the eigenvalues and
235237
# eigenvectors of x
236238

239+
@pytest.mark.xp_extension('linalg')
237240
@given(x=symmetric_matrices(finite=True))
238241
def test_eigvalsh(x):
239242
res = linalg.eigvalsh(x)
@@ -247,6 +250,7 @@ def test_eigvalsh(x):
247250

248251
# TODO: Test that res actually corresponds to the eigenvalues of x
249252

253+
@pytest.mark.xp_extension('linalg')
250254
@given(x=invertible_matrices())
251255
def test_inv(x):
252256
res = linalg.inv(x)
@@ -291,6 +295,7 @@ def test_matmul(x1, x2):
291295
assert res.shape == stack_shape + (x1.shape[-2], x2.shape[-1])
292296
_test_stacks(linalg.matmul, x1, x2, res=res)
293297

298+
@pytest.mark.xp_extension('linalg')
294299
@given(
295300
x=xps.arrays(dtype=xps.floating_dtypes(), shape=shapes),
296301
kw=kwargs(axis=todo, keepdims=todo, ord=todo)
@@ -300,6 +305,7 @@ def test_matrix_norm(x, kw):
300305
pass
301306

302307
matrix_power_n = shared(integers(-1000, 1000), key='matrix_power n')
308+
@pytest.mark.xp_extension('linalg')
303309
@given(
304310
# Generate any square matrix if n >= 0 but only invertible matrices if n < 0
305311
x=matrix_power_n.flatmap(lambda n: invertible_matrices() if n < 0 else
@@ -321,6 +327,7 @@ def test_matrix_power(x, n):
321327
func = lambda x: linalg.matrix_power(x, n)
322328
_test_stacks(func, x, res=res, true_val=true_val)
323329

330+
@pytest.mark.xp_extension('linalg')
324331
@given(
325332
x=xps.arrays(dtype=xps.floating_dtypes(), shape=shapes),
326333
kw=kwargs(rtol=todo)
@@ -346,6 +353,7 @@ def test_matrix_transpose(x):
346353

347354
_test_stacks(linalg.matrix_transpose, x, res=res, true_val=true_val)
348355

356+
@pytest.mark.xp_extension('linalg')
349357
@given(
350358
*two_mutual_arrays(dtype_objects=numeric_dtype_objects,
351359
two_shapes=tuples(one_d_shapes, one_d_shapes))
@@ -369,6 +377,7 @@ def test_outer(x1, x2):
369377

370378
assert_exactly_equal(res, true_res)
371379

380+
@pytest.mark.xp_extension('linalg')
372381
@given(
373382
x=xps.arrays(dtype=xps.floating_dtypes(), shape=shapes),
374383
kw=kwargs(rtol=todo)
@@ -377,6 +386,7 @@ def test_pinv(x, kw):
377386
# res = linalg.pinv(x, **kw)
378387
pass
379388

389+
@pytest.mark.xp_extension('linalg')
380390
@given(
381391
x=xps.arrays(dtype=xps.floating_dtypes(), shape=matrix_shapes),
382392
kw=kwargs(mode=sampled_from(['reduced', 'complete']))
@@ -412,6 +422,7 @@ def test_qr(x, kw):
412422
# Check that r is upper-triangular.
413423
assert_exactly_equal(r, _array_module.triu(r))
414424

425+
@pytest.mark.xp_extension('linalg')
415426
@given(
416427
x=xps.arrays(dtype=xps.floating_dtypes(), shape=square_matrix_shapes),
417428
)
@@ -469,6 +480,7 @@ def x2_shapes(draw):
469480
x2 = xps.arrays(dtype=xps.floating_dtypes(), shape=x2_shapes())
470481
return x1, x2
471482

483+
@pytest.mark.xp_extension('linalg')
472484
@given(*solve_args())
473485
def test_solve(x1, x2):
474486
# TODO: solve() is currently ambiguous, in that some inputs can be
@@ -481,6 +493,7 @@ def test_solve(x1, x2):
481493
# res = linalg.solve(x1, x2)
482494
pass
483495

496+
@pytest.mark.xp_extension('linalg')
484497
@given(
485498
x=xps.arrays(dtype=xps.floating_dtypes(), shape=shapes),
486499
kw=kwargs(full_matrices=todo)
@@ -489,6 +502,7 @@ def test_svd(x, kw):
489502
# res = linalg.svd(x, **kw)
490503
pass
491504

505+
@pytest.mark.xp_extension('linalg')
492506
@given(
493507
x=xps.arrays(dtype=xps.floating_dtypes(), shape=shapes),
494508
)
@@ -505,6 +519,7 @@ def test_tensordot(x1, x2, kw):
505519
# res = linalg.tensordot(x1, x2, **kw)
506520
pass
507521

522+
@pytest.mark.xp_extension('linalg')
508523
@given(
509524
x=xps.arrays(dtype=xps.floating_dtypes(), shape=shapes),
510525
kw=kwargs(offset=todo)
@@ -522,6 +537,7 @@ def test_vecdot(x1, x2, kw):
522537
# res = linalg.vecdot(x1, x2, **kw)
523538
pass
524539

540+
@pytest.mark.xp_extension('linalg')
525541
@given(
526542
x=xps.arrays(dtype=xps.floating_dtypes(), shape=shapes),
527543
kw=kwargs(axis=todo, keepdims=todo, ord=todo)

0 commit comments

Comments
 (0)