@@ -970,7 +970,8 @@ def test_fmpq_poly():
970970 assert 3 * Q ([1 ,2 ,3 ]) == Q ([3 ,6 ,9 ])
971971 assert Q ([1 ,2 ,3 ]) * flint .fmpq (2 ,3 ) == (Q ([1 ,2 ,3 ]) * 2 ) / 3
972972 assert flint .fmpq (2 ,3 ) * Q ([1 ,2 ,3 ]) == (Q ([1 ,2 ,3 ]) * 2 ) / 3
973- assert raises (lambda : Q ([1 ,2 ]) / Q ([1 ,2 ]), TypeError )
973+ assert Q ([1 ,2 ]) / Q ([1 ,2 ]) == Q ([1 ])
974+ assert raises (lambda : Q ([1 ,2 ]) / Q ([2 ,2 ]), DomainError )
974975 assert Q ([1 ,2 ,3 ]) / flint .fmpq (2 ,3 ) == Q ([1 ,2 ,3 ]) * flint .fmpq (3 ,2 )
975976 assert Q ([1 ,2 ,3 ]) ** 2 == Q ([1 ,2 ,3 ]) * Q ([1 ,2 ,3 ])
976977 assert raises (lambda : pow (Q ([1 ,2 ]), 3 , 5 ), NotImplementedError )
@@ -2061,7 +2062,7 @@ def test_fmpz_mod_poly():
20612062 assert raises (lambda : f .exact_division (0 ), ZeroDivisionError )
20622063
20632064 assert (f * g ).exact_division (g ) == f
2064- assert raises (lambda : f .exact_division (g ), ValueError )
2065+ assert raises (lambda : f .exact_division (g ), DomainError )
20652066
20662067 # true div
20672068 assert raises (lambda : f / "AAA" , TypeError )
@@ -2340,10 +2341,52 @@ def test_division_poly():
23402341 assert PK ([2 , 5 ]) / 2 == PK ([K (2 )/ K (2 ), K (5 )/ K (2 )])
23412342 # No other scalar division is allowed
23422343 for (R , PR ) in [(Z , PZ ), (Q , PQ ), (F17 , PF17 ), (F163 , PF163 )]:
2343- assert raises (lambda : R (2 ) / PR ([2 , 5 ]), TypeError )
2344- assert raises (lambda : 2 / PR ([2 , 5 ]), TypeError )
2344+ assert raises (lambda : R (2 ) / PR ([2 , 5 ]), DomainError )
2345+ assert raises (lambda : 2 / PR ([2 , 5 ]), DomainError )
23452346 assert raises (lambda : PR ([2 , 5 ]) / 0 , ZeroDivisionError )
23462347 assert raises (lambda : PR ([2 , 5 ]) / R (0 ), ZeroDivisionError )
2348+ # exact polynomial division
2349+ for (R , PR ) in [(Z , PZ ), (Q , PQ ), (F17 , PF17 ), (F163 , PF163 )]:
2350+ assert PR ([2 , 4 ]) / PR ([1 , 2 ]) == PR ([2 ])
2351+ assert PR ([2 , - 3 , 1 ]) / PR ([- 1 , 1 ]) == PR ([- 2 , 1 ])
2352+ assert raises (lambda : PR ([2 , 4 ]) / PR ([1 , 3 ]), DomainError )
2353+ assert PR ([2 ]) / PR ([2 ]) == 2 / PR ([2 ]) == PR ([1 ])
2354+ assert PR ([0 ]) / PR ([1 , 2 ]) == 0 / PR ([1 , 2 ]) == PR ([0 ])
2355+ if R is Z :
2356+ assert raises (lambda : PR ([1 , 2 ]) / PR ([2 , 4 ]), DomainError )
2357+ assert raises (lambda : 1 / PR ([2 ]), DomainError )
2358+ else :
2359+ assert PR ([1 , 2 ]) / PR ([2 , 4 ]) == PR ([R (1 )/ R (2 )])
2360+ assert 1 / PR ([2 ]) == PR ([R (1 )/ R (2 )])
2361+ assert raises (lambda : PR ([1 , 2 ]) / PR ([0 ]), ZeroDivisionError )
2362+ # Euclidean polynomial division
2363+ for (R , PR ) in [(Z , PZ ), (Q , PQ ), (F17 , PF17 ), (F163 , PF163 )]:
2364+ assert PR ([2 , 4 ]) // PR ([1 , 2 ]) == PR ([2 ])
2365+ assert PR ([2 , 4 ]) % PR ([1 , 2 ]) == PR ([0 ])
2366+ assert divmod (PR ([2 , 4 ]), PR ([1 , 2 ])) == (PR ([2 ]), PR ([0 ]))
2367+ assert PR ([3 , - 3 , 1 ]) // PR ([- 1 , 1 ]) == PR ([- 2 , 1 ])
2368+ assert PR ([3 , - 3 , 1 ]) % PR ([- 1 , 1 ]) == PR ([1 ])
2369+ assert divmod (PR ([3 , - 3 , 1 ]), PR ([- 1 , 1 ])) == (PR ([- 2 , 1 ]), PR ([1 ]))
2370+ assert PR ([2 ]) // PR ([2 ]) == 2 // PR ([2 ]) == PR ([1 ])
2371+ assert PR ([2 ]) % PR ([2 ]) == 2 % PR ([2 ]) == PR ([0 ])
2372+ assert divmod (PR ([2 ]), PR ([2 ])) == (PR ([1 ]), PR ([0 ]))
2373+ assert PR ([0 ]) // PR ([1 , 2 ]) == 0 // PR ([1 , 2 ]) == PR ([0 ])
2374+ assert PR ([0 ]) % PR ([1 , 2 ]) == 0 % PR ([1 , 2 ]) == PR ([0 ])
2375+ assert divmod (PR ([0 ]), PR ([1 , 2 ])) == (PR ([0 ]), PR ([0 ]))
2376+ if R is Z :
2377+ assert PR ([2 , 2 ]) // PR ([2 , 4 ]) == PR ([2 , 2 ]) // PR ([2 , 4 ]) == PR ([0 ])
2378+ assert PR ([2 , 2 ]) % PR ([2 , 4 ]) == PR ([2 , 2 ]) % PR ([2 , 4 ]) == PR ([2 , 2 ])
2379+ assert divmod (PR ([2 , 2 ]), PR ([2 , 4 ])) == (PR ([0 ]), PR ([2 , 2 ]))
2380+ assert 1 // PR ([2 ]) == PR ([1 ]) // PR ([2 ]) == PR ([0 ])
2381+ assert 1 % PR ([2 ]) == PR ([1 ]) % PR ([2 ]) == PR ([1 ])
2382+ assert divmod (1 , PR ([2 ])) == (PR ([0 ]), PR ([1 ]))
2383+ else :
2384+ assert PR ([2 , 2 ]) // PR ([2 , 4 ]) == PR ([R (1 )/ R (2 )])
2385+ assert PR ([2 , 2 ]) % PR ([2 , 4 ]) == PR ([1 ])
2386+ assert divmod (PR ([2 , 2 ]), PR ([2 , 4 ])) == (PR ([R (1 )/ R (2 )]), PR ([1 ]))
2387+ assert 1 // PR ([2 ]) == PR ([R (1 )/ R (2 )])
2388+ assert 1 % PR ([2 ]) == PR ([0 ])
2389+ assert divmod (1 , PR ([2 ])) == (PR ([R (1 )/ R (2 )]), PR ([0 ]))
23472390
23482391
23492392def test_division_matrix ():
@@ -2553,9 +2596,9 @@ def setbad(obj, i, val):
25532596 assert raises (lambda : P ([1 , 2 ]) / 2 , DomainError )
25542597 assert raises (lambda : P ([1 , 2 ]) / 0 , ZeroDivisionError )
25552598
2556- assert raises ( lambda : 1 / P ([1 , 1 ]), TypeError )
2557- assert raises (lambda : P ([ 1 , 2 , 1 ]) / P ([1 , 1 ]), TypeError )
2558- assert raises (lambda : P ([1 , 2 , 1 ]) / P ([1 , 2 ]), TypeError )
2599+ assert P ([ 1 , 2 , 1 ]) / P ([1 , 1 ]) == P ([ 1 , 1 ] )
2600+ assert raises (lambda : 1 / P ([1 , 1 ]), DomainError )
2601+ assert raises (lambda : P ([1 , 2 , 1 ]) / P ([1 , 2 ]), DomainError )
25592602
25602603 assert P ([1 , 1 ]) ** 0 == P ([1 ])
25612604 assert P ([1 , 1 ]) ** 1 == P ([1 , 1 ])
0 commit comments