Skip to content

Commit 692e206

Browse files
committed
typ: fmpz_poly, fmpz_series, fmpq_poly, fmpq_series
1 parent 34f1b56 commit 692e206

File tree

7 files changed

+434
-99
lines changed

7 files changed

+434
-99
lines changed

src/flint/flint_base/flint_base.pyi

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class flint_scalar(flint_elem):
3030

3131
class flint_poly(flint_elem, Generic[Telem]):
3232
def __iter__(self) -> Iterator[Telem]: ...
33-
def __getitem__(self, index: int) -> Telem: ...
33+
def __getitem__(self, index: int, /) -> Telem: ...
3434
def coeffs(self) -> list[Telem]: ...
3535
def str(self, ascending: bool = False, var: str = "x", *args: Any, **kwargs: Any): ...
3636
def roots(self) -> list[tuple[Telem, int]]: ...
@@ -165,3 +165,9 @@ class flint_mpoly_context(flint_elem, Generic[Tmpoly, Telem, Telem_coerce]):
165165
class flint_mod_mpoly_context(flint_mpoly_context[Tmpoly, Telem, Telem_coerce]):
166166
@abstractmethod
167167
def modulus(self) -> int: ...
168+
169+
170+
class flint_series(flint_elem, Generic[Telem]):
171+
"""Base class for power series."""
172+
def __iter__(self) -> Iterator[Telem]: ...
173+
def coeffs(self) -> list[Telem]: ...

src/flint/test/test_all.py

Lines changed: 74 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@ def raises(f, exception):
2626

2727
if TYPE_CHECKING:
2828
from typing import TypeIs
29-
Tscalar = TypeVar('Tscalar', bound=flint_base.flint_scalar)
30-
Tscalar_co = TypeVar('Tscalar_co', bound=flint_base.flint_scalar, covariant=True)
31-
Tmpoly = TypeVar('Tmpoly', bound=flint_base.flint_mpoly)
32-
Tmpolyctx_co = TypeVar('Tmpolyctx_co', bound=flint_base.flint_mpoly_context, covariant=True)
29+
30+
31+
Tscalar = TypeVar('Tscalar', bound=flint_base.flint_scalar)
32+
Tscalar_co = TypeVar('Tscalar_co', bound=flint_base.flint_scalar, covariant=True)
33+
Tmpoly = TypeVar('Tmpoly', bound=flint_base.flint_mpoly)
34+
Tmpolyctx_co = TypeVar('Tmpolyctx_co', bound=flint_base.flint_mpoly_context, covariant=True)
3335

3436

