On Tue, Aug 2, 2011 at 11:29 AM, William Stein <wst...@gmail.com> wrote:
> On Tue, Aug 2, 2011 at 11:09 AM, VictorMiller <victorsmil...@gmail.com> wrote:
>> I've written a bunch of functions (some organized in classes) to do
>> some large computations in a particular finite field (always GF(2^n)
>> for some odd n).  This seems to work fine.  I'd like the computation
>> to be as fast as possible, so the first thing I did was to copy
>> the .py file to a .pyx file.   The good news is that the compiled
>> cython is at least 30% faster (sometimes more) than the
>> interpreted .py version.  The bad news is that it gives different
>> results!  In trying to track down where things go awry, I made the
>> following declaration in each
>>
>> from sage.misc.decorators import sage_wrap
>> from string import join
>> def logged(func):
>>    @sage_wrap(func)
>>    def with_logging(*args, **kwds):
>>         print func.__name__ + '(' + join([str(_) for _ in args],',')
>> + ')'
>>         return func(*args,**kwds)
>>     return with_logging
>>
>>
>> I then put
>> @logged
>>
>> in from of the defs of a bunch of functions.
>>
>> This works as expected with .py version, but when I try to compile
>> the .pyx version I get the message:
>>
>> .... in update_wrapper
>> setattr(wrapper, attr, getattr(wrapped, attr))
>> AttributeError: attribute '__doc__' of 'builtin_function_or_method'
>> objects not writable
>>
>> I think that I understand what's going on here, but are there any
>
> You often can't use decorators with Cython code,

yet...

> since it is compiled (not dynamic).
>
>> suggestions as to how to get to the bottom of the differences between
>> the cython compiled version and the interpreted version?
>
> Put in print statements?

You could also write your own with_logging that doesn't try to access
__name__ or __doc__ and decorate with that.

I'm very curious what goes awry. Did you make any changes other than
changing the file from .py to .pyx and compiling it?

- Robert

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org

Reply via email to