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