Skip to content

Commit 2940934

Browse files
committed
add tests for fmpq_mat
1 parent 546c945 commit 2940934

File tree

2 files changed

+78
-1
lines changed

2 files changed

+78
-1
lines changed

bin/coverage.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export PYTHON_FLINT_COVERAGE=true
3434
python setup.py build_ext --inplace
3535

3636
pytest --cov flint test/test.py
37-
#coverage run --append test/dtest.py
37+
coverage run --append test/dtest.py
3838

3939
#coverage report -m
4040
coverage html

test/test.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -757,11 +757,23 @@ def test_fmpq_mat():
757757
assert Z(2,3,[1,2,3,4,5,6]) * Q(3,2,[4,5,6,7,8,9]) == Q(2,2,[40,46,94,109])
758758
assert -Q(2,1,[2,5]) == Q(2,1,[-2,-5])
759759
assert +Q(1,1,[3]) == Z(1,1,[3])
760+
assert (Q(1,1,[1]) == 1) is False
761+
assert (Q(1,1,[1]) != 1) is True
762+
assert (1 == Q(1,1,[1])) is False
763+
assert (1 != Q(1,1,[1])) is True
760764
assert Q(1,2,[3,4]) * 2 == Q(1,2,[6,8])
761765
assert Q(1,2,[3,4]) * flint.fmpq(1,3) == Q(1,2,[1,flint.fmpq(4,3)])
762766
assert Q(1,2,[3,4]) * flint.fmpq(5,3) == Q(1,2,[5,flint.fmpq(20,3)])
763767
assert 2 * Q(1,2,[3,4]) == Q(1,2,[6,8])
764768
assert flint.fmpq(1,3) * Q(1,2,[3,4]) == Q(1,2,[1,flint.fmpq(4,3)])
769+
M = Q([[1,2],[3,4]])
770+
assert M ** -1 == Q([[-4,2],[3,-1]]) / 2
771+
assert M ** 0 == Q([[1,0],[0,1]])
772+
assert M ** 1 == M
773+
assert M ** 2 == Q([[7,10],[15,22]])
774+
assert M ** 12 == Q([[138067399, 201223170],[301834755, 439902154]])
775+
M = Q([[1,2],[2,4]])
776+
assert raises(lambda: M ** -1, ZeroDivisionError)
765777
assert Q(1,2,[3,4]) / 2 == Q(1,2,[flint.fmpq(3,2),2])
766778
assert Q(1,2,[3,4]) / flint.fmpq(2,3) == Q(1,2,[flint.fmpq(9,2),6])
767779
assert Q(3,2,range(6)).table() == Z(3,2,range(6)).table()
@@ -776,7 +788,72 @@ def test_fmpq_mat():
776788
assert raises(lambda: Q(2,1,[1,1]).inv(), ValueError)
777789
assert raises(lambda: Q([1]), TypeError)
778790
assert raises(lambda: Q([[1],[2,3]]), ValueError)
791+
assert raises(lambda: Q(None), TypeError)
779792
assert Q([[1,2,3],[4,5,6]]) == Q(2,3,[1,2,3,4,5,6])
793+
assert raises(lambda: Q(2,3,[1,2,3,4,5]), ValueError)
794+
# XXX: Should be TypeError not ValueError:
795+
assert raises(lambda: Q([[1,2,3],[4,[],6]]), ValueError)
796+
assert raises(lambda: Q(2,3,[1,2,3,4,[],6]), ValueError)
797+
assert raises(lambda: Q(2,3,[1,2],[3,4]), ValueError)
798+
assert bool(Q([[1]])) is True
799+
assert bool(Q([[0]])) is False
800+
assert raises(lambda: Q([[1]]) < Q([[0]]), TypeError)
801+
M = Q([[1,2],[3,4]])
802+
assert M[0,1] == 2
803+
M[0,1] = -1
804+
assert M[0,1] == -1
805+
# XXX: Negative indices should probably be allowed
806+
def set_bad(i):
807+
M[i,0] = -1
808+
raises(lambda: M[-1,0], ValueError)
809+
raises(lambda: M[0,-1], ValueError)
810+
raises(lambda: set_bad(-1), ValueError)
811+
# XXX: Should be IndexError
812+
raises(lambda: M[2,0], ValueError)
813+
raises(lambda: M[0,2], ValueError)
814+
raises(lambda: set_bad(2), ValueError)
815+
assert Q([[1,2,3],[4,5,6]]).transpose() == Q([[1,4],[2,5],[3,6]])
816+
raises(lambda: M + [], TypeError)
817+
raises(lambda: M - [], TypeError)
818+
raises(lambda: M * [], TypeError)
819+
raises(lambda: M / [], TypeError)
820+
raises(lambda: [] / M, TypeError)
821+
raises(lambda: [] + M, TypeError)
822+
raises(lambda: [] - M, TypeError)
823+
raises(lambda: [] * M, TypeError)
824+
# XXX: Maybe a ShapeError?
825+
raises(lambda: Q(1,2,[3,4]) + Q(1,3,[5,6,7]), ValueError)
826+
raises(lambda: Q(1,2,[3,4]) - Q(1,3,[5,6,7]), ValueError)
827+
raises(lambda: Q(1,2,[3,4]) * Q(1,3,[5,6,7]), ValueError)
828+
raises(lambda: Q(1,2,[3,4]) * Z(1,3,[5,6,7]), ValueError)
829+
raises(lambda: Z(1,2,[3,4]) * Q(1,3,[5,6,7]), ValueError)
830+
A = Q([[3,4],[5,7]]) / 11
831+
X = Q([[1,2],[3,4]])
832+
B = A*X
833+
assert A.solve(B) == X
834+
for algorithm in None, "fflu", "dixon":
835+
assert A.solve(B, algorithm=algorithm) == X
836+
assert raises(lambda: A.solve(B, algorithm="invalid"), ValueError)
837+
assert raises(lambda: A.solve(None), TypeError)
838+
assert raises(lambda: A.solve([1,2]), TypeError)
839+
assert raises(lambda: A.solve(Q([[1,2]])), ValueError)
840+
assert raises(lambda: Q([[1,2],[2,4]]).solve(Q([[1],[2]])), ZeroDivisionError)
841+
M = Q([[1,2,3],[flint.fmpq(1,2),5,6]])
842+
Mcopy = Q(M)
843+
Mrref = Q([[1,0,flint.fmpq(3,4)],[0,1,flint.fmpq(9,8)]])
844+
assert M.rref() == (Mrref, 2)
845+
assert M != Mrref
846+
assert M == Mcopy
847+
assert M.rref(inplace=True) == (Mrref, 2)
848+
assert M == Mrref
849+
assert M != Mcopy
850+
assert Q.hilbert(1, 2) == Q([[1,flint.fmpq(1,2)]])
851+
M2 = Q([[2, 4, 6], [8, 10, 12]]) / 4
852+
assert M2.numer_denom() == (Q([[1,2,3],[4,5,6]]), 2)
853+
half = flint.fmpq(1,2)
854+
M3 = Q([[half,0,0],[0,half,1],[0,0,half]])
855+
assert M3.charpoly() == flint.fmpq_poly([-1,6,-12,8]) / 8
856+
assert M3.minpoly() == flint.fmpq_poly([1,-4,4]) / 4
780857

781858
def test_nmod():
782859
G = flint.nmod

0 commit comments

Comments
 (0)