3537
_default_ctx_string = """\
@@ -379,10 +381,10 @@ def test_fmpz_poly():
379381
assert Z([1]) == Z([1])
380382
assert Z([1]) == Z([flint.fmpz(1)])
381383
assert Z(Z([1,2])) == Z([1,2])
382-
assert raises(lambda: Z([1,2,[]]), TypeError)
383-
assert raises(lambda: Z({}), TypeError)
384+
assert raises(lambda: Z([1,2,[]]), TypeError) # type: ignore
385+
assert raises(lambda: Z({}), TypeError) # type: ignore
384386
# XXX: This should probably be made to work:
385-
assert raises(lambda: Z((1,2,3)), TypeError)
387+
assert raises(lambda: Z((1,2,3)), TypeError) # type: ignore
386388
for ztype in [int, flint.fmpz]:
387389
assert Z([1,2,3]) + ztype(5) == Z([6,2,3])
388390
assert ztype(5) + Z([1,2,3]) == Z([6,2,3])
@@ -400,32 +402,32 @@ def test_fmpz_poly():
400402
assert Z([1,2,3]) ** ztype(1) == Z([1,2,3])
401403
assert Z([1,2,3]) ** ztype(2) == Z([1,4,10,12,9])
402404
assert divmod(Z([11,6,2]), Z([1,2])) == (Z([2,1]), Z([9,1]))
403-
assert raises(lambda: pow(Z([1,2]), 2, 3), NotImplementedError)
405+
assert raises(lambda: pow(Z([1,2]), 2, 3), NotImplementedError) # type: ignore
404406
assert +Z([1,2]) == Z([1,2])
405407
assert -Z([1,2]) == Z([-1,-2])
406-
assert raises(lambda: Z([1,2]) + [], TypeError)
407-
assert raises(lambda: Z([1,2]) - [], TypeError)
408-
assert raises(lambda: Z([1,2]) * [], TypeError)
409-
assert raises(lambda: Z([1,2]) / [], TypeError)
410-
assert raises(lambda: Z([1,2]) // [], TypeError)
411-
assert raises(lambda: Z([1,2]) % [], TypeError)
412-
assert raises(lambda: divmod(Z([1,2]), []), TypeError)
413-
assert raises(lambda: [] + Z([1,2]), TypeError)
414-
assert raises(lambda: [] - Z([1,2]), TypeError)
415-
assert raises(lambda: [] * Z([1,2]), TypeError)
416-
assert raises(lambda: [] / Z([1,2]), TypeError)
417-
assert raises(lambda: [] // Z([1,2]), TypeError)
418-
assert raises(lambda: [] % Z([1,2]), TypeError)
419-
assert raises(lambda: divmod([], Z([1,2])), TypeError)
420-
assert raises(lambda: Z([1,2,3]) ** -1, DomainError)
421-
assert raises(lambda: Z([1,2,3]) ** Z([1,2]), TypeError)
408+
assert raises(lambda: Z([1,2]) + [], TypeError) # type: ignore
409+
assert raises(lambda: Z([1,2]) - [], TypeError) # type: ignore
410+
assert raises(lambda: Z([1,2]) * [], TypeError) # type: ignore
411+
assert raises(lambda: Z([1,2]) / [], TypeError) # type: ignore
412+
assert raises(lambda: Z([1,2]) // [], TypeError) # type: ignore
413+
assert raises(lambda: Z([1,2]) % [], TypeError) # type: ignore
414+
assert raises(lambda: divmod(Z([1,2]), []), TypeError) # type: ignore
415+
assert raises(lambda: [] + Z([1,2]), TypeError) # type: ignore
416+
assert raises(lambda: [] - Z([1,2]), TypeError) # type: ignore
417+
assert raises(lambda: [] * Z([1,2]), TypeError) # type: ignore
418+
assert raises(lambda: [] / Z([1,2]), TypeError) # type: ignore
419+
assert raises(lambda: [] // Z([1,2]), TypeError) # type: ignore
420+
assert raises(lambda: [] % Z([1,2]), TypeError) # type: ignore
421+
assert raises(lambda: divmod([], Z([1,2])), TypeError) # type: ignore
422+
assert raises(lambda: Z([1,2,3]) ** -1, DomainError) # type: ignore
423+
assert raises(lambda: Z([1,2,3]) ** Z([1,2]), TypeError) # type: ignore
422424
assert raises(lambda: Z([1,2]) // Z([]), ZeroDivisionError)
423425
assert raises(lambda: Z([]) // Z([]), ZeroDivisionError)
424426
assert raises(lambda: Z([1,2]) % Z([]), ZeroDivisionError)
425427
assert raises(lambda: divmod(Z([1,2]), Z([])), ZeroDivisionError)
426-
assert raises(lambda: Z([1,2]) < Z([1,2]), TypeError)
427-
assert raises(lambda: Z([1,2]) < [], TypeError)
428-
assert raises(lambda: [] < Z([1,2]), TypeError)
428+
assert raises(lambda: Z([1,2]) < Z([1,2]), TypeError) # type: ignore
429+
assert raises(lambda: Z([1,2]) < [], TypeError) # type: ignore
430+
assert raises(lambda: [] < Z([1,2]), TypeError) # type: ignore
429431
assert Z([]).degree() == -1
430432
assert Z([]).length() == 0
431433
p = Z([1,2])
@@ -463,7 +465,7 @@ def test_fmpz_poly():
463465
assert p(flint.fmpq_poly([2,3],5)) == flint.fmpq_poly([27,24,9],5)
464466
assert p(flint.arb("1.1")).overlaps(flint.arb("13.45"))
465467
assert p(flint.acb("1.1", "1.2")).overlaps(flint.acb("6.25", "18.00"))
466-
assert raises(lambda: p(None), TypeError)
468+
assert raises(lambda: p(None), TypeError) # type: ignore
467469
assert Z([1,2,3]).derivative() == Z([2,6])
468470
assert Z([1,2,-4]).height_bits() == 3
469471
assert Z([1,2,-4]).height_bits(signed=True) == -3
@@ -488,7 +490,7 @@ def test_fmpz_poly_factor():
488490
Z = flint.fmpz_poly
489491
assert Z([1,2]).gcd(Z([3,4])) == 1
490492
assert Z([1,2,1]).gcd(Z([1,1])) == Z([1,1])
491-
assert raises(lambda: Z([1,2,1]).gcd([]), TypeError)
493+
assert raises(lambda: Z([1,2,1]).gcd([]), TypeError) # type: ignore
492494
assert Z([1,2,1]).factor() == (1, [(Z([1,1]), 2)])
493495

494496
def test_fmpz_poly_functions():
@@ -697,7 +699,7 @@ def test_fmpz_series():
697699
assert Z(Z([1]))._equal_repr(Z([1]))
698700
assert Z(Zp([1]))._equal_repr(Z([1]))
699701
assert Z(1)._equal_repr(Z([1]))
700-
assert raises(lambda: Z([1]) < Z([1]), TypeError)
702+
assert raises(lambda: Z([1]) < Z([1]), TypeError) # type: ignore
701703
assert len(Z([1,2])) == 2
702704
assert Z([1,2]).length() == 2
703705
s5 = Z([1,2])
@@ -725,18 +727,18 @@ def set_bad():
725727
assert (Z([1,2]) + Zp([3,4,5]))._equal_repr(Z([4,6,5]))
726728
assert (1 + Z([1,2]))._equal_repr(Z([2,2]))
727729
assert (Zp([1,2]) + Z([3,4,5]))._equal_repr(Z([4,6,5]))
728-
assert raises(lambda: Z([1,2]) + [], TypeError)
729-
assert raises(lambda: [] + Z([1,2]), TypeError)
730+
assert raises(lambda: Z([1,2]) + [], TypeError) # type: ignore
731+
assert raises(lambda: [] + Z([1,2]), TypeError) # type: ignore
730732
assert (Z([1,2]) - Z([3,5]))._equal_repr(Z([-2,-3]))
731733
assert (Z([1,2]) - 1)._equal_repr(Z([0,2]))
732734
assert (1 - Z([1,2]))._equal_repr(Z([0,-2]))
733-
assert raises(lambda: [] - Z([1,2]), TypeError)
734-
assert raises(lambda: Z([1,2]) - [], TypeError)
735+
assert raises(lambda: [] - Z([1,2]), TypeError) # type: ignore
736+
assert raises(lambda: Z([1,2]) - [], TypeError) # type: ignore
735737
assert (Z([1,2]) * Z([1,2]))._equal_repr(Z([1,4,4]))
736738
assert (2 * Z([1,2]))._equal_repr(Z([2,4]))
737739
assert (Z([1,2]) * 2)._equal_repr(Z([2,4]))
738-
assert raises(lambda: [] * Z([1,2]), TypeError)
739-
assert raises(lambda: Z([1,2]) * [], TypeError)
740+
assert raises(lambda: [] * Z([1,2]), TypeError) # type: ignore
741+
assert raises(lambda: Z([1,2]) * [], TypeError) # type: ignore
740742
assert Z([1,2]).valuation() == 0
741743
assert Z([0,2]).valuation() == 1
742744
assert Z([0,0]).valuation() == -1
@@ -751,13 +753,13 @@ def set_bad():
751753
# XXX: This gives leading term not a unit:
752754
# assert Z([2,4]) / 2 == Z([1,2])
753755
assert (Z([1,1]) / -1)._equal_repr(Z([-1,-1]))
754-
assert raises(lambda: Z([1,1]) / [], TypeError)
755-
assert raises(lambda: [] / Z([1,1]), TypeError)
756+
assert raises(lambda: Z([1,1]) / [], TypeError) # type: ignore
757+
assert raises(lambda: [] / Z([1,1]), TypeError) # type: ignore
756758
assert (Z([1,2]) ** 2)._equal_repr(Z([1,4,4]))
757-
assert raises(lambda: pow(Z([1,2]), 3, 5), NotImplementedError)
759+
assert raises(lambda: pow(Z([1,2]), 3, 5), NotImplementedError) # type: ignore
758760
assert (Z([1,2])(Z([0,1,2])))._equal_repr(Z([1,2,4]))
759761
assert raises(lambda: Z([1,2])(Z([1,2])), ValueError)
760-
assert raises(lambda: Z([1,2])([]), TypeError)
762+
assert raises(lambda: Z([1,2])([]), TypeError) # type: ignore
761763
coeffs = [0, 1, -2, 8, -40, 224, -1344, 8448, -54912, 366080]
762764
assert Z([0,1,2]).reversion()._equal_repr(Z(coeffs))
763765
# power series reversion must have valuation 1
@@ -947,9 +949,9 @@ def test_fmpq_poly():
947949
assert Q() != Q([1])
948950
assert Q([1]) == Q([1])
949951
assert Q([1], 2) == Q([flint.fmpq(1,2)])
950-
assert raises(lambda: Q([1,[]]), TypeError)
951-
assert raises(lambda: Q({}), TypeError)
952-
assert raises(lambda: Q([1], []), TypeError)
952+
assert raises(lambda: Q([1,[]]), TypeError) # type: ignore
953+
assert raises(lambda: Q({}), TypeError) # type: ignore
954+
assert raises(lambda: Q([1], []), TypeError) # type: ignore
953955
assert raises(lambda: Q([1], 0), ZeroDivisionError)
954956
assert bool(Q()) is False
955957
assert bool(Q([1])) is True
@@ -959,21 +961,21 @@ def test_fmpq_poly():
959961
assert 3 + Q([1,2]) == Q([4,2])
960962
assert Q([1,2]) - 3 == Q([-2,2])
961963
assert 3 - Q([1,2]) == Q([2,-2])
962-
assert raises(lambda: Q([1]) + [], TypeError)
963-
assert raises(lambda: [] + Q([1]), TypeError)
964-
assert raises(lambda: Q([1]) - [], TypeError)
965-
assert raises(lambda: [] - Q([1]), TypeError)
966-
assert raises(lambda: Q([1]) * [], TypeError)
967-
assert raises(lambda: [] * Q([1]), TypeError)
964+
assert raises(lambda: Q([1]) + [], TypeError) # type: ignore
965+
assert raises(lambda: [] + Q([1]), TypeError) # type: ignore
966+
assert raises(lambda: Q([1]) - [], TypeError) # type: ignore
967+
assert raises(lambda: [] - Q([1]), TypeError) # type: ignore
968+
assert raises(lambda: Q([1]) * [], TypeError) # type: ignore
969+
assert raises(lambda: [] * Q([1]), TypeError) # type: ignore
968970
assert Q([1,2,1]) // Q([1,1]) == Q([1,1])
969971
assert Q([1,2,1]) % Q([1,1]) == 0
970972
assert divmod(Q([1,2,1]), Q([1,1])) == (Q([1,1]), 0)
971-
assert raises(lambda: Q([1,2,1]) // [], TypeError)
972-
assert raises(lambda: [] // Q([1,2,1]), TypeError)
973-
assert raises(lambda: Q([1,2,1]) % [], TypeError)
974-
assert raises(lambda: [] % Q([1,2,1]), TypeError)
975-
assert raises(lambda: divmod(Q([1,2,1]), []), TypeError)
976-
assert raises(lambda: divmod([], Q([1,2,1])), TypeError)
973+
assert raises(lambda: Q([1,2,1]) // [], TypeError) # type: ignore
974+
assert raises(lambda: [] // Q([1,2,1]), TypeError) # type: ignore
975+
assert raises(lambda: Q([1,2,1]) % [], TypeError) # type: ignore
976+
assert raises(lambda: [] % Q([1,2,1]), TypeError) # type: ignore
977+
assert raises(lambda: divmod(Q([1,2,1]), []), TypeError) # type: ignore
978+
assert raises(lambda: divmod([], Q([1,2,1])), TypeError) # type: ignore
977979
assert raises(lambda: Q([1,2,1]) / 0, ZeroDivisionError)
978980
assert raises(lambda: Q([1,2,1]) // 0, ZeroDivisionError)
979981
assert raises(lambda: Q([1,2,1]) % 0, ZeroDivisionError)
@@ -986,7 +988,7 @@ def test_fmpq_poly():
986988
assert Q([1,2]) != Z([3,2])
987989
assert Z([1,2]) != Q([3,2])
988990
assert Q([1,2]) != []
989-
assert raises(lambda: Q([1,2]) < Q([1,2]), TypeError)
991+
assert raises(lambda: Q([1,2]) < Q([1,2]), TypeError) # type: ignore
990992
assert Q([1,2,3])*Q([1,2]) == Q([1,4,7,6])
991993
assert Q([1,2,3])*Z([1,2]) == Q([1,4,7,6])
992994
assert Q([1,2,3]) * 3 == Q([3,6,9])
@@ -997,7 +999,7 @@ def test_fmpq_poly():
997999
assert raises(lambda: Q([1,2]) / Q([2,2]), DomainError)
9981000
assert Q([1,2,3]) / flint.fmpq(2,3) == Q([1,2,3]) * flint.fmpq(3,2)
9991001
assert Q([1,2,3]) ** 2 == Q([1,2,3]) * Q([1,2,3])
1000-
assert raises(lambda: pow(Q([1,2]), 3, 5), NotImplementedError)
1002+
assert raises(lambda: pow(Q([1,2]), 3, 5), NotImplementedError) # type: ignore
10011003
assert Q([1,2,flint.fmpq(1,2)]).coeffs() == [1,2,flint.fmpq(1,2)]
10021004
assert Q().coeffs() == []
10031005
assert Q().degree() == -1
@@ -1028,13 +1030,13 @@ def set_bad():
10281030
assert p(flint.fmpq(2,3)) == flint.fmpq(71,63)
10291031
assert p(Z([1,-1])) == Q([12,-14,5],7)
10301032
assert p(flint.fmpq_poly([2,3],5)) == flint.fmpq_poly([27,24,9],7*5)
1031-
assert raises(lambda: p([]), TypeError)
1033+
assert raises(lambda: p([]), TypeError) # type: ignore
10321034
assert Q([1,2,3]).derivative() == Q([2,6])
10331035
assert Q([1,2,3]).integral() == Q([0,1,1,1])
10341036
assert Q([1,2,1]).gcd(Q([1,1])) == Q([1,1])
10351037
assert Q([1,2,1]).xgcd(Q([1,1])) == (Q([1,1]), 0, 1)
1036-
assert raises(lambda: Q([1,2,1]).gcd([]), TypeError)
1037-
assert raises(lambda: Q([1,2,1]).xgcd([]), TypeError)
1038+
assert raises(lambda: Q([1,2,1]).gcd([]), TypeError) # type: ignore
1039+
assert raises(lambda: Q([1,2,1]).xgcd([]), TypeError) # type: ignore
10381040
assert Q([1,2,1]).factor() == (1, [(Q([1,1]), 2)])
10391041
assert Q.bernoulli_poly(3) == Q([0,1,-3,2],2)
10401042
assert Q.euler_poly(3) == Q([1,0,-6,4],4)
@@ -1204,9 +1206,9 @@ def test_fmpq_series():
12041206
assert Q([1],2)._equal_repr(Q([flint.fmpq(1,2)]))
12051207
assert not Q([1],1,10)._equal_repr(Q([1],1,11))
12061208
assert Q([1,2],3)._equal_repr(Q([flint.fmpq(1,3), flint.fmpq(2,3)]))
1207-
assert raises(lambda: Q([1],[]), TypeError)
1209+
assert raises(lambda: Q([1],[]), TypeError) # type: ignore
12081210
assert raises(lambda: Q([1],0), ZeroDivisionError)
1209-
assert raises(lambda: Q([1]) < Q([1]), TypeError)
1211+
assert raises(lambda: Q([1]) < Q([1]), TypeError) # type: ignore
12101212
assert len(Q([1,2])) == 2
12111213
assert Q([1,2]).length() == 2
12121214
s5 = Q([1,2])
@@ -1236,18 +1238,18 @@ def set_bad():
12361238
assert (Q([1,2]) + Qp([3,4,5]))._equal_repr(Q([4,6,5]))
12371239
assert (1 + Q([1,2]))._equal_repr(Q([2,2]))
12381240
assert (Qp([1,2]) + Q([3,4,5]))._equal_repr(Q([4,6,5]))
1239-
assert raises(lambda: Q([1,2]) + [], TypeError)
1240-
assert raises(lambda: [] + Q([1,2]), TypeError)
1241+
assert raises(lambda: Q([1,2]) + [], TypeError) # type: ignore
1242+
assert raises(lambda: [] + Q([1,2]), TypeError) # type: ignore
12411243
assert (Q([1,2]) - Q([3,5]))._equal_repr(Q([-2,-3]))
12421244
assert (Q([1,2]) - 1)._equal_repr(Q([0,2]))
12431245
assert (1 - Q([1,2]))._equal_repr(Q([0,-2]))
1244-
assert raises(lambda: [] - Q([1,2]), TypeError)
1245-
assert raises(lambda: Q([1,2]) - [], TypeError)
1246+
assert raises(lambda: [] - Q([1,2]), TypeError) # type: ignore
1247+
assert raises(lambda: Q([1,2]) - [], TypeError) # type: ignore
12461248
assert (Q([1,2]) * Q([1,2]))._equal_repr(Q([1,4,4]))
12471249
assert (2 * Q([1,2]))._equal_repr(Q([2,4]))
12481250
assert (Q([1,2]) * 2)._equal_repr(Q([2,4]))
1249-
assert raises(lambda: [] * Q([1,2]), TypeError)
1250-
assert raises(lambda: Q([1,2]) * [], TypeError)
1251+
assert raises(lambda: [] * Q([1,2]), TypeError) # type: ignore
1252+
assert raises(lambda: Q([1,2]) * [], TypeError) # type: ignore
12511253
assert Q([1,2]).valuation() == 0
12521254
assert Q([0,2]).valuation() == 1
12531255
assert Q([0,0]).valuation() == -1
@@ -1261,8 +1263,8 @@ def set_bad():
12611263
assert (Q([2,4]) / 2)._equal_repr(Q([1,2]))
12621264
assert (Q([1,4]) / 2)._equal_repr(Q([1,4],2))
12631265
assert (Q([1,1]) / -1)._equal_repr(Q([-1,-1]))
1264-
assert raises(lambda: Q([1,1]) / [], TypeError)
1265-
assert raises(lambda: [] / Q([1,1]), TypeError)
1266+
assert raises(lambda: Q([1,1]) / [], TypeError) # type: ignore
1267+
assert raises(lambda: [] / Q([1,1]), TypeError) # type: ignore
12661268
q = Q([1,2],3)
12671269
assert (q ** 0)._equal_repr(Q([1]))
12681270
assert (q ** 1)._equal_repr(q)
@@ -1271,10 +1273,10 @@ def set_bad():
12711273
assert (q ** 4)._equal_repr(Q([1, 8, 24, 32, 16], 81))
12721274
assert (Q([1,2]) ** 2)._equal_repr(Q([1,4,4]))
12731275
assert (Q([1,2]) ** 2)._equal_repr(Q([1,4,4]))
1274-
assert raises(lambda: pow(Q([1,2]), 3, 5), NotImplementedError)
1276+
assert raises(lambda: pow(Q([1,2]), 3, 5), NotImplementedError) # type: ignore
12751277
assert (Q([1,2])(Q([0,1,2])))._equal_repr(Q([1,2,4]))
12761278
assert raises(lambda: Q([1,2])(Q([1,2])), ValueError)
1277-
assert raises(lambda: Q([1,2])([]), TypeError)
1279+
assert raises(lambda: Q([1,2])([]), TypeError) # type: ignore
12781280
coeffs = [0, 1, -2, 8, -40, 224, -1344, 8448, -54912, 366080]
12791281
assert Q([0,1,2]).reversion()._equal_repr(Q(coeffs))
12801282
# power series reversion must have valuation 1

0 commit comments

Comments
 (0)