Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Versions > 0.13 no longer provide autocompletions for nested submodules #995

Closed
geewrd opened this issue Feb 6, 2020 · 12 comments
Closed

Comments

@geewrd
Copy link

geewrd commented Feb 6, 2020

Issue

After upgrading from Jedi 0.13.3 I am no longer getting full autocompletion. It seems like autocompletion doesn't work at all for anything inside submodules.

For example, on version 0.16, I get completions for a module class.
Screen Shot 2020-02-06 at 10 56 04 AM

but I get nothing for a class in a submodule
Screen Shot 2020-02-06 at 10 44 12 AM

If I downgrade to jedi 0.13.3, I get the autocompletions I'd expect
Screen Shot 2020-02-06 at 10 48 39 AM

Steps to reproduce

  1. Install Jedi 0.13.3, observe auto-completion working for submodules
  2. Upgrade Jedi to > 0.13, submodule completions no longer work

Output of “:verbose JediDebugInfo”

Jedi-vim debug information

jedi-vim version
  • jedi-vim git version: 8d24b83
  • jedi git submodule status: 3ad3dc08b8bf9d749b2d0d9fca038657711c82f2 pythonx/jedi (v0.16.0-11-g3ad3dc08)
  • parso git submodule status: c864ca60d1a2f36524a4f79013a7de223e65e19d pythonx/parso (v0.6.0)
Global Python

Using Python version 3 to access Jedi.

  • global sys.executable: /Users/blah/.pyenv/versions/3.6.10/bin/python3
  • global sys.version: 3.6.10 (default, Jan 30 2020, 13:26:11), [GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.33.17)]
  • global site module: /Users/blah/.pyenv/versions/3.6.10/lib/python3.6/site.py
Jedi
  • path: /Users/blah/.config/nvim/plugged/jedi-vim/pythonx/jedi/jedi/__init__.py
  • version: 0.16.1
Jedi environment: <SameEnvironment: 3.6.10 in /Users/blah/.pyenv/versions/3.6.10>
  • executable: /Users/blah/.pyenv/versions/3.6.10/bin/python3
  • sys_path:
    • /Users/blah/.pyenv/versions/3.6.10/lib/python36.zip
    • /Users/blah/.pyenv/versions/3.6.10/lib/python3.6
    • /Users/blah/.pyenv/versions/3.6.10/lib/python3.6/lib-dynload
    • /Users/blah/.pyenv/versions/3.6.10/lib/python3.6/site-packages
Known environments
  • <Environment: 3.6.10 in /Users/blah/.pyenv/versions/3.6.10> (/Users/nate.rodd/.pyenv/versions/3.6.10/bin/python3.6)

  • <Environment: 2.7.16 in /System/Library/Frameworks/Python.framework/Versions/2.7> (/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python)

Settings
  omnifunc=jedi#completions
	Last set from ~/.config/nvim/plugged/jedi-vim/autoload/jedi.vim line 741
  completeopt=noinsert,menuone,noselect
	Last set from ~/.config/nvim/plugged/jedi-vim/autoload/jedi.vim line 719

:version


NVIM v0.4.3
Build type: Release
LuaJIT 2.0.5
Compilation: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/build/config -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/src -I/usr/local/include -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/deps-build/include -I/usr/local/opt/gettext/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/build/src/nvim/auto -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/build/include
Compiled by [email protected]

Features: +acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/local/Cellar/neovim/0.4.3/share/nvim"

Run :checkhealth for more info

:messages


:scriptnames
  1: ~/.config/nvim/init.vim
  2: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/syntax/syntax.vim
  3: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/syntax/synload.vim
  4: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/syntax/syncolor.vim
  5: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/filetype.vim
  6: ~/.local/share/nvim/site/autoload/plug.vim
  7: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/ftoff.vim
  8: ~/.config/nvim/plugged/vim-prettier/ftdetect/css.vim
  9: ~/.config/nvim/plugged/vim-prettier/ftdetect/graphql.vim
 10: ~/.config/nvim/plugged/vim-prettier/ftdetect/html.vim
 11: ~/.config/nvim/plugged/vim-prettier/ftdetect/javascript.vim
 12: ~/.config/nvim/plugged/vim-prettier/ftdetect/json.vim
 13: ~/.config/nvim/plugged/vim-prettier/ftdetect/less.vim
 14: ~/.config/nvim/plugged/vim-prettier/ftdetect/markdown.vim
 15: ~/.config/nvim/plugged/vim-prettier/ftdetect/scss.vim
 16: ~/.config/nvim/plugged/vim-prettier/ftdetect/typescript.vim
 17: ~/.config/nvim/plugged/vim-prettier/ftdetect/vue.vim
 18: ~/.config/nvim/plugged/vim-prettier/ftdetect/yaml.vim
 19: ~/.config/nvim/plugged/vim-vue/ftdetect/vue.vim
 20: ~/.config/nvim/plugged/vim-json/ftdetect/json.vim
 21: ~/.config/nvim/plugged/Dockerfile.vim/ftdetect/Dockerfile.vim
 22: ~/.config/nvim/plugged/Dockerfile.vim/ftdetect/docker-compose.vim
 23: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/ftplugin.vim
 24: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/indent.vim
 25: ~/.config/nvim/plugged/ale/plugin/ale.vim
 26: ~/.config/nvim/plugged/ale/autoload/ale/events.vim
 27: ~/.config/nvim/plugged/jedi-vim/plugin/jedi.vim
 28: ~/.config/nvim/plugged/black/plugin/black.vim
 29: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/autoload/provider/python3.vim
 30: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/autoload/provider/pythonx.vim
 31: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/autoload/remote/host.vim
 32: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/autoload/provider.vim
 33: ~/.config/nvim/plugged/emmet-vim/plugin/emmet.vim
 34: ~/.config/nvim/plugged/vim-sensible/plugin/sensible.vim
 35: ~/.config/nvim/plugged/coverage-highlight.vim/plugin/coverage-highlight.vim
 36: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/gzip.vim
 37: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/health.vim
 38: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/man.vim
 39: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/matchit.vim
 40: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/pack/dist/opt/matchit/plugin/matchit.vim
 41: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/matchparen.vim
 42: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/netrwPlugin.vim
 43: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/rplugin.vim
 44: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/shada.vim
 45: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/spellfile.vim
 46: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/tarPlugin.vim
 47: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/tohtml.vim
 48: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/tutor.vim
 49: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/zipPlugin.vim
 50: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/syntax/python.vim
 51: ~/.config/nvim/plugged/jedi-vim/after/syntax/python.vim
 52: ~/.config/nvim/plugged/jedi-vim/autoload/jedi.vim
 53: ~/.config/nvim/plugged/jedi-vim/ftplugin/python/jedi.vim
 54: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/ftplugin/python.vim
 55: ~/.config/nvim/plugged/jedi-vim/after/ftplugin/python/jedi.vim
 56: ~/.config/nvim/plugged/vim-python-pep8-indent/indent/python.vim
 57: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/indent/python.vim
 58: ~/.config/nvim/plugged/ale/autoload/ale.vim
 59: ~/.config/nvim/plugged/ale/autoload/ale/util.vim
 60: ~/.config/nvim/plugged/ale/autoload/ale/linter.vim
 61: ~/.config/nvim/plugged/ale/ale_linters/python/bandit.vim
 62: ~/.config/nvim/plugged/ale/ale_linters/python/flake8.vim
 63: ~/.config/nvim/plugged/ale/ale_linters/python/mypy.vim
 64: ~/.config/nvim/plugged/ale/ale_linters/python/prospector.vim
 65: ~/.config/nvim/plugged/ale/ale_linters/python/pycodestyle.vim
 66: ~/.config/nvim/plugged/ale/ale_linters/python/pydocstyle.vim
 67: ~/.config/nvim/plugged/ale/ale_linters/python/pyflakes.vim
 68: ~/.config/nvim/plugged/ale/ale_linters/python/pylama.vim
 69: ~/.config/nvim/plugged/ale/ale_linters/python/pylint.vim
 70: ~/.config/nvim/plugged/ale/ale_linters/python/pyls.vim
 71: ~/.config/nvim/plugged/ale/ale_linters/python/pyre.vim
 72: ~/.config/nvim/plugged/ale/ale_linters/python/vulture.vim
 73: ~/.config/nvim/plugged/ale/autoload/ale/engine.vim
 74: ~/.config/nvim/plugged/ale/autoload/ale/command.vim
 75: ~/.config/nvim/plugged/ale/autoload/ale/python.vim
 76: ~/.config/nvim/plugged/ale/autoload/ale/path.vim
 77: ~/.config/nvim/plugged/ale/autoload/ale/history.vim
 78: ~/.config/nvim/plugged/ale/autoload/ale/job.vim
 79: ~/.config/nvim/plugged/ncm2/autoload/ncm2.vim
 80: ~/.config/nvim/plugged/nvim-yarp/autoload/yarp.vim
 81: ~/.config/nvim/plugged/nvim-yarp/autoload/yarp/core.vim
 82: ~/.config/nvim/plugged/nvim-yarp/autoload/yarp/pyx.vim
 83: ~/.config/nvim/plugged/ale/autoload/ale/cursor.vim
 84: ~/.config/nvim/plugged/ncm2-jedi/ncm2-plugin/ncm2_jedi.vim
 85: ~/.config/nvim/plugged/ncm2-jedi/autoload/ncm2_jedi.vim
 86: ~/.config/nvim/plugged/ncm2-tern/ncm2-plugin/ncm2_tern.vim
 87: ~/.config/nvim/plugged/ncm2-tern/autoload/ncm2_tern.vim
 88: ~/.config/nvim/plugged/ncm2-cssomni/ncm2-plugin/ncm2_cssomni.vim
 89: ~/.config/nvim/plugged/ncm2-bufword/ncm2-plugin/ncm2_bufword.vim
 90: ~/.config/nvim/plugged/ncm2-bufword/autoload/ncm2_bufword.vim
 91: ~/.config/nvim/plugged/ncm2-path/ncm2-plugin/ncm2_path.vim
 92: ~/.config/nvim/plugged/ncm2-path/autoload/ncm2_path.vim
 93: ~/.config/nvim/plugged/ale/autoload/ale/sign.vim
 94: ~/.config/nvim/plugged/ale/autoload/ale/list.vim
 95: ~/.config/nvim/plugged/ale/autoload/ale/highlight.vim
 96: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/autoload/provider/clipboard.vim
