Pytorch: `Type Hints` quebrado em PyTorch 0.4.0, relacionado a IDEs (eq. PyCharm)

Criado em 5 mai. 2018  ·  106Comentários  ·  Fonte: pytorch/pytorch

Se você tiver alguma dúvida ou desejar ajuda e suporte, pergunte em nosso
fóruns .

Se você estiver enviando uma solicitação de recurso, prefacie o título com [solicitação de recurso].
Se você estiver enviando um relatório de bug, preencha os seguintes detalhes.

Descrição do problema

Recentemente, descobri que o PyCharm não pode fazer o preenchimento automático para torch.zeros .

PyCharm diz

Cannot find reference 'zeros' in '__init__.py'

Eu cavei por um tempo e encontrei Type Hints quebrados.

A partir dessas mudanças,
https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4
https://github.com/pytorch/pytorch/wiki/Breaking-Changes-from-Variable-and-Tensor-merge

Especialmente, https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4#diff -14258fce7c17ccb97b488e64373b0803R308 @colesbury
Esta linha não pode render Type Hints para muitos IDEs.

Originalmente, torch.zeros estava em torch/_C/__init__.py
Mas mudou para torch/_C/_VariableFunctions

Exemplo de código

https://gist.github.com/kimdwkimdw/50c18b5cf72c69c2d01bb4146c8a2b5c
Esta é uma prova de conceito para esse bug.

Se você olhar para main.py

import T_B as torch

torch.p2()  # IDE can detect `p2`
torch.p1    # IDE cannot detect `p1`

Informação do sistema

Copie e cole o resultado do nosso
script de coleção de ambiente
(ou preencha a lista de verificação abaixo manualmente).

Você pode obter o script e executá-lo com:

wget https://raw.githubusercontent.com/pytorch/pytorch/master/torch/utils/collect_env.py
# For security purposes, please check the contents of collect_env.py before running it.
python collect_env.py
  • PyTorch ou Caffe2:
  • Como você instalou o PyTorch (conda, pip, fonte):
    Qualquer caso para conda, pip, source.

  • Comando de compilação que você usou (se compilando da fonte):

  • SO: Qualquer
  • Versão PyTorch: 0.4.0
  • Versão Python: 3.6.5
  • Versão CUDA / cuDNN:.
  • Modelos e configuração de GPU:.
  • Versão do GCC (se compilando da fonte):.
  • Versão CMake:.
  • Versões de quaisquer outras bibliotecas relevantes
medium priority (this tag is deprecated)

Comentários muito úteis

Iremos eliminar a prioridade porque muitos usuários têm solicitado isso ... faremos o possível para analisar mais a fundo.

Todos 106 comentários

algum ponto relacionado? # 4568

O mesmo problema, pycharm é basicamente inútil ao usar pytorch0.4. Quase tudo está sublinhado porque " não foi possível encontrar a referência " ou " não pode ser chamado ".

torch

Não há preenchimento automático, definição rápida e documentação rápida para torch.tensor , torch.max e loss.backward .

  • SO: Linux (Fedora 27 de 64 bits com Gnome).
  • Versão PyTorch: 0.4.0.
  • Como você instalou o PyTorch (conda, pip, fonte): pip3.
  • Versão Python: 3.6.5.
  • Eu uso CPU (sem CUDA).

Se algum de vocês tiver sugestões sobre como consertar isso, entre em contato conosco!

Parece que a busca por funções do PyCharm poderia ser melhorada, mas não tenho certeza do que pode ser feito do lado do PyTorch. Usando torch.tensor como exemplo, help(torch.tensor) obtém a documentação enquanto dir(torch) mostra "tensor" como um membro.

@ zou3519
Eu pensei que abaixo não é um bom estilo de código.

for name in dir(_C._VariableFunctions):
    globals()[name] = getattr(_C._VariableFunctions, name)

de https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4

globals()[name] não é Pythonic maneira. Não é apenas um problema para o PyCharm, mas também para o estilo de código Python.

Achei que _VariableFunctions não precisava ser Classe.

Estou tentando fazer relações públicas para esse problema. Você revisaria? @ zou3519

