2009/5/14 Michael Abshoff <mabsh...@googlemail.com>: > > On Thu, May 14, 2009 at 4:45 AM, John Cremona <john.crem...@gmail.com> wrote: >> >> Your comment about the sum function suggests to me that something >> similar might be behind the weird thing I reported yesterday. > > Yeah, we ought to suggest to the pari people to rename such generic
I don't think they would rename "sum" to please us! I wouldn't want to rename the C++ class called "rational" in eclib either. But I might consider a request to wrap all my global names in a namespace -- presumably that would work here too. > function. Even with C++ code in Sage having a class called Rational in > at least three different C++ based components of Sage causes fun to no > end in case the linker screws up. > >> If you take a fresh clone of 3.4.2, and in the file >> sage/rings/rational.pyx add this function: >> >> def dummy(self): >> return sum([a for a in self.list()],0) >> >> say at line 391 (so inside the cdef class Rational()), then "sage -br" >> complains like this: >> >> Building modified file sage/rings/rational.pyx. >> python2.5 `which cython` --embed-positions --incref-local-binop >> -I/home/jec/sage-3.4.2/devel/sage-tests -o sage/rings/rational.c >> sage/rings/rational.pyx >> >> Error converting Pyrex file to C: >> ------------------------------------------------------------ >> ... >> [5/3] >> """ >> return [ self ] >> >> def dummy(self): >> return sum([a for a in self.list()],0) >> ^ >> ------------------------------------------------------------ >> >> /home/jec/sage-3.4.2/devel/sage-tests/sage/rings/rational.pyx:392:18: >> Call with wrong number of arguments (expected 3, got 2) >> Error running command, failed with status 256. >> sage: There was an error installing modified sage library code. >> >> Note that it (wrongly) says that the sum function wants 3 arguments. >> If you try adding a third arguement, say by changing the code to >> >> def dummy(self): >> return sum([a for a in self.list()],0,0) >> >> then the error message changes to >> /home/jec/sage-3.4.2/devel/sage-tests/sage/rings/rational.pyx:392:18: >> Cannot convert 'sage.rings.rational.GEN' to Python object >> >> and the only place I know where things are called GEN is in pari, >> where there is a sum() function which takes 3 arguments (as declared >> in sage/libs/pari/decl.pxi: GEN sum(GEN v, long a, long b) >> >> So my diagnosis is that when rational.pyx is recompiled, it is picking >> up the wrong sum(). >> >> Sorry, I am not qualified to provide a cure! It is quite surpriding >> if the sum() function has never before been used in a .pyx file! >> John > > Well, I assume most people work around it. That's possible, but they should not have to waste an hour or two before coming to the conclusion that work-around is the only way around the problem. (Recall that I had almost identical code in a different .pyx file which worked fine!) I worked around it by finding an alternative mathematical formula. John > > In case you want to have some fun: Pull in GSL as well as the pari > definitions in the same file. The preprocessor will start complaining > rather loudly. > > Cheers, > > Michael > > > > --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---