@geewrd geewrd changed the title Versions > 0.13 no longer provide autocompletions for nested classes Versions > 0.13 no longer provide autocompletions for nested submodules Feb 6, 2020
@davidhalter
Copy link
Owner

Thanks for the good report! Is there a way you can paste the output if you complete for both (0.13 and 0.16) after :call jedi#enable_debugging()?

@geewrd
Copy link
Author

geewrd commented Feb 7, 2020

Hopefully this is what you mean.

0.13.3 - works

Jedi-vim debug information

jedi-vim version
  • jedi-vim git version: 8d24b83
  • jedi git submodule status: 3ad3dc08b8bf9d749b2d0d9fca038657711c82f2 pythonx/jedi (v0.16.0-11-g3ad3dc08)
  • parso git submodule status: c864ca60d1a2f36524a4f79013a7de223e65e19d pythonx/parso (v0.6.0)
Global Python

Using Python version 3 to access Jedi.

  • global sys.executable: /Users/nate.rodd/.pyenv/versions/3.6.10/bin/python3
  • global sys.version: 3.6.10 (default, Jan 30 2020, 13:26:11), [GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.33.17)]
  • global site module: /Users/nate.rodd/.pyenv/versions/3.6.10/lib/python3.6/site.py
Jedi
  • path: /Users/nate.rodd/.config/nvim/plugged/jedi-vim/pythonx/jedi/jedi/__init__.py
  • version: 0.16.1
Jedi environment: <SameEnvironment: 3.6.10 in /Users/nate.rodd/.pyenv/versions/3.6.10>
  • executable: /Users/nate.rodd/.pyenv/versions/3.6.10/bin/python3
  • sys_path:
    • /Users/nate.rodd/.pyenv/versions/3.6.10/lib/python36.zip
    • /Users/nate.rodd/.pyenv/versions/3.6.10/lib/python3.6
    • /Users/nate.rodd/.pyenv/versions/3.6.10/lib/python3.6/lib-dynload
    • /Users/nate.rodd/.pyenv/versions/3.6.10/lib/python3.6/site-packages
Known environments

dbg: Start environment subprocess '/Users/nate.rodd/.pyenv/shims/python3.8'
warning: stderr output: pyenv: python3.8: command not found
warning: stderr output:
warning: stderr output: The `python3.8' command exists in these Python versions:
warning: stderr output: 3.8.1
warning: stderr output:
dbg: Start environment subprocess '/Users/nate.rodd/.pyenv/versions/3.6.10/bin/python3.6'
dbg: Start environment subprocess '/usr/bin/python2.7'

  • <Environment: 3.6.10 in /Users/nate.rodd/.pyenv/versions/3.6.10> (/Users/nate.rodd/.pyenv/versions/3.6.10/bin/python3.6)

  • <Environment: 2.7.16 in /System/Library/Frameworks/Python.framework/Versions/2.7> (/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python)

Settings
  omnifunc=jedi#completions
	Last set from ~/.config/nvim/plugged/jedi-vim/autoload/jedi.vim line 741
  completeopt=noinsert,menuone,noselect
	Last set from ~/.config/nvim/plugged/jedi-vim/autoload/jedi.vim line 719

:version


NVIM v0.4.3
Build type: Release
LuaJIT 2.0.5
Compilation: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/build/config -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/src -I/usr/local/include -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/deps-build/include -I/usr/local/opt/gettext/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/build/src/nvim/auto -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/build/include
Compiled by [email protected]

Features: +acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/local/Cellar/neovim/0.4.3/share/nvim"

Run :checkhealth for more info

:messages

         dbg: infer_node <Name: _C@173,15>@(173, 15) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: _C@173,15> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>]
          dbg: infer_expr_stmt <ExprStmt: _C = TypeVar("_C", bound=type)@37,0> (<Name: _C@37,0>)
</details>
<details><summary>0.16.0 - doesn't work</summary>

#### Jedi-vim debug information


##### jedi-vim version


 - jedi-vim git version: 8d24b83
 - jedi git submodule status:  3ad3dc08b8bf9d749b2d0d9fca038657711c82f2 pythonx/jedi (v0.16.0-11-g3ad3dc08)
 - parso git submodule status:  c864ca60d1a2f36524a4f79013a7de223e65e19d pythonx/parso (v0.6.0)


##### Global Python


Using Python version 3 to access Jedi.
 - global sys.executable: `/Users/nate.rodd/.pyenv/versions/3.6.10/bin/python3`
 - global sys.version: `3.6.10 (default, Jan 30 2020, 13:26:11), [GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.33.17)]`
 - global site module: `/Users/nate.rodd/.pyenv/versions/3.6.10/lib/python3.6/site.py`

##### Jedi

 - path: `/Users/nate.rodd/.config/nvim/plugged/jedi-vim/pythonx/jedi/jedi/__init__.py`
 - version: 0.16.1

##### Jedi environment: <SameEnvironment: 3.6.10 in /Users/nate.rodd/.pyenv/versions/3.6.10>


 - executable: /Users/nate.rodd/.pyenv/versions/3.6.10/bin/python3
 - sys_path:
    - `/Users/nate.rodd/.pyenv/versions/3.6.10/lib/python36.zip`
    - `/Users/nate.rodd/.pyenv/versions/3.6.10/lib/python3.6`
    - `/Users/nate.rodd/.pyenv/versions/3.6.10/lib/python3.6/lib-dynload`
    - `/Users/nate.rodd/.pyenv/versions/3.6.10/lib/python3.6/site-packages`

##### Known environments


dbg: Start environment subprocess '/Users/nate.rodd/.pyenv/shims/python3.8'
warning: stderr output: pyenv: python3.8: command not found
warning: stderr output: 
warning: stderr output: The `python3.8' command exists in these Python versions:
warning: stderr output:   3.8.1
warning: stderr output: 
dbg: Start environment subprocess '/Users/nate.rodd/.pyenv/versions/3.6.10/bin/python3.6'
dbg: Start environment subprocess '/usr/bin/python2.7'
 - <Environment: 3.6.10 in /Users/nate.rodd/.pyenv/versions/3.6.10> (/Users/nate.rodd/.pyenv/versions/3.6.10/bin/python3.6)

 - <Environment: 2.7.16 in /System/Library/Frameworks/Python.framework/Versions/2.7> (/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python)



##### Settings


omnifunc=jedi#completions
Last set from ~/.config/nvim/plugged/jedi-vim/autoload/jedi.vim line 741
completeopt=noinsert,menuone,noselect
Last set from ~/.config/nvim/plugged/jedi-vim/autoload/jedi.vim line 719



#### :version

NVIM v0.4.3
Build type: Release
LuaJIT 2.0.5
Compilation: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/build/config -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/src -I/usr/local/include -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/deps-build/include -I/usr/local/opt/gettext/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/build/src/nvim/auto -I/tmp/neovim-20191107-85913-1wbgqz6/neovim-0.4.3/build/include
Compiled by [email protected]

Features: +acl +iconv +tui
See ":help feature-compile"

system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/usr/local/Cellar/neovim/0.4.3/share/nvim"

Run :checkhealth for more info