@kimdwkimdw Não sei o que está acontecendo com o global () lá ou o que o tornaria melhor, mas sim, envie um PR e eu vou dar uma olhada nele :)

Parece que a busca por funções do PyCharm poderia ser melhorada, mas não tenho certeza do que pode ser feito do lado do PyTorch.

Só queria observar que nunca tive esse problema com qualquer outro pacote do PyCharm. Isso não quer dizer que o PyCharm não deva fazer as coisas de maneira diferente, mas esse problema parece ser um caso incomum.

Estou trabalhando principalmente nesses arquivos.

tools/autograd/gen_autograd.py
tools/autograd/templates/python_torch_functions.cpp

torch/lib/include/torch/csrc/Module.cpp

Tentando descobrir o que mudou ao gerar extensões C.
Vou fazer relações públicas em breve.

Alguma atualização?

Fiz um exemplo de trabalho no meu garfo.

Se alguém quiser usar o preenchimento automático primeiro, tente abaixo.

1. clone git

git clone -b pytorch-interface https://github.com/kimdwkimdw/pytorch.git

2. Instale o PyTorch

3. Limpe o cache no PyCharm

  • geralmente os caches estão localizados em /Users/USERNAME/Library/Caches/PyCharm*/python_stubs/
  • verifique o seu project interpreter no PyCharm

Antes de pull request , preciso adicionar mais commits para organizar os resultados.

a instalação falhou seguindo a descrição acima.
existe alguma maneira simples de instalar?

Estou tendo o mesmo problema. Sempre adorei pytorch e pycharm. É uma pena que eles não funcionem bem: (
Ansioso por atualizações.

Isso é muito estranho quando eu usei o mesmo código no console do python com pycharm, é normal, mas no editor. O__O "...

Iremos eliminar a prioridade porque muitos usuários têm solicitado isso ... faremos o possível para analisar mais a fundo.

Muitos usuários estão solicitando ... Devo fazer uma solicitação de pull neste fim de semana.

Eu mesclei meu código com o branch atual master .

Type Hints estão vivos agora.

MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install

Checkout PR - https://github.com/pytorch/pytorch/pull/8845

cc @ zou3519

@kimdwkimdw devo reinstalar o pytorch a partir da fonte? Existe alguma maneira fácil de renovar na plataforma do Windows?

@ 541435721
Sim você deveria. Confira https://github.com/pytorch/pytorch#install -pytorch esta página.
Não sei se existe uma maneira mais simples de construí-lo.

Parece não mudar nada para Pycharm (2018.1, com caches reconstruídos).

Você deve verificar se solicitação de recebimento de @kimdwkimdw, não pytorch mestre. A solicitação de pull ainda não foi mesclada com o mestre pytorch.

Este é o PR: https://github.com/pytorch/pytorch/pull/8845.

Sim, foi o que eu fiz:

git remote add kimdwkimdw https://github.com/kimdwkimdw/pytorch.git
git fetch kimdwkimdw
git checkout --track kimdwkimdw/interface-0
git submodule update --init
CC=gcc-5 CXX=g++-5 CFLAGS="-march=native -O2" CXXFLAGS="-march=native -O2" python setup.py build
python setup.py install  --optimize=1 --skip-build 

@nlgranger, você deve excluir os stubs do Python manualmente. ele não pode ser excluído com 'invalidar cache'.

Quando você instala o projeto, o Pycharm inicializa seus arquivos stub do Python.

Depois de excluir o diretório stub do python, reinicie o Pycharm.

PyCharm irá regenerar seu stub python.

Não parece mudar nada, mas pode ser minha configuração. Talvez possamos esperar que outra pessoa tente?

Você deve encontrar o diretório stub do python. Ao clicar em tocha, você pode encontrar o diretório de stub.

@kimdwkimdw Reinstalei e excluí o cache, mas sem alterações.

image
Você não pode excluir o cache PyCharm por meio deste invalidate Caches

No MacOS, você deve excluir manualmente as pastas em ~/Library/Caches/PyCharm2018.1/python_stubs/ .

Existe uma outra opção. Se você fizer um novo projeto e alterar a configuração do seu interpretador, o PyCharm tornará seu python stubs

@ 541435721 @nlgranger

Isso é exatamente o que eu fiz (invalidar o cache, parar o pycharm, rm .PyCharm2018.1/system/python_stubs/* -rf ).
BTW, estou usando o python 3 caso isso importe (vejo alguns testes do python2 no PR).

@kimdwkimdw
Fiz isso como orientação e meu sistema operacional é windows10, mas estou enfrentando esse problema.

@kimdwkimdw eu posso fazer isso! obrigada!

Como outros estão tendo problemas, eu só queria observar que a correção de @kimdwkimdw está funcionando para mim. Isso ocorre com o Python 3 no macOS. Usando:

source path/to/my/venv/bin/activate
git clone https://github.com/kimdwkimdw/pytorch.git
cd pytorch
git checkout interface-0
git submodule update --init
MACOSX_DEPLOYMENT_TARGET=10.13 CC=clang CXX=clang++ python setup.py install

Excluí meus stubs manualmente, embora não saiba se isso era necessário. Em qualquer caso, pelo menos funciona no meu sistema.

No entanto, descobri que torch.float32 (e outros tipos de dados) e torch.backends.cudnn ainda não foram resolvidos pelo PyCharm (pelo menos no meu caso).

@shianiawhite Bom argumento. Obrigado. Acho que devo adicionar mais atualizações para solicitações pull.

@ zou3519

Não funcionou para mim, embora eu tenha construído com sucesso o PR de @kimdwkimdw e excluído manualmente python_stub em ~/.PyCharmCE2018.1/system .

Desculpe perguntar novamente, mas alguma notícia sobre isso?
Isso ajudaria a abrir um problema aqui em jetbrains https://youtrack.jetbrains.com/issues/PY?q=pytorch ?

Estou tendo o mesmo problema no Ubuntu 16.04 e no PyCharm 2017.3

O estranho é que quando eu executo no console do python, ele mostra o autocompletar corretamente.
working_in_console

Mas quando executo o mesmo no editor não funciona.
not_working_in_editor

Estou usando o python 3.6.6 e o ​​PyTorch 0.41. Eu instalei usando pip e cuda 9.2

Tenho o mesmo problema no Window7 PyCharm2018, Win10 PyCharm2018, Win10 VS2017, Win10 Spyder.
e tento usar pytorch0.4.0 e pytorch0.4.1, ambos não podem ser completados automaticamente.
apenas ipython mostra autocompletar adequadamente.
por favor me ajude

Abri um problema no youtrack do PyCharm. Talvez eles também possam ajudar.

https://youtrack.jetbrains.com/issue/PY-31259

Tentei VS2017 e PyCharm2018.2 com pytorch0.4.1 no Windows 10 e o preenchimento automático não funciona para mim.

PyTorch-0.4.1 instalado por pip com PyCharm-2018.2, ainda tem os mesmos problemas.

seria bom se as pessoas pudessem votar aqui https://youtrack.jetbrains.com/issue/PY-31259
então a correção tem maior prioridade

Olá!
Sou o cessionário de PY-31259.
O PyCharm não executa nenhum código do usuário ao fazer a análise estática (a exclusão é o console onde o ambiente pode ser facilmente investigado). Portanto, a maioria das maneiras dinâmicas de declarar atributos não são detectáveis.

@sproshev obrigado pela sua resposta. Você poderia esclarecer por que a solicitação de pull de @kimdwkimdw https://github.com/pytorch/pytorch/pull/8845 funciona?

Para o contexto, o pytorch faz algumas atribuições dinâmicas de atributos quando você o importa. A solicitação pull de @kimdwkimdw mantém isso, mas o faz de uma maneira diferente que o pycharm é capaz de acompanhar.

Acho que a maneira mais razoável de corrigir isso (pelo menos para Python 3) é gerar um stub .pyi.
Um teste rápido parece indicar que funcionaria bem.
Não sou um usuário PyCharm, mas se houver pessoas suficientes que ficarão extremamente felizes, posso ver se podemos gerar um a partir de native_functions.yaml e amigos.

@ t-vi Não tenho ideia do que você está falando, mas visto que isso está se arrastando indefinidamente, gere o arquivo .pyi! : D

Portanto, o módulo principal parece fácil:
image

Por algum motivo ou outro, apenas ter

class Tensor: ...

<strong i="6">@overload</strong>
def randn(size: Tuple[int, ...], *, out: Optional[torch.Tensor], dtype: dtype=None, layout: layout=torch.strided, device: Union[device, str, None]=None, requires_grad: bool=False) -> Tensor: ...

no __init__.pyi não parece permitir PyCharm inferir que depois de a = randn((1,2)) , a é da classe torch.Tensor . :(
(Na verdade, eu também tenho anotações na classe, mas elas só serão usadas se eu soletrar a anotação a : torch.Tensor = ... )

Postei o pyi aqui, se você quiser tentar: https://gist.github.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b

Novamente, se você tiver uma ideia de por que o PyCharm não parece identificar o tipo de retorno, eu ficaria muito grato se você compartilhasse.

@ t-vi A solução também funciona para o código VS. Obrigado!

Obrigado, ZongyueZhao, por seu feedback. Ainda não tentei com o código do VS, mas se o pyi funcionar incluindo tipos de retorno, enviarei um patch para sua geração.

Obrigado, __init__ funcionou para mim! Estou usando o env conda chamado "principal", então o que fiz foi:

pushd /Users/yaroslavvb/anaconda3/envs/main/lib/python3.6/site-packages/torch
rm __init__.py
wget https://gist.githubusercontent.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b/raw/e0e3878fa612c5a4557ec76c011fd5f9453ff0e8/__init__.py
popd

Eu não precisei regenerar o cache

Quanto ao motivo de ele não reconhecer o tipo de retorno do Tensor, isso tem a ver com erros de sintaxe no arquivo. Abra o arquivo no PyCharm, e mostra alguns deles

screenshot 2018-10-05 16 33 51

Depois de excluir linhas com erros, obtive o preenchimento automático
screenshot 2018-10-05 16 35 40

Outra coisa que notei é que as dicas do membro da classe Tensor retornam -> Tensor, que é uma referência circular, portanto também não é reconhecida pelo PyCharm. A solução é fazer -> "Tensor" em vez de -> Tensor para métodos da classe Tensor (https://www.python.org/dev/peps/pep-0484/#forward-references)

Obrigado @yaroslavvb , era exatamente isso que eu estava perdendo!

Bata para visibilidade. Na verdade, é um grande negócio para os usuários do PyCharm. Eu estava avaliando o PyTorch como uma alternativa para nossa base de código tf / keras e esse problema é um bloqueador para nós.

Eu uso pytorch 0.4.1 .

Existe alguma solução concreta para isso. Eu uso o pip para instalar o pytorch. Existem tantas funções integradas do pytorch torch.xxx irreconhecíveis no pycharm.

Se não puder ser corrigido. Você pode ajudar a sugerir um IDE alternativo que sugira todas as funções do pytorch e ajude a navegação dentro da estrutura (como Ctrl + B para pular para a definição da função do pytorch).

Obrigada.

Alguém quer fazer uma RP (@ t-vi)? Estou usando nightlies PyTorch agora e é um pouco chato fazer isso toda vez que atualizo ...

Estou discutindo ativamente com os desenvolvedores principais para ter uma boa solução de quando e como gerar o PYI durante o processo de construção. A parte difícil é mesclar as informações dos bits definidos por python com as dos _C bits. Estamos tentando descobrir uma boa solução e espero ter um PR logo, mas provavelmente precisará de uma rodada de iteração.

Se você está procurando uma maneira de definir minhas prioridades, não hesite em me contatar por e-mail.

Substituir __init__.py não é uma boa solução. Na essência de @ t-vi, por exemplo, ao usar

a = torch.cat([a,b], dim=-1)

O PyCharm avisa que o parâmetro "out" está faltando, mas o parâmetro "out" é opcional.
Em outro caso,

x = torch.empty(10, 2)

Esta linha de código está correta porque o método pode aceitar (* tamanhos, ...), mas PyCharm avisa sobre parâmetros inválidos também. Com tantos avisos estranhos, finalmente escolhi ignorar "torch. *" Nas configurações de inspeção de código ...

@hitvoice Obrigado por apontar isso.
A essência é apenas uma facada muito dura para obter um pyi adequado, então seu feedback é muito apreciado! Espero que você consiga retomar a inspeção na próxima iteração.

Acho que o Optional [out] deve ser out : Optional[Tensor]=None , certo? Isso é fácil de consertar.
Para vazio, é um pouco mais complicado, pois provavelmente significa que precisamos dividir as declarações com apenas um argumento de lista para também aceitar varargs (uma vez eu comecei a analisar o código C analisando os argumentos python por muito tempo), mas certamente estamos comprometido em ter ótimas dicas de tipo.

Oi,
Atualizei o __init__.pyi e agradeceria se você pudesse testá-lo.

  • Estou muito mais feliz em relação ao método de geração, então, embora isso seja nos bastidores, acho que há um bom progresso em se ter um PR.
  • Também gerei dicas para algumas funções definidas por Python (btrifact, einsum), mas não adicionei todas elas.
  • Acho que consertei (no código de geração) as deficiências que @hitvoice apontaram.

Se você acha que isso funciona mais ou menos, procurarei maneiras de chamar o código (precisa ser após a construção) e temos (quase) um PR.

@ t-vi Parece bom. Até agora está funcionando bem para mim.

Só por curiosidade, qual é a razão para gerar as dicas de função definidas por python (btrifact, einsum)? Estou usando o nightly build e eles parecem estar funcionando para mim sem as dicas.

@elliotwaite Em minha (curta) experimentação, eu não x = einsum('ii', a); x. e agora obtenho os métodos tensores para x . Além disso, não tenho certeza de como ter um pyi afeta a forma como as coisas não incluídas no pyi são tratadas. Pelo que eu entendo (o que não é muito bom), isso é uma fonte de sutilezas.

@ t-vi Ah, entendo. Eu estava apenas testando entre incluir o arquivo pyi inteiramente vs não. Você está certo, se eu incluir o arquivo pyi e apenas comentar a linha de dica do einsum, o preenchimento automático para mim também será interrompido. Obrigado por explicar.

@ t-vi Estou recebendo um aviso de "Parâmetro (s) não preenchidos" ao passar apenas um argumento único para torch.tensor ().

image

@elliotwaite Obrigado por notar!
tensor é muito especial, então provavelmente preciso incluir a assinatura adequada manualmente.
Vou atualizar o PR. Você encontrará mais problemas quando eu também atualizar a essência? (Isso é muito manual e eu o faria se ajudasse a experimentá-lo.)

@ t-vi Também estou recebendo um aviso de "Argumento inesperado" para torch.Tensor.view ():
torch.randn(2, 2).view(1, 1, 2, 2)

Também fiz um script que pesquisou todos os documentos e retirou todas as strings "tensor. *". Em seguida, testei-os para preenchimento automático. Aqui está a lista daqueles em que o preenchimento automático ainda não está funcionando. Usei a função print () para testar e ter certeza de que eles estão realmente acessíveis ao executar o script.
https://github.com/elliotwaite/pytorch_typehints/blob/master/no_autocomplete.py

@elliotwaite Certo, há alguma coisa de varargs para tensores faltando (acho que também não estou agindo nas anotações kwonly no yaml).
A ideia de usar doc (string) s para ver se as anotações são boas (ou pelo menos tem uma chance de ser liberal o suficiente) é ótima, tentarei fazer isso como parte do teste.

8845 é confirmado do lado de PyCharm. Mas, em geral, é melhor ter pyi stubs porque eles pelo menos contêm informações de tipo. 1 para eles.

O problema existe em geral com todos os IDEs que usam Jedi como backend para completar o Python, certo? E a sua solução também será geral ou específica para PyCharm e VS Code? Eu uso o emacs com Jedi como backend de conclusão e tenho o mesmo problema. MAS, o que é interessante, você pode tentar completar no console IPython e funciona! Veja todas as funções, como isso é possível?

Bem, IPython usa introspecção dinâmica, e isso sempre funciona (só funciona depois de você ter criado os objetos, então você será capaz de completar mytensor.a mas não mytensor.abs().m , que você pode com o tipo dicas.
Tanto quanto eu entendo, VSCode e Jupyter também usam Jedi. Stubs (arquivos .pyi) são a maneira "padrão" de adicionar informações de tipo sobre os módulos existentes, mas eles ainda não são tão amplamente suportados quanto se gostaria (e ainda existem casos extremos, por exemplo, você não pode expressar que pode passar um reticências ("...") para funções de indexação). O curso de ação correto é pular para Jedi e adicionar suporte a stub de dica de tipo (https://github.com/davidhalter/jedi/issues/839). Sua chance de investir seu tempo ou dinheiro para tornar seu conjunto de ferramentas melhor!

@ t-vi Obrigado por continuar acompanhando esse problema!

Eu entendo que Stubs são uma maneira muito boa de resolver esse problema.
https://www.python.org/dev/peps/pep-0484/#stub -files

No entanto, Docstring s não são gerados com Stubs. Que tal adicionar Docstring ?

@ t-vi Não entendo o que devo fazer. O que você quer dizer com melhorar meu conjunto de ferramentas? Eu uso Jedi atualmente, mas não entendo muito bem como trabalhar com esses arquivos stub. Isso é algo que devo escrever ou está presente em módulos e tenho que atualizar o Jedi? É como cabeçalhos em C ++?
A documentação e o problema do

@kimdwkimdw Onde você coloca docstrings para que todos os encontrem? (Eu não acho que você pode colocá-los no PYI (?)). Se você tem uma ideia de onde colocá-los, com certeza vou colocá-los lá ...
@piojanu Jedi parece ter um ramo formatado, mas não sei se é sobre pyi em geral. Provavelmente, é melhor perguntar ao autor Jedi como você pode ajudar a fazer o suporte pyi acontecer.

@ t-vi Eu entendi agora, obrigado.

Assinatura e tipos de método inferidos originalmente com Docstring no PyTorch 0.3.0 e meu PR (https://github.com/pytorch/pytorch/pull/8845).
image

@ t-vi
Docstrings pode ser adicionado abaixo de cada método em PYI .
image

A maioria deles está localizada em _torch_docs.py

Para o comentário de @sproshev , acho que o # 8845 é uma boa maneira não só no PyCharm, mas também em outros IDEs porque usa a forma padrão de importação de módulos. Portanto, PyCharm pode gerar seu Python stubs automaticamente.

PyTorch's original way 0.3.0 ou # 8845 faz em PyCharms, em IPython.
As informações de tipo podem ser incluídas em gen_python_functions.py ou então.

Concordo que gerar arquivos pyi explícitos é uma maneira de resolver esse problema. mas talvez não da maneira mais limpa.

O mesmo problema, pycharm é basicamente inútil ao usar pytorch0.4. Quase tudo está sublinhado porque " não foi possível encontrar a referência " ou " não pode ser chamado ".

torch

@nimcho Eu também tenho esse problema. É por isso?

Eu instalo o tocch-nightly no meu Mac e o Pycharm não pode solicitar nada, embora seja capaz de pular para a fonte quando eu clico com o comando Command. Depois de remover os diretórios de cache nas pastas a seguir, o problema foi corrigido.

  • / Users / NOME DE USUÁRIO / Library / Caches / PyCharm ** / python_stubs
  • / Users / NOME DE USUÁRIO / Library / Caches / PyCharm ** / LocalHistory
  • / Usuários / NOME DE USUÁRIO / Biblioteca / Caches / PyCharm ** / caches
  • / Usuários / NOME DE USUÁRIO / Biblioteca / Caches / PyCharm ** / tmp
  • / Users / NOME DE USUÁRIO / Library / Caches / PyCharm ** / userHistory

Ainda tenho esse problema com o pytorch 1.0.0. Como posso resolver esse problema com as soluções acima?

Isso é constrangedor ... quase 8 meses :-(

@ebagdasa Eu encorajo-nos a manter isso produtivo e não sarcástico. Quem é o 'você' a que está se referindo? Na minha experiência, software de produção nem sempre tem um ótimo suporte para editor.

para dar contexto sobre por que isso demorou tanto para consertar:

  • nenhum de nós, desenvolvedores principais, usa o PyCharm, então, primeiro, foi difícil obter visibilidade sobre o problema
  • uma vez que começamos a examiná-lo, era um problema de projeto cruzado, ou seja, era parte do tipo de CPython que o PyCharm suportava para preenchimento automático e parte do que o PyTorch poderia fazer para contornar as limitações do PyCharm nessa configuração.

    • isso precisava de uma combinação de conhecer os internos do PyCharm e os internos do PyTorch. Eu espero que você entenda a dificuldade disso

    • apenas como um contraponto, o Microsoft VSCode + PyTorch funciona bem para o preenchimento automático, assim como o preenchimento automático do IPython funciona bem. Então @ebagdasa não acho que seu comentário seja relevante.

Por último, @kimdwkimdw e @ t-vi têm correções, por exemplo em https://github.com/pytorch/pytorch/pull/12500 , gerando dicas de tipo explícitas e, uma vez que o PR entre, devemos consertar o PyCharm edição.

E como sempre, este é um projeto de código aberto, então se algum de vocês puder ajudar com isso, fique à vontade para fazê-lo. Por exemplo, @kimdwkimdw e @ t-vi fizeram isso em seu tempo livre, e não são pagos por isso, e não precisam do ódio.

@ebagdasa , você deve pedir um reembolso

tudo bem, esse foi um comentário de decepção, vendo como meu código está todo destacado pelo editor. Desculpe pessoal, eu entendo como funciona. Continue! Talvez seja hora de experimentar o VSCode.

@soumith O preenchimento automático do código VS também não funciona em algumas funções, como torch.randn

1547171211663

E como sempre, este é um projeto de código aberto, então se algum de vocês puder ajudar com isso, fique à vontade para fazê-lo. Por exemplo, @kimdwkimdw e @ t-vi fizeram isso em seu tempo livre, e não são pagos por isso, e não precisam do ódio.

Seria bom, claro, se eles _disse_ sendo pagos por isso ... seria possível para o FAIR usar algo como gitcoin para encorajar a participação de recompensas? Claro que o pessoal da FAIR já é generosamente recompensado por suas contribuições, e a maioria das pessoas aqui (como eu) provavelmente está muito ocupada com seus empregos diários ...

Eu tentei VS Code, Atom e Pycharm usando pip ou conda, mas nenhum deles funciona bem para autocompletar em algumas funções como torch.max (). IPython e Jupyter não têm esse problema, mas não são editores.

o mesmo aqui. Tentei PyCharm, código VS, Spyder .. torch.cat impossível de obter, o mesmo que o Longtensor.

Ao longo dos comentários nesta edição, isso tem sido continuamente cobrado como um problema relacionado ao PyCharm, e foi mencionado que é um problema de como os internos do PyCharm e os internos do PyTorch funcionam juntos. Essa é uma caracterização incorreta do problema, e vê-lo como tal provavelmente não levará à solução correta. O PyCharm está adotando uma abordagem bastante padrão para resolver pacotes e, como foi mencionado por vários outros, este problema não é o único do PyCharm. Acontece que o PyCharm é o editor mais popular que enfrenta esse problema com o PyTorch. Qualquer editor que não resolva o pacote dinamicamente (para propósitos de velocidade) terá esse problema. Acho que o fato de que IPython / Jupyter / etc pode resolvê-lo corretamente é a exceção e não a regra. Eu só queria enfatizar isso para que não haja muito foco em "fazer funcionar com o PyCharm" ao invés de "fazer funcionar em geral".

Dito isso, os stubs que estão sendo trabalhados neste PR são uma boa solução "padrão" e provavelmente devem ser capazes de resolver o problema em geral. Para aqueles que procuram uma solução temporária rápida, copie o arquivo stub em seu dist-packages / site-packages conforme explicado na essência. Adicione manualmente quaisquer outras peças ausentes e relate essas peças ausentes para garantir que sejam manuseadas.

Olá a todos! O patch do @ t-vi foi mesclado com o master, então se você atualizar você deve começar a trabalhar com o autocomplete para torch no master. Além disso, comprometemos um stub de tipo gerado manualmente para 1.0.1, portanto, quando esse lançamento acontecer, o preenchimento automático também funcionará para as pessoas nesse lançamento.

O tipo stub provavelmente não é bom o suficiente para verificar o tipo de seu código com mypy. Estamos rastreando este trabalho de acompanhamento no # 16574, por favor, canalize se isso afeta você lá. Além disso, corrigimos o preenchimento automático apenas na tocha; se você estiver encontrando problemas com o preenchimento automático em outros módulos (ou se achar que faltam identificadores na tocha), informe-nos com um relatório de bug.

Obrigado pela sua paciência!

Apenas para a informação, a nova versão v1.0.1 agora tem isso resolvido e é fornecido.

@ezyang torch.cuda está faltando em pyi , por exemplo, ao usar torch.cuda.is_available .

Estou fazendo o intellisense para o VSCode funcionar parcialmente no tocha 1.0.1, mas algumas funções ainda estão faltando, por exemplo, torch.as_tensor

Eu também estava recebendo erros e nenhum preenchimento automático para algumas funções no PyCharm (estava faltando quando eu mais precisava), e eu não acho que isso esteja completamente resolvido ainda.

Escrevi meu primeiro programa PyTorch no fim de semana passado, então não tenho certeza se cometi algum erro com a configuração.

@vpj foi corrigido no PyTorch v1.0.1. Qualquer coisa abaixo ainda tem o problema. verifique print(torch.__version__)

A versão é 1.0.1post2

pytorch_missing_defs

Algumas definições estão faltando no arquivo __init __. Pyi.

O PyCharm também parece estar causando alguns problemas porque não consegue inferir os tipos de retorno. Por exemplo, não parece inferir que o valor de retorno de torch.exp é Tensor (no entanto, o tipo de retorno é inferido com Tensor.exp ). Embora o tipo de retorno seja definido na definição do método torch.exp .

sim, eu também atualizo para '1.0.1.post2'
e a conclusão automática parece não funcionar

image

então, aparentemente, alguns namespaces ainda estão faltando, embora tenhamos corrigido o problema maior.

Abri uma nova tarefa de rastreamento para isso aqui: https://github.com/pytorch/pytorch/issues/16996

Não tenho certeza sobre este? (Isso foi corrigido?) O console funciona bem.
(Mas from torch.utils.data import DataLoader, Dataset funciona)
untitled2____Documents_python_untitled2__-_____main_py

@yarcowang Estamos adicionando cada vez mais namespaces. Isso deve funcionar muito bem no 1.2.0. Se ainda houver coisas faltando, por favor, registre os bugs.

@ezyang OK. Entendo. Parece um bug de longo prazo.

Eu sou um novato em pytorch. Muito obrigado, funciona bem para mim.

Olá a todos, passei por todo o tópico. É muito difícil descobrir se o problema foi resolvido ou não. Estou usando torch1.4 + cpu e torch.tensor ainda apresenta problemas de aviso. Alguém pode ajudar? Obrigado

Ainda estou tendo esse problema com o torch.Tensor

Obrigado pelos comentários. Temos corrigido muitos pequenos bugs de dicas de tipo nos últimos meses; se você notar coisas que não estão funcionando na versão mais recente ou no master, abra os bugs para eles e nós veremos. Obrigado!

Coisas quebradas que notei na versão 1.4.0:

torch.cuda.manual_seed # manual_seed not hinting
torch.cuda.manual_seed_all # manual_seed_all not hinting
torch.utils # cannot find utils
torch.backends # cannot find backends
torch.optim.lr_scheduler._LRScheduler.step() # argument "epoch" unfilled, while it's optional
torch.Tensor(4, 1) # unexpected arguments & argument "requires_grad" unfilled
torch.optim.Adadelta # cannot find Adadelta
torch.nn.TransformerEncoderLayer # cannot find TransformerEncoderLayer
torch.nn.TransformerEncoder # cannot find TransformerEncoder

@tjysdsg Obrigado por relatar. Você poderia abrir um novo problema com esses casos para obter mais visibilidade?

@tjysdsg Obrigado por relatar. Você poderia abrir um novo problema com esses casos para obter mais visibilidade?

@ zou3519 Aqui está # 34699, também atualizarei o problema se encontrar algo novo

Esta página foi útil?
0 / 5 - 0 avaliações