Skip to content
This repository was archived by the owner on Jan 30, 2023. It is now read-only.

Commit 76ba3fe

Browse files
committed
fix
1 parent 77c4a98 commit 76ba3fe

File tree

2 files changed

+89
-91
lines changed

2 files changed

+89
-91
lines changed

src/sage/rings/number_field/number_field.py

+29-91
Original file line numberDiff line numberDiff line change
@@ -9292,107 +9292,45 @@ def minkowski_embedding(self, B=None, prec=None):
92929292

92939293
return sage.matrix.all.matrix(d)
92949294

9295-
def logarithmic_embedding(self, prec=53):
9296-
"""
9297-
Return the morphism of ``self`` under the logarithmic embedding
9298-
in the category Set.
9299-
9300-
The logarithmic embedding is defined as a map from the number field ``self`` to `\RR^n`.
9301-
9302-
It is defined under Definition 4.9.6 in [Cohen1993]_.
9303-
9304-
INPUT:
9305-
9306-
- ``prec`` -- desired floating point precision.
9307-
9308-
OUTPUT:
9309-
9310-
- a tuple of real numbers.
9311-
9312-
EXAMPLES::
9313-
9314-
sage: CF.<a> = CyclotomicField(97)
9315-
sage: hom = Hom(CF, EuclideanSpace(1), Sets())
9316-
sage: f = hom(logarithmic_embedding(CF(0)))
9317-
sage: f(0)
9318-
(-1)
9319-
sage: f(7)
9320-
(1.94591014905531)
9321-
9322-
::
9323-
9324-
sage: F.<a> = NumberField(x^3 + 5)
9325-
sage: K.<b> = F.extension(x^2 + 2)
9326-
sage: hom = Hom(K, EuclideanSpace(2), Sets())
9327-
sage: f = hom(logarithmic_embedding(K(0)))
9328-
sage: f(0)
9329-
(-1, -1)
9330-
sage: f(7)
9331-
(1.94591014905531, 3.89182029811063)
9332-
"""
9333-
log_map = self._logarithmic_embedding_helper(prec)
9334-
log_hom = Hom(self.base_ring(), EuclideanSpace(len(log_map(0))), Sets())
9335-
return log_hom(K(0)._logarithmic_embedding_helper)
9336-
9337-
def _logarithmic_embedding_helper(self, prec=53):
9338-
"""
9339-
Return the image of ``self`` under the logarithmic embedding.
9340-
9341-
The logarithmic embedding is defined as a map from the number field ``self`` to `\RR^n`.
9342-
9343-
It is defined under Definition 4.9.6 in [Cohen1993]_.
9344-
9345-
INPUT:
9346-
9347-
- ``prec`` -- desired floating point precision.
9295+
def logarithmic_embedding(self, prec=53):
9296+
"""
9297+
Return the morphism of ``self`` under the logarithmic embedding
9298+
in the category Set.
93489299
9349-
OUTPUT:
9300+
The logarithmic embedding is defined as a map from the number field ``self`` to `\RR^n`.
93509301
9351-
- a tuple of real numbers.
9302+
It is defined under Definition 4.9.6 in [Cohen1993]_.
93529303
9353-
EXAMPLES::
9304+
INPUT:
93549305
9355-
sage: CF.<a> = CyclotomicField(97)
9356-
sage: log_map = CF.logarithmic_embedding()
9357-
sage: log_map(0)
9358-
(-1)
9359-
sage: log_map(7)
9360-
(1.94591014905531)
9306+
- ``prec`` -- desired floating point precision.
93619307
9362-
::
9308+
OUTPUT:
93639309
9364-
sage: F.<a> = NumberField(x^3 + 5)
9365-
sage: K.<b> = F.extension(x^2 + 2)
9366-
sage: log_map = K.logarithmic_embedding()
9367-
sage: log_map(0)
9368-
(-1, -1)
9369-
sage: log_map(7)
9370-
(1.94591014905531, 3.89182029811063)
9371-
"""
9372-
def closure_map(x):
9373-
"""
9374-
The function closure of the logarithmic embedding.
9375-
"""
9376-
K = self.base_ring()
9377-
K_embeddings = K.places(prec)
9378-
r1, r2 = K.signature()
9379-
r = r1 + r2 - 1
9310+
- a tuple of real numbers.
93809311
9381-
Reals = RealField(prec)
9312+
EXAMPLES::
93829313
9383-
if x == 0:
9384-
return vector([-1 for _ in range(r + 1)])
9314+
sage: CF.<a> = CyclotomicField(97)
9315+
sage: f = CF(0).logarithmic_embedding()
9316+
sage: f(0)
9317+
(-1)
9318+
sage: f(7)
9319+
(1.94591014905531)
93859320
9386-
x_logs = []
9387-
for i in range(r1):
9388-
sigma = K_embeddings[i]
9389-
x_logs.append(Reals(abs(sigma(x))).log())
9390-
for i in range(r1, r + 1):
9391-
tau = K_embeddings[i]
9392-
x_logs.append(2 * Reals(abs(tau(x))).log())
9321+
::
93939322
9394-
return vector(x_logs)
9395-
return closure_map
9323+
sage: F.<a> = NumberField(x^3 + 5)
9324+
sage: K.<b> = F.extension(x^2 + 2)
9325+
sage: f = K(0).logarithmic_embedding()
9326+
sage: f(0)
9327+
(-1, -1)
9328+
sage: f(7)
9329+
(1.94591014905531, 3.89182029811063)
9330+
"""
9331+
log_map = self._NumberFieldElement_logarithmic_embedding_helper(prec)
9332+
log_hom = Hom(self.base_ring(), EuclideanSpace(len(log_map(0))), Sets())
9333+
return log_hom(K(0)._NumberFieldElement_logarithmic_embedding_helper)
93969334

