[Cython] Type inference question

Vitja Makarov vitja.makarov at gmail.com
Sat Nov 26 20:00:49 CET 2011


2011/11/26 Robert Bradshaw <robertwb at math.washington.edu>:
> On Sat, Nov 26, 2011 at 8:10 AM, Vitja Makarov <vitja.makarov at gmail.com> wrote:
>> Hi!
>>
>> I'm now trying to make inlined generator expressions work again. And I
>> found strange thing:
>>
>> inlined_generator_expression.pyx:
>>
>> def range_sum(int N):
>>    """
>>    >>> sum(range(10))
>>    45
>>    >>> range_sum(10)
>>    45
>>    """
>>    result = sum(i for i in range(N))
>>    return result
>>
>> 'i' is expected to be integer, but it isn't
>>
>> So I tried simple example and 'i' is inferred as object:
>>
>> def bar(int N):
>>    cdef int result = 0
>>    for i in range(N):
>>        result += i
>>    return result
>>
>> So, I'm wondering should it be inferred as int or not?
>
> It's not because it's used in an arithmetic expression that might
> overflow. You can decorate this with @cython.infer_types(True) or use
> doubles to get the inference you want.
>

Ok. So I guess something changed after inlined genexps was disabled:

https://github.com/cython/cython/blob/master/tests/run/inlined_generator_expressions.pyx#L16

This test relies on integer range.


I'm also a little bit concerned about MarkAssignments I think it's
better to merge it with CreateControlFlow.
For instance, type inference doesn't work for comprehensions and will
not work for inlined genexprs.

-- 
vitja.


More information about the cython-devel mailing list