#### :messages
     dbg: context.goto <Name: _C@173,15> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>]
      dbg: infer_expr_stmt <ExprStmt: _C = TypeVar("_C", bound=type)@37,0> (<Name: _C@37,0>)
       dbg: infer_node PythonNode(atom_expr, [<Name: TypeVar@37,5>, PythonNode(trailer, [<Operator: (>, PythonNode(arglist, [<String: "_C">, <Operator: ,>, PythonNode(argument, [<Name: bound@37,19>, <Operator: =>, <Name: type@37,25>])]), <Operator: )>])])@(37, 5) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
        dbg: infer_node <Name: TypeVar@37,5>@(37, 5) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
        dbg: context.goto <Name: TypeVar@37,5> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=TypeVar start_pos=(12, 4)>]
        speed: import (<Name: typing@1,5>,) StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>) 0.19543004035949707
        dbg: context.goto <Name: TypeVar@12,4> in (<TypingModuleWrapper: typing@3-646 is_stub=True>): [TypingModuleName(<StubName: string_name=TypeVar start_pos=(13, 0)>)]
        dbg: context.names_to_types: [TypingModuleName(<StubName: string_name=TypeVar start_pos=(13, 0)>)] -> S{TypeVarClass(TypeVar)}
        dbg: after import: S{TypeVarClass(TypeVar)}
        dbg: context.names_to_types: [<TreeNameDefinition: string_name=TypeVar start_pos=(12, 4)>] -> S{TypeVarClass(TypeVar)}
       dbg: infer_trailer: PythonNode(trailer, [<Operator: (>, PythonNode(arglist, [<String: "_C">, <Operator: ,>, PythonNode(argument, [<Name: bound@37,19>, <Operator: =>, <Name: type@37,25>])]), <Operator: )>]) in S{TypeVarClass(TypeVar)}
       dbg: Start: Resolve lazy value wrapper
       dbg: End: Resolve lazy value wrapper
       dbg: execute: TypeVarClass(TypeVar) <TreeArguments: PythonNode(arglist, [<String: "_C">, <Operator: ,>, PythonNode(argument, [<Name: bound@37,19>, <Operator: =>, <Name: type@37,25>])])>
         dbg: infer_node <String: "_C">@(37, 13) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
       dbg: execute result: S{<TypeVar: _C>} in TypeVarClass(TypeVar)
      dbg: infer_expr_stmt result S{<TypeVar: _C>}
     dbg: context.names_to_types: [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>] -> S{<TypeVar: _C>}
    dbg: Start: Resolve lazy value wrapper
    dbg: End: Resolve lazy value wrapper
    dbg: param compare True: S{<ClassValue: <Class: type@89-123>>} <=> S{<TypeVar: _C>}
     dbg: infer_node <Keyword: True>@(47, 35) in FunctionExecutionContext(<FunctionValue: <Function: propify@45-49>>)
     dbg: infer_node <Name: bool@184,18>@(184, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@184,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
    dbg: param compare False: S{<CompiledValue: <class 'bool'>>} <=> S{<ClassValue: <Class: bool@831-858>>}
    dbg: Overloading no match: 'attrs(maybe_cls: _C, these: Optional[Dict[str, Any]] = ..., repr_ns:\nOptional[str] = ..., repr: bool = ..., cmp: Optional[bool] = ..., hash:\nOptional[bool] = ..., init: bool = ..., slots: bool = ..., frozen: bool\n= ..., weakref_slot: bool = ..., str: bool = ..., auto_attribs: bool =\n..., kw_only: bool = ..., cache_hash: bool = ..., auto_exc: bool = ...,\neq: Optional[bool] = ..., order: Optional[bool] = ...,) -> _C'@172 (<TreeArguments: PythonNode(arglist, [<Name: cls@47,17>, <Operator: ,>, PythonNode(argument, [<Name: auto_attribs@47,22>, <Operator: =>, <Keyword: True>]), <Operator: ,>, PythonNode(argument, [<Name: kw_only@47,41>, <Operator: =>, <Keyword: True>])])>)
     dbg: infer_node <Keyword: None>@(193, 15) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: infer_node <Name: object@89,11>@(89, 11) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
     dbg: context.goto <Name: object@89,11> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=object start_pos=(40, 6)>]
     dbg: context.names_to_types: [<TreeNameDefinition: string_name=object start_pos=(40, 6)>] -> S{<ClassValue: <Class: object@40-70>>}
    dbg: param compare False: S{<ClassValue: <Class: type@89-123>>} <=> S{<CompiledValue: None>}
    dbg: Overloading no match: 'attrs(maybe_cls: None = ..., these: Optional[Dict[str, Any]] = ...,\nrepr_ns: Optional[str] = ..., repr: bool = ..., cmp: Optional[bool] =\n..., hash: Optional[bool] = ..., init: bool = ..., slots: bool = ...,\nfrozen: bool = ..., weakref_slot: bool = ..., str: bool = ...,\nauto_attribs: bool = ..., kw_only: bool = ..., cache_hash: bool = ...,\nauto_exc: bool = ..., eq: Optional[bool] = ..., order: Optional[bool] =\n...,) -> Callable[[_C], _C]'@192 (<TreeArguments: PythonNode(arglist, [<Name: cls@47,17>, <Operator: ,>, PythonNode(argument, [<Name: auto_attribs@47,22>, <Operator: =>, <Keyword: True>]), <Operator: ,>, PythonNode(argument, [<Name: kw_only@47,41>, <Operator: =>, <Keyword: True>])])>)
     dbg: infer_node <Name: _C@190,5>@(190, 5) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: _C@190,5> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>]
      dbg: infer_expr_stmt <ExprStmt: _C = TypeVar("_C", bound=type)@37,0> (<Name: _C@37,0>)
      dbg: infer_expr_stmt result S{<TypeVar: _C>}
     dbg: context.names_to_types: [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>] -> S{<TypeVar: _C>}
     dbg: infer_node <Name: str@174,25>@(174, 25) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: str@174,25> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=str start_pos=(410, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=str start_pos=(410, 6)>] -> S{<ClassValue: <Class: str@410-557>>}
     dbg: infer_node <Name: Any@174,30>@(174, 30) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: Any@174,30> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=Any start_pos=(2, 4)>]
     speed: import (<Name: typing@1,5>,) StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>) 0.20708513259887695
     dbg: context.goto <Name: Any@2,4> in (<TypingModuleWrapper: typing@3-646 is_stub=True>): [TypingModuleName(<StubName: string_name=Any start_pos=(12, 0)>)]
     dbg: context.names_to_types: [TypingModuleName(<StubName: string_name=Any start_pos=(12, 0)>)] -> S{Any(Any)}
     dbg: after import: S{Any(Any)}
     dbg: context.names_to_types: [<TreeNameDefinition: string_name=Any start_pos=(2, 4)>] -> S{Any(Any)}
     dbg: infer_node <Name: str@175,22>@(175, 22) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: str@175,22> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=str start_pos=(410, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=str start_pos=(410, 6)>] -> S{<ClassValue: <Class: str@410-557>>}
     dbg: infer_node <Name: bool@176,10>@(176, 10) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@176,10> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@177,18>@(177, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@177,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@178,19>@(178, 19) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@178,19> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@179,10>@(179, 10) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@179,10> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@180,11>@(180, 11) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@180,11> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@181,12>@(181, 12) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@181,12> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@182,18>@(182, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@182,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@183,9>@(183, 9) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@183,9> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@185,13>@(185, 13) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@185,13> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@186,16>@(186, 16) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@186,16> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@187,14>@(187, 14) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@187,14> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@188,17>@(188, 17) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@188,17> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@189,20>@(189, 20) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@189,20> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
    warning: TypeError: 'object' expected at least 3 arguments, got 0
     dbg: infer_node PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])@(210, 14) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: infer_node <Name: _C@210,20>@(210, 20) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: _C@210,20> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>]
      dbg: infer_expr_stmt <ExprStmt: _C = TypeVar("_C", bound=type)@37,0> (<Name: _C@37,0>)
      dbg: infer_expr_stmt result S{<TypeVar: _C>}
     dbg: context.names_to_types: [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>] -> S{<TypeVar: _C>}
     dbg: infer_node PythonNode(atom_expr, [<Name: Callable@210,5>, PythonNode(trailer, [<Operator: [>, PythonNode(subscriptlist, [PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>]), <Operator: ,>, <Name: _C@210,20>]), <Operator: ]>])])@(210, 5) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
      dbg: infer_node <Name: Callable@210,5>@(210, 5) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
      dbg: context.goto <Name: Callable@210,5> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=Callable start_pos=(3, 4)>]
      speed: import (<Name: typing@1,5>,) StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>) 0.21906304359436035
      dbg: context.goto <Name: Callable@3,4> in (<TypingModuleWrapper: typing@3-646 is_stub=True>): [TypingModuleName(<StubName: string_name=Callable start_pos=(22, 0)>)]
      dbg: context.names_to_types: [TypingModuleName(<StubName: string_name=Callable start_pos=(22, 0)>)] -> S{ProxyTypingClassValue(Callable)}
      dbg: after import: S{ProxyTypingClassValue(Callable)}
      dbg: context.names_to_types: [<TreeNameDefinition: string_name=Callable start_pos=(3, 4)>] -> S{ProxyTypingClassValue(Callable)}
     dbg: Start: Resolve lazy value wrapper
      dbg: iterate <SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>
       dbg: infer_node <Name: _C@210,15>@(210, 15) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
       dbg: context.goto <Name: _C@210,15> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>]
        dbg: infer_expr_stmt <ExprStmt: _C = TypeVar("_C", bound=type)@37,0> (<Name: _C@37,0>)
        dbg: infer_expr_stmt result S{<TypeVar: _C>}
       dbg: context.names_to_types: [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>] -> S{<TypeVar: _C>}
       dbg: Dynamic array search for <SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>
       dbg: Start: Resolve lazy value wrapper
        dbg: iterate <SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>
        dbg: Start: Resolve lazy value wrapper
        dbg: End: Resolve lazy value wrapper
        dbg: execute: <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]> <ValuesArguments: []>
        dbg: execute result: S{_GenericInstanceWrapper(<TreeInstance of <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]>(<ValuesArguments: [S{<jedi.inference.value.dynamic_arrays._DynamicArrayAdditions object at 0x10b7fe048>}]>)>)} in <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]>
       dbg: End: Resolve lazy value wrapper
       dbg: Dynamic array result set()
      dbg: Start: Resolve lazy value wrapper
      dbg: End: Resolve lazy value wrapper
      dbg: execute: <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]> <ValuesArguments: []>
      dbg: execute result: S{_GenericInstanceWrapper(<TreeInstance of <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]>(<ValuesArguments: [S{<jedi.inference.value.dynamic_arrays._DynamicArrayAdditions object at 0x10b7fe160>}]>)>)} in <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]>
     dbg: End: Resolve lazy value wrapper
     dbg: py__getitem__ result: S{TypingClassValueWithIndex(Callable<LazyG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<TypeVar: _C>}])}
    dbg: Start: Resolve lazy value wrapper
    dbg: End: Resolve lazy value wrapper
     dbg: infer_node <Name: str@194,25>@(194, 25) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: str@194,25> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=str start_pos=(410, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=str start_pos=(410, 6)>] -> S{<ClassValue: <Class: str@410-557>>}
     dbg: infer_node <Name: Any@194,30>@(194, 30) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: Any@194,30> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=Any start_pos=(2, 4)>]
     dbg: context.names_to_types: [<TreeNameDefinition: string_name=Any start_pos=(2, 4)>] -> S{Any(Any)}
     dbg: infer_node <Name: str@195,22>@(195, 22) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: str@195,22> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=str start_pos=(410, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=str start_pos=(410, 6)>] -> S{<ClassValue: <Class: str@410-557>>}
     dbg: infer_node <Name: bool@196,10>@(196, 10) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@196,10> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@197,18>@(197, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@197,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@198,19>@(198, 19) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@198,19> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@199,10>@(199, 10) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@199,10> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@200,11>@(200, 11) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@200,11> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@201,12>@(201, 12) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@201,12> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@202,18>@(202, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@202,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@203,9>@(203, 9) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@203,9> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@204,18>@(204, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@204,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@205,13>@(205, 13) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@205,13> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@206,16>@(206, 16) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@206,16> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@207,14>@(207, 14) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@207,14> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@208,17>@(208, 17) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@208,17> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: bool@209,20>@(209, 20) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: bool@209,20> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
     dbg: infer_node <Name: type@37,25>@(37, 25) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
     dbg: context.goto <Name: type@37,25> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=type start_pos=(89, 6)>]
     dbg: context.names_to_types: [<StubName: string_name=type start_pos=(89, 6)>] -> S{<ClassValue: <Class: type@89-123>>}
   dbg: execute result: S{Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}])} in OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>)
  dbg: infer_expr_stmt result S{Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}])}
 dbg: context.names_to_types: [<TreeNameDefinition: string_name=cls start_pos=(47, 4)>] -> S{Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}])}
