Skip to content

Commit f42998b

Browse files
author
Marie BONBOIRE
committed
fixed merge conflicts
2 parents 02def11 + 513a5b5 commit f42998b

File tree

2 files changed

+34
-30
lines changed

2 files changed

+34
-30
lines changed

src/sage/matrix/matrix_integer_dense.pyx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,7 +1614,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
16141614
return self._mod_two()
16151615
elif p < MAX_MODULUS_FLOAT:
16161616
res_f = Matrix_modn_dense_float.__new__(Matrix_modn_dense_float,
1617-
matrix_space.MatrixSpace(IntegerModRing(p), self._nrows, self._ncols, sparse=False), None, None, None)
1617+
matrix_space.MatrixSpace(IntegerModRing(p), self._nrows, self._ncols, sparse=False), None, None, None, zeroed_alloc=False)
16181618
for i from 0 <= i < self._nrows:
16191619
res_row_f = res_f._matrix[i]
16201620
for j from 0 <= j < self._ncols:
@@ -1623,7 +1623,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
16231623

16241624
elif p < MAX_MODULUS_DOUBLE:
16251625
res_d = Matrix_modn_dense_double.__new__(Matrix_modn_dense_double,
1626-
matrix_space.MatrixSpace(IntegerModRing(p), self._nrows, self._ncols, sparse=False), None, None, None)
1626+
matrix_space.MatrixSpace(IntegerModRing(p), self._nrows, self._ncols, sparse=False), None, None, None, zeroed_alloc=False)
16271627
for i from 0 <= i < self._nrows:
16281628
res_row_d = res_d._matrix[i]
16291629
for j from 0 <= j < self._ncols:
@@ -1649,11 +1649,11 @@ cdef class Matrix_integer_dense(Matrix_dense):
16491649
if p < MAX_MODULUS_FLOAT:
16501650
res.append( Matrix_modn_dense_float.__new__(Matrix_modn_dense_float,
16511651
matrix_space.MatrixSpace(IntegerModRing(p), self._nrows, self._ncols, sparse=False),
1652-
None, None, None) )
1652+
None, None, None, zeroed_alloc=False) )
16531653
elif p < MAX_MODULUS_DOUBLE:
16541654
res.append( Matrix_modn_dense_double.__new__(Matrix_modn_dense_double,
16551655
matrix_space.MatrixSpace(IntegerModRing(p), self._nrows, self._ncols, sparse=False),
1656-
None, None, None) )
1656+
None, None, None, zeroed_alloc=False) )
16571657
else:
16581658
raise ValueError("p=%d too big."%p)
16591659

src/sage/matrix/matrix_modn_dense_template.pxi

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -441,15 +441,18 @@ cpdef __matrix_from_rows_of_matrices(X):
441441

442442

443443
cdef class Matrix_modn_dense_template(Matrix_dense):
444-
def __cinit__(self):
444+
def __cinit__(self, *args, bint zeroed_alloc=True, **kwds):
445445
cdef long p = self._base_ring.characteristic()
446446
self.p = p
447447
if p >= MAX_MODULUS:
448448
raise OverflowError("p (=%s) must be < %s."%(p, MAX_MODULUS))
449449

