Skip to content

Commit 784ff00

Browse files
author
Release Manager
committed
gh-39449: Magma padics add back and forth conversion of simple padic Rings beween magma and sage. This is only for parents, not for elements. The correspondance of implementations is not clear. Does magma use relative or absolute capped precision ? ### 📝 Checklist - [x] The title is concise and informative. - [x] The description explains in detail what this PR is about. - [ ] I have linked a relevant issue or discussion. - [x] I have created tests covering the changes. - [x] I have updated the documentation and checked the documentation preview. URL: #39449 Reported by: Frédéric Chapoton Reviewer(s): Xavier Caruso
2 parents 897e722 + 7ada96b commit 784ff00

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

src/sage/ext_data/magma/sage/basic.m

+29-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ intrinsic Sage(X::RngIntRes) -> MonStgElt, BoolElt
125125
return Sprintf("Zmod(%o)", Characteristic(X)), false;
126126
end intrinsic;
127127

128-
/* Approximate fields */
128+
/* Approximate real and complex fields */
129129

130130
intrinsic Sage(X::FldRe) -> MonStgElt, BoolElt
131131
{}
@@ -147,6 +147,34 @@ intrinsic Sage(X::FldComElt) -> MonStgElt, BoolElt
147147
return Sprintf("%o([%o, %o])", Sage(Parent(X)), Sage(Real(X)), Sage(Imaginary(X))), true;
148148
end intrinsic;
149149

150+
/* p-adic rings and fields */
151+
152+
intrinsic Sage(X::RngPad) -> MonStgElt, BoolElt
153+
{p-adic rings, either free precision model or exact model}
154+
prec := Precision(X);
155+
if Type(prec) eq Infty then
156+
return Sprintf("Zp(%o, %o, 'relaxed')", Sage(Prime(X)), Sage(prec), false;
157+
else
158+
return Sprintf("Zp(%o, %o, 'capped-abs')", Sage(Prime(X)), Sage(prec)), false;
159+
end if;
160+
end intrinsic;
161+
162+
intrinsic Sage(X::FldPad) -> MonStgElt, BoolElt
163+
{p-adic fields, either free precision model or exact model}
164+
prec := Precision(X);
165+
if Type(prec) eq Infty then
166+
return Sprintf("Qp(%o, %o, 'relaxed')", Sage(Prime(X)), Sage(prec)), false;
167+
else
168+
return Sprintf("Qp(%o, %o, 'capped-rel')", Sage(Prime(X)), Sage(prec)), false;
169+
end if;
170+
end intrinsic;
171+
172+
intrinsic Sage(X::RngPadRes) -> MonStgElt, BoolElt
173+
{fixed precision model}
174+
return Sprintf("Zp(%o, %o, 'fixed-mod')", Sage(Prime(X)), Sage(Precision(X))), false;
175+
end intrinsic;
176+
177+
150178
/* Polynomials */
151179

152180
intrinsic SageNamesHelper(X::.) -> MonStgElt

src/sage/rings/padics/padic_base_leaves.py

+39
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,19 @@ def _convert_map_from_(self, R):
404404
from sage.rings.padics.padic_generic import ResidueLiftingMap
405405
return ResidueLiftingMap._create_(R, self)
406406

407+
def _magma_init_(self, magma):
408+
"""
409+
Conversion to magma.
410+
411+
EXAMPLES::
412+
413+
sage: # optional - magma
414+
sage: F = Qp(5,7,"capped-abs")
415+
sage: magma(F)
416+
5-adic field mod 5^7
417+
"""
418+
return f"pAdicRing({self.prime()},{self.precision_cap()})"
419+
407420

408421
class pAdicRingFloatingPoint(pAdicRingBaseGeneric, pAdicFloatingPointRingGeneric):
409422
r"""
@@ -607,6 +620,19 @@ def _convert_map_from_(self, R):
607620
from sage.rings.padics.padic_generic import ResidueLiftingMap
608621
return ResidueLiftingMap._create_(R, self)
609622

623+
def _magma_init_(self, magma):
624+
"""
625+
Conversion to magma.
626+
627+
EXAMPLES::
628+
629+
sage: # optional - magma
630+
sage: F = Zp(5,7,"fixed-mod")
631+
sage: magma(F)
632+
Quotient of the 5-adic ring modulo the ideal generated by 5^7
633+
"""
634+
return f"pAdicQuotientRing({self.prime()},{self.precision_cap()})"
635+
610636

611637
class pAdicFieldCappedRelative(pAdicFieldBaseGeneric, pAdicCappedRelativeFieldGeneric):
612638
r"""
@@ -719,6 +745,19 @@ def _convert_map_from_(self, R):
719745
from sage.rings.padics.padic_generic import ResidueLiftingMap
720746
return ResidueLiftingMap._create_(R, self)
721747

748+
def _magma_init_(self, magma):
749+
"""
750+
Conversion to magma.
751+
752+
EXAMPLES::
753+
754+
sage: # optional - magma
755+
sage: F = Qp(5,7,"capped-rel")
756+
sage: magma(F)
757+
5-adic field mod 5^7
758+
"""
759+
return f"pAdicField({self.prime()},{self.precision_cap()})"
760+
722761
def random_element(self, algorithm='default'):
723762
r"""
724763
Return a random element of ``self``, optionally using the ``algorithm``

0 commit comments

Comments
 (0)