dbg: Return reachable: <ReturnStmt: return cls@48,4>

dbg: execute result: S{Callable(Callable[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}])} in <FunctionValue: <Function: propify@45-49>>
dbg: decorator end S{Callable(Callable[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}])}
dbg: context.names_to_types: [<TreeNameDefinition: string_name=Target start_pos=(133, 6)>] -> S{Decoratee(Callable(Callable[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}]))}
dbg: after import: S{Decoratee(Callable(Callable[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}]))}
dbg: context.names_to_types: [<TreeNameDefinition: string_name=Target start_pos=(1, 39)>] -> S{Decoratee(Callable(Callable[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}]))}
dbg: trailer completion values: S{Decoratee(Callable(Callable[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}]))}
dbg: Start: Resolve lazy value wrapper
dbg: End: Resolve lazy value wrapper
dbg: Start: convert values
dbg: End: convert values
dbg: End: complete
speed: init 1.1043739318847656
speed: parsed 1.1050760746002197



<details><summary>:scriptnames</summary>


1: ~/.config/nvim/init.vim
2: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/syntax/syntax.vim
3: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/syntax/synload.vim
4: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/syntax/syncolor.vim
5: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/filetype.vim
6: ~/.local/share/nvim/site/autoload/plug.vim
7: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/ftoff.vim
8: ~/.config/nvim/plugged/vim-prettier/ftdetect/css.vim
9: ~/.config/nvim/plugged/vim-prettier/ftdetect/graphql.vim
10: ~/.config/nvim/plugged/vim-prettier/ftdetect/html.vim
11: ~/.config/nvim/plugged/vim-prettier/ftdetect/javascript.vim
12: ~/.config/nvim/plugged/vim-prettier/ftdetect/json.vim
13: ~/.config/nvim/plugged/vim-prettier/ftdetect/less.vim
14: ~/.config/nvim/plugged/vim-prettier/ftdetect/markdown.vim
15: ~/.config/nvim/plugged/vim-prettier/ftdetect/scss.vim
16: ~/.config/nvim/plugged/vim-prettier/ftdetect/typescript.vim
17: ~/.config/nvim/plugged/vim-prettier/ftdetect/vue.vim
18: ~/.config/nvim/plugged/vim-prettier/ftdetect/yaml.vim
19: ~/.config/nvim/plugged/vim-vue/ftdetect/vue.vim
20: ~/.config/nvim/plugged/vim-json/ftdetect/json.vim
21: ~/.config/nvim/plugged/Dockerfile.vim/ftdetect/Dockerfile.vim
22: ~/.config/nvim/plugged/Dockerfile.vim/ftdetect/docker-compose.vim
23: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/ftplugin.vim
24: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/indent.vim
25: ~/.config/nvim/plugged/ale/plugin/ale.vim
26: ~/.config/nvim/plugged/ale/autoload/ale/events.vim
27: ~/.config/nvim/plugged/jedi-vim/plugin/jedi.vim
28: ~/.config/nvim/plugged/black/plugin/black.vim
29: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/autoload/provider/python3.vim
30: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/autoload/provider/pythonx.vim
31: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/autoload/remote/host.vim
32: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/autoload/provider.vim
33: ~/.config/nvim/plugged/emmet-vim/plugin/emmet.vim
34: ~/.config/nvim/plugged/vim-sensible/plugin/sensible.vim
35: ~/.config/nvim/plugged/coverage-highlight.vim/plugin/coverage-highlight.vim
36: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/gzip.vim
37: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/health.vim
38: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/man.vim
39: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/matchit.vim
40: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/pack/dist/opt/matchit/plugin/matchit.vim
41: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/matchparen.vim
42: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/netrwPlugin.vim
43: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/rplugin.vim
44: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/shada.vim
45: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/spellfile.vim
46: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/tarPlugin.vim
47: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/tohtml.vim
48: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/tutor.vim
49: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/plugin/zipPlugin.vim
50: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/syntax/python.vim
51: ~/.config/nvim/plugged/jedi-vim/after/syntax/python.vim
52: ~/.config/nvim/plugged/jedi-vim/autoload/jedi.vim
53: ~/.config/nvim/plugged/jedi-vim/ftplugin/python/jedi.vim
54: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/ftplugin/python.vim
55: ~/.config/nvim/plugged/jedi-vim/after/ftplugin/python/jedi.vim
56: ~/.config/nvim/plugged/vim-python-pep8-indent/indent/python.vim
57: /usr/local/Cellar/neovim/0.4.3/share/nvim/runtime/indent/python.vim
58: ~/.config/nvim/plugged/ale/autoload/ale.vim
59: ~/.config/nvim/plugged/ale/autoload/ale/util.vim
60: ~/.config/nvim/plugged/ale/autoload/ale/linter.vim

@davidhalter
Copy link
Owner

Can you upgrade Jedi to the master branch and retry? It might be because of a49c757b8ad70833aad231294ababa161cffe26c in Jedi. (which was fixed after 0.16).

