Robert Bradshaw created BEAM-6588:
-------------------------------------
Summary: 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
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
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)