diff --git a/src/sage/ext_data/magma/sage/basic.m b/src/sage/ext_data/magma/sage/basic.m index 027b87e6287..24ddb9bb2d9 100644 --- a/src/sage/ext_data/magma/sage/basic.m +++ b/src/sage/ext_data/magma/sage/basic.m @@ -125,7 +125,7 @@ intrinsic Sage(X::RngIntRes) -> MonStgElt, BoolElt return Sprintf("Zmod(%o)", Characteristic(X)), false; end intrinsic; -/* Approximate fields */ +/* Approximate real and complex fields */ intrinsic Sage(X::FldRe) -> MonStgElt, BoolElt {} @@ -147,6 +147,34 @@ intrinsic Sage(X::FldComElt) -> MonStgElt, BoolElt return Sprintf("%o([%o, %o])", Sage(Parent(X)), Sage(Real(X)), Sage(Imaginary(X))), true; end intrinsic; +/* p-adic rings and fields */ + +intrinsic Sage(X::RngPad) -> MonStgElt, BoolElt +{p-adic rings, either free precision model or exact model} + prec := Precision(X); + if Type(prec) eq Infty then + return Sprintf("Zp(%o, %o, 'relaxed')", Sage(Prime(X)), Sage(prec), false; + else + return Sprintf("Zp(%o, %o, 'capped-abs')", Sage(Prime(X)), Sage(prec)), false; + end if; +end intrinsic; + +intrinsic Sage(X::FldPad) -> MonStgElt, BoolElt +{p-adic fields, either free precision model or exact model} + prec := Precision(X); + if Type(prec) eq Infty then + return Sprintf("Qp(%o, %o, 'relaxed')", Sage(Prime(X)), Sage(prec)), false; + else + return Sprintf("Qp(%o, %o, 'capped-rel')", Sage(Prime(X)), Sage(prec)), false; + end if; +end intrinsic; + +intrinsic Sage(X::RngPadRes) -> MonStgElt, BoolElt +{fixed precision model} + return Sprintf("Zp(%o, %o, 'fixed-mod')", Sage(Prime(X)), Sage(Precision(X))), false; +end intrinsic; + + /* Polynomials */ intrinsic SageNamesHelper(X::.) -> MonStgElt diff --git a/src/sage/rings/padics/padic_base_leaves.py b/src/sage/rings/padics/padic_base_leaves.py index 4eb9e584de1..e0a7d4fceb3 100644 --- a/src/sage/rings/padics/padic_base_leaves.py +++ b/src/sage/rings/padics/padic_base_leaves.py @@ -404,6 +404,19 @@ def _convert_map_from_(self, R): from sage.rings.padics.padic_generic import ResidueLiftingMap return ResidueLiftingMap._create_(R, self) + def _magma_init_(self, magma): + """ + Conversion to magma. + + EXAMPLES:: + + sage: # optional - magma + sage: F = Qp(5,7,"capped-abs") + sage: magma(F) + 5-adic field mod 5^7 + """ + return f"pAdicRing({self.prime()},{self.precision_cap()})" + class pAdicRingFloatingPoint(pAdicRingBaseGeneric, pAdicFloatingPointRingGeneric): r""" @@ -607,6 +620,19 @@ def _convert_map_from_(self, R): from sage.rings.padics.padic_generic import ResidueLiftingMap return ResidueLiftingMap._create_(R, self) + def _magma_init_(self, magma): + """ + Conversion to magma. + + EXAMPLES:: + + sage: # optional - magma + sage: F = Zp(5,7,"fixed-mod") + sage: magma(F) + Quotient of the 5-adic ring modulo the ideal generated by 5^7 + """ + return f"pAdicQuotientRing({self.prime()},{self.precision_cap()})" + class pAdicFieldCappedRelative(pAdicFieldBaseGeneric, pAdicCappedRelativeFieldGeneric): r""" @@ -719,6 +745,19 @@ def _convert_map_from_(self, R): from sage.rings.padics.padic_generic import ResidueLiftingMap return ResidueLiftingMap._create_(R, self) + def _magma_init_(self, magma): + """ + Conversion to magma. + + EXAMPLES:: + + sage: # optional - magma + sage: F = Qp(5,7,"capped-rel") + sage: magma(F) + 5-adic field mod 5^7 + """ + return f"pAdicField({self.prime()},{self.precision_cap()})" + def random_element(self, algorithm='default'): r""" Return a random element of ``self``, optionally using the ``algorithm``