@@ -70,7 +70,7 @@ class DrinfeldModules(Category_over_base_ring):
70
70
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
71
71
sage: C = phi.category()
72
72
sage: C
73
- Category of Drinfeld modules over Finite Field in z of size 11^4 over its base
73
+ Category of Drinfeld modules over Finite Field in z of size 11^4
74
74
75
75
The output tells the user that the category is only defined by its
76
76
base.
@@ -88,7 +88,7 @@ class DrinfeldModules(Category_over_base_ring):
88
88
sage: C.base_morphism()
89
89
Ring morphism:
90
90
From: Univariate Polynomial Ring in T over Finite Field of size 11
91
- To: Finite Field in z of size 11^4 over its base
91
+ To: Finite Field in z of size 11^4
92
92
Defn: T |--> z^3 + 7*z^2 + 6*z + 10
93
93
94
94
The so-called constant coefficient --- which is the same for all
@@ -123,7 +123,7 @@ class DrinfeldModules(Category_over_base_ring):
123
123
True
124
124
125
125
sage: C.ore_polring()
126
- Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob
126
+ Ore Polynomial Ring in t over Finite Field in z of size 11^4 twisted by z |--> z^11
127
127
sage: C.ore_polring() is phi.ore_polring()
128
128
True
129
129
@@ -165,20 +165,24 @@ class DrinfeldModules(Category_over_base_ring):
165
165
sage: K.<z> = Fq.extension(4)
166
166
sage: from sage.categories.drinfeld_modules import DrinfeldModules
167
167
sage: base = Hom(A, K)(0)
168
- sage: C = DrinfeldModules(base)
168
+ sage: C = DrinfeldModules(base) # known bug (blankline)
169
+ <BLANKLINE>
169
170
Traceback (most recent call last):
170
171
...
171
172
TypeError: base field must be a ring extension
172
173
173
- ::
174
+ Note that `C.base_morphism()` has codomain `K` while
175
+ the defining morphism of `C.base()` has codomain `K` viewed
176
+ as an `A`-field. Thus, they differ::
174
177
175
178
sage: C.base().defining_morphism() == C.base_morphism()
176
- True
179
+ False
177
180
178
181
::
179
182
180
183
sage: base = Hom(A, A)(1)
181
- sage: C = DrinfeldModules(base)
184
+ sage: C = DrinfeldModules(base) # known bug (blankline)
185
+ <BLANKLINE>
182
186
Traceback (most recent call last):
183
187
...
184
188
TypeError: base field must be a ring extension
@@ -203,7 +207,7 @@ class DrinfeldModules(Category_over_base_ring):
203
207
TypeError: function ring base must be a finite field
204
208
"""
205
209
206
- def __init__ (self , base_field , name = 't' ):
210
+ def __init__ (self , base_morphism , name = 't' ):
207
211
r"""
208
212
Initialize ``self``.
209
213
@@ -223,34 +227,23 @@ def __init__(self, base_field, name='t'):
223
227
sage: p_root = z^3 + 7*z^2 + 6*z + 10
224
228
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
225
229
sage: C = phi.category()
226
- sage: ore_polring.<t> = OrePolynomialRing(phi.base(), phi.base() .frobenius_endomorphism())
230
+ sage: ore_polring.<t> = OrePolynomialRing(K, K .frobenius_endomorphism())
227
231
sage: C._ore_polring is ore_polring
228
232
True
229
- sage: i = phi.base().coerce_map_from(K)
230
- sage: base_morphism = Hom(A, K)(p_root)
231
- sage: C.base() == K.over(base_morphism)
232
- True
233
- sage: C._base_morphism == i * base_morphism
234
- True
235
233
sage: C._function_ring is A
236
234
True
237
- sage: C._constant_coefficient == base_morphism (T)
235
+ sage: C._constant_coefficient == C._base_morphism (T)
238
236
True
239
237
sage: C._characteristic(C._constant_coefficient)
240
238
0
241
239
"""
242
- # Check input is a ring extension
243
- if not isinstance (base_field , RingExtension_generic ):
244
- raise TypeError ('base field must be a ring extension' )
245
- base_morphism = base_field .defining_morphism ()
246
240
self ._base_morphism = base_morphism
241
+ function_ring = self ._function_ring = base_morphism .domain ()
242
+ base_field = self ._base_field = base_morphism .codomain ()
247
243
# Check input is a field
248
244
if not base_field .is_field ():
249
245
raise TypeError ('input must be a field' )
250
- self ._base_field = base_field
251
- self ._function_ring = base_morphism .domain ()
252
246
# Check domain of base morphism is Fq[T]
253
- function_ring = self ._function_ring
254
247
if not isinstance (function_ring , PolynomialRing_generic ):
255
248
raise NotImplementedError ('function ring must be a polynomial '
256
249
'ring' )
@@ -262,7 +255,7 @@ def __init__(self, base_field, name='t'):
262
255
Fq = function_ring_base
263
256
A = function_ring
264
257
T = A .gen ()
265
- K = base_field # A ring extension
258
+ K = base_field
266
259
# Build K{t}
267
260
d = log (Fq .cardinality (), Fq .characteristic ())
268
261
tau = K .frobenius_endomorphism (d )
@@ -284,7 +277,7 @@ def __init__(self, base_field, name='t'):
284
277
i = A .coerce_map_from (Fq )
285
278
Fq_to_K = self ._base_morphism * i
286
279
self ._base_over_constants_field = base_field .over (Fq_to_K )
287
- super ().__init__ (base = base_field )
280
+ super ().__init__ (base = base_field . over ( base_morphism ) )
288
281
289
282
def _latex_ (self ):
290
283
r"""
@@ -321,7 +314,7 @@ def _repr_(self):
321
314
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
322
315
sage: C = phi.category()
323
316
sage: C
324
- Category of Drinfeld modules over Finite Field in z of size 11^4 over its base
317
+ Category of Drinfeld modules over Finite Field in z of size 11^4
325
318
"""
326
319
return f'Category of Drinfeld modules over { self ._base_field } '
327
320
@@ -402,7 +395,7 @@ def base_morphism(self):
402
395
sage: C.base_morphism()
403
396
Ring morphism:
404
397
From: Univariate Polynomial Ring in T over Finite Field of size 11
405
- To: Finite Field in z of size 11^4 over its base
398
+ To: Finite Field in z of size 11^4
406
399
Defn: T |--> z^3 + 7*z^2 + 6*z + 10
407
400
408
401
sage: C.constant_coefficient() == C.base_morphism()(T)
@@ -541,7 +534,7 @@ def ore_polring(self):
541
534
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
542
535
sage: C = phi.category()
543
536
sage: C.ore_polring()
544
- Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob
537
+ Ore Polynomial Ring in t over Finite Field in z of size 11^4 twisted by z |--> z^11
545
538
"""
546
539
return self ._ore_polring
547
540
@@ -666,17 +659,16 @@ def base_morphism(self):
666
659
sage: phi.base_morphism()
667
660
Ring morphism:
668
661
From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
669
- To: Finite Field in z12 of size 5^12 over its base
662
+ To: Finite Field in z12 of size 5^12
670
663
Defn: T |--> 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
671
664
672
665
The base field can be infinite::
673
666
674
667
sage: sigma = DrinfeldModule(A, [Frac(A).gen(), 1])
675
668
sage: sigma.base_morphism()
676
- Ring morphism :
669
+ Coercion map :
677
670
From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
678
- To: Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 over its base
679
- Defn: T |--> T
671
+ To: Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
680
672
"""
681
673
return self .category ().base_morphism ()
682
674
@@ -804,7 +796,7 @@ def ore_polring(self):
804
796
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
805
797
sage: S = phi.ore_polring()
806
798
sage: S
807
- Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 over its base twisted by Frob^2
799
+ Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 twisted by z12 |--> z12^(5^2)
808
800
809
801
The Ore polynomial ring can also be retrieved from the category
810
802
of the Drinfeld module::
@@ -833,7 +825,7 @@ def ore_variable(self):
833
825
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
834
826
835
827
sage: phi.ore_polring()
836
- Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 over its base twisted by Frob^2
828
+ Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 twisted by z12 |--> z12^(5^2)
837
829
sage: phi.ore_variable()
838
830
t
839
831
"""
0 commit comments