Skip to content

Commit c9d1dc9

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

File tree

7 files changed

+428
-95
lines changed

7 files changed

+428
-95
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: 68 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -379,10 +379,10 @@ def test_fmpz_poly():
379379
assert Z([1]) == Z([1])
380380
assert Z([1]) == Z([flint.fmpz(1)])
381381
assert Z(Z([1,2])) == Z([1,2])
382-
assert raises(lambda: Z([1,2,[]]), TypeError)
383-
assert raises(lambda: Z({}), TypeError)
382+
assert raises(lambda: Z([1,2,[]]), TypeError) # type: ignore
383+
assert raises(lambda: Z({}), TypeError) # type: ignore
384384
# XXX: This should probably be made to work:
385-
assert raises(lambda: Z((1,2,3)), TypeError)
385+
assert raises(lambda: Z((1,2,3)), TypeError) # type: ignore
386386
for ztype in [int, flint.fmpz]:
387387
assert Z([1,2,3]) + ztype(5) == Z([6,2,3])
388388
assert ztype(5) + Z([1,2,3]) == Z([6,2,3])
@@ -400,32 +400,32 @@ def test_fmpz_poly():
400400
assert Z([1,2,3]) ** ztype(1) == Z([1,2,3])
401401
assert Z([1,2,3]) ** ztype(2) == Z([1,4,10,12,9])
402402
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)
403+
assert raises(lambda: pow(Z([1,2]), 2, 3), NotImplementedError) # type: ignore
404404
assert +Z([1,2]) == Z([1,2])
405405
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)
406+
assert raises(lambda: Z([1,2]) + [], TypeError) # type: ignore
407+
assert raises(lambda: Z([1,2]) - [], TypeError) # type: ignore
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: divmod(Z([1,2]), []), TypeError) # type: ignore
413+
assert raises(lambda: [] + Z([1,2]), TypeError) # type: ignore
414+
assert raises(lambda: [] - 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: divmod([], Z([1,2])), TypeError) # type: ignore
420+
assert raises(lambda: Z([1,2,3]) ** -1, DomainError) # type: ignore
421+
assert raises(lambda: Z([1,2,3]) ** Z([1,2]), TypeError) # type: ignore
422422
assert raises(lambda: Z([1,2]) // Z([]), ZeroDivisionError)
423423
assert raises(lambda: Z([]) // Z([]), ZeroDivisionError)
424424
assert raises(lambda: Z([1,2]) % Z([]), ZeroDivisionError)
425425
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)
426+
assert raises(lambda: Z([1,2]) < Z([1,2]), TypeError) # type: ignore
427+
assert raises(lambda: Z([1,2]) < [], TypeError) # type: ignore
428+
assert raises(lambda: [] < Z([1,2]), TypeError) # type: ignore
429429
assert Z([]).degree() == -1
430430
assert Z([]).length() == 0
431431
p = Z([1,2])
@@ -463,7 +463,7 @@ def test_fmpz_poly():
463463
assert p(flint.fmpq_poly([2,3],5)) == flint.fmpq_poly([27,24,9],5)
464464
assert p(flint.arb("1.1")).overlaps(flint.arb("13.45"))
465465
assert p(flint.acb("1.1", "1.2")).overlaps(flint.acb("6.25", "18.00"))
466-
assert raises(lambda: p(None), TypeError)
466+
assert raises(lambda: p(None), TypeError) # type: ignore
467467
assert Z([1,2,3]).derivative() == Z([2,6])
468468
assert Z([1,2,-4]).height_bits() == 3
469469
assert Z([1,2,-4]).height_bits(signed=True) == -3
@@ -488,7 +488,7 @@ def test_fmpz_poly_factor():
488488
Z = flint.fmpz_poly
489489
assert Z([1,2]).gcd(Z([3,4])) == 1
490490
assert Z([1,2,1]).gcd(Z([1,1])) == Z([1,1])
491-
assert raises(lambda: Z([1,2,1]).gcd([]), TypeError)
491+
assert raises(lambda: Z([1,2,1]).gcd([]), TypeError) # type: ignore
492492
assert Z([1,2,1]).factor() == (1, [(Z([1,1]), 2)])
493493

494494
def test_fmpz_poly_functions():
@@ -697,7 +697,7 @@ def test_fmpz_series():
697697
assert Z(Z([1]))._equal_repr(Z([1]))
698698
assert Z(Zp([1]))._equal_repr(Z([1]))
699699
assert Z(1)._equal_repr(Z([1]))
700-
assert raises(lambda: Z([1]) < Z([1]), TypeError)
700+
assert raises(lambda: Z([1]) < Z([1]), TypeError) # type: ignore
701701
assert len(Z([1,2])) == 2
702702
assert Z([1,2]).length() == 2
703703
s5 = Z([1,2])
@@ -725,18 +725,18 @@ def set_bad():
725725
assert (Z([1,2]) + Zp([3,4,5]))._equal_repr(Z([4,6,5]))
726726
assert (1 + Z([1,2]))._equal_repr(Z([2,2]))
727727
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)
728+
assert raises(lambda: Z([1,2]) + [], TypeError) # type: ignore
729+
assert raises(lambda: [] + Z([1,2]), TypeError) # type: ignore
730730
assert (Z([1,2]) - Z([3,5]))._equal_repr(Z([-2,-3]))
731731
assert (Z([1,2]) - 1)._equal_repr(Z([0,2]))
732732
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)
733+
assert raises(lambda: [] - Z([1,2]), TypeError) # type: ignore
734+
assert raises(lambda: Z([1,2]) - [], TypeError) # type: ignore
735735
assert (Z([1,2]) * Z([1,2]))._equal_repr(Z([1,4,4]))
736736
assert (2 * Z([1,2]))._equal_repr(Z([2,4]))
737737
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)
738+
assert raises(lambda: [] * Z([1,2]), TypeError) # type: ignore
739+
assert raises(lambda: Z([1,2]) * [], TypeError) # type: ignore
740740
assert Z([1,2]).valuation() == 0
741741
assert Z([0,2]).valuation() == 1
742742
assert Z([0,0]).valuation() == -1
@@ -751,13 +751,13 @@ def set_bad():
751751
# XXX: This gives leading term not a unit:
752752
# assert Z([2,4]) / 2 == Z([1,2])
753753
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)
754+
assert raises(lambda: Z([1,1]) / [], TypeError) # type: ignore
755+
assert raises(lambda: [] / Z([1,1]), TypeError) # type: ignore
756756
assert (Z([1,2]) ** 2)._equal_repr(Z([1,4,4]))
757-
assert raises(lambda: pow(Z([1,2]), 3, 5), NotImplementedError)
757+
assert raises(lambda: pow(Z([1,2]), 3, 5), NotImplementedError) # type: ignore
758758
assert (Z([1,2])(Z([0,1,2])))._equal_repr(Z([1,2,4]))
759759
assert raises(lambda: Z([1,2])(Z([1,2])), ValueError)
760-
assert raises(lambda: Z([1,2])([]), TypeError)
760+
assert raises(lambda: Z([1,2])([]), TypeError) # type: ignore
761761
coeffs = [0, 1, -2, 8, -40, 224, -1344, 8448, -54912, 366080]
762762
assert Z([0,1,2]).reversion()._equal_repr(Z(coeffs))
763763
# power series reversion must have valuation 1
@@ -947,9 +947,9 @@ def test_fmpq_poly():
947947
assert Q() != Q([1])
948948
assert Q([1]) == Q([1])
949949
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)
950+
assert raises(lambda: Q([1,[]]), TypeError) # type: ignore
951+
assert raises(lambda: Q({}), TypeError) # type: ignore
952+
assert raises(lambda: Q([1], []), TypeError) # type: ignore
953953
assert raises(lambda: Q([1], 0), ZeroDivisionError)
954954
assert bool(Q()) is False
955955
assert bool(Q([1])) is True
@@ -959,21 +959,21 @@ def test_fmpq_poly():
959959
assert 3 + Q([1,2]) == Q([4,2])
960960
assert Q([1,2]) - 3 == Q([-2,2])
961961
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)
962+
assert raises(lambda: Q([1]) + [], TypeError) # type: ignore
963+
assert raises(lambda: [] + Q([1]), TypeError) # type: ignore
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
968968
assert Q([1,2,1]) // Q([1,1]) == Q([1,1])
969969
assert Q([1,2,1]) % Q([1,1]) == 0
970970
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)
971+
assert raises(lambda: Q([1,2,1]) // [], TypeError) # type: ignore
972+
assert raises(lambda: [] // Q([1,2,1]), TypeError) # type: ignore
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: divmod(Q([1,2,1]), []), TypeError) # type: ignore
976+
assert raises(lambda: divmod([], Q([1,2,1])), TypeError) # type: ignore
977977
assert raises(lambda: Q([1,2,1]) / 0, ZeroDivisionError)
978978
assert raises(lambda: Q([1,2,1]) // 0, ZeroDivisionError)
979979
assert raises(lambda: Q([1,2,1]) % 0, ZeroDivisionError)
@@ -986,7 +986,7 @@ def test_fmpq_poly():
986986
assert Q([1,2]) != Z([3,2])
987987
assert Z([1,2]) != Q([3,2])
988988
assert Q([1,2]) != []
989-
assert raises(lambda: Q([1,2]) < Q([1,2]), TypeError)
989+
assert raises(lambda: Q([1,2]) < Q([1,2]), TypeError) # type: ignore
990990
assert Q([1,2,3])*Q([1,2]) == Q([1,4,7,6])
991991
assert Q([1,2,3])*Z([1,2]) == Q([1,4,7,6])
992992
assert Q([1,2,3]) * 3 == Q([3,6,9])
@@ -997,7 +997,7 @@ def test_fmpq_poly():
997997
assert raises(lambda: Q([1,2]) / Q([2,2]), DomainError)
998998
assert Q([1,2,3]) / flint.fmpq(2,3) == Q([1,2,3]) * flint.fmpq(3,2)
999999
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)
1000+
assert raises(lambda: pow(Q([1,2]), 3, 5), NotImplementedError) # type: ignore
10011001
assert Q([1,2,flint.fmpq(1,2)]).coeffs() == [1,2,flint.fmpq(1,2)]
10021002
assert Q().coeffs() == []
10031003
assert Q().degree() == -1
@@ -1028,13 +1028,13 @@ def set_bad():
10281028
assert p(flint.fmpq(2,3)) == flint.fmpq(71,63)
10291029
assert p(Z([1,-1])) == Q([12,-14,5],7)
10301030
assert p(flint.fmpq_poly([2,3],5)) == flint.fmpq_poly([27,24,9],7*5)
1031-
assert raises(lambda: p([]), TypeError)
1031+
assert raises(lambda: p([]), TypeError) # type: ignore
10321032
assert Q([1,2,3]).derivative() == Q([2,6])
10331033
assert Q([1,2,3]).integral() == Q([0,1,1,1])
10341034
assert Q([1,2,1]).gcd(Q([1,1])) == Q([1,1])
10351035
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)
1036+
assert raises(lambda: Q([1,2,1]).gcd([]), TypeError) # type: ignore
1037+
assert raises(lambda: Q([1,2,1]).xgcd([]), TypeError) # type: ignore
10381038
assert Q([1,2,1]).factor() == (1, [(Q([1,1]), 2)])
10391039
assert Q.bernoulli_poly(3) == Q([0,1,-3,2],2)
10401040
assert Q.euler_poly(3) == Q([1,0,-6,4],4)
@@ -1204,9 +1204,9 @@ def test_fmpq_series():
12041204
assert Q([1],2)._equal_repr(Q([flint.fmpq(1,2)]))
12051205
assert not Q([1],1,10)._equal_repr(Q([1],1,11))
12061206
assert Q([1,2],3)._equal_repr(Q([flint.fmpq(1,3), flint.fmpq(2,3)]))
1207-
assert raises(lambda: Q([1],[]), TypeError)
1207+
assert raises(lambda: Q([1],[]), TypeError) # type: ignore
12081208
assert raises(lambda: Q([1],0), ZeroDivisionError)
1209-
assert raises(lambda: Q([1]) < Q([1]), TypeError)
1209+
assert raises(lambda: Q([1]) < Q([1]), TypeError) # type: ignore
12101210
assert len(Q([1,2])) == 2
12111211
assert Q([1,2]).length() == 2
12121212
s5 = Q([1,2])
@@ -1236,18 +1236,18 @@ def set_bad():
12361236
assert (Q([1,2]) + Qp([3,4,5]))._equal_repr(Q([4,6,5]))
12371237
assert (1 + Q([1,2]))._equal_repr(Q([2,2]))
12381238
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)
1239+
assert raises(lambda: Q([1,2]) + [], TypeError) # type: ignore
1240+
assert raises(lambda: [] + Q([1,2]), TypeError) # type: ignore
12411241
assert (Q([1,2]) - Q([3,5]))._equal_repr(Q([-2,-3]))
12421242
assert (Q([1,2]) - 1)._equal_repr(Q([0,2]))
12431243
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)
1244+
assert raises(lambda: [] - Q([1,2]), TypeError) # type: ignore
1245+
assert raises(lambda: Q([1,2]) - [], TypeError) # type: ignore
12461246
assert (Q([1,2]) * Q([1,2]))._equal_repr(Q([1,4,4]))
12471247
assert (2 * Q([1,2]))._equal_repr(Q([2,4]))
12481248
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)
1249+
assert raises(lambda: [] * Q([1,2]), TypeError) # type: ignore
1250+
assert raises(lambda: Q([1,2]) * [], TypeError) # type: ignore
12511251
assert Q([1,2]).valuation() == 0
12521252
assert Q([0,2]).valuation() == 1
12531253
assert Q([0,0]).valuation() == -1
@@ -1261,8 +1261,8 @@ def set_bad():
12611261
assert (Q([2,4]) / 2)._equal_repr(Q([1,2]))
12621262
assert (Q([1,4]) / 2)._equal_repr(Q([1,4],2))
12631263
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)
1264+
assert raises(lambda: Q([1,1]) / [], TypeError) # type: ignore
1265+
assert raises(lambda: [] / Q([1,1]), TypeError) # type: ignore
12661266
q = Q([1,2],3)
12671267
assert (q ** 0)._equal_repr(Q([1]))
12681268
assert (q ** 1)._equal_repr(q)
@@ -1271,10 +1271,10 @@ def set_bad():
12711271
assert (q ** 4)._equal_repr(Q([1, 8, 24, 32, 16], 81))
12721272
assert (Q([1,2]) ** 2)._equal_repr(Q([1,4,4]))
12731273
assert (Q([1,2]) ** 2)._equal_repr(Q([1,4,4]))
1274-
assert raises(lambda: pow(Q([1,2]), 3, 5), NotImplementedError)
1274+
assert raises(lambda: pow(Q([1,2]), 3, 5), NotImplementedError) # type: ignore
12751275
assert (Q([1,2])(Q([0,1,2])))._equal_repr(Q([1,2,4]))
12761276
assert raises(lambda: Q([1,2])(Q([1,2])), ValueError)
1277-
assert raises(lambda: Q([1,2])([]), TypeError)
1277+
assert raises(lambda: Q([1,2])([]), TypeError) # type: ignore
12781278
coeffs = [0, 1, -2, 8, -40, 224, -1344, 8448, -54912, 366080]
12791279
assert Q([0,1,2]).reversion()._equal_repr(Q(coeffs))
12801280
# power series reversion must have valuation 1