@davidhalter
Copy link
Owner

davidhalter commented Feb 7, 2020

Can you run

import jedi
jedi.set_debug_function()
print(jedi.Script('from pytos2.securechange.fields import Target\nTarget').completions())

in Python CLI for Jedi 0.16.0? The debug output is too big for VIM :).

@geewrd
Copy link
Author

geewrd commented Feb 7, 2020

Can you upgrade Jedi to the master branch and retry? It might be because of a49c757b8ad70833aad231294ababa161cffe26c in Jedi. (which was fixed after 0.16).

This did not help

Can you run

import jedi
jedi.set_debug_function()
print(jedi.Script('from pytos2.securechange.fields import Target\nTarget').completions())

in Python CLI for Jedi 0.16.0? The debug output is too big for VIM :).

>>> jedi.set_debug_function()
>>> print(jedi.Script('from pytos2.securechange.fields import Target\nTarget').completions())
dbg: Start environment subprocess '/Users/nate.rodd/.pyenv/versions/3.6.10/bin/python'
speed: init 3.6447389125823975
speed: parsed 3.645214080810547
dbg: Start: complete
 dbg: global search_module 'builtins': <CompiledModule: <module 'builtins' (built-in)>>
 dbg: global completion scope: ModuleContext(<ModuleValue: @1-2 is_stub=False>)
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@558,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@558,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(558, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@558,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@558,7>])])@(558, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@558,3>@(558, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@558,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    speed: import (<Name: sys@15,7>,) StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>) 0.436342716217041
    dbg: global search_module 'sys': <CompiledModule: <module 'sys' (built-in)>>
    dbg: after import: S{<StubModuleValue: sys@6-214 is_stub=True>}
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@558,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@558,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
    dbg: infer_node <Name: _version_info@128,14>@(128, 14) in StubModuleContext(<StubModuleValue: sys@6-214 is_stub=True>)
    dbg: context.goto <Name: _version_info@128,14> in (StubModuleContext(<StubModuleValue: sys@6-214 is_stub=True>)): [<TreeNameDefinition: string_name=_version_info start_pos=(122, 6)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=_version_info start_pos=(122, 6)>] -> S{<ClassValue: <Class: _version_info@122-128>>}
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(558, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@324,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@324,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(324, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@324,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@324,7>])])@(324, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@324,3>@(324, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@324,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@324,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@324,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(324, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1201,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1201,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1201, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1201,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1201,7>])])@(1201, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1201,3>@(1201, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1201,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1201,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1201,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1201, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1464,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1464,7>])]), <Operator: <>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1464, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1464,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1464,7>])])@(1464, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1464,3>@(1464, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1464,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1464,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1464,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1464, 22) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: False>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1131,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1131,7>])]), <Operator: <>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1131, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1131,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1131,7>])])@(1131, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1131,3>@(1131, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1131,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1131,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1131,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1131, 22) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: False>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1365,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1365,7>])]), <Operator: <>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1365, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1365,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1365,7>])])@(1365, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1365,3>@(1365, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1365,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1365,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1365,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1365, 22) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: False>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1066,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1066,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1066, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1066,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1066,7>])])@(1066, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1066,3>@(1066, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1066,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1066,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1066,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1066, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1112,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1112,7>])]), <Operator: <>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1112, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1112,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1112,7>])])@(1112, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1112,3>@(1112, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1112,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1112,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1112,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1112, 22) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: False>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1120,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1120,7>])]), <Operator: <>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1120, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1120,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1120,7>])])@(1120, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1120,3>@(1120, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1120,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1120,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1120,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1120, 22) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: False>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1122,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1122,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1122, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1122,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1122,7>])])@(1122, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1122,3>@(1122, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1122,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1122,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1122,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1122, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1127,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1127,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 7>]), <Operator: )>])])@(1127, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1127,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1127,7>])])@(1127, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1127,3>@(1127, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1127,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1127,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1127,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 7>]), <Operator: )>])@(1127, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: False>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1135,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1135,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 6>]), <Operator: )>])])@(1135, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1135,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1135,7>])])@(1135, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1135,3>@(1135, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1135,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1135,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1135,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 6>]), <Operator: )>])@(1135, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1142,5>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1142,9>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1142, 5) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1142,5>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1142,9>])])@(1142, 5) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1142,5>@(1142, 5) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1142,5> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1142,9>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1142,9> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1142, 25) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1146,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1146,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1146, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1146,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1146,7>])])@(1146, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1146,3>@(1146, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1146,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1146,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1146,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1146, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1154,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1154,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1154, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1154,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1154,7>])])@(1154, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1154,3>@(1154, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1154,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1154,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1154,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1154, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1159,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1159,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1159, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1159,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1159,7>])])@(1159, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1159,3>@(1159, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1159,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1159,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1159,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1159, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1180,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1180,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1180, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1180,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1180,7>])])@(1180, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1180,3>@(1180, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1180,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1180,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1180,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1180, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1184,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1184,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1184, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1184,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1184,7>])])@(1184, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1184,3>@(1184, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1184,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1184,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1184,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1184, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1198,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1198,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1198, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1198,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1198,7>])])@(1198, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1198,3>@(1198, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1198,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1198,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1198,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1198, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1301,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1301,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1301, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1301,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1301,7>])])@(1301, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1301,3>@(1301, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1301,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1301,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1301,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1301, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1313,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1313,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1313, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1313,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1313,7>])])@(1313, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1313,3>@(1313, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1313,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1313,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1313,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1313, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1331,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1331,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 6>]), <Operator: )>])])@(1331, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1331,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1331,7>])])@(1331, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1331,3>@(1331, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1331,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1331,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1331,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 6>]), <Operator: )>])@(1331, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1335,5>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1335,9>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1335, 5) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1335,5>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1335,9>])])@(1335, 5) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1335,5>@(1335, 5) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1335,5> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1335,9>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1335,9> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1335, 25) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1623,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1623,7>])]), <Operator: <>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1623, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1623,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1623,7>])])@(1623, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1623,3>@(1623, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1623,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1623,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1623,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1623, 22) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: False>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1343,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1343,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1343, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1343,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1343,7>])])@(1343, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1343,3>@(1343, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1343,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1343,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1343,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1343, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1378,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1378,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1378, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1378,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1378,7>])])@(1378, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1378,3>@(1378, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1378,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1378,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1378,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1378, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1401,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1401,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1401, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1401,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1401,7>])])@(1401, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1401,3>@(1401, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1401,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1401,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1401,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1401, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1414,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1414,7>])]), <Operator: <>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1414, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1414,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1414,7>])])@(1414, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1414,3>@(1414, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1414,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1414,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1414,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1414, 22) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: False>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1417,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1417,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1417, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1417,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1417,7>])])@(1417, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1417,3>@(1417, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1417,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1417,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1417,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1417, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1503,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1503,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1503, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1503,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1503,7>])])@(1503, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1503,3>@(1503, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1503,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1503,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1503,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1503, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1539,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1539,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 5>]), <Operator: )>])])@(1539, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1539,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1539,7>])])@(1539, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1539,3>@(1539, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1539,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1539,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1539,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 5>]), <Operator: )>])@(1539, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1556,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1556,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 6>]), <Operator: )>])])@(1556, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1556,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1556,7>])])@(1556, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1556,3>@(1556, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1556,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1556,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1556,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 6>]), <Operator: )>])@(1556, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1566,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1566,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])])@(1566, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1566,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1566,7>])])@(1566, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1566,3>@(1566, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1566,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1566,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1566,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>]), <Operator: )>])@(1566, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1585,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1585,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 5>]), <Operator: )>])])@(1585, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1585,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1585,7>])])@(1585, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1585,3>@(1585, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1585,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1585,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1585,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 5>]), <Operator: )>])@(1585, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
  dbg: infer_node PythonNode(comparison, [PythonNode(atom_expr, [<Name: sys@1620,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1620,7>])]), <Operator: >=>, PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 2>]), <Operator: )>])])@(1620, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
   dbg: infer_node PythonNode(atom_expr, [<Name: sys@1620,3>, PythonNode(trailer, [<Operator: .>, <Name: version_info@1620,7>])])@(1620, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: infer_node <Name: sys@1620,3>@(1620, 3) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
    dbg: context.goto <Name: sys@1620,3> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=sys start_pos=(15, 7)>] -> S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: version_info@1620,7>]) in S{<StubModuleValue: sys@6-214 is_stub=True>}
   dbg: context.goto <Name: version_info@1620,7> in (<StubModuleValue: sys@6-214 is_stub=True>): [<StubName: string_name=version_info start_pos=(128, 0)>]
   dbg: execute: <ClassValue: <Class: _version_info@122-128>> <ValuesArguments: []>
   dbg: execute result: S{<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>} in <ClassValue: <Class: _version_info@122-128>>
   dbg: context.names_to_types: [<StubName: string_name=version_info start_pos=(128, 0)>] -> S{VersionInfo(<TreeInstance of <ClassValue: <Class: _version_info@122-128>>(<ValuesArguments: []>)>)}
   dbg: infer_node PythonNode(atom, [<Operator: (>, PythonNode(testlist_comp, [<Number: 3>, <Operator: ,>, <Number: 2>]), <Operator: )>])@(1620, 23) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
  dbg: infer_or_test types S{<CompiledValue: True>}