450-
self._entries = <celement *>check_allocarray(self._nrows * self._ncols, sizeof(celement))
450+
if zeroed_alloc:
451+
self._entries = <celement *>check_calloc(self._nrows * self._ncols, sizeof(celement))
452+
else:
453+
self._entries = <celement *>check_allocarray(self._nrows * self._ncols, sizeof(celement))
454+
451455
self._matrix = <celement **>check_allocarray(self._nrows, sizeof(celement*))
452-
453456
cdef unsigned int k
454457
cdef Py_ssize_t i
455458
k = 0
@@ -518,27 +521,28 @@ cdef class Matrix_modn_dense_template(Matrix_dense):
518521
"""
519522
ma = MatrixArgs_init(parent, entries)
520523
cdef long i, j
521-
it = ma.iter(False)
524+
it = ma.iter(convert=False, sparse=True)
522525
R = ma.base
523526
p = R.characteristic()
524-
for i in range(ma.nrows):
525-
v = self._matrix[i]
526-
for j in range(ma.ncols):
527-
x = next(it)
528-
if type(x) is int:
529-
tmp = (<long>x) % p
530-
v[j] = tmp + (tmp<0)*p
531-
elif type(x) is IntegerMod_int and (<IntegerMod_int>x)._parent is R:
532-
v[j] = <celement>(<IntegerMod_int>x).ivalue
533-
elif type(x) is Integer:
534-
if coerce:
535-
v[j] = mpz_fdiv_ui((<Integer>x).value, p)
536-
else:
537-
v[j] = mpz_get_ui((<Integer>x).value)
538-
elif coerce:
539-
v[j] = R(x)
527+
528+
for t in it:
529+
se = <SparseEntry>t
530+
x = se.entry
531+
v = self._matrix[se.i]
532+
if type(x) is int:
533+
tmp = (<long>x) % p
534+
v[se.j] = tmp + (tmp<0)*p
535+
elif type(x) is IntegerMod_int and (<IntegerMod_int>x)._parent is R:
536+
v[se.j] = <celement>(<IntegerMod_int>x).ivalue
537+
elif type(x) is Integer:
538+
if coerce:
539+
v[se.j] = mpz_fdiv_ui((<Integer>x).value, p)
540540
else:
541-
v[j] = <celement>x
541+
v[se.j] = mpz_get_ui((<Integer>x).value)
542+
elif coerce:
543+
v[se.j] = R(x)
544+
else:
545+
v[se.j] = <celement>x
542546

543547
cdef long _hash_(self) except -1:
544548
"""
@@ -786,7 +790,7 @@ cdef class Matrix_modn_dense_template(Matrix_dense):
786790
cdef Matrix_modn_dense_template M
787791
cdef celement p = self.p
788792

789-
M = self.__class__.__new__(self.__class__, self._parent,None,None,None)
793+
M = self.__class__.__new__(self.__class__, self._parent,None,None,None, zeroed_alloc=False)
790794

791795
sig_on()
792796
for i in range(self._nrows*self._ncols):
@@ -825,7 +829,7 @@ cdef class Matrix_modn_dense_template(Matrix_dense):
825829
cdef celement p = self.p
826830
cdef celement a = left
827831

828-
M = self.__class__.__new__(self.__class__, self._parent,None,None,None)
832+
M = self.__class__.__new__(self.__class__, self._parent,None,None,None,zeroed_alloc=False)
829833

830834
sig_on()
831835
for i in range(self._nrows*self._ncols):
@@ -844,7 +848,7 @@ cdef class Matrix_modn_dense_template(Matrix_dense):
844848
False
845849
"""
846850
cdef Matrix_modn_dense_template A
847-
A = self.__class__.__new__(self.__class__, self._parent, 0, 0, 0)
851+
A = self.__class__.__new__(self.__class__,self._parent,None,None,None,zeroed_alloc=False)
848852
memcpy(A._entries, self._entries, sizeof(celement)*self._nrows*self._ncols)
849853
if self._subdivisions is not None:
850854
A.subdivide(*self.subdivisions())
@@ -883,7 +887,7 @@ cdef class Matrix_modn_dense_template(Matrix_dense):
883887
cdef celement k, p
884888
cdef Matrix_modn_dense_template M
885889

886-
M = self.__class__.__new__(self.__class__, self._parent,None,None,None)
890+
M = self.__class__.__new__(self.__class__, self._parent,None,None,None,zeroed_alloc=False)
887891
p = self.p
888892
cdef celement* other_ent = (<Matrix_modn_dense_template>right)._entries
889893

@@ -920,7 +924,7 @@ cdef class Matrix_modn_dense_template(Matrix_dense):
920924
cdef celement k, p
921925
cdef Matrix_modn_dense_template M
922926

923-
M = self.__class__.__new__(self.__class__, self._parent, None, None, None)
927+
M = self.__class__.__new__(self.__class__, self._parent, None, None, None, zeroed_alloc=False)
924928
p = self.p
925929
cdef celement* other_ent = (<Matrix_modn_dense_template>right)._entries
926930

0 commit comments

Comments
 (0)