[ 
https://issues.apache.org/jira/browse/BEAM-6588?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Robert Bradshaw updated BEAM-6588:
----------------------------------
    Description: 
If a type hint is specified for an input to beam.Filter, it attempts to infer 
the output type (as Iterable[input_type], consistent with FlatMap), but that 
inference appears to have a bug in it.

With the code:


{code:python}
@beam.typehints.with_input_types(int)
def OddFilter(data):
  return data % 2 == 0

def pipeline(root):
  base = root | beam.Create(xrange(100))
  next = base | beam.Filter(OddFilter)
{code}

The following error is returned:

{code:python}
  File "/google3/experimental/testproj/test_beam.py", line 26, in pipeline
    next = base | beam.Filter(OddFilter)
  File "/google3/third_party/py/apache_beam/transforms/core.py", line 1147, in 
Filter
    get_type_hints(wrapper).set_output_types(typehints.Iterable[output_hint])
  File "/google3/third_party/py/apache_beam/typehints/typehints.py", line 951, 
in __getitem__
    type_param, error_msg_prefix='Parameter to an Iterable hint'
  File "/google3/third_party/py/apache_beam/typehints/typehints.py", line 359, 
in validate_composite_type_param
    type_param.__class__.__name__))
TypeError: Parameter to an Iterable hint must be a non-sequence, a type, or a 
TypeConstraint. (<type 'int'>,) is an instance of tuple.
{code}

Explicitly specifying the output type (as beam.typehints.Iterable[int]) works 
fine.  The code in core.py seems to be correct, but I'm guessing it needs a 
derefence of the tuple to actually extract the type: 
http://google3/third_party/py/apache_beam/transforms/core.py?l=1145&rcl=228573657


  was:
If a type hint is specified for an input to beam.Filter, it attempts to infer 
the output type (as Iterable[input_type], consistent with FlatMap), but that 
inference appears to have a bug in it.

With the code:

@beam.typehints.with_input_types(int)
def OddFilter(data):
  return data % 2 == 0

def pipeline(root):
  base = root | beam.Create(xrange(100))
  next = base | beam.Filter(OddFilter)

The following error is returned:

  File "/google3/experimental/testproj/test_beam.py", line 26, in pipeline
    next = base | beam.Filter(OddFilter)
  File "/google3/third_party/py/apache_beam/transforms/core.py", line 1147, in 
Filter
    get_type_hints(wrapper).set_output_types(typehints.Iterable[output_hint])
  File "/google3/third_party/py/apache_beam/typehints/typehints.py", line 951, 
in __getitem__
    type_param, error_msg_prefix='Parameter to an Iterable hint'
  File "/google3/third_party/py/apache_beam/typehints/typehints.py", line 359, 
in validate_composite_type_param
    type_param.__class__.__name__))
TypeError: Parameter to an Iterable hint must be a non-sequence, a type, or a 
TypeConstraint. (<type 'int'>,) is an instance of tuple.

Explicitly specifying the output type (as beam.typehints.Iterable[int]) works 
fine.  The code in core.py seems to be correct, but I'm guessing it needs a 
derefence of the tuple to actually extract the type: 
http://google3/third_party/py/apache_beam/transforms/core.py?l=1145&rcl=228573657



> Error in inferring output typehints for beam.Filter
> ---------------------------------------------------
>
>                 Key: BEAM-6588
>                 URL: https://issues.apache.org/jira/browse/BEAM-6588
>             Project: Beam
>          Issue Type: New Feature
>          Components: sdk-py-core
>            Reporter: Robert Bradshaw
>            Assignee: Ahmet Altay
>            Priority: Major
>
> If a type hint is specified for an input to beam.Filter, it attempts to infer 
> the output type (as Iterable[input_type], consistent with FlatMap), but that 
> inference appears to have a bug in it.
> With the code:
> {code:python}
> @beam.typehints.with_input_types(int)
> def OddFilter(data):
>   return data % 2 == 0
> def pipeline(root):
>   base = root | beam.Create(xrange(100))
>   next = base | beam.Filter(OddFilter)
> {code}
> The following error is returned:
> {code:python}
>   File "/google3/experimental/testproj/test_beam.py", line 26, in pipeline
>     next = base | beam.Filter(OddFilter)
>   File "/google3/third_party/py/apache_beam/transforms/core.py", line 1147, 
> in Filter
>     get_type_hints(wrapper).set_output_types(typehints.Iterable[output_hint])
>   File "/google3/third_party/py/apache_beam/typehints/typehints.py", line 
> 951, in __getitem__
>     type_param, error_msg_prefix='Parameter to an Iterable hint'
>   File "/google3/third_party/py/apache_beam/typehints/typehints.py", line 
> 359, in validate_composite_type_param
>     type_param.__class__.__name__))
> TypeError: Parameter to an Iterable hint must be a non-sequence, a type, or a 
> TypeConstraint. (<type 'int'>,) is an instance of tuple.
> {code}
> Explicitly specifying the output type (as beam.typehints.Iterable[int]) works 
> fine.  The code in core.py seems to be correct, but I'm guessing it needs a 
> derefence of the tuple to actually extract the type: 
> http://google3/third_party/py/apache_beam/transforms/core.py?l=1145&rcl=228573657



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

Reply via email to