Skip to content

Commit e80a83b

Browse files
committed
also moving an_embedding to categories
1 parent bca2bf3 commit e80a83b

File tree

2 files changed

+52
-68
lines changed

2 files changed

+52
-68
lines changed

src/sage/categories/fields.py

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,58 @@ def algebraic_closure(self):
277277
"""
278278
raise NotImplementedError("algebraic closures of general fields not implemented")
279279

280+
def an_embedding(self, K):
281+
r"""
282+
Return some embedding of this field into another field `K`,
283+
and raise a :class:`ValueError` if none exists.
284+
285+
EXAMPLES::
286+
287+
sage: GF(2).an_embedding(GF(4))
288+
Ring morphism:
289+
From: Finite Field of size 2
290+
To: Finite Field in z2 of size 2^2
291+
Defn: 1 |--> 1
292+
sage: GF(4).an_embedding(GF(8))
293+
Traceback (most recent call last):
294+
...
295+
ValueError: no embedding from Finite Field in z2 of size 2^2 to Finite Field in z3 of size 2^3
296+
sage: GF(4).an_embedding(GF(16))
297+
Ring morphism:
298+
From: Finite Field in z2 of size 2^2
299+
To: Finite Field in z4 of size 2^4
300+
Defn: z2 |--> z4^2 + z4
301+
302+
::
303+
304+
sage: CyclotomicField(5).an_embedding(QQbar)
305+
Coercion map:
306+
From: Cyclotomic Field of order 5 and degree 4
307+
To: Algebraic Field
308+
sage: CyclotomicField(3).an_embedding(CyclotomicField(7))
309+
Traceback (most recent call last):
310+
...
311+
ValueError: no embedding from Cyclotomic Field of order 3 and degree 2 to Cyclotomic Field of order 7 and degree 6
312+
sage: CyclotomicField(3).an_embedding(CyclotomicField(6))
313+
Generic morphism:
314+
From: Cyclotomic Field of order 3 and degree 2
315+
To: Cyclotomic Field of order 6 and degree 2
316+
Defn: zeta3 -> zeta6 - 1
317+
"""
318+
if self.characteristic() != K.characteristic():
319+
raise ValueError(f'no embedding from {self} to {K}: incompatible characteristics')
320+
321+
H = self.Hom(K)
322+
try:
323+
return H.natural_map()
324+
except TypeError:
325+
pass
326+
from sage.categories.sets_cat import EmptySetError
327+
try:
328+
return H.an_element()
329+
except EmptySetError:
330+
raise ValueError(f'no embedding from {self} to {K}')
331+
280332
def prime_subfield(self):
281333
"""
282334
Return the prime subfield of ``self``.
@@ -699,22 +751,6 @@ def vector_space(self, *args, **kwds):
699751
"""
700752
return self.free_module(*args, **kwds)
701753

702-
def _pseudo_fraction_field(self):
703-
"""
704-
The fraction field of ``self`` is always available as ``self``.
705-
706-
EXAMPLES::
707-
708-
sage: QQ._pseudo_fraction_field()
709-
Rational Field
710-
sage: K = GF(5)
711-
sage: K._pseudo_fraction_field()
712-
Finite Field of size 5
713-
sage: K._pseudo_fraction_field() is K
714-
True
715-
"""
716-
return self
717-
718754
class ElementMethods:
719755
def euclidean_degree(self):
720756
r"""

src/sage/rings/ring.pyx

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -704,58 +704,6 @@ cdef class Field(CommutativeRing):
704704
"""
705705
_default_category = _Fields
706706

707-
def an_embedding(self, K):
708-
r"""
709-
Return some embedding of this field into another field `K`,
710-
and raise a :class:`ValueError` if none exists.
711-
712-
EXAMPLES::
713-
714-
sage: GF(2).an_embedding(GF(4))
715-
Ring morphism:
716-
From: Finite Field of size 2
717-
To: Finite Field in z2 of size 2^2
718-
Defn: 1 |--> 1
719-
sage: GF(4).an_embedding(GF(8))
720-
Traceback (most recent call last):
721-
...
722-
ValueError: no embedding from Finite Field in z2 of size 2^2 to Finite Field in z3 of size 2^3
723-
sage: GF(4).an_embedding(GF(16))
724-
Ring morphism:
725-
From: Finite Field in z2 of size 2^2
726-
To: Finite Field in z4 of size 2^4
727-
Defn: z2 |--> z4^2 + z4
728-
729-
::
730-
731-
sage: CyclotomicField(5).an_embedding(QQbar)
732-
Coercion map:
733-
From: Cyclotomic Field of order 5 and degree 4
734-
To: Algebraic Field
735-
sage: CyclotomicField(3).an_embedding(CyclotomicField(7))
736-
Traceback (most recent call last):
737-
...
738-
ValueError: no embedding from Cyclotomic Field of order 3 and degree 2 to Cyclotomic Field of order 7 and degree 6
739-
sage: CyclotomicField(3).an_embedding(CyclotomicField(6))
740-
Generic morphism:
741-
From: Cyclotomic Field of order 3 and degree 2
742-
To: Cyclotomic Field of order 6 and degree 2
743-
Defn: zeta3 -> zeta6 - 1
744-
"""
745-
if self.characteristic() != K.characteristic():
746-
raise ValueError(f'no embedding from {self} to {K}: incompatible characteristics')
747-
748-
H = self.Hom(K)
749-
try:
750-
return H.natural_map()
751-
except TypeError:
752-
pass
753-
from sage.categories.sets_cat import EmptySetError
754-
try:
755-
return H.an_element()
756-
except EmptySetError:
757-
raise ValueError(f'no embedding from {self} to {K}')
758-
759707

760708
cdef class Algebra(Ring):
761709
def __init__(self, base_ring, *args, **kwds):

0 commit comments

Comments
 (0)