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!

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? 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


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. 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

Reply via email to