[ 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)