[ 
https://issues.apache.org/jira/browse/BEAM-7377?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16864459#comment-16864459
 ] 

Valentyn Tymofieiev commented on BEAM-7377:
-------------------------------------------

As of Beam 2.13.0, type inference on Python 3.6+ is limited, however the nature 
of limitations is such that when a type cannot be correctly inferred, we 
typeinference falls back to the least restrictive typehint "Any", this means 
that a pipeline may miss run-time type-check validation, however pipeline 
execution does not fail.

Following test snippet illustrates current limitations:

{noformat}

    options = PipelineOptions([])                                               
   
    options.view_as(StandardOptions).streaming = True                           
   
    p = TestPipeline(options=options)

    pcoll = (p                                                                  
   
             | ReadFromPubSub('projects/project/topics/a_topic',                
   
                              None, 'a_label', with_attributes=True,            
   
                              timestamp_attribute='time')                       
   
             | beam.Map(lambda x: x))                 
                                                                                
      
    self.assertEqual(PubsubMessage, pcoll.element_type)   # Fails on Python 3.6 
since pcoll.element_type evaluates to Any
{noformat}

However users could help supply additional annotations via .with_output_types() 
as a workaround, for example: 


{noformat}
    pcoll = (p                                                                  
   
             | ReadFromPubSub('projects/project/topics/a_topic',                
   
                              None, 'a_label', with_attributes=True,            
   
                              timestamp_attribute='time')                       
   
             | beam.Map(lambda x: x).with_output_types(PubsubMessage))          
       
                                                                                
      
    self.assertEqual(PubsubMessage, pcoll.element_type)   # Passes on Python 
3.6.

{noformat}

That said, there is an outstanding https://github.com/apache/beam/pull/8856 
that improves type inference for Python 3.6+ and addresses current limitations. 
 



> Verify that Typehints annotations degrade gracefully on Py3.6+ until 
> BEAM-2713 is resolved
> ------------------------------------------------------------------------------------------
>
>                 Key: BEAM-7377
>                 URL: https://issues.apache.org/jira/browse/BEAM-7377
>             Project: Beam
>          Issue Type: Sub-task
>          Components: sdk-py-core
>    Affects Versions: 2.14.0
>            Reporter: Valentyn Tymofieiev
>            Assignee: Valentyn Tymofieiev
>            Priority: Blocker
>
> cc: [~udim]



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to