93979335
def places(self, all_complex=False, prec=None):
93989336
r"""

src/sage/rings/number_field/number_field_element.pyx

+60
Original file line numberDiff line numberDiff line change
@@ -4117,6 +4117,66 @@ cdef class NumberFieldElement(FieldElement):
41174117
"""
41184118
return (self.global_height_non_arch(prec)+self.global_height_arch(prec))/self.number_field().absolute_degree()
41194119

4120+
def _logarithmic_embedding_helper(self, prec=53):
4121+
"""
4122+
Return the image of ``self`` under the logarithmic embedding.
4123+
4124+
The logarithmic embedding is defined as a map from the number field ``self`` to `\RR^n`.
4125+
4126+
It is defined under Definition 4.9.6 in [Cohen1993]_.
4127+
4128+
INPUT:
4129+
4130+
- ``prec`` -- desired floating point precision.
4131+
4132+
OUTPUT:
4133+
4134+
- a tuple of real numbers.
4135+
4136+
EXAMPLES::
4137+
4138+
sage: CF.<a> = CyclotomicField(97)
4139+
sage: log_map = CF._logarithmic_embedding_helper()
4140+
sage: log_map(0)
4141+
(-1)
4142+
sage: log_map(7)
4143+
(1.94591014905531)
4144+
4145+
::
4146+
4147+
sage: F.<a> = NumberField(x^3 + 5)
4148+
sage: K.<b> = F.extension(x^2 + 2)
4149+
sage: log_map = K._logarithmic_embedding_helper()
4150+
sage: log_map(0)
4151+
(-1, -1)
4152+
sage: log_map(7)
4153+
(1.94591014905531, 3.89182029811063)
4154+
"""
4155+
def closure_map(x):
4156+
"""
4157+
The function closure of the logarithmic embedding.
4158+
"""
4159+
K = self.base_ring()
4160+
K_embeddings = K.places(prec)
4161+
r1, r2 = K.signature()
4162+
r = r1 + r2 - 1
4163+
4164+
Reals = RealField(prec)
4165+
4166+
if x == 0:
4167+
return vector([-1 for _ in range(r + 1)])
4168+
4169+
x_logs = []
4170+
for i in range(r1):
4171+
sigma = K_embeddings[i]
4172+
x_logs.append(Reals(abs(sigma(x))).log())
4173+
for i in range(r1, r + 1):
4174+
tau = K_embeddings[i]
4175+
x_logs.append(2 * Reals(abs(tau(x))).log())
4176+
4177+
return vector(x_logs)
4178+
return closure_map
4179+
41204180
def numerator_ideal(self):
41214181
"""
41224182
Return the numerator ideal of this number field element.

0 commit comments

Comments
 (0)