On Wed, Oct 10, 2018 at 3:29 PM Travis Scrimshaw <tsc...@ucdavis.edu> wrote: > > So the bulk of the time is spent converting the Pari object back into a Sage > object; mainly, this line: > > U = self.matrix_space(ncols = self._nrows)([v[0][i,j] for i in > xrange(self._nrows-1,-1,-1) for j in xrange(self._nrows)]) > > which has 1000x1000 calls to extra the data and then has to be reconstituted > into a matrix object. I am not sure if there is a way around this. It might > just be a by-product of outsourcing the computation. >
Thanks for boiling this down to the bottleneck. It can probably be made much faster. Instead of doing v[0][i,j], which probably involves at least two complicated pari calls, is there a way to convert v[0] to a Python list in one call? If not, one could add an optimized way to do so. Then convert that list to a matrix in sage. > Best, > Travis > > > On Thursday, October 11, 2018 at 5:58:04 AM UTC+10, John Cremona wrote: >> >> The method smith_form() for matrices over ZZ uses pari's matsnf() but is >> vastly slower. Compare these: >> >> sage: M=MatrixSpace(ZZ,1000,5).random_element() >> sage: %timeit S=M.smith_form(transformation=True) >> 1 loop, best of 3: 2.57 s per loop >> sage: pM=pari(M) >> sage: %timeit S=pM.matsnf(1) >> 10 loops, best of 3: 49.5 ms per loop >> >> That's a factor of 50. There's something to be done in the interface >> because pari's convention is opposite to Sage's so one has to reverse the >> order of rows/columns in the output from pari, but still... >> >> John > > -- > You received this message because you are subscribed to the Google Groups > "sage-devel" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sage-devel+unsubscr...@googlegroups.com. > To post to this group, send email to sage-devel@googlegroups.com. > Visit this group at https://groups.google.com/group/sage-devel. > For more options, visit https://groups.google.com/d/optout. -- William (http://wstein.org) -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at https://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.