dbg: End: complete
[<Completion: Target>]```

@davidhalter
Copy link
Owner

My bad, I actually wanted print(jedi.Script('from pytos2.securechange.fields import Target\nTarget.').completions()). The dot was missing to trigger the completions in the right place.

@geewrd
Copy link
Author

geewrd commented Feb 7, 2020

My bad, I actually wanted print(jedi.Script('from pytos2.securechange.fields import Target\nTarget.').completions()). The dot was missing to trigger the completions in the right place.

>>> jedi.set_debug_function()
>>> print(jedi.Script('from pytos2.securechange.fields import Target\nTarget.').completions())
dbg: Start environment subprocess '/Users/nate.rodd/.pyenv/versions/3.6.10/bin/python'
speed: init 3.7204949855804443
speed: parsed 3.7209830284118652
dbg: Start: complete
  dbg: infer_node <Name: Target@2,0>@(2, 0) in ModuleContext(<ModuleValue: @1-2 is_stub=False>)
  dbg: context.goto <Name: Target@2,0> in (ModuleContext(<ModuleValue: @1-2 is_stub=False>)): [<TreeNameDefinition: string_name=Target start_pos=(1, 39)>]
  speed: import (<Name: pytos2@1,5>, <Name: securechange@1,12>, <Name: fields@1,25>) ModuleContext(<ModuleValue: @1-2 is_stub=False>) 0.0017580986022949219
  dbg: global search_module 'pytos2': <ImplicitNamespaceValue: pytos2>
  dbg: search_module 'pytos2.securechange' in paths ['/Users/nate.rodd/src/pytos2-ce/pytos2']: <ModuleValue: securechange@1-8 is_stub=False>
  dbg: search_module 'pytos2.securechange.fields' in paths ['/Users/nate.rodd/src/pytos2-ce/pytos2/securechange']: <ModuleValue: fields@1-1818 is_stub=False>
  dbg: context.goto <Name: Target@1,39> in (<ModuleValue: fields@1-1818 is_stub=False>): [<TreeNameDefinition: string_name=Target start_pos=(133, 6)>]
  dbg: decorator: <Decorator: @propify@132,0> S{<ClassValue: <Class: Target@133-144>>}
    dbg: infer_node <Name: propify@132,1>@(132, 1) in ModuleContext(<ModuleValue: fields@1-1818 is_stub=False>)
    dbg: context.goto <Name: propify@132,1> in (ModuleContext(<ModuleValue: fields@1-1818 is_stub=False>)): [<TreeNameDefinition: string_name=propify start_pos=(14, 44)>]
    speed: import (<Name: pytos2@14,5>, <Name: utils@14,12>) ModuleContext(<ModuleValue: fields@1-1818 is_stub=False>) 0.08663296699523926
    dbg: search_module 'pytos2.utils' in paths ['/Users/nate.rodd/src/pytos2-ce/pytos2']: <ModuleValue: utils@1-411 is_stub=False>
    dbg: context.goto <Name: propify@14,44> in (<ModuleValue: utils@1-411 is_stub=False>): [<TreeNameDefinition: string_name=propify start_pos=(45, 4)>]
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=propify start_pos=(45, 4)>] -> S{<FunctionValue: <Function: propify@45-49>>}
    dbg: after import: S{<FunctionValue: <Function: propify@45-49>>}
    dbg: context.names_to_types: [<TreeNameDefinition: string_name=propify start_pos=(14, 44)>] -> S{<FunctionValue: <Function: propify@45-49>>}
   dbg: global search_module 'builtins': <CompiledModule: <module 'builtins' (built-in)>>
   dbg: execute: <FunctionValue: <Function: propify@45-49>> <ValuesArguments: [S{<ClassValue: <Class: Target@133-144>>}]>
     dbg: infer_node <Name: cls@48,11>@(48, 11) in FunctionExecutionContext(<FunctionValue: <Function: propify@45-49>>)
     dbg: context.goto <Name: cls@48,11> in (FunctionExecutionContext(<FunctionValue: <Function: propify@45-49>>)): [<TreeNameDefinition: string_name=cls start_pos=(47, 4)>]
      dbg: infer_expr_stmt <ExprStmt: cls = attr.s(cls, auto_attribs=True, kw_only=True)@47,4> (<Name: cls@47,4>)
       dbg: infer_node PythonNode(atom_expr, [<Name: attr@47,10>, PythonNode(trailer, [<Operator: .>, <Name: s@47,15>]), PythonNode(trailer, [<Operator: (>, PythonNode(arglist, [<Name: cls@47,17>, <Operator: ,>, PythonNode(argument, [<Name: auto_attribs@47,22>, <Operator: =>, <Keyword: True>]), <Operator: ,>, PythonNode(argument, [<Name: kw_only@47,41>, <Operator: =>, <Keyword: True>])]), <Operator: )>])])@(47, 10) in FunctionExecutionContext(<FunctionValue: <Function: propify@45-49>>)
        dbg: infer_node <Name: attr@47,10>@(47, 10) in FunctionExecutionContext(<FunctionValue: <Function: propify@45-49>>)
        dbg: context.goto <Name: attr@47,10> in (FunctionExecutionContext(<FunctionValue: <Function: propify@45-49>>)): [<TreeNameDefinition: string_name=attr start_pos=(21, 7)>]
        speed: import (<Name: attr@21,7>,) ModuleContext(<ModuleValue: utils@1-411 is_stub=False>) 0.45551586151123047
        dbg: global search_module 'attr': <ModuleValue: attr@1-69 is_stub=False>
        dbg: after import: S{<StubModuleValue: attr@1-279 is_stub=True>}
        dbg: context.names_to_types: [<TreeNameDefinition: string_name=attr start_pos=(21, 7)>] -> S{<StubModuleValue: attr@1-279 is_stub=True>}
       dbg: infer_trailer: PythonNode(trailer, [<Operator: .>, <Name: s@47,15>]) in S{<StubModuleValue: attr@1-279 is_stub=True>}
       dbg: context.goto <Name: s@47,15> in (<StubModuleValue: attr@1-279 is_stub=True>): [<StubName: string_name=s start_pos=(276, 0)>]
        dbg: infer_expr_stmt <ExprStmt: # aliases --  s = attributes = attrs@276,0> (<Name: s@276,0>)
         dbg: infer_node <Name: attrs@276,17>@(276, 17) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: attrs@276,17> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=attrs start_pos=(192, 4)>]
         dbg: decorator: <Decorator: @overload@191,0> S{OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>)}
           dbg: infer_node <Name: overload@191,1>@(191, 1) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
           dbg: context.goto <Name: overload@191,1> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=overload start_pos=(14, 4)>]
           speed: import (<Name: typing@1,5>,) StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>) 0.46251487731933594
           dbg: global search_module 'typing': <ModuleValue: typing@1-2413 is_stub=False>
           dbg: context.goto <Name: overload@14,4> in (<TypingModuleWrapper: typing@3-646 is_stub=True>): [TypingModuleName(<StubName: string_name=overload start_pos=(11, 0)>)]
           dbg: context.names_to_types: [TypingModuleName(<StubName: string_name=overload start_pos=(11, 0)>)] -> S{OverloadFunction(overload)}
           dbg: after import: S{OverloadFunction(overload)}
           dbg: context.names_to_types: [<TreeNameDefinition: string_name=overload start_pos=(14, 4)>] -> S{OverloadFunction(overload)}
          dbg: Start: Resolve lazy value wrapper
          dbg: End: Resolve lazy value wrapper
          dbg: execute: OverloadFunction(overload) <ValuesArguments: [S{OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>)}]>
          dbg: execute result: S{OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>)} in OverloadFunction(overload)
         dbg: decorator end S{OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>)}
         dbg: context.names_to_types: [<TreeNameDefinition: string_name=attrs start_pos=(192, 4)>] -> S{OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>)}
        dbg: infer_expr_stmt result S{OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>)}
       dbg: context.names_to_types: [<StubName: string_name=s start_pos=(276, 0)>] -> S{OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>)}
       dbg: infer_trailer: PythonNode(trailer, [<Operator: (>, PythonNode(arglist, [<Name: cls@47,17>, <Operator: ,>, PythonNode(argument, [<Name: auto_attribs@47,22>, <Operator: =>, <Keyword: True>]), <Operator: ,>, PythonNode(argument, [<Name: kw_only@47,41>, <Operator: =>, <Keyword: True>])]), <Operator: )>]) in S{OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>)}
       dbg: execute: OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>) <TreeArguments: PythonNode(arglist, [<Name: cls@47,17>, <Operator: ,>, PythonNode(argument, [<Name: auto_attribs@47,22>, <Operator: =>, <Keyword: True>]), <Operator: ,>, PythonNode(argument, [<Name: kw_only@47,41>, <Operator: =>, <Keyword: True>])])>
        dbg: Execute overloaded function <FunctionValue: <Function: attrs@192-211>>
         dbg: infer_node <Name: cls@47,17>@(47, 17) in FunctionExecutionContext(<FunctionValue: <Function: propify@45-49>>)
         dbg: context.goto <Name: cls@47,17> in (FunctionExecutionContext(<FunctionValue: <Function: propify@45-49>>)): [<ParamName: string_name=cls start_pos=(45, 12)>]
         dbg: Found param types for docstring: S{}
         dbg: context.names_to_types: [<ParamName: string_name=cls start_pos=(45, 12)>] -> S{<ClassValue: <Class: Target@133-144>>}
         dbg: infer_node <Name: _C@173,15>@(173, 15) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: _C@173,15> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>]
          dbg: infer_expr_stmt <ExprStmt: _C = TypeVar("_C", bound=type)@37,0> (<Name: _C@37,0>)
           dbg: infer_node PythonNode(atom_expr, [<Name: TypeVar@37,5>, PythonNode(trailer, [<Operator: (>, PythonNode(arglist, [<String: "_C">, <Operator: ,>, PythonNode(argument, [<Name: bound@37,19>, <Operator: =>, <Name: type@37,25>])]), <Operator: )>])])@(37, 5) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
            dbg: infer_node <Name: TypeVar@37,5>@(37, 5) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
            dbg: context.goto <Name: TypeVar@37,5> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=TypeVar start_pos=(12, 4)>]
            speed: import (<Name: typing@1,5>,) StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>) 0.6404650211334229
            dbg: context.goto <Name: TypeVar@12,4> in (<TypingModuleWrapper: typing@3-646 is_stub=True>): [TypingModuleName(<StubName: string_name=TypeVar start_pos=(13, 0)>)]
            dbg: context.names_to_types: [TypingModuleName(<StubName: string_name=TypeVar start_pos=(13, 0)>)] -> S{TypeVarClass(TypeVar)}
            dbg: after import: S{TypeVarClass(TypeVar)}
            dbg: context.names_to_types: [<TreeNameDefinition: string_name=TypeVar start_pos=(12, 4)>] -> S{TypeVarClass(TypeVar)}
           dbg: infer_trailer: PythonNode(trailer, [<Operator: (>, PythonNode(arglist, [<String: "_C">, <Operator: ,>, PythonNode(argument, [<Name: bound@37,19>, <Operator: =>, <Name: type@37,25>])]), <Operator: )>]) in S{TypeVarClass(TypeVar)}
           dbg: Start: Resolve lazy value wrapper
           dbg: End: Resolve lazy value wrapper
           dbg: execute: TypeVarClass(TypeVar) <TreeArguments: PythonNode(arglist, [<String: "_C">, <Operator: ,>, PythonNode(argument, [<Name: bound@37,19>, <Operator: =>, <Name: type@37,25>])])>
             dbg: infer_node <String: "_C">@(37, 13) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
           dbg: execute result: S{<TypeVar: _C>} in TypeVarClass(TypeVar)
          dbg: infer_expr_stmt result S{<TypeVar: _C>}
         dbg: context.names_to_types: [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>] -> S{<TypeVar: _C>}
        dbg: Start: Resolve lazy value wrapper
        dbg: End: Resolve lazy value wrapper
        dbg: param compare True: S{<ClassValue: <Class: type@89-123>>} <=> S{<TypeVar: _C>}
         dbg: infer_node <Keyword: True>@(47, 35) in FunctionExecutionContext(<FunctionValue: <Function: propify@45-49>>)
         dbg: infer_node <Name: bool@184,18>@(184, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@184,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
        dbg: param compare False: S{<CompiledValue: <class 'bool'>>} <=> S{<ClassValue: <Class: bool@831-858>>}
        dbg: Overloading no match: 'attrs(maybe_cls: _C, these: Optional[Dict[str, Any]] = ..., repr_ns:\nOptional[str] = ..., repr: bool = ..., cmp: Optional[bool] = ..., hash:\nOptional[bool] = ..., init: bool = ..., slots: bool = ..., frozen: bool\n= ..., weakref_slot: bool = ..., str: bool = ..., auto_attribs: bool =\n..., kw_only: bool = ..., cache_hash: bool = ..., auto_exc: bool = ...,\neq: Optional[bool] = ..., order: Optional[bool] = ...,) -> _C'@172 (<TreeArguments: PythonNode(arglist, [<Name: cls@47,17>, <Operator: ,>, PythonNode(argument, [<Name: auto_attribs@47,22>, <Operator: =>, <Keyword: True>]), <Operator: ,>, PythonNode(argument, [<Name: kw_only@47,41>, <Operator: =>, <Keyword: True>])])>)
         dbg: infer_node <Keyword: None>@(193, 15) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: infer_node <Name: object@89,11>@(89, 11) in StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)
         dbg: context.goto <Name: object@89,11> in (StubModuleContext(<StubModuleValue: builtins@4-1651 is_stub=True>)): [<TreeNameDefinition: string_name=object start_pos=(40, 6)>]
         dbg: context.names_to_types: [<TreeNameDefinition: string_name=object start_pos=(40, 6)>] -> S{<ClassValue: <Class: object@40-70>>}
        dbg: param compare False: S{<ClassValue: <Class: type@89-123>>} <=> S{<CompiledValue: None>}
        dbg: Overloading no match: 'attrs(maybe_cls: None = ..., these: Optional[Dict[str, Any]] = ...,\nrepr_ns: Optional[str] = ..., repr: bool = ..., cmp: Optional[bool] =\n..., hash: Optional[bool] = ..., init: bool = ..., slots: bool = ...,\nfrozen: bool = ..., weakref_slot: bool = ..., str: bool = ...,\nauto_attribs: bool = ..., kw_only: bool = ..., cache_hash: bool = ...,\nauto_exc: bool = ..., eq: Optional[bool] = ..., order: Optional[bool] =\n...,) -> Callable[[_C], _C]'@192 (<TreeArguments: PythonNode(arglist, [<Name: cls@47,17>, <Operator: ,>, PythonNode(argument, [<Name: auto_attribs@47,22>, <Operator: =>, <Keyword: True>]), <Operator: ,>, PythonNode(argument, [<Name: kw_only@47,41>, <Operator: =>, <Keyword: True>])])>)
         dbg: infer_node <Name: _C@190,5>@(190, 5) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: _C@190,5> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>]
          dbg: infer_expr_stmt <ExprStmt: _C = TypeVar("_C", bound=type)@37,0> (<Name: _C@37,0>)
          dbg: infer_expr_stmt result S{<TypeVar: _C>}
         dbg: context.names_to_types: [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>] -> S{<TypeVar: _C>}
         dbg: infer_node <Name: str@174,25>@(174, 25) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: str@174,25> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=str start_pos=(410, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=str start_pos=(410, 6)>] -> S{<ClassValue: <Class: str@410-557>>}
         dbg: infer_node <Name: Any@174,30>@(174, 30) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: Any@174,30> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=Any start_pos=(2, 4)>]
         speed: import (<Name: typing@1,5>,) StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>) 0.651237964630127
         dbg: context.goto <Name: Any@2,4> in (<TypingModuleWrapper: typing@3-646 is_stub=True>): [TypingModuleName(<StubName: string_name=Any start_pos=(12, 0)>)]
         dbg: context.names_to_types: [TypingModuleName(<StubName: string_name=Any start_pos=(12, 0)>)] -> S{Any(Any)}
         dbg: after import: S{Any(Any)}
         dbg: context.names_to_types: [<TreeNameDefinition: string_name=Any start_pos=(2, 4)>] -> S{Any(Any)}
         dbg: infer_node <Name: str@175,22>@(175, 22) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: str@175,22> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=str start_pos=(410, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=str start_pos=(410, 6)>] -> S{<ClassValue: <Class: str@410-557>>}
         dbg: infer_node <Name: bool@176,10>@(176, 10) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@176,10> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@177,18>@(177, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@177,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@178,19>@(178, 19) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@178,19> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@179,10>@(179, 10) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@179,10> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@180,11>@(180, 11) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@180,11> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@181,12>@(181, 12) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@181,12> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@182,18>@(182, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@182,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@183,9>@(183, 9) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@183,9> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@185,13>@(185, 13) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@185,13> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@186,16>@(186, 16) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@186,16> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@187,14>@(187, 14) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@187,14> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@188,17>@(188, 17) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@188,17> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@189,20>@(189, 20) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@189,20> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
        warning: TypeError: 'object' expected at least 3 arguments, got 0
         dbg: infer_node PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])@(210, 14) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: infer_node <Name: _C@210,20>@(210, 20) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: _C@210,20> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>]
          dbg: infer_expr_stmt <ExprStmt: _C = TypeVar("_C", bound=type)@37,0> (<Name: _C@37,0>)
          dbg: infer_expr_stmt result S{<TypeVar: _C>}
         dbg: context.names_to_types: [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>] -> S{<TypeVar: _C>}
         dbg: infer_node PythonNode(atom_expr, [<Name: Callable@210,5>, PythonNode(trailer, [<Operator: [>, PythonNode(subscriptlist, [PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>]), <Operator: ,>, <Name: _C@210,20>]), <Operator: ]>])])@(210, 5) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
          dbg: infer_node <Name: Callable@210,5>@(210, 5) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
          dbg: context.goto <Name: Callable@210,5> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=Callable start_pos=(3, 4)>]
          speed: import (<Name: typing@1,5>,) StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>) 0.6583540439605713
          dbg: context.goto <Name: Callable@3,4> in (<TypingModuleWrapper: typing@3-646 is_stub=True>): [TypingModuleName(<StubName: string_name=Callable start_pos=(22, 0)>)]
          dbg: context.names_to_types: [TypingModuleName(<StubName: string_name=Callable start_pos=(22, 0)>)] -> S{ProxyTypingClassValue(Callable)}
          dbg: after import: S{ProxyTypingClassValue(Callable)}
          dbg: context.names_to_types: [<TreeNameDefinition: string_name=Callable start_pos=(3, 4)>] -> S{ProxyTypingClassValue(Callable)}
         dbg: Start: Resolve lazy value wrapper
          dbg: iterate <SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>
           dbg: infer_node <Name: _C@210,15>@(210, 15) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
           dbg: context.goto <Name: _C@210,15> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>]
            dbg: infer_expr_stmt <ExprStmt: _C = TypeVar("_C", bound=type)@37,0> (<Name: _C@37,0>)
            dbg: infer_expr_stmt result S{<TypeVar: _C>}
           dbg: context.names_to_types: [<TreeNameDefinition: string_name=_C start_pos=(37, 0)>] -> S{<TypeVar: _C>}
           dbg: Dynamic array search for <SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>
           dbg: Start: Resolve lazy value wrapper
            dbg: iterate <SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>
            dbg: Start: Resolve lazy value wrapper
            dbg: End: Resolve lazy value wrapper
            dbg: execute: <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]> <ValuesArguments: []>
            dbg: execute result: S{_GenericInstanceWrapper(<TreeInstance of <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]>(<ValuesArguments: [S{<jedi.inference.value.dynamic_arrays._DynamicArrayAdditions object at 0x10d4e4780>}]>)>)} in <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]>
           dbg: End: Resolve lazy value wrapper
           dbg: Dynamic array result set()
          dbg: Start: Resolve lazy value wrapper
          dbg: End: Resolve lazy value wrapper
          dbg: execute: <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]> <ValuesArguments: []>
          dbg: execute result: S{_GenericInstanceWrapper(<TreeInstance of <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]>(<ValuesArguments: [S{<jedi.inference.value.dynamic_arrays._DynamicArrayAdditions object at 0x10d4e4908>}]>)>)} in <GenericClass: <ClassValue: <Class: list@896-946>>[S{<ClassValue: <Class: object@40-70>>}]>
         dbg: End: Resolve lazy value wrapper
         dbg: py__getitem__ result: S{TypingClassValueWithIndex(Callable<LazyG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<TypeVar: _C>}])}
        dbg: Start: Resolve lazy value wrapper
        dbg: End: Resolve lazy value wrapper
         dbg: infer_node <Name: str@194,25>@(194, 25) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: str@194,25> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=str start_pos=(410, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=str start_pos=(410, 6)>] -> S{<ClassValue: <Class: str@410-557>>}
         dbg: infer_node <Name: Any@194,30>@(194, 30) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: Any@194,30> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<TreeNameDefinition: string_name=Any start_pos=(2, 4)>]
         dbg: context.names_to_types: [<TreeNameDefinition: string_name=Any start_pos=(2, 4)>] -> S{Any(Any)}
         dbg: infer_node <Name: str@195,22>@(195, 22) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: str@195,22> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=str start_pos=(410, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=str start_pos=(410, 6)>] -> S{<ClassValue: <Class: str@410-557>>}
         dbg: infer_node <Name: bool@196,10>@(196, 10) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@196,10> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@197,18>@(197, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@197,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@198,19>@(198, 19) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@198,19> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@199,10>@(199, 10) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@199,10> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@200,11>@(200, 11) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@200,11> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@201,12>@(201, 12) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@201,12> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@202,18>@(202, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@202,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@203,9>@(203, 9) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@203,9> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@204,18>@(204, 18) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@204,18> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@205,13>@(205, 13) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@205,13> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@206,16>@(206, 16) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@206,16> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@207,14>@(207, 14) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@207,14> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@208,17>@(208, 17) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@208,17> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: bool@209,20>@(209, 20) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: bool@209,20> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=bool start_pos=(831, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=bool start_pos=(831, 6)>] -> S{<ClassValue: <Class: bool@831-858>>}
         dbg: infer_node <Name: type@37,25>@(37, 25) in StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)
         dbg: context.goto <Name: type@37,25> in (StubModuleContext(<StubModuleValue: attr@1-279 is_stub=True>)): [<StubName: string_name=type start_pos=(89, 6)>]
         dbg: context.names_to_types: [<StubName: string_name=type start_pos=(89, 6)>] -> S{<ClassValue: <Class: type@89-123>>}
       dbg: execute result: S{Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}])} in OverloadedFunctionValue(<FunctionValue: <Function: attrs@192-211>>)
      dbg: infer_expr_stmt result S{Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}])}
     dbg: context.names_to_types: [<TreeNameDefinition: string_name=cls start_pos=(47, 4)>] -> S{Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}])}
    dbg: Return reachable: <ReturnStmt: return cls@48,4>
   dbg: execute result: S{Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}])} in <FunctionValue: <Function: propify@45-49>>
  dbg: decorator end S{Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}])}
  dbg: context.names_to_types: [<TreeNameDefinition: string_name=Target start_pos=(133, 6)>] -> S{Decoratee(Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}]))}
  dbg: after import: S{Decoratee(Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}]))}
  dbg: context.names_to_types: [<TreeNameDefinition: string_name=Target start_pos=(1, 39)>] -> S{Decoratee(Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}]))}
 dbg: trailer completion values: S{Decoratee(Callable(Callable<TupG>[S{<SequenceLiteralValue of PythonNode(atom, [<Operator: [>, <Name: _C@210,15>, <Operator: ]>])>}, S{<ClassValue: <Class: type@89-123>>}]))}
 dbg: Start: Resolve lazy value wrapper
 dbg: End: Resolve lazy value wrapper
 dbg: Start: convert values
 dbg: End: convert values
dbg: End: complete
[]```

