@@ -358,6 +358,13 @@ def test_fmpz_mat():
358358 assert a .entries () == [1 ,2 ,3 ,4 ,5 ,6 ]
359359 assert a .table () == [[1 ,2 ,3 ],[4 ,5 ,6 ]]
360360 assert (a + b ).entries () == [5 ,7 ,9 ,11 ,13 ,15 ]
361+ assert (a - b ).entries () == [- 3 ,- 3 ,- 3 ,- 3 ,- 3 ,- 3 ]
362+ assert a .transpose () == M (3 ,2 ,[1 ,4 ,2 ,5 ,3 ,6 ])
363+ assert raises (lambda : a + 1 , TypeError )
364+ assert raises (lambda : 1 + a , TypeError )
365+ assert raises (lambda : a - 1 , TypeError )
366+ assert raises (lambda : 1 - a , TypeError )
367+ # XXX: Maybe there should be a ShapeError or something?
361368 assert raises (a .det , ValueError )
362369 assert + a == a
363370 assert - a == M (2 ,3 ,[- 1 ,- 2 ,- 3 ,- 4 ,- 5 ,- 6 ])
@@ -374,7 +381,11 @@ def test_fmpz_mat():
374381 A = M .randbits (5 ,3 ,2 )
375382 B = M .randtest (3 ,7 ,3 )
376383 C = M .randtest (7 ,2 ,4 )
384+ assert (A .nrows (),A .ncols ()) == (5 ,3 )
385+ assert (B .nrows (),B .ncols ()) == (3 ,7 )
386+ assert (C .nrows (),C .ncols ()) == (7 ,2 )
377387 assert A * (B * C ) == (A * B )* C
388+ assert raises (lambda : A * C , ValueError )
378389 assert bool (M (2 ,2 ,[0 ,0 ,0 ,0 ])) == False
379390 assert bool (M (2 ,2 ,[0 ,0 ,0 ,1 ])) == True
380391 ctx .pretty = False
@@ -389,12 +400,57 @@ def test_fmpz_mat():
389400 assert raises (lambda : M .randrank (4 ,3 ,4 ,1 ), ValueError )
390401 assert raises (lambda : M .randrank (3 ,4 ,4 ,1 ), ValueError )
391402 assert M (1 ,1 ,[3 ]) ** 5 == M (1 ,1 ,[3 ** 5 ])
403+ assert raises (lambda : pow (M ([[1 ]]), 2 , 3 ), NotImplementedError )
392404 assert raises (lambda : M (1 ,2 ) ** 3 , ValueError )
393405 assert raises (lambda : M (1 ,1 ) ** M (1 ,1 ), TypeError )
394406 assert raises (lambda : 1 ** M (1 ,1 ), TypeError )
395407 assert raises (lambda : M ([1 ]), TypeError )
396408 assert raises (lambda : M ([[1 ],[2 ,3 ]]), ValueError )
409+ assert raises (lambda : M (None ), TypeError )
410+ assert raises (lambda : M (2 ,2 ,[1 ,2 ,3 ]), ValueError )
411+ assert raises (lambda : M (2 ,2 ,2 ,2 ), ValueError )
397412 assert M ([[1 ,2 ,3 ],[4 ,5 ,6 ]]) == M (2 ,3 ,[1 ,2 ,3 ,4 ,5 ,6 ])
413+ assert raises (lambda : M ([[1 ]]) < M ([[2 ]]), TypeError )
414+ assert (M ([[1 ]]) == 1 ) is False
415+ assert (1 == M ([[1 ]])) is False
416+ assert (M ([[1 ]]) != 1 ) is True
417+ assert (1 != M ([[1 ]])) is True
418+ D = M ([[1 ,2 ],[3 ,4 ]])
419+ assert (D [0 ,0 ],D [0 ,1 ],D [1 ,0 ],D [1 ,1 ]) == (1 ,2 ,3 ,4 )
420+ D [0 ,0 ] = 3
421+ assert D == M ([[3 ,2 ],[3 ,4 ]])
422+ def set_bad (i ,j ):
423+ D [i ,j ] = - 1
424+ # XXX: Should be IndexError
425+ raises (lambda : set_bad (2 ,0 ), ValueError )
426+ raises (lambda : set_bad (0 ,2 ), ValueError )
427+ raises (lambda : D [0 ,2 ], ValueError )
428+ raises (lambda : D [0 ,2 ], ValueError )
429+ # XXX: Negative indices?
430+ raises (lambda : set_bad (- 1 ,0 ), ValueError )
431+ raises (lambda : set_bad (0 ,- 1 ), ValueError )
432+ raises (lambda : D [- 1 ,0 ], ValueError )
433+ raises (lambda : D [0 ,- 1 ], ValueError )
434+ assert M .hadamard (2 ) == M ([[1 ,1 ],[1 ,- 1 ]])
435+ assert raises (lambda : M .hadamard (3 ), ValueError )
436+ assert M .hadamard (2 ).is_hadamard () is True
437+ assert M ([[1 ,2 ],[3 ,4 ]]).is_hadamard () is False
438+ M1 = M ([[1 ,0 ],[1 ,1 ]])
439+ M2 = M ([[1 ,0 ],[- 1 ,1 ]])
440+ x = M ([[3 ],[4 ]])
441+ b = M ([[3 ],[7 ]])
442+ assert M1 .inv () == M2
443+ assert M2 .inv () == M1
444+ assert M1 .inv (integer = True ) == M2
445+ assert M2 .inv (integer = True ) == M1
446+ assert M1 * x == b
447+ assert M1 .solve (b ) == x
448+ assert M1 .solve (b , integer = True ) == x
449+ assert raises (lambda : M ([[1 ,2 ,3 ],[4 ,5 ,6 ]]).inv (), ValueError )
450+ assert raises (lambda : M ([[1 ,1 ],[1 ,1 ]]).inv (), ZeroDivisionError )
451+ assert raises (lambda : M ([[1 ,0 ],[1 ,2 ]]).inv (integer = True ), ValueError )
452+ half = flint .fmpq (1 ,2 )
453+ assert M ([[1 ,0 ],[1 ,2 ]]).inv () == flint .fmpq_mat ([[1 , 0 ], [- half , half ]])
398454
399455def test_fmpq ():
400456 Q = flint .fmpq
0 commit comments