@@ -79,6 +79,24 @@ TESTS::
79
79
sage: isinstance(hash(w), int)
80
80
True
81
81
82
+ Test that :trac:`28042` is fixed::
83
+
84
+ sage: p = 193379
85
+ sage: K = GF(p)
86
+ sage: a = K(1)
87
+ sage: b = K(191495)
88
+ sage: c = K(109320)
89
+ sage: d = K(167667)
90
+ sage: e = 103937
91
+ sage: a*c+b*d-e
92
+ 102041
93
+ sage: vector([a,b]) * vector([c,d]) - e
94
+ 102041
95
+ sage: type(vector([a,b]) * vector([c,d])) # py3
96
+ <class 'sage.rings.finite_rings.integer_mod.IntegerMod_int64'>
97
+ sage: type(vector([a,b]) * vector([c,d])) # py2
98
+ <type 'sage.rings.finite_rings.integer_mod.IntegerMod_int64'>
99
+
82
100
AUTHOR:
83
101
84
102
- William Stein (2007)
@@ -279,17 +297,25 @@ cdef class Vector_modn_dense(free_module_element.FreeModuleElement):
279
297
return z
280
298
281
299
cpdef _dot_product_(self , Vector right):
282
- cdef Py_ssize_t i
300
+ cdef size_t i
283
301
cdef IntegerMod_int n
302
+ cdef IntegerMod_int64 m
284
303
cdef Vector_modn_dense r = right
285
- n = IntegerMod_int.__new__ (IntegerMod_int)
286
- IntegerMod_abstract.__init__ (n, self .base_ring())
287
- n.ivalue = 0
288
304
289
- for i from 0 <= i < self ._degree:
290
- n.ivalue = (n.ivalue + self ._entries[i] * r._entries[i]) % self ._p
291
-
292
- return n
305
+ if use_32bit_type(self ._p):
306
+ n = IntegerMod_int.__new__ (IntegerMod_int)
307
+ IntegerMod_abstract.__init__ (n, self .base_ring())
308
+ n.ivalue = 0
309
+ for i in range (self ._degree):
310
+ n.ivalue = (n.ivalue + self ._entries[i] * r._entries[i]) % self ._p
311
+ return n
312
+ else :
313
+ m = IntegerMod_int64.__new__ (IntegerMod_int64)
314
+ IntegerMod_abstract.__init__ (m, self .base_ring())
315
+ m.ivalue = 0
316
+ for i in range (self ._degree):
317
+ m.ivalue = (m.ivalue + self ._entries[i] * r._entries[i]) % self ._p
318
+ return m
293
319
294
320
cpdef _pairwise_product_(self , Vector right):
295
321
"""
0 commit comments