On Oct 5, 2008, at 3:46 PM, Ondrej Certik wrote:

> On Sat, Oct 4, 2008 at 1:42 PM, Robert Bradshaw
> <[EMAIL PROTECTED]> wrote:
>> I polished off some more of the pure python mode stuff tonight. I
>> just pushed it to cython-devel. Now you can do stuff like:
>>
>>> import cython  # you need a single file to be in your path to use
>>> it in pure Python mode, provided (and installed) with Cython
>>>
>>> @cython.locals(x=int, y=cython.p_int)
>>> def foo(x):
>>>     y = cython.cast(cython.p_int, x)
>>>     print x + cython.sizeof(y) + cython.sizeof(cython.p_int)
>>>     if cython.compiled:
>>>         print "the compiler was run
>>>     else:
>>>         print "just being interpreted"
>>>
>>> x = cython.declare(int)
>>> xx = cython.declare(cython.p_int)
>>> xx = cython.address(x)
>>>
>>> MyStruct = cython.struct(x=int, y=int, data=cython.pp_double)
>>>
>>> a = cython.declare(MyStruct)
>>> a.x = 5
>>>
>>> T = cython.typedef(MyStruct)
>>> b = cython.declare(cython.pointer(T))
>>> b[0].x = 4
>>
>>
>> On top of this, you can write a .pxd file to accompany your .py file
>> and it will coerce your .py file classes and def statements into cdef
>> and cpdef versions.
>>
>> It's still very new and probably highly experimental (though it only
>> modifies the cython.* nodes, so it shouldn't cause any regressions).
>> Let me know what you think.
>
> Thanks a lot for doing this!

You're welcome.

> I installed cython-devel and then I tried this little example:
>
>
> --------
> import Cython as cython
>
> @cython.locals(x=int, y=cython.p_int)
> def foo(x):
>     y = cython.cast(cython.p_int, x)
>     print x + cython.sizeof(y) + cython.sizeof(cython.p_int)
>     if cython.compiled:
>         print "the compiler was run"
>     else:
>         print "just being interpreted"
>
> foo(5)
> -----------
>
> When running in it in Python, it gives:
>
>   File "t.py", line 12, in <module>
>     foo(5)
>   File "t.py", line 5, in foo
>     y = cython.cast(cython.p_int, x)
>   File "/home/ondra/lib/lib/python/Cython/Shadow.py", line 14, in cast
>     return type(arg)
>   File "/home/ondra/lib/lib/python/Cython/Shadow.py", line 53, in  
> __init__
>     raise ValueError
> ValueError
>
>
> Am I using it incorrectly?

No, it's just not letting you cast an int into an p_int. I suppose it  
should? It just doesn't make sense to emulate this in Python.

> Btw, when I compile it with Cython:
>
> $ python -c "import t; t.foo(5)"
> Traceback (most recent call last):
>   File "<string>", line 1, in <module>
>   File "t.py", line 12, in t (t.c:515)
>     foo(5)
>   File "t.py", line 5, in t.foo (t.c:265)
>     y = cython.cast(cython.p_int, x)
>   File "/home/ondra/lib/lib/python/Cython/Shadow.py", line 14, in cast
>     return type(arg)
>   File "/home/ondra/lib/lib/python/Cython/Shadow.py", line 53, in  
> __init__
>     raise ValueError
> ValueError

You need to import cython, not import Cython as cython.

> Looking at the code, I need to pass it Cython p_int integers, right? I
> also tried:
>
> x = cython.declare(int)
> xx = cython.declare(cython.p_int)
> xx = cython.address(x)
> foo(xx)
>
> But this also raises the same error as above.

This should work, Again, I think it's because you imported Cython  
rather than cython.

> But otherwise this is
> exactly the way to go, I am really looking forward to just having one
> codebase for both compiled and interpreted stuff. Unfortunately, I got
> again busy lately to implement this myself, so thanks again for the
> work.
>
> Ondrej
> _______________________________________________
> Cython-dev mailing list
> [email protected]
> http://codespeak.net/mailman/listinfo/cython-dev

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to