@@ -506,6 +506,11 @@ def test_fmpq_poly():
506506 assert Q () == Q ([]) == Q ([0 ]) == Q ([0 ,0 ])
507507 assert Q () != Q ([1 ])
508508 assert Q ([1 ]) == Q ([1 ])
509+ assert Q ([1 ], 2 ) == Q ([flint .fmpq (1 ,2 )])
510+ raises (lambda : Q ([1 ,[]]), TypeError )
511+ raises (lambda : Q ({}), TypeError )
512+ raises (lambda : Q ([1 ], []), TypeError )
513+ raises (lambda : Q ([1 ], 0 ), ZeroDivisionError )
509514 assert bool (Q ()) == False
510515 assert bool (Q ([1 ])) == True
511516 assert Q (Q ([1 ,2 ])) == Q ([1 ,2 ])
@@ -514,12 +519,34 @@ def test_fmpq_poly():
514519 assert 3 + Q ([1 ,2 ]) == Q ([4 ,2 ])
515520 assert Q ([1 ,2 ]) - 3 == Q ([- 2 ,2 ])
516521 assert 3 - Q ([1 ,2 ]) == Q ([2 ,- 2 ])
522+ assert raises (lambda : Q ([1 ]) + [], TypeError )
523+ assert raises (lambda : [] + Q ([1 ]), TypeError )
524+ assert raises (lambda : Q ([1 ]) - [], TypeError )
525+ assert raises (lambda : [] - Q ([1 ]), TypeError )
526+ assert raises (lambda : Q ([1 ]) * [], TypeError )
527+ assert raises (lambda : [] * Q ([1 ]), TypeError )
528+ assert Q ([1 ,2 ,1 ]) // Q ([1 ,1 ]) == Q ([1 ,1 ])
529+ assert Q ([1 ,2 ,1 ]) % Q ([1 ,1 ]) == 0
530+ assert divmod (Q ([1 ,2 ,1 ]), Q ([1 ,1 ])) == (Q ([1 ,1 ]), 0 )
531+ assert raises (lambda : Q ([1 ,2 ,1 ]) // [], TypeError )
532+ assert raises (lambda : [] // Q ([1 ,2 ,1 ]), TypeError )
533+ assert raises (lambda : Q ([1 ,2 ,1 ]) % [], TypeError )
534+ assert raises (lambda : [] % Q ([1 ,2 ,1 ]), TypeError )
535+ assert raises (lambda : divmod (Q ([1 ,2 ,1 ]), []), TypeError )
536+ assert raises (lambda : divmod ([], Q ([1 ,2 ,1 ])), TypeError )
537+ assert raises (lambda : Q ([1 ,2 ,1 ]) / 0 , ZeroDivisionError )
538+ assert raises (lambda : Q ([1 ,2 ,1 ]) // 0 , ZeroDivisionError )
539+ assert raises (lambda : Q ([1 ,2 ,1 ]) % 0 , ZeroDivisionError )
540+ assert raises (lambda : divmod (Q ([1 ,2 ,1 ]), 0 ), ZeroDivisionError )
541+ assert + Q ([1 ,2 ]) == Q ([1 ,2 ])
517542 assert - Q ([1 ,2 ]) == Q ([- 1 ,- 2 ])
518543 assert Q ([flint .fmpq (1 ,2 ),1 ]) * 2 == Q ([1 ,2 ])
519544 assert Q ([1 ,2 ]) == Z ([1 ,2 ])
520545 assert Z ([1 ,2 ]) == Q ([1 ,2 ])
521546 assert Q ([1 ,2 ]) != Z ([3 ,2 ])
522547 assert Z ([1 ,2 ]) != Q ([3 ,2 ])
548+ assert Q ([1 ,2 ]) != []
549+ assert raises (lambda : Q ([1 ,2 ]) < Q ([1 ,2 ]), TypeError )
523550 assert Q ([1 ,2 ,3 ])* Q ([1 ,2 ]) == Q ([1 ,4 ,7 ,6 ])
524551 assert Q ([1 ,2 ,3 ])* Z ([1 ,2 ]) == Q ([1 ,4 ,7 ,6 ])
525552 assert Q ([1 ,2 ,3 ]) * 3 == Q ([3 ,6 ,9 ])
@@ -529,6 +556,7 @@ def test_fmpq_poly():
529556 assert raises (lambda : Q ([1 ,2 ]) / Q ([1 ,2 ]), TypeError )
530557 assert Q ([1 ,2 ,3 ]) / flint .fmpq (2 ,3 ) == Q ([1 ,2 ,3 ]) * flint .fmpq (3 ,2 )
531558 assert Q ([1 ,2 ,3 ]) ** 2 == Q ([1 ,2 ,3 ]) * Q ([1 ,2 ,3 ])
559+ assert raises (lambda : pow (Q ([1 ,2 ]), 3 , 5 ), NotImplementedError )
532560 assert Q ([1 ,2 ,flint .fmpq (1 ,2 )]).coeffs () == [1 ,2 ,flint .fmpq (1 ,2 )]
533561 assert Q ().coeffs () == []
534562 assert Q ().degree () == - 1
@@ -540,18 +568,34 @@ def test_fmpq_poly():
540568 assert (Q ([1 ,2 ,3 ]) / 5 ).numer () == (Q ([1 ,2 ,3 ]) / 5 ).p == Z ([1 ,2 ,3 ])
541569 assert (Q ([1 ,2 ,3 ]) / 5 ).denom () == (Q ([1 ,2 ,3 ]) / 5 ).q == 5
542570 ctx .pretty = False
571+ assert repr (Q ([15 ,20 ,10 ])) == "fmpq_poly([15, 20, 10])"
543572 assert repr (Q ([15 ,20 ,10 ]) / 25 ) == "fmpq_poly([3, 4, 2], 5)"
544573 ctx .pretty = True
545574 assert str (Q ([3 ,4 ,2 ],5 )) == "2/5*x^2 + 4/5*x + 3/5"
546575 a = Q ([2 ,2 ,3 ],4 )
547576 assert a [2 ] == flint .fmpq (3 ,4 )
577+ assert a [- 1 ] == flint .fmpq (0 )
548578 a [2 ] = 4
579+ def set_bad ():
580+ a [- 1 ] = 2
581+ raises (set_bad , ValueError )
549582 assert a == Q ([1 ,1 ,8 ],2 )
550583 p = Q ([3 ,4 ,5 ],7 )
551584 assert p (2 ) == flint .fmpq (31 ,7 )
552585 assert p (flint .fmpq (2 ,3 )) == flint .fmpq (71 ,63 )
553586 assert p (Z ([1 ,- 1 ])) == Q ([12 ,- 14 ,5 ],7 )
554587 assert p (flint .fmpq_poly ([2 ,3 ],5 )) == flint .fmpq_poly ([27 ,24 ,9 ],7 * 5 )
588+ assert raises (lambda : p ([]), TypeError )
589+ assert Q ([1 ,2 ,3 ]).derivative () == Q ([2 ,6 ])
590+ assert Q ([1 ,2 ,3 ]).integral () == Q ([0 ,1 ,1 ,1 ])
591+ assert Q ([1 ,2 ,1 ]).gcd (Q ([1 ,1 ])) == Q ([1 ,1 ])
592+ assert Q ([1 ,2 ,1 ]).xgcd (Q ([1 ,1 ])) == (Q ([1 ,1 ]), 0 , 1 )
593+ assert raises (lambda : Q ([1 ,2 ,1 ]).gcd ([]), TypeError )
594+ assert raises (lambda : Q ([1 ,2 ,1 ]).xgcd ([]), TypeError )
595+ assert Q ([1 ,2 ,1 ]).factor () == (1 , [(Q ([1 ,1 ]), 2 )])
596+ assert Q .bernoulli_poly (3 ) == Q ([0 ,1 ,- 3 ,2 ],2 )
597+ assert Q .euler_poly (3 ) == Q ([1 ,0 ,- 6 ,4 ],4 )
598+ assert Q .legendre_p (3 ) == Q ([0 ,- 3 ,0 ,5 ],2 )
555599
556600def test_fmpq_mat ():
557601 Q = flint .fmpq_mat
0 commit comments