You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@beam.apache.org by "Udi Meiri (Jira)" <ji...@apache.org> on 2019/11/20 16:53:00 UTC

[jira] [Comment Edited] (BEAM-8464) Python typehints: merge unions of tuples of the same size

    [ https://issues.apache.org/jira/browse/BEAM-8464?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16978590#comment-16978590 ] 

Udi Meiri edited comment on BEAM-8464 at 11/20/19 4:52 PM:
-----------------------------------------------------------

We appear to have the check you're referring to (https://github.com/apache/beam/blob/db11e06184cad5913cf45e694748f4665bf2f097/sdks/python/apache_beam/typehints/typehints.py#L1164-L1165)
but it didn't work in this case for some reason.
It'd make more sense to use the rule you mentioned than to add more logic to merge Unions.

We are currently maintaining our own rules in typehints.py, until an off-the-shelf library is available (I'm not aware of any, and pytypes doesn't support Py3.7 yet).



was (Author: udim):
We appear to have the check you're referring to (https://github.com/apache/beam/blob/db11e06184cad5913cf45e694748f4665bf2f097/sdks/python/apache_beam/typehints/typehints.py#L1164-L1165)
but it didn't work in this case for some reason.

We are currently maintaining our own rules in typehints.py, until an off-the-shelf library is available (I'm not aware of any, and pytypes doesn't support Py3.7 yet).


> Python typehints: merge unions of tuples of the same size
> ---------------------------------------------------------
>
>                 Key: BEAM-8464
>                 URL: https://issues.apache.org/jira/browse/BEAM-8464
>             Project: Beam
>          Issue Type: Bug
>          Components: sdk-py-core
>            Reporter: Udi Meiri
>            Priority: Minor
>
> When inferring PCollection element types, merge Unions of identically-sized Tuples:
> Union[Tuple[a, b], Tuple[c, d]] => Tuple[Union[a, c], Union[b, d]]
> cc: [~robertwb]
> Example:
> {code}
> def fn(element: Tuple[str, Any]):
>   ....
> p | Create([('a', None), ('b', None)] + [('c', 1), ('d', 3)]) | ParDo(fn)
> {code}
> This pipeline will fail with something like:
> {code}
> apache_beam.typehints.decorators.TypeCheckError: Type hint violation for 'ParDo': requires Tuple[str, Any] but got Union[Tuple[str, NoneType], Tuple[str, int]] for element
> {code}
> In test form:
> {code}
>   def test_union_of_tuple(self):
>     self.assertCompatible(
>         typehints.Tuple[str, typehints.Any],
>         typehints.Union[typehints.Tuple[str, type(None)],
>                         typehints.Tuple[str, int]])
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)