34
34
from ._array_module import linalg
35
35
36
36
37
- pytestmark = [pytest .mark .xp_extension ('linalg' )]
38
-
39
-
40
37
# Standin strategy for not yet implemented tests
41
38
todo = none ()
42
39
@@ -78,6 +75,7 @@ def _test_namedtuple(res, fields, func_name):
78
75
assert hasattr (res , field ), f"{ func_name } () result namedtuple doesn't have the '{ field } ' field"
79
76
assert res [i ] is getattr (res , field ), f"{ func_name } () result namedtuple '{ field } ' field is not in position { i } "
80
77
78
+ @pytest .mark .xp_extension ('linalg' )
81
79
@given (
82
80
x = positive_definite_matrices (),
83
81
kw = kwargs (upper = booleans ())
@@ -125,6 +123,7 @@ def cross_args(draw, dtype_objects=dh.numeric_dtypes):
125
123
)
126
124
return draw (arrays1 ), draw (arrays2 ), kw
127
125
126
+ @pytest .mark .xp_extension ('linalg' )
128
127
@given (
129
128
cross_args ()
130
129
)
@@ -163,6 +162,7 @@ def test_cross(x1_x2_kw):
163
162
], dtype = res .dtype )
164
163
assert_exactly_equal (res_stack , exact_cross )
165
164
165
+ @pytest .mark .xp_extension ('linalg' )
166
166
@given (
167
167
x = xps .arrays (dtype = xps .floating_dtypes (), shape = square_matrix_shapes ),
168
168
)
@@ -176,6 +176,7 @@ def test_det(x):
176
176
177
177
# TODO: Test that res actually corresponds to the determinant of x
178
178
179
+ @pytest .mark .xp_extension ('linalg' )
179
180
@given (
180
181
x = xps .arrays (dtype = dtypes , shape = matrix_shapes ),
181
182
# offset may produce an overflow if it is too large. Supporting offsets
@@ -210,6 +211,7 @@ def true_diag(x_stack):
210
211
211
212
_test_stacks (linalg .diagonal , x , ** kw , res = res , dims = 1 , true_val = true_diag )
212
213
214
+ @pytest .mark .xp_extension ('linalg' )
213
215
@given (x = symmetric_matrices (finite = True ))
214
216
def test_eigh (x ):
215
217
res = linalg .eigh (x )
@@ -233,6 +235,7 @@ def test_eigh(x):
233
235
# TODO: Test that res actually corresponds to the eigenvalues and
234
236
# eigenvectors of x
235
237
238
+ @pytest .mark .xp_extension ('linalg' )
236
239
@given (x = symmetric_matrices (finite = True ))
237
240
def test_eigvalsh (x ):
238
241
res = linalg .eigvalsh (x )
@@ -246,6 +249,7 @@ def test_eigvalsh(x):
246
249
247
250
# TODO: Test that res actually corresponds to the eigenvalues of x
248
251
252
+ @pytest .mark .xp_extension ('linalg' )
249
253
@given (x = invertible_matrices ())
250
254
def test_inv (x ):
251
255
res = linalg .inv (x )
@@ -290,6 +294,7 @@ def test_matmul(x1, x2):
290
294
assert res .shape == stack_shape + (x1 .shape [- 2 ], x2 .shape [- 1 ])
291
295
_test_stacks (linalg .matmul , x1 , x2 , res = res )
292
296
297
+ @pytest .mark .xp_extension ('linalg' )
293
298
@given (
294
299
x = xps .arrays (dtype = xps .floating_dtypes (), shape = shapes ),
295
300
kw = kwargs (axis = todo , keepdims = todo , ord = todo )
@@ -299,6 +304,7 @@ def test_matrix_norm(x, kw):
299
304
pass
300
305
301
306
matrix_power_n = shared (integers (- 1000 , 1000 ), key = 'matrix_power n' )
307
+ @pytest .mark .xp_extension ('linalg' )
302
308
@given (
303
309
# Generate any square matrix if n >= 0 but only invertible matrices if n < 0
304
310
x = matrix_power_n .flatmap (lambda n : invertible_matrices () if n < 0 else
@@ -320,6 +326,7 @@ def test_matrix_power(x, n):
320
326
func = lambda x : linalg .matrix_power (x , n )
321
327
_test_stacks (func , x , res = res , true_val = true_val )
322
328
329
+ @pytest .mark .xp_extension ('linalg' )
323
330
@given (
324
331
x = xps .arrays (dtype = xps .floating_dtypes (), shape = shapes ),
325
332
kw = kwargs (rtol = todo )
@@ -345,6 +352,7 @@ def test_matrix_transpose(x):
345
352
346
353
_test_stacks (linalg .matrix_transpose , x , res = res , true_val = true_val )
347
354
355
+ @pytest .mark .xp_extension ('linalg' )
348
356
@given (
349
357
* two_mutual_arrays (dtype_objs = dh .numeric_dtypes ,
350
358
two_shapes = tuples (one_d_shapes , one_d_shapes ))
@@ -368,6 +376,7 @@ def test_outer(x1, x2):
368
376
369
377
assert_exactly_equal (res , true_res )
370
378
379
+ @pytest .mark .xp_extension ('linalg' )
371
380
@given (
372
381
x = xps .arrays (dtype = xps .floating_dtypes (), shape = shapes ),
373
382
kw = kwargs (rtol = todo )
@@ -376,6 +385,7 @@ def test_pinv(x, kw):
376
385
# res = linalg.pinv(x, **kw)
377
386
pass
378
387
388
+ @pytest .mark .xp_extension ('linalg' )
379
389
@given (
380
390
x = xps .arrays (dtype = xps .floating_dtypes (), shape = matrix_shapes ),
381
391
kw = kwargs (mode = sampled_from (['reduced' , 'complete' ]))
@@ -411,6 +421,7 @@ def test_qr(x, kw):
411
421
# Check that r is upper-triangular.
412
422
assert_exactly_equal (r , _array_module .triu (r ))
413
423
424
+ @pytest .mark .xp_extension ('linalg' )
414
425
@given (
415
426
x = xps .arrays (dtype = xps .floating_dtypes (), shape = square_matrix_shapes ),
416
427
)
@@ -468,6 +479,7 @@ def x2_shapes(draw):
468
479
x2 = xps .arrays (dtype = xps .floating_dtypes (), shape = x2_shapes ())
469
480
return x1 , x2
470
481
482
+ @pytest .mark .xp_extension ('linalg' )
471
483
@given (* solve_args ())
472
484
def test_solve (x1 , x2 ):
473
485
# TODO: solve() is currently ambiguous, in that some inputs can be
@@ -480,6 +492,7 @@ def test_solve(x1, x2):
480
492
# res = linalg.solve(x1, x2)
481
493
pass
482
494
495
+ @pytest .mark .xp_extension ('linalg' )
483
496
@given (
484
497
x = xps .arrays (dtype = xps .floating_dtypes (), shape = shapes ),
485
498
kw = kwargs (full_matrices = todo )
@@ -488,6 +501,7 @@ def test_svd(x, kw):
488
501
# res = linalg.svd(x, **kw)
489
502
pass
490
503
504
+ @pytest .mark .xp_extension ('linalg' )
491
505
@given (
492
506
x = xps .arrays (dtype = xps .floating_dtypes (), shape = shapes ),
493
507
)
@@ -504,6 +518,7 @@ def test_tensordot(x1, x2, kw):
504
518
# res = linalg.tensordot(x1, x2, **kw)
505
519
pass
506
520
521
+ @pytest .mark .xp_extension ('linalg' )
507
522
@given (
508
523
x = xps .arrays (dtype = xps .floating_dtypes (), shape = shapes ),
509
524
kw = kwargs (offset = todo )
@@ -521,6 +536,7 @@ def test_vecdot(x1, x2, kw):
521
536
# res = linalg.vecdot(x1, x2, **kw)
522
537
pass
523
538
539
+ @pytest .mark .xp_extension ('linalg' )
524
540
@given (
525
541
x = xps .arrays (dtype = xps .floating_dtypes (), shape = shapes ),
526
542
kw = kwargs (axis = todo , keepdims = todo , ord = todo )
0 commit comments