<div dir="ltr">Yes, you can incorporate this code into Sage if you like.<br><br>Alex<br><br><div class="gmail_quote">On Wed, Aug 13, 2008 at 2:44 AM, William Stein <span dir="ltr"><<a href="mailto:wstein@gmail.com">wstein@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">On Wed, Aug 13, 2008 at 2:25 AM, Alex Mendes da Costa<br>
<<a href="mailto:alexmdac@gmail.com">alexmdac@gmail.com</a>> wrote:<br>
> Hi,<br>
><br>
> I'm using cython to wrap DJB's primegen library<br>
> (<a href="http://cr.yp.to/primegen.html" target="_blank">http://cr.yp.to/primegen.html</a>).<br>
<br>
</div>Are you going to contribute this code and the wrapper<br>
to Sage (<a href="http://sagemath.org" target="_blank">http://sagemath.org</a>)? I've wanted to add<br>
primegen to Sage for a long time -- in fact, I asked<br>
DJB about its license on a panel discussion and<br>
in his response he released primegen under a public<br>
domain license.<br>
<br>
-- William<br>
<div><div></div><div class="Wj3C7c"><br>
><br>
> Here's my pyx file:<br>
><br>
> cdef extern from "primegen.h":<br>
> ctypedef unsigned long uint32<br>
> ctypedef unsigned long long uint64<br>
><br>
> ctypedef struct primegen:<br>
> uint32 buf[16][2048]<br>
> uint64 p[512]<br>
> int num<br>
> int pos<br>
> uint64 base<br>
> uint64 L<br>
><br>
> void primegen_init(primegen* pg)<br>
> uint64 primegen_next(primegen* pg)<br>
> uint64 primegen_peek(primegen* pg)<br>
> uint64 primegen_count(primegen* pg, uint64 to)<br>
> void primegen_skipto(primegen* pg, uint64 to)<br>
><br>
> cdef class PrimeGen:<br>
> cdef primegen pg<br>
><br>
> def __new__(self):<br>
> primegen_init(&<a href="http://self.pg" target="_blank">self.pg</a>)<br>
><br>
> def next(self):<br>
> return primegen_next(&<a href="http://self.pg" target="_blank">self.pg</a>)<br>
><br>
> def peek(self):<br>
> return primegen_peek(&<a href="http://self.pg" target="_blank">self.pg</a>)<br>
><br>
> def count(self, uint64 to):<br>
> return primegen_count(&<a href="http://self.pg" target="_blank">self.pg</a>, to)<br>
><br>
> def skipto(self, uint64 to):<br>
> primegen_skipto(&<a href="http://self.pg" target="_blank">self.pg</a>, to)<br>
><br>
> Notice that the class has a method called "next". This means that it should<br>
> be usable as an iterator. Here's what happens if I try to do that:<br>
><br>
> Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17)<br>
> [GCC 4.0.1 (Apple Inc. build 5465)] on darwin<br>
> Type "help", "copyright", "credits" or "license" for more information.<br>
>>>> from primegen import PrimeGen<br>
>>>> class C:<br>
> ... def __iter__(self):<br>
> ... return PrimeGen()<br>
> ...<br>
>>>> for i in C():<br>
> ... print i<br>
> ...<br>
> Traceback (most recent call last):<br>
> File "<stdin>", line 1, in <module><br>
> TypeError: __iter__ returned non-iterator of type 'primegen.PrimeGen'<br>
><br>
> How come this doesn't work? The generated class definitely has the "next"<br>
> method required by the iterator protocol.<br>
><br>
>>>> p = PrimeGen()<br>
>>>> dir(p)<br>
> ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__',<br>
> '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',<br>
> '__setattr__', '__str__', 'count', 'next', 'peek', 'skipto']<br>
><br>
> Thanks,<br>
> Alex<br>
</div></div><div class="Ih2E3d">> _______________________________________________<br>
> Cython-dev mailing list<br>
> <a href="mailto:Cython-dev@codespeak.net">Cython-dev@codespeak.net</a><br>
> <a href="http://codespeak.net/mailman/listinfo/cython-dev" target="_blank">http://codespeak.net/mailman/listinfo/cython-dev</a><br>
><br>
><br>
<br>
<br>
<br>
</div><font color="#888888">--<br>
William Stein<br>
Associate Professor of Mathematics<br>
University of Washington<br>
<a href="http://wstein.org" target="_blank">http://wstein.org</a><br>
</font><div><div></div><div class="Wj3C7c">_______________________________________________<br>
Cython-dev mailing list<br>
<a href="mailto:Cython-dev@codespeak.net">Cython-dev@codespeak.net</a><br>
<a href="http://codespeak.net/mailman/listinfo/cython-dev" target="_blank">http://codespeak.net/mailman/listinfo/cython-dev</a><br>
</div></div></blockquote></div><br></div>