@@ -506,8 +506,108 @@ def set_bad(i,j):
506506 assert list (M6 ) == [2 ,0 ,0 ,0 ,2 ,1 ,0 ,0 ,2 ]
507507
508508def test_fmpz_series ():
509+ Zp = flint .fmpz_poly
509510 Z = flint .fmpz_series
510- Z ([1 ,2 ])
511+ ctx = flint .ctx
512+ assert ctx .cap == 10
513+ s1 = Z ([1 ,2 ])
514+ s2 = Z ([1 ,2 ])
515+ s3 = Z ([1 ,1 ])
516+ s4 = Z ([1 ,2 ],11 )
517+ p1 = Zp ([1 ,2 ])
518+ assert (s1 == s2 ) is True
519+ assert (s1 != s2 ) is False
520+ assert (s1 == s3 ) is False
521+ assert (s1 != s3 ) is True
522+ assert (s1 == s4 ) is False
523+ assert (s1 != s4 ) is True
524+ assert (s1 == p1 ) is False
525+ assert (s1 != p1 ) is True
526+ assert (Z ([1 ]) == flint .fmpz (1 )) is False
527+ assert (Z ([1 ]) != flint .fmpz (1 )) is True
528+ assert (Z ([1 ]) == 1 ) is False
529+ assert (Z ([1 ]) != 1 ) is True
530+ # XXX: These are invalid power series. Should they compare "equal"?
531+ assert (Z ([],- 1 ) == Z ([],- 1 )) is True
532+ assert (Z ([],- 1 ) != Z ([],- 1 )) is False
533+ assert (Z ([],- 2 ) == Z ([],- 1 )) is True
534+ assert (Z ([],- 2 ) != Z ([],- 1 )) is False
535+ assert (Z ([],- 1 ) == Z ([],- 2 )) is True
536+ assert (Z ([],- 1 ) != Z ([],- 2 )) is False
537+ # XXX: this gives a core dump:
538+ # s = Z([1,2])
539+ # s[10**10] = 1
540+ assert Z ([]) == Z ([0 ])
541+ assert Z ([1 ]) != Z ([0 ])
542+ assert Z (Z ([1 ])) == Z ([1 ])
543+ assert Z (Zp ([1 ])) == Z ([1 ])
544+ assert Z (1 ) == Z ([1 ])
545+ assert raises (lambda : Z ([1 ]) < Z ([1 ]), TypeError )
546+ assert len (Z ([1 ,2 ])) == 2
547+ assert Z ([1 ,2 ]).length () == 2
548+ s5 = Z ([1 ,2 ])
549+ assert s5 [1 ] == 2
550+ assert s5 [2 ] == 0
551+ assert s5 [- 1 ] == 0
552+ # XXX: This goes beyond cap. Should it give an error?
553+ assert s5 [100 ] == 0
554+ s5 [2 ] = - 1
555+ assert s5 [2 ] == - 1
556+ assert s5 == Z ([1 ,2 ,- 1 ])
557+ def set_bad ():
558+ s5 [- 1 ] = 3
559+ assert raises (set_bad , ValueError )
560+ assert Z ([1 ,2 ,0 ,4 ]).str () == "1 + 2*x + 4*x^3 + O(x^10)"
561+ assert Z ([1 ,2 ,0 ,4 ]).repr () == "fmpz_series([1, 2, 0, 4], prec=10)"
562+ assert Z ([],0 ).str () == "O(x^0)"
563+ assert Z ([],- 1 ).str () == "(invalid power series)"
564+ assert + Z ([1 ,2 ]) == Z ([1 ,2 ])
565+ assert - Z ([1 ,2 ]) == Z ([- 1 ,- 2 ])
566+ assert Z ([1 ,2 ]) + Z ([3 ,4 ,5 ]) == Z ([4 ,6 ,5 ])
567+ assert Z ([1 ,2 ]) + 1 == Z ([2 ,2 ])
568+ assert Z ([1 ,2 ]) + Zp ([3 ,4 ,5 ]) == Z ([4 ,6 ,5 ])
569+ assert 1 + Z ([1 ,2 ]) == Z ([2 ,2 ])
570+ assert Zp ([1 ,2 ]) + Z ([3 ,4 ,5 ]) == Z ([4 ,6 ,5 ])
571+ assert raises (lambda : Z ([1 ,2 ]) + [], TypeError )
572+ assert raises (lambda : [] + Z ([1 ,2 ]), TypeError )
573+ assert Z ([1 ,2 ]) - Z ([3 ,5 ]) == Z ([- 2 ,- 3 ])
574+ assert Z ([1 ,2 ]) - 1 == Z ([0 ,2 ])
575+ assert 1 - Z ([1 ,2 ]) == Z ([0 ,- 2 ])
576+ assert raises (lambda : [] - Z ([1 ,2 ]), TypeError )
577+ assert raises (lambda : Z ([1 ,2 ]) - [], TypeError )
578+ assert Z ([1 ,2 ]) * Z ([1 ,2 ]) == Z ([1 ,4 ,4 ])
579+ assert 2 * Z ([1 ,2 ]) == Z ([2 ,4 ])
580+ assert Z ([1 ,2 ]) * 2 == Z ([2 ,4 ])
581+ assert raises (lambda : [] * Z ([1 ,2 ]), TypeError )
582+ assert raises (lambda : Z ([1 ,2 ]) * [], TypeError )
583+ assert Z ([1 ,2 ]).valuation () == 0
584+ assert Z ([0 ,2 ]).valuation () == 1
585+ assert Z ([0 ,0 ]).valuation () == - 1
586+ assert Z ([1 ,1 ]) / Z ([1 ,- 1 ]) == Z ([1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ])
587+ assert raises (lambda : Z ([1 ,1 ]) / Z ([]), ZeroDivisionError )
588+ assert Z ([]) / Z ([1 ,- 1 ]) == Z ([])
589+ # quotient would not be a power series
590+ assert raises (lambda : Z ([1 ,1 ]) / Z ([0 ,1 ]), ValueError )
591+ # leading term in denominator is not a unit
592+ assert raises (lambda : Z ([1 ,1 ]) / Z ([2 ,1 ]), ValueError )
593+ assert Z ([0 ,1 ,1 ]) / Z ([0 ,1 ,- 1 ]) == Z ([1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ],9 )
594+ # XXX: This gives leading term not a unit:
595+ # assert Z([2,4]) / 2 == Z([1,2])
596+ assert Z ([1 ,1 ]) / - 1 == Z ([- 1 ,- 1 ])
597+ assert raises (lambda : Z ([1 ,1 ]) / [], TypeError )
598+ assert raises (lambda : [] / Z ([1 ,1 ]), TypeError )
599+ assert Z ([1 ,2 ]) ** 2 == Z ([1 ,4 ,4 ])
600+ assert raises (lambda : pow (Z ([1 ,2 ]), 3 , 5 ), NotImplementedError )
601+ assert Z ([1 ,2 ])(Z ([0 ,1 ,2 ])) == Z ([1 ,2 ,4 ])
602+ assert raises (lambda : Z ([1 ,2 ])(Z ([1 ,2 ])), ValueError )
603+ assert raises (lambda : Z ([1 ,2 ])([]), TypeError )
604+ coeffs = [0 , 1 , - 2 , 8 , - 40 , 224 , - 1344 , 8448 , - 54912 , 366080 ]
605+ assert Z ([0 ,1 ,2 ]).reversion () == Z (coeffs )
606+ # power series reversion must have valuation 1
607+ assert raises (lambda : Z ([1 ,1 ]).reversion (), ValueError )
608+ # leading term is not a unit
609+ assert raises (lambda : Z ([0 ,2 ,1 ]).reversion (), ValueError )
610+
511611
512612def test_fmpq ():
513613 Q = flint .fmpq
0 commit comments