Skip to content

Commit 043ca9d

Browse files
author
Jake Moss
committed
Add support for fmpz_mod and nmod interop
1 parent 4526d2b commit 043ca9d

File tree

4 files changed

+458
-152
lines changed

4 files changed

+458
-152
lines changed

src/flint/test/test_all.py

+9-23
Original file line numberDiff line numberDiff line change
@@ -2755,13 +2755,13 @@ def _all_mpolys():
27552755
(
27562756
flint.fmpz_mod_mpoly,
27572757
lambda *args, **kwargs: flint.fmpz_mod_mpoly_ctx.get_context(*args, **kwargs, modulus=101),
2758-
flint.fmpz,
2758+
lambda x: flint.fmpz_mod(x, flint.fmpz_mod_ctx(101)),
27592759
True,
27602760
),
27612761
(
27622762
flint.fmpz_mod_mpoly,
27632763
lambda *args, **kwargs: flint.fmpz_mod_mpoly_ctx.get_context(*args, **kwargs, modulus=100),
2764-
flint.fmpz,
2764+
lambda x: flint.fmpz_mod(x, flint.fmpz_mod_ctx(100)),
27652765
False,
27662766
),
27672767
(
@@ -2981,17 +2981,13 @@ def quick_poly():
29812981
assert +quick_poly() \
29822982
== quick_poly()
29832983

2984-
assert -quick_poly() \
2985-
== mpoly(
2986-
{(0, 0): -1, (0, 1): -2, (1, 0): -3, (2, 2): -4} if P is not flint.nmod_mpoly
2987-
else {k: ctx.modulus() + v for k, v in {(0, 0): -1, (0, 1): -2, (1, 0): -3, (2, 2): -4}.items()}
2988-
)
2984+
assert -quick_poly() == mpoly({(0, 0): -1, (0, 1): -2, (1, 0): -3, (2, 2): -4})
29892985

29902986
assert quick_poly() \
29912987
+ mpoly({(0, 0): 5, (0, 1): 6, (1, 0): 7, (2, 2): 8}) \
29922988
== mpoly({(0, 0): 6, (0, 1): 8, (1, 0): 10, (2, 2): 12})
29932989

2994-
for T in [int, S, lambda x: P(x, ctx=ctx)]:
2990+
for T in [int, S, flint.fmpz, lambda x: P(x, ctx=ctx)]:
29952991
p = quick_poly()
29962992
p += T(1)
29972993
q = quick_poly()
@@ -3008,22 +3004,15 @@ def quick_poly():
30083004
assert raises(lambda: quick_poly().iadd(None), NotImplementedError)
30093005

30103006
assert quick_poly() - mpoly({(0, 0): 5, (0, 1): 6, (1, 0): 7, (2, 2): 8}) \
3011-
== mpoly(
3012-
{(0, 0): -4, (0, 1): -4, (1, 0): -4, (2, 2): -4} if P is not flint.nmod_mpoly
3013-
else {k: ctx.modulus() + v for k, v in {(0, 0): -4, (0, 1): -4, (1, 0): -4, (2, 2): -4}.items()}
3014-
)
3007+
== mpoly({(0, 0): -4, (0, 1): -4, (1, 0): -4, (2, 2): -4})
30153008

3016-
for T in [int, S, int, lambda x: P(x, ctx=ctx)]:
3009+
for T in [int, S, flint.fmpz, lambda x: P(x, ctx=ctx)]:
30173010
p = quick_poly()
30183011
p -= T(1)
30193012
q = quick_poly()
30203013
assert q.isub(T(1)) is None
30213014
assert quick_poly() - T(1) == p == q == mpoly({(0, 1): 2, (1, 0): 3, (2, 2): 4})
3022-
assert T(1) - quick_poly() == \
3023-
mpoly(
3024-
{(0, 1): -2, (1, 0): -3, (2, 2): -4} if P is not flint.nmod_mpoly
3025-
else {k: ctx.modulus() + v for k, v in {(0, 1): -2, (1, 0): -3, (2, 2): -4}.items()}
3026-
)
3015+
assert T(1) - quick_poly() == mpoly({(0, 1): -2, (1, 0): -3, (2, 2): -4})
30273016

30283017
assert raises(lambda: quick_poly() - None, TypeError)
30293018
assert raises(lambda: None - quick_poly(), TypeError)
@@ -3042,7 +3031,7 @@ def quick_poly():
30423031
(0, 1): 6
30433032
})
30443033

3045-
for T in [int, S, int, lambda x: P(x, ctx=ctx)]:
3034+
for T in [int, S, flint.fmpz, lambda x: P(x, ctx=ctx)]:
30463035
p = quick_poly()
30473036
p *= T(2)
30483037
q = quick_poly()
@@ -3083,10 +3072,7 @@ def quick_poly():
30833072
assert divmod(quick_poly(), S(1)) == (quick_poly(), P(ctx=ctx))
30843073

30853074
if is_field:
3086-
if (P is flint.fmpz_mod_mpoly or P is flint.nmod_mpoly):
3087-
assert quick_poly() / 3 == mpoly({(0, 0): S(34), (0, 1): S(68), (1, 0): S(1), (2, 2): S(35)})
3088-
else:
3089-
assert quick_poly() / 3 == mpoly({(0, 0): S(1, 3), (0, 1): S(2, 3), (1, 0): S(1), (2, 2): S(4, 3)})
3075+
assert quick_poly() / 3 == mpoly({(0, 0): S(1) / 3, (0, 1): S(2) / 3, (1, 0): S(1), (2, 2): S(4) / 3})
30903076
else:
30913077
assert raises(lambda: quick_poly() / 3, DomainError)
30923078

0 commit comments

Comments
 (0)