src/flint/types/fmpq_poly.pyi

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
from typing import overload, Any
2+
from flint.flint_base.flint_base import flint_poly
3+
from flint.types.fmpz import fmpz, ifmpz
4+
from flint.types.fmpq import fmpq, ifmpq
5+
from flint.types.fmpz_poly import fmpz_poly, ifmpz_poly
6+
7+
8+
ifmpq_poly = fmpq_poly | ifmpq | ifmpz_poly
9+
10+
11+
class fmpq_poly(flint_poly[fmpq]):
12+
"""
13+
The *fmpq_poly* type represents dense univariate polynomials
14+
over the rational numbers. For efficiency reasons, an *fmpq_poly* is
15+
structurally an integer polynomial with a single common denominator.
16+
"""
17+
18+
@overload
19+
def __init__(self): ...
20+
@overload
21+
def __init__(self, other: fmpq_poly | fmpz_poly | list[ifmpq] | ifmpq, /): ...
22+
@overload
23+
def __init__(self, other: fmpq_poly | fmpz_poly | list[ifmpq] | ifmpq,
24+
den: ifmpz, /): ...
25+
26+
def __len__(self) -> int: ...
27+
def length(self) -> int: ...
28+
def degree(self) -> int: ...
29+
30+
def numer(self) -> fmpz_poly: ...
31+
def denom(self) -> fmpz: ...
32+
33+
@property
34+
def p(self) -> fmpz_poly: ...
35+
@property
36+
def q(self) -> fmpz: ...
37+
38+
def __getitem__(self, i: int, /) -> fmpq: ...
39+
def __setitem__(self, i: int, x: ifmpq, /) -> None: ...
40+
41+
def repr(self) -> str: ...
42+
43+
def __bool__(self) -> bool: ...
44+
def is_zero(self) -> bool: ...
45+
def is_one(self) -> bool: ...
46+
def is_constant(self) -> bool: ...
47+
48+
def leading_coefficient(self) -> fmpq: ...
49+
50+
@overload
51+
def __call__(self, other: ifmpq, /) -> fmpq: ...
52+
@overload
53+
def __call__(self, other: fmpq_poly | fmpz_poly, /) -> fmpq_poly: ...
54+
55+
def derivative(self) -> fmpq_poly: ...
56+
def integral(self) -> fmpq_poly: ...
57+
58+
def __pos__(self) -> fmpq_poly: ...
59+
def __neg__(self) -> fmpq_poly: ...
60+
def __add__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
61+
def __radd__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
62+
def __sub__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
63+
def __rsub__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
64+
def __mul__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
65+
def __rmul__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
66+
def __floordiv__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
67+
def __rfloordiv__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
68+
def __mod__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
69+
def __rmod__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
70+
def __truediv__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
71+
def __rtruediv__(self, other: ifmpq_poly, /) -> fmpq_poly: ...
72+
def __divmod__(self, other: ifmpq_poly, /) -> tuple[fmpq_poly, fmpq_poly]: ...
73+
def __rdivmod__(self, other: ifmpq_poly, /) -> tuple[fmpq_poly, fmpq_poly]: ...
74+
def __pow__(self, exp: int | ifmpz, /) -> fmpq_poly: ...
75+
76+
def gcd(self, other: ifmpq_poly, /) -> fmpq_poly: ...
77+
def resultant(self, other: ifmpq_poly, /) -> fmpq: ...
78+
def xgcd(self, other: ifmpq_poly, /) -> tuple[fmpq_poly, fmpq_poly, fmpq_poly]: ...
79+
80+
def factor(self, *, monic: bool = False) -> tuple[fmpq, list[tuple[fmpq_poly, int]]]: ...
81+
def factor_squarefree(self) -> tuple[fmpq, list[tuple[fmpq_poly, int]]]: ...
82+
83+
def sqrt(self) -> fmpq_poly: ...
84+
85+
def deflation(self) -> tuple[fmpq_poly, int]: ...
86+
# XXX: acb
87+
def complex_roots(self, **kwargs) -> list[Any]: ...
88+
89+
@staticmethod
90+
def bernoulli_poly(n: int, /) -> fmpq_poly: ...
91+
@staticmethod
92+
def euler_poly(n: int, /) -> fmpq_poly: ...
93+
@staticmethod
94+
def legendre_p(n: int, /) -> fmpq_poly: ...

0 commit comments

Comments
 (0)