[Cython] CF based type inference

Stefan Behnel stefan_ml at behnel.de
Fri May 11 17:56:04 CEST 2012


Robert Bradshaw, 11.05.2012 17:48:
> On Tue, May 8, 2012 at 11:22 PM, Stefan Behnel <stefan_ml at behnel.de> wrote:
>> Robert Bradshaw, 09.05.2012 00:12:
>>> On Tue, May 8, 2012 at 6:47 AM, Vitja Makarov wrote:
>>>> 2012/5/8 Stefan Behnel:
>>>>> Vitja has rebased the type inference on the control flow, so I wonder if
>>>>> this will enable us to properly infer this:
>>>>>
>>>>>  def partial_validity():
>>>>>    """
>>>>>    >>> partial_validity()
>>>>>    ('Python object', 'double', 'str object')
>>>>>    """
>>>>>    a = 1.0
>>>>>    b = a + 2   # definitely double
>>>>>    a = 'test'
>>>>>    c = a + 'toast'  # definitely str
>>>>>    return typeof(a), typeof(b), typeof(c)
>>>>>
>>>>> I think, what is mainly needed for this is that a NameNode with an
>>>>> undeclared type should not report its own entry as dependency but that of
>>>>> its own cf_assignments. Would this work?
>>>>>
>>>>> (Haven't got the time to try it out right now, so I'm dumping it here.)
>>>>>
>>>>
>>>> Yeah, that might work. The other way to go is to split entries:
>>>>
>>>>  def partial_validity():
>>>>   """
>>>>   >>> partial_validity()
>>>>   ('str object', 'double', 'str object')
>>>>   """
>>>>   a_1 = 1.0
>>>>   b = a_1 + 2   # definitely double
>>>>   a_2 = 'test'
>>>>   c = a_2 + 'toast'  # definitely str
>>>>   return typeof(a_2), typeof(b), typeof(c)
>>>>
>>>> And this should work better because it allows to infer a_1 as a double
>>>> and a_2 as a string.
>>>
>>> This already works, right?
>>
>> It would work if it was implemented. *wink*
> 
> Well, we don't infer str

Yes we do, there are even some optimisations for str. It's well defined for
both Py2 and Py3, just not the same on both, so the final code to use for
them is C compile time dependent.

I meant to say that entry splitting isn't implemented.

Stefan


More information about the cython-devel mailing list