Skip to content

Commit f73c88b

Browse files
author
Release Manager
committed
gh-35280: support all= keyword argument in AlgebraicClosureFiniteFieldElement.sqrt() Library code (for example, in `EllipticCurve_generic.lift_x()`) sometimes passes this argument, which currently makes things fail. URL: #35280 Reported by: Lorenz Panny Reviewer(s): roed314
2 parents 1d591ea + 3394576 commit f73c88b

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/sage/rings/algebraic_closure_finite_field.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -339,25 +339,34 @@ def is_square(self):
339339
"""
340340
return True
341341

342-
def sqrt(self):
342+
def sqrt(self, all=False):
343343
"""
344344
Return a square root of ``self``.
345345
346+
If the optional keyword argument ``all`` is set to ``True``,
347+
return a list of all square roots of ``self`` instead.
348+
346349
EXAMPLES::
347350
348351
sage: F = GF(3).algebraic_closure()
349352
sage: F.gen(2).sqrt()
350353
z4^3 + z4 + 1
351-
354+
sage: F.gen(2).sqrt(all=True)
355+
[z4^3 + z4 + 1, 2*z4^3 + 2*z4 + 2]
356+
sage: (F.gen(2)^2).sqrt()
357+
z2
358+
sage: (F.gen(2)^2).sqrt(all=True)
359+
[z2, 2*z2]
352360
"""
353361
F = self.parent()
354362
x = self._value
355-
if x.is_square():
356-
return self.__class__(F, x.sqrt(extend=False))
357-
else:
363+
if not x.is_square():
358364
l = self._level
359365
x = F.inclusion(l, 2*l)(x)
360-
return self.__class__(F, x.sqrt(extend=False))
366+
sqrt = x.sqrt(extend=False, all=all)
367+
if all:
368+
return [self.__class__(F, y) for y in sqrt]
369+
return self.__class__(F, sqrt)
361370

362371
def nth_root(self, n):
363372
"""

0 commit comments

Comments
 (0)