@@ -1029,6 +1029,7 @@ def test_nmod_mat():
10291029 assert (a * flint .fmpz (3 )).entries () == [G (x ,17 ) for x in [3 ,6 ,9 ,12 ,15 ,18 ]]
10301030 assert (flint .fmpz (3 ) * a ).entries () == [G (x ,17 ) for x in [3 ,6 ,9 ,12 ,15 ,18 ]]
10311031 assert M (2 ,2 ,[1 ,1 ,2 ,2 ],17 ).rank () == 1
1032+ assert M (Z (2 ,2 ,[1 ,2 ,3 ,4 ]),17 ) == M (2 ,2 ,[1 ,2 ,3 ,4 ],17 )
10321033 A = M (5 ,3 ,Z .randbits (5 ,3 ,5 ).entries (),17 )
10331034 B = M (3 ,7 ,Z .randtest (3 ,7 ,5 ).entries (),17 )
10341035 C = M (7 ,2 ,Z .randtest (7 ,2 ,5 ).entries (),17 )
@@ -1039,13 +1040,88 @@ def test_nmod_mat():
10391040 assert repr (M (2 ,2 ,[1 ,2 ,3 ,4 ],17 )) == 'nmod_mat(2, 2, [1, 2, 3, 4], 17)'
10401041 ctx .pretty = True
10411042 assert str (M (2 ,2 ,[1 ,2 ,3 ,4 ],17 )) == '[1, 2]\n [3, 4]'
1043+ assert repr (M (2 ,2 ,[1 ,2 ,3 ,4 ],17 )) == '[1, 2]\n [3, 4]'
10421044 assert M (1 ,2 ,[3 ,4 ],17 ) / 3 == M (1 ,2 ,[3 ,4 ],17 ) * (~ G (3 ,17 ))
10431045 assert M (2 ,2 ,[1 ,2 ,3 ,4 ], 17 ).inv ().det () == ~ (M (2 ,2 ,[1 ,2 ,3 ,4 ], 17 ).det ())
10441046 assert M (2 ,2 ,[1 ,2 ,3 ,4 ], 17 ).inv ().inv () == M (2 ,2 ,[1 ,2 ,3 ,4 ], 17 )
10451047 assert M (2 ,2 ,[0 ,1 ,2 ,3 ],17 ) * M (2 , 2 , [2 ,3 ,4 ,5 ], 17 ) == M (2 ,2 ,[4 ,5 ,16 ,4 ],17 )
10461048 assert raises (lambda : M ([1 ], 5 ), TypeError )
10471049 assert raises (lambda : M ([[1 ],[2 ,3 ]], 5 ), ValueError )
1050+ assert raises (lambda : M ([[1 ],[2 ]], 0 ), ValueError )
1051+ assert raises (lambda : M (None ), TypeError )
1052+ assert raises (lambda : M (None ,17 ), TypeError )
1053+ assert M (2 ,3 ,17 ) == M (2 ,3 ,[0 ,0 ,0 ,0 ,0 ,0 ],17 )
1054+ assert raises (lambda : M (2 ,3 ,[0 ,0 ,0 ,0 ,0 ],17 ), ValueError )
1055+ assert raises (lambda : M (2 ,3 ,[0 ,1 ],[1 ,2 ],17 ), ValueError )
10481056 assert M ([[1 ,2 ,3 ],[4 ,5 ,6 ]], 5 ) == M (2 ,3 ,[1 ,2 ,3 ,4 ,5 ,6 ], 5 )
1057+ assert raises (lambda : M ([[0 ]],13 ) < M ([[1 ]],13 ), TypeError )
1058+ assert (M ([[1 ]],17 ) == M ([[1 ]],13 )) is False
1059+ assert (M ([[1 ]],17 ) != M ([[1 ]],13 )) is True
1060+ assert (M ([[1 ]],17 ) == None ) is False
1061+ assert (M ([[1 ]],17 ) != None ) is True
1062+ M2 = M .randtest (3 ,4 ,5 )
1063+ assert all (0 <= int (x ) < 5 for x in M2 .entries ())
1064+ assert (M2 .nrows (), M2 .ncols ()) == (3 , 4 )
1065+ M3 = M (2 ,2 ,[1 ,2 ,3 ,4 ],17 )
1066+ assert M3 [0 ,1 ] == G (2 ,17 )
1067+ M3_copy = M (M3 )
1068+ M3 [0 ,1 ] = - 1
1069+ assert M3 [0 ,1 ] == G (- 1 ,17 )
1070+ def set_bad (i ,j ):
1071+ M3 [i ,j ] = 2
1072+ # XXX: negative indices should be allowed
1073+ assert raises (lambda : M3 [- 1 ,0 ], ValueError )
1074+ assert raises (lambda : M3 [0 ,- 1 ], ValueError )
1075+ assert raises (lambda : set_bad (- 1 ,0 ), ValueError )
1076+ assert raises (lambda : set_bad (0 ,- 1 ), ValueError )
1077+ # XXX: Should be IndexError
1078+ assert raises (lambda : M3 [2 ,0 ], ValueError )
1079+ assert raises (lambda : M3 [0 ,2 ], ValueError )
1080+ assert raises (lambda : set_bad (2 ,0 ), ValueError )
1081+ assert raises (lambda : set_bad (0 ,2 ), ValueError )
1082+ def set_bad2 ():
1083+ M3 [0 ,0 ] = 1.5
1084+ assert raises (set_bad2 , ValueError )
1085+ assert raises (lambda : M3 + [], TypeError )
1086+ assert raises (lambda : M3 - [], TypeError )
1087+ assert raises (lambda : M3 * [], TypeError )
1088+ assert raises (lambda : M3 / [], TypeError )
1089+ assert raises (lambda : [] + M3 , TypeError )
1090+ assert raises (lambda : [] - M3 , TypeError )
1091+ assert raises (lambda : [] * M3 , TypeError )
1092+ assert raises (lambda : [] / M3 , TypeError )
1093+ assert raises (lambda : M ([[1 ]],3 ) + M ([[1 ]],5 ), ValueError )
1094+ assert raises (lambda : M ([[1 ]],3 ) - M ([[1 ]],5 ), ValueError )
1095+ assert raises (lambda : M ([[1 ]],3 ) * M ([[1 ]],5 ), ValueError )
1096+ assert Z ([[1 ]]) + M ([[1 ]],3 ) == M ([[2 ]],3 )
1097+ assert M ([[1 ]],3 ) + Z ([[1 ]]) == M ([[2 ]],3 )
1098+ assert Z ([[1 ]]) - M ([[1 ]],3 ) == M ([[0 ]],3 )
1099+ assert M ([[1 ]],3 ) - Z ([[1 ]]) == M ([[0 ]],3 )
1100+ assert Z ([[1 ]]) * M ([[1 ]],3 ) == M ([[1 ]],3 )
1101+ assert M ([[1 ]],3 ) * Z ([[1 ]]) == M ([[1 ]],3 )
1102+ assert raises (lambda : M ([[1 ]],3 ) - M ([[1 ,2 ]],3 ), ValueError )
1103+ assert raises (lambda : M ([[1 ,2 ]],3 ) * M ([[1 ,2 ]],3 ), ValueError )
1104+ M4 = M ([[1 ,2 ],[3 ,4 ]],17 )
1105+ assert M4 .inv () == M ([[15 ,1 ],[10 ,8 ]],17 )
1106+ assert raises (lambda : M ([[1 ,2 ]],17 ).inv (), ValueError )
1107+ assert raises (lambda : M ([[1 ,2 ],[2 ,4 ]],17 ).inv (), ZeroDivisionError )
1108+ assert M ([[1 ,2 ,3 ],[4 ,5 ,6 ]],17 ).transpose () == M ([[1 ,4 ],[2 ,5 ],[3 ,6 ]],17 )
1109+ M5 = M ([[1 ,2 ],[3 ,4 ]],17 )
1110+ X = M ([[1 ],[2 ]],17 )
1111+ b = M5 * X
1112+ assert M5 .solve (b ) == X
1113+ assert raises (lambda : M5 .solve ([]), TypeError )
1114+ assert raises (lambda : b .solve (M5 ), ValueError )
1115+ assert raises (lambda : M ([[1 ,2 ],[2 ,4 ]],17 ).solve (b ), ZeroDivisionError )
1116+ M6 = M ([[1 ,2 ,3 ],[4 ,5 ,6 ]],17 )
1117+ M6_rref = M ([[1 ,0 ,16 ],[0 ,1 ,2 ]],17 )
1118+ M6_copy = M (M6 )
1119+ assert M6 .rref () == (M6_rref , 2 )
1120+ assert M6 == M6_copy
1121+ assert M6 .rref (inplace = True ) == (M6_rref , 2 )
1122+ assert M6 == M6_rref
1123+ M6 = M6_copy
1124+ assert M6 .nullspace () == (M ([[1 ,15 ,1 ],[0 ,0 ,0 ],[0 ,0 ,0 ]],17 ).transpose (), 1 )
10491125
10501126def test_arb ():
10511127 A = flint .arb
0 commit comments