@davidhalter
Copy link
Owner

My suspicion is that this doesn't work for you, because Jedi now understands typing way way better and therefore chooses to use that information instead of the actual class (it probably has to do with the decorator). To tell you more I would need the code of fields or at least the code of Target and propify.

My guess is that this is not a bug, but just something where you type in ways that Jedi cannot deal with.

@geewrd
Copy link
Author

geewrd commented Feb 7, 2020

That's interesting, I wonder if Jedi does not play well with attrs anymore due to the typing enhancement?

Propify is basically just a wrapper for attr.s with specific args:

def propify(cls):
    cls._propify = True
    cls = attr.s(cls, auto_attribs=True, kw_only=True)
    return cls

prop() is just a wrapper for attr.ib with some extra metatdata fields.

@propify
class Target(Object):
    class ObjectType(Enum):
        ACL = "acl"
        FIREWALL = "firewall"
        POLICY = "policy"
        ZONE_TO_ZONE = "zone_to_zone"

    at_type: AtType = prop(AtType.OBJECT, key=Object.Prop.AT_TYPE.value)
    type: ObjectType = prop(
        ObjectType.FIREWALL, key=Object.Prop.OBJECT_TYPE.value, cmp=False, repr=False
    )

@davidhalter
Copy link
Owner

The problem is that attrs is typed as def attrs(maybe_cls: _C, [...],) -> _C:. This is not "correct" typing. It means that essentially any subtype of type can be returned. The problem is that this is the wrong way to properly type decorators with classes IMO.

One way to deal with it is something like

def attrs(maybe_cls: Callable[..., _C], [...],) -> _C: ...

This should probably at least work, but I'm not sure they'd accept this change.

You can find a discussion about decorators here: python/mypy#3157.

It's not a Jedi/jedi-vim issue.

@blueyed
Copy link
Collaborator

blueyed commented Feb 7, 2020

@davidhalter is this from typeshed?
IIRC mypy has a plugin to handle attrs in a special way.

@davidhalter
Copy link
Owner

Yes this is from typeshed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants