You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@beam.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2022/02/09 17:06:00 UTC

[jira] [Work logged] (BEAM-12920) Convert To Bare Types Fails on Generators in Python 3.9

     [ https://issues.apache.org/jira/browse/BEAM-12920?focusedWorklogId=723807&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-723807 ]

ASF GitHub Bot logged work on BEAM-12920:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 09/Feb/22 17:05
            Start Date: 09/Feb/22 17:05
    Worklog Time Spent: 10m 
      Work Description: tvalentyn opened a new pull request #16791:
URL: https://github.com/apache/beam/pull/16791


   Assume that bare generator types define simple generators.
   The only type of generators that beam currently handles are simple generators: https://github.com/apache/beam/blob/d7ee6b8c8b4fedb05d31d6554ab55a6d4bca0356/sdks/python/apache_beam/typehints/typehints.py#L1120
   
   This test started to fail on Python 3.9 because bare Generator instances on Python <3.9 were not truly 'bare' and still had __args__ defined, we defined inferred a hint for bare geneators and didn't fail. Preserving this behavior for Python 3.9+ as well. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@beam.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Issue Time Tracking
-------------------

            Worklog Id:     (was: 723807)
    Remaining Estimate: 0h
            Time Spent: 10m

> Convert To Bare Types Fails on Generators in Python 3.9
> -------------------------------------------------------
>
>                 Key: BEAM-12920
>                 URL: https://issues.apache.org/jira/browse/BEAM-12920
>             Project: Beam
>          Issue Type: Sub-task
>          Components: sdk-py-core
>    Affects Versions: 2.32.0
>         Environment: Python 3.9.7
> Linux Mint 20.2, Kernel: 5.4.0-84-generic
>            Reporter: Jonathan Hourany
>            Assignee: Valentyn Tymofieiev
>            Priority: P2
>             Fix For: Not applicable
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> In Python 3.9 the test [test_convert_bare_types|https://github.com/apache/beam/blob/6c1c19d6c711babf5f5f042fa465be20948caff6/sdks/python/apache_beam/typehints/native_type_compatibility.py#L40] fails when testing the following Generator test case
> {code:python}
> test_cases += [
>           (
>               'bare generator',
>               typing.Generator,
>               typehints.Generator[typehints.TypeVariable('T_co')]),
>       ]
> {code}
> Raising the following {{ValueError}}
> {noformat}
> ./sdks/python/apache_beam/typehints/native_type_compatibility_test.py::NativeTypeCompatibilityTest::test_convert_bare_types Failed: [undefined]ValueError: Unsupported Generator with no arguments.
> {noformat}
> ----
> The immediate cause may be stemming from [_get_args|https://github.com/apache/beam/blob/6c1c19d6c711babf5f5f042fa465be20948caff6/sdks/python/apache_beam/typehints/native_type_compatibility.py#L40] which attempts to access a type's ___args___ attribute. In Python 3.9 bare generators no longer instantiate with a default ___args___ attribute. Only when instantiated with args do they get one (see example below).
> However,  despite it's name the test doesn't create a generator that's totally bare, so the deeper cause may be coming from the way {{typinghints.Generator}} is constructed.
> h3. Examples
> {code:python}
> # Python 3.7.5
> In [1]: from typing import Generator
> In [2]: Generator.__args__
> Out[2]: (+T_co, -T_contra, +V_co)
> {code}
> ----
> {code:python}
> # Python 3.9.7
> In [1]: from typing import Generator
> In [2]: Generator.__args__
> ---------------------------------------------------------------------------
> AttributeError                            Traceback (most recent call last)
> <ipython-input-2-3e272b948083> in <module>
> ----> 1 Generator.__args__
> ~/.pyenv/versions/3.9.7/lib/python3.9/typing.py in __getattr__(self, attr)
>     704         if '__origin__' in self.__dict__ and not _is_dunder(attr):
>     705             return getattr(self.__origin__, attr)
> --> 706         raise AttributeError(attr)
>     707 
>     708     def __setattr__(self, attr, val):
> AttributeError: __args__
> In [3]: # Initializing with args, however, creates the needed attr
> In [4]: Generator[int, int, int].__args__
> Out[4]: (int, int, int)
> {code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)