[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