+1. For example, one might do something like

        split_lines_result = (lines
                              |
beam.ParDo(SplitLinesToWordsFn().with_output_types(
                                    beam.typehints.Generator[int],

SplitLinesToWordsFn.OUTPUT_TAG_SHORT_WORDS=beam.typehints.Generator[unicode],

SplitLinesToWordsFn.OUTPUT_TAG_CHARACTER_COUNT=beam.typehints.Generator[unicode],
                              )).with_outputs(
                                  SplitLinesToWordsFn.OUTPUT_TAG_SHORT_WORDS,

SplitLinesToWordsFn.OUTPUT_TAG_CHARACTER_COUNT,
                                  main='words')
                             )

We could consider letting these be related positionally too.


On Mon, Dec 11, 2017 at 4:50 PM, Ahmet Altay <al...@google.com> wrote:
> Hi Norio,
>
> Thank you for your interest. If you would like to work on this I can assign
> the JIRA to you. I do not think this change in sufficient or correct. This
> reads as if SplitLinesToWordsFn returns a Tuple of things, however instead
> it produces three unrelated collections of different types.
>
> I think the work for fixing the issue should be:
> - Clarifying what the API needs to look like for typehints in case of
> multiple outputs.
> - Updating documentation for that (pydocs &
> https://beam.apache.org/documentation/sdks/python-type-safety/).
> - Adding examples. At that point we can choose to either update current
> examples or add new examples.
>
> Thank you,
> Ahmet
>
> On Mon, Dec 11, 2017 at 2:48 AM, Akagi Norio <redtree.dev1...@gmail.com>
> wrote:
>>
>> Hi,
>>
>> I’m working on a task BEAM-3280 (Add typehints with TaggedOutput) and just
>> want to clarify before I send a PR.
>> https://issues.apache.org/jira/browse/BEAM-3280
>>
>> Is it sufficient to modify the code in
>> apache_beam.cookbook.multiple_output_pardo.py like below ?
>>
>> # with_outputs allows accessing the explicitly tagged outputs of a DoFn.
>>         split_lines_result = (lines
>>                               |
>> beam.ParDo(SplitLinesToWordsFn().with_output_types(
>>                                   beam.typehints.Tuple[
>>                                     beam.typehints.Generator[unicode],
>>                                     beam.typehints.Generator[unicode],
>>                                     beam.typehints.Generator[int],
>>                                   ],
>>                               )).with_outputs(
>>
>> SplitLinesToWordsFn.OUTPUT_TAG_SHORT_WORDS,
>>
>> SplitLinesToWordsFn.OUTPUT_TAG_CHARACTER_COUNT,
>>                                   main='words')
>>                              )
>>
>> Or do you expect something different to add a typehint to multiple
>> outputs?
>>
>> Regards,
>> Norio Akagi
>
>

Reply via email to