@@ -683,23 +683,35 @@ def test_nmod():
683683 assert G (3 ,5 ).repr () == "nmod(3, 5)"
684684
685685def test_nmod_poly ():
686+ N = flint .nmod
686687 P = flint .nmod_poly
687688 Z = flint .fmpz_poly
688689 assert P ([],17 ) == P ([0 ],17 )
689690 assert P ([1 ,2 ,3 ],17 ) == P ([1 ,2 ,3 ],17 )
690691 assert P ([1 ,2 ,3 ],17 ) != P ([1 ,2 ,3 ],15 )
691692 assert P ([1 ,2 ,3 ],17 ) != P ([1 ,2 ,4 ],15 )
693+ assert P ([1 ,2 ,3 ],17 ) != 1
694+ assert P ([1 ,2 ,3 ],17 ) != Z ([1 ,2 ,3 ])
695+ assert raises (lambda : P ([1 ,2 ],3 ) < P ([1 ,2 ],3 ), TypeError )
692696 assert P (Z ([1 ,2 ,3 ]),17 ) == P ([1 ,2 ,3 ],17 )
693- assert P ([1 ,2 ,flint .nmod (3 ,17 )],17 ) == P ([1 ,2 ,3 ],17 )
697+ assert P ([1 ,2 ,N (3 ,17 )],17 ) == P ([1 ,2 ,3 ],17 )
698+ assert P (P ([1 ,2 ],17 ),17 ) == P ([1 ,2 ],17 )
699+ assert raises (lambda : P (P ([1 ,2 ],17 ),13 ), ValueError )
700+ assert raises (lambda : P ([1 ,2 ,[]],17 ), TypeError )
694701 assert raises (lambda : P ([1 ,2 ,flint .nmod (3 ,15 )],17 ), ValueError )
702+ assert raises (lambda : P ([1 ,2 ],0 ), ValueError )
703+ assert raises (lambda : P ({},3 ), TypeError )
695704 assert P ([1 ,2 ,3 ],17 ).degree () == 2
696705 assert P ([1 ,2 ,3 ],17 ).length () == 3
706+ assert len (P ([1 ,2 ,3 ],17 )) == 3
707+ assert P ([1 ,2 ,3 ],5 ).coeffs () == [N (1 ,5 ),N (2 ,5 ),N (3 ,5 )]
697708 assert P ([1 ,2 ,3 ],17 ) + 2 == P ([3 ,2 ,3 ],17 )
698709 assert 2 + P ([1 ,2 ,3 ],17 ) == P ([3 ,2 ,3 ],17 )
699710 assert P ([1 ,2 ,3 ],17 ) + P ([3 ,4 ,5 ],17 ) == P ([4 ,6 ,8 ],17 )
700711 assert P ([1 ,2 ,3 ],17 ) + P ([3 ,4 ,5 ],17 ) == P ([4 ,6 ,8 ],17 )
701712 assert P ([1 ,2 ,3 ],17 ) - 2 == P ([16 ,2 ,3 ],17 )
702713 assert 2 - P ([1 ,2 ,3 ],17 ) == - P ([16 ,2 ,3 ],17 )
714+ assert + P ([1 ,2 ,3 ],17 ) == P ([1 ,2 ,3 ],17 )
703715 assert P ([1 ,2 ,3 ],17 ) - P ([3 ,4 ,6 ],17 ) == P ([15 ,15 ,14 ],17 )
704716 assert P ([1 ,2 ,3 ],17 ) * 2 == P ([2 ,4 ,6 ],17 )
705717 assert 2 * P ([1 ,2 ,3 ],17 ) == P ([2 ,4 ,6 ],17 )
@@ -708,12 +720,65 @@ def test_nmod_poly():
708720 assert Z ([1 ,2 ,3 ]) * P ([1 ,2 ,3 ],17 ) == P ([1 ,4 ,10 ,12 ,9 ], 17 )
709721 assert P ([1 ,2 ,3 ,4 ,5 ],17 ) % P ([2 ,3 ,4 ],17 ) == P ([12 ,12 ],17 )
710722 assert P ([1 ,2 ,3 ,4 ,5 ],17 ) // P ([2 ,3 ,4 ],17 ) == P ([3 ,16 ,14 ],17 )
723+ assert raises (lambda : P ([1 ,2 ],5 ) // P ([],5 ), ZeroDivisionError )
724+ assert raises (lambda : P ([1 ,2 ],5 ) % P ([],5 ), ZeroDivisionError )
725+ assert raises (lambda : divmod (P ([1 ,2 ],5 ), P ([],5 )), ZeroDivisionError )
711726 assert P ([1 ,2 ,3 ,4 ,5 ],17 ) ** 2 == P ([1 ,2 ,3 ,4 ,5 ],17 ) * P ([1 ,2 ,3 ,4 ,5 ],17 )
712- assert P ([1 ,2 ,3 ],17 ) * flint .nmod (3 ,17 ) == P ([3 ,6 ,9 ],17 )
727+ assert P ([1 ,2 ,3 ],17 ) * N (3 ,17 ) == P ([3 ,6 ,9 ],17 )
728+ s = P ([1 ,2 ,3 ],17 )
729+ s2 = P ([1 ,2 ,3 ],5 )
730+ assert raises (lambda : s + s2 , ValueError )
731+ assert raises (lambda : s - s2 , ValueError )
732+ assert raises (lambda : s * s2 , ValueError )
733+ assert raises (lambda : s // s2 , ValueError )
734+ assert raises (lambda : s % s2 , ValueError )
735+ assert raises (lambda : s2 + s , ValueError )
736+ assert raises (lambda : s2 - s , ValueError )
737+ assert raises (lambda : s2 * s , ValueError )
738+ assert raises (lambda : s2 // s , ValueError )
739+ assert raises (lambda : s2 % s , ValueError )
740+ assert raises (lambda : s + [], TypeError )
741+ assert raises (lambda : s - [], TypeError )
742+ assert raises (lambda : s * [], TypeError )
743+ assert raises (lambda : s // [], TypeError )
744+ assert raises (lambda : s % [], TypeError )
745+ assert raises (lambda : [] + s , TypeError )
746+ assert raises (lambda : [] - s , TypeError )
747+ assert raises (lambda : [] * s , TypeError )
748+ assert raises (lambda : [] // s , TypeError )
749+ assert raises (lambda : [] % s , TypeError )
750+ assert raises (lambda : pow (P ([1 ,2 ],3 ), 3 , 4 ), NotImplementedError )
713751 assert str (P ([1 ,2 ,3 ],17 )) == "3*x^2 + 2*x + 1"
752+ assert P ([1 ,2 ,3 ],17 ).repr () == "nmod_poly([1, 2, 3], 17)"
714753 p = P ([3 ,4 ,5 ],17 )
715- assert p (14 ) == flint . nmod (2 ,17 )
754+ assert p (14 ) == N (2 ,17 )
716755 assert p (P ([1 ,2 ,3 ],17 )) == P ([12 ,11 ,11 ,9 ,11 ],17 )
756+ assert raises (lambda : p ({}), TypeError )
757+ p2 = P ([3 ,4 ,5 ],17 )
758+ assert p2 [1 ] == N (4 ,17 )
759+ assert p2 [- 1 ] == N (0 ,17 )
760+ p2 [1 ] = N (2 ,17 )
761+ assert p2 == P ([3 ,2 ,5 ],17 )
762+ p2 [1 ] = 6
763+ assert p2 == P ([3 ,6 ,5 ],17 )
764+ def set_bad1 ():
765+ p2 [- 1 ] = 3
766+ def set_bad2 ():
767+ p2 [2 ] = []
768+ assert raises (set_bad1 , ValueError )
769+ assert raises (set_bad2 , TypeError )
770+ assert bool (P ([], 5 )) is False
771+ assert bool (P ([1 ], 5 )) is True
772+ assert P ([1 ,2 ,1 ],3 ).gcd (P ([1 ,1 ],3 )) == P ([1 ,1 ],3 )
773+ raises (lambda : P ([1 ,2 ],3 ).gcd ([]), TypeError )
774+ raises (lambda : P ([1 ,2 ],3 ).gcd (P ([1 ,2 ],5 )), ValueError )
775+ p3 = P ([1 ,2 ,3 ,4 ,5 ,6 ],7 )
776+ f3 = (N (6 ,7 ), [(P ([6 , 1 ],7 ), 5 )])
777+ assert p3 .factor () == f3
778+ # XXX: factor ignores an invalid algorithm string
779+ for alg in [None , 'berlekamp' , 'cantor-zassenhaus' ]:
780+ assert p3 .factor (alg ) == f3
781+ assert p3 .factor (algorithm = alg ) == f3
717782
718783def test_nmod_mat ():
719784 M = flint .nmod_mat
0 commit comments