On Sep 26, 2008, at 6:04 PM, cesarnda wrote:

> Actually I wanted it less yellow, if I do that or only
>
> codeSet = []
>
> or
>
> codeSet = ([])
>
> the result is the same.

You can't create a list in a "less yellow" way than calling PyList_New 
(0), and that's all its doing so you're optimal.

- Robert

> On Sep 26, 1:43 pm, Robert Bradshaw <[EMAIL PROTECTED]>
> wrote:
>> On Sep 26, 2008, at 8:21 AM, cesarnda wrote:
>>
>>
>>
>>
>>
>>> I already did that and I get this:
>>
>>>  cdef list codeSet = []
>>
>>>   __pyx_1 = PyList_New(0); if (unlikely(!__pyx_1)) {__pyx_filename =
>>> __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto
>>> __pyx_L1_error;}
>>>   __pyx_v_codeSet = __pyx_1;
>>>   __pyx_1 = 0;
>>
>>> and if I don't do it that way I get:
>>
>>>  addVector = []
>>
>>>           __pyx_2 = PyList_New(0); if (unlikely(!__pyx_2))
>>> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno =
>>> __LINE__; goto __pyx_L1_error;}
>>>           Py_DECREF(__pyx_v_addVector);
>>>           __pyx_v_addVector = ((PyObject *)__pyx_2);
>>>           __pyx_2 = 0;
>>
>> Yes, that is correct. Is this not what you want?
>>
>>
>>
>>> On Sep 26, 2:55 am, Robert Bradshaw <[EMAIL PROTECTED]>
>>> wrote:
>>>> On Sep 26, 2008, at 12:09 AM, Simon King wrote:
>>
>>>>> On Sep 25, 6:45 pm, cesarnda <[EMAIL PROTECTED]> wrote:
>>>>> ...
>>>>>>   result = []
>>>>> ...
>>>>>>       result.append(n)
>>
>>>>> ...
>>>>>> if I compile in the notebook I get a html file showing me the
>>>>>> following lines in yellow:
>>
>>>>>> def primes(int kmax):
>>>>>> result = []
>>>>>> result.append(n)
>>>>>> return result
>>
>>>>>> how can I modify this example to avoid the yellow lines?
>>
>>>>> As other people pointed out, there is not much hope for the "def"
>>>>> and
>>>>> the "return" line.
>>
>>>>> But wouldn't it be possible to do
>>>>>   cdef list result = []
>>
>>>> Yep, you could do this. The resulting C code calls PyList_New(0)
>>>> which is the fastest way to make a list.
>>
>>>>> And isn't there a quick, dirty and potentially unsafe way of
>>>>> appending
>>>>> to a list?
>>
>>>> Since it knows result is a list (due to the cdef above), it uses
>>>> PyList_Append, the fastest way to append to a list.
>>
>>>>> Or at least for assigning a value to some list entry? I
>>>>> think I have seen it somewhere, but I don't remember the name.
>>
>>>> Yep. Currently it calls __Pyx_SetItemInt which does an inline  
>>>> runtime
>>>> boundscheck and check for a list, and if it's OK uses a macro to
>>>> reset the specified entry right there. We could (should) optimize
>>>> this in the case it already knows it's a list, but with good branch
>>>> prediction it's probably within 5% of as fast as it could be  
>>>> period.
>>
>>>> - Robert
> >


--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to