You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by "Chuan Yu Foo (JIRA)" <ji...@apache.org> on 2018/04/16 20:33:00 UTC
[jira] [Created] (BEAM-4091) Typehint annotations don't work with
@ptrasnform_fn annotation
Chuan Yu Foo created BEAM-4091:
----------------------------------
Summary: Typehint annotations don't work with @ptrasnform_fn annotation
Key: BEAM-4091
URL: https://issues.apache.org/jira/browse/BEAM-4091
Project: Beam
Issue Type: Bug
Components: sdk-py-core
Affects Versions: 2.4.0
Reporter: Chuan Yu Foo
Assignee: Ahmet Altay
Typehint annotations don't work with functions annotated with @ptransform_fn, but they do work with the equivalent classes.
The following is a minimal example illustrating this:
{code:python}
@beam.typehints.with_input_types(float)
@beam.typehints.with_output_types(bytes)
@beam.ptransform_fn
def _DoStuffFn(pcoll):
return pcoll | 'TimesTwo' >> beam.Map(lambda x: x * 2)
@beam.typehints.with_input_types(float)
@beam.typehints.with_output_types(bytes)
class _DoStuffClass(beam.PTransform):
def expand(self, pcoll):
return pcoll | 'TimesTwo' >> beam.Map(lambda x: x * 2)
{code}
With definitions as above, the class correctly fails the typecheck:
{code:python}
def class_correctly_fails():
p = beam.Pipeline(options=PipelineOptions(runtime_type_check=True))
_ = (p
| 'Create' >> beam.Create([1, 2, 3, 4, 5])
| 'DoStuff1' >> _DoStuffClass()
| 'DoStuff2' >> _DoStuffClass()
| 'Write' >> beam.io.WriteToText('/tmp/output'))
p.run().wait_until_finish()
# apache_beam.typehints.decorators.TypeCheckError: Input type hint violation at DoStuff1: expected <type 'float'>, got <type 'int'>
{code}
But the {{ptransform_fn}} incorrectly passes the typecheck:
{code:python}
def ptransform_incorrectly_passes():
p = beam.Pipeline(options=PipelineOptions(runtime_type_check=True))
_ = (p
| 'Create' >> beam.Create([1, 2, 3, 4, 5])
| 'DoStuff1' >> _DoStuffFn()
| 'DoStuff2' >> _DoStuffFn()
| 'Write' >> beam.io.WriteToText('/tmp/output'))
p.run().wait_until_finish()
# No error
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)