I&#39;m just learning Pyrex, and am making a mistake somewhere. I wanted to play with the simple function:<br><br>def fastsumpairs(l):<br>&nbsp;&nbsp;&nbsp; s = 0<br>&nbsp;&nbsp;&nbsp; for i in xrange(len(l)):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for j in xrange(i):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s += l[i]*l[j]<br>
&nbsp;&nbsp;&nbsp; return s<br><br>The first time through, the python and pyrex versions of this routine gave the same result, and the pyrex version was about 30% faster. Sweet.<br><br>timeit(sumpairs(range(1,1000)): 0.202557 seconds<br>

124583708250<br>
timeit(fastsumpairs(range(1,1000)): 0.155977 seconds<br>
124583708250<br><br>Now I tried to modify the code to tell it that s,i,j were ints:<br><br>def fastsumpairs(l):<br>&nbsp;&nbsp;&nbsp; cdef int s, i, j<br>
&nbsp;&nbsp;&nbsp; s = 0<br>
&nbsp;&nbsp;&nbsp; for i in xrange(len(l)):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for j in xrange(i):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s += l[i]*l[j]<br>
&nbsp;&nbsp;&nbsp; return s<br>
<br><br>timeit(sumpairs(range(1,1000)): 0.202557 seconds<br>
124583708250<br>
timeit(fastsumpairs(range(1,1000)): 0.069682 seconds<br>
29656666<br><br>So the function is now much faster, but it gives the wrong results. Any hints as to why?<br clear="all"><br>-- <br>Rick Muller<br><a href="mailto:rpmuller@gmail.com">rpmuller@gmail.com</a>