@@ -9292,6 +9292,66 @@ def minkowski_embedding(self, B=None, prec=None):
9292
9292
9293
9293
return sage .matrix .all .matrix (d )
9294
9294
9295
+ def logarithmic_embedding (self , prec = 53 ):
9296
+ """
9297
+ Return the image of ``self`` under the logarithmic embedding.
9298
+
9299
+ The logarithmic embedding is defined as a map from the number field ``self`` to `\RR^n`.
9300
+
9301
+ It is defined under Definition 4.9.6 in [Cohen1993]_.
9302
+
9303
+ INPUT:
9304
+
9305
+ - ``prec`` -- desired floating point precision.
9306
+
9307
+ OUTPUT:
9308
+
9309
+ - a tuple of real numbers.
9310
+
9311
+ EXAMPLES::
9312
+
9313
+ sage: CF.<a> = CyclotomicField(97)
9314
+ sage: log_map = logarithmic_embedding(CF)
9315
+ sage: log_map(0)
9316
+ (-1)
9317
+ sage: log_map(7)
9318
+ (1.94591014905531)
9319
+
9320
+ ::
9321
+
9322
+ sage: F.<a> = NumberField(x^3 + 5)
9323
+ sage: K.<b> = F.extension(x^2 + 2)
9324
+ sage: log_map = logarithmic_embedding(K)
9325
+ sage: log_map(0)
9326
+ (-1, -1)
9327
+ sage: log_map(7)
9328
+ (1.94591014905531, 3.89182029811063)
9329
+ """
9330
+ def closure_map (x ):
9331
+ """
9332
+ The function closure of the logarithmic embedding.
9333
+ """
9334
+ K = self .base_ring ()
9335
+ K_embeddings = K .places (prec )
9336
+ r1 , r2 = K .signature ()
9337
+ r = r1 + r2 - 1
9338
+
9339
+ Reals = RealField (prec )
9340
+
9341
+ if x == 0 :
9342
+ return vector ([- 1 for _ in range (r + 1 )])
9343
+
9344
+ x_logs = []
9345
+ for i in range (r1 ):
9346
+ sigma = K_embeddings [i ]
9347
+ x_logs .append (Reals (abs (sigma (x ))).log ())
9348
+ for i in range (r1 , r + 1 ):
9349
+ tau = K_embeddings [i ]
9350
+ x_logs .append (2 * Reals (abs (tau (x ))).log ())
9351
+
9352
+ return vector (x_logs )
9353
+ return closure_map
9354
+
9295
9355
def places (self , all_complex = False , prec = None ):
9296
9356
r"""
9297
9357
Return the collection of all infinite places of self.
0 commit comments