Skip to content

Commit b3b7f64

Browse files
committed
add tests for fmpz_mat
1 parent 28ef7ce commit b3b7f64

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

test/test.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,11 +446,58 @@ def set_bad(i,j):
446446
assert M1*x == b
447447
assert M1.solve(b) == x
448448
assert M1.solve(b, integer=True) == x
449+
assert raises(lambda: M1.solve([]), TypeError)
450+
assert raises(lambda: M1.solve(M([[1]])), ValueError)
451+
assert raises(lambda: M([[1,1],[1,1]]).solve(b), ZeroDivisionError)
452+
assert raises(lambda: M([[1,2],[3,4],[5,6]]).solve(b), ValueError)
453+
assert M([[1,0],[1,2]]).solve(b) == flint.fmpq_mat([[3],[2]])
454+
assert raises(lambda: M([[1,0],[1,2]]).solve(b, integer=True), ValueError)
449455
assert raises(lambda: M([[1,2,3],[4,5,6]]).inv(), ValueError)
450456
assert raises(lambda: M([[1,1],[1,1]]).inv(), ZeroDivisionError)
451457
assert raises(lambda: M([[1,0],[1,2]]).inv(integer=True), ValueError)
452458
half = flint.fmpq(1,2)
453459
assert M([[1,0],[1,2]]).inv() == flint.fmpq_mat([[1, 0], [-half, half]])
460+
M3 = M([[1,2,3],[4,5,6],[7,8,9]])
461+
M3_copy = M(M3)
462+
M3r = M([[-3,0,3],[0,-3,-6],[0,0,0]])
463+
assert M3.rref() == (M3r, -3, 2)
464+
assert M3 != M3r
465+
assert M3.rref(inplace=True) == (M3r, -3, 2)
466+
assert M3 == M3r
467+
M3 = M3_copy
468+
M3n = M([[3,0,0],[-6,0,0],[3,0,0]])
469+
assert M3.nullspace() == (M3n, 1)
470+
assert M3 * M3.nullspace()[0] == M(3,3,[0]*9)
471+
# XXX: lll core dumps on a singular matrix
472+
M4 = M([[1,2,3],[4,5,6],[7,8,10]])
473+
L4 = M([[0,0,1],[-1,1,0],[2,1,0]])
474+
T4 = M([[1,-2,1],[0,5,-3],[-2,1,0]])
475+
assert L4 == T4 * M4
476+
assert M4.lll() == L4
477+
assert M4.lll(transform=True) == (L4, T4)
478+
# XXX: rep="gram" consumes all memory in the system and core dumps
479+
#for rep in "zbasis", "gram":
480+
rep = "zbasis"
481+
for gram in "approx", "exact":
482+
assert M4.lll(rep=rep, gram=gram) == L4
483+
assert M4.lll(rep=rep, gram=gram, transform=True) == (L4, T4)
484+
assert raises(lambda: M4.lll(rep="bad"), ValueError)
485+
assert raises(lambda: M4.lll(gram="bad"), ValueError)
486+
M5 = M([[1,2,3],[4,5,6]])
487+
H5 = M([[1,2,3],[0,3,6]])
488+
T5 = M([[1,0],[4,-1]])
489+
assert H5 == T5 * M5
490+
assert M5.hnf() == H5
491+
assert M5.hnf(transform=True) == (H5, T5)
492+
assert M5.is_hnf() is False
493+
assert H5.is_hnf() is True
494+
S5 = M([[1,0,0],[0,3,0]])
495+
assert M5.snf() == S5
496+
assert M5.is_snf() is False
497+
assert S5.is_snf() is True
498+
M6 = M([[2,0,0],[0,2,1],[0,0,2]])
499+
assert M6.charpoly() == flint.fmpz_poly([-8,12,-6,1])
500+
assert M6.minpoly() == flint.fmpz_poly([4,-4,1])
454501

455502
def test_fmpq():
456503
Q = flint.fmpq

0 commit comments

Comments
 (0)