Pytorch: « Indices de type » cassés dans PyTorch 0.4.0, liés aux IDE (eq. PyCharm)

Créé le 5 mai 2018  ·  106Commentaires  ·  Source: pytorch/pytorch

Si vous avez une question ou souhaitez de l'aide et du soutien, veuillez demander à notre
forums .

Si vous soumettez une demande de fonctionnalité, veuillez faire précéder le titre par [demande de fonctionnalité].
Si vous soumettez un rapport de bogue, veuillez remplir les détails suivants.

Description du problème

Récemment, j'ai compris que PyCharm ne pouvait pas effectuer de saisie semi-automatique pour torch.zeros .

PyCharm dit

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

Je l'ai creusé pendant un moment, j'ai trouvé Type Hints cassé.

De ces changements,
https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4
https://github.com/pytorch/pytorch/wiki/Breaking-Changes-from-Variable-and-Tensor-merge

Surtout, https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4#diff -14258fce7c17ccb97b488e64373b0803R308 @colesbury
Cette ligne ne peut pas générer de Type Hints pour de nombreux IDE.

À l'origine, torch.zeros était en torch/_C/__init__.py
Mais, il est passé à torch/_C/_VariableFunctions

Exemple de code

https://gist.github.com/kimdwkimdw/50c18b5cf72c69c2d01bb4146c8a2b5c
Ceci est une preuve de concept pour ce bogue.

Si vous regardez main.py

import T_B as torch

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

Information système

Veuillez copier et coller la sortie de notre
script de collecte d'environnement
(ou remplissez la liste de contrôle ci-dessous manuellement).

Vous pouvez obtenir le script et l'exécuter avec :

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 :
  • Comment vous avez installé PyTorch (conda, pip, source) :
    N'importe quel cas pour conda, pip, source.

  • Commande de build que vous avez utilisée (si vous compilez à partir de la source) :

  • OS : Tout
  • Version PyTorch : 0.4.0
  • Version Python : 3.6.5
  • Version CUDA/cuDNN : .
  • Modèles et configuration de GPU : .
  • Version GCC (si compilation à partir des sources) : .
  • Version CMake : .
  • Versions de toutes les autres bibliothèques pertinentes
medium priority (this tag is deprecated)

Commentaire le plus utile

Nous allons donner la priorité à cela parce que de nombreux utilisateurs l'ont demandé... nous ferons de notre mieux pour l'examiner davantage.

Tous les 106 commentaires

un point connexe ? #4568

Le même problème, pycharm est fondamentalement inutile lors de l'utilisation de pytorch0.4. Presque tout est souligné soit parce que " ne trouve pas de référence " ou " n'est pas appelable ".

torch

Il n'y a pas de saisie semi-automatique, de définition rapide et de documentation rapide pour torch.tensor , torch.max et loss.backward .

  • Système d'exploitation : Linux (Fedora 27 64 bits avec Gnome).
  • Version PyTorch : 0.4.0.
  • Comment vous avez installé PyTorch (conda, pip, source) : pip3.
  • Version Python : 3.6.5.
  • J'utilise CPU (pas de CUDA).

Si l'un d'entre vous a des suggestions pour résoudre ce problème, n'hésitez pas à nous le faire savoir !

Il semble que la recherche de fonctions de PyCharm pourrait être améliorée, mais je ne suis pas sûr de ce qui peut être fait du côté de PyTorch. En utilisant torch.tensor comme exemple, help(torch.tensor) obtient la documentation tandis que dir(torch) affiche "tenseur" comme membre.

@zou3519
Je pensais que ci-dessous n'est pas un bon style de code.

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

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

globals()[name] n'est pas la manière Pythonic . Ce n'est pas seulement un problème pour PyCharm, mais aussi pour le style de code Python.

Je pensais que _VariableFunctions n'avait pas besoin d'être Class.

J'essaie de faire des relations publiques pour ce problème. Réviseriez-vous ? @zou3519

@kimdwkimdw Je ne sais pas ce qui se passe avec le global() là-bas ou ce qui l'améliorerait, mais oui, veuillez soumettre un PR et je le regarderai :)

Il semble que la recherche de fonctions de PyCharm pourrait être améliorée, mais je ne suis pas sûr de ce qui peut être fait du côté de PyTorch.

Je voulais juste noter que je n'ai jamais rencontré ce problème avec un autre package dans PyCharm. Cela ne veut pas dire que PyCharm ne devrait pas faire les choses différemment, mais ce problème semble être un cas rare.

Je travaille principalement sur ces fichiers.

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

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

Essayer de comprendre ce qui a changé lors de la génération d'extensions C.
Je ferai des relations publiques bientôt.

Les mises à jour?

J'ai fait un exemple de travail dans ma fourchette.

Si quelqu'un souhaite d'abord utiliser la saisie semi-automatique, essayez ci-dessous.

1. cloner git

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

2. Installez PyTorch

3. Vider le cache dans PyCharm

  • généralement les caches sont situées dans /Users/USERNAME/Library/Caches/PyCharm*/python_stubs/
  • vérifiez vos project interpreter dans PyCharm

Avant pull request , je dois ajouter plus de commits pour organiser les résultats.

l'installation a échoué en suivant la description ci-dessus.
y a-t-il un moyen simple d'installer?

J'ai le même problème. J'ai toujours aimé Pytorch et Pycharm. Dommage qu'ils ne fonctionnent pas bien : (
Dans l'attente des mises à jour.

C'est vraiment étrange quand j'ai utilisé le même code dans la console python avec pycharm, c'est normal, mais dans l'éditeur. O__O "…

Nous allons donner la priorité à cela parce que de nombreux utilisateurs l'ont demandé... nous ferons de notre mieux pour l'examiner davantage.

Beaucoup d'utilisateurs demandent.... Je devrais faire une pull request ce week-end.

J'ai fusionné mon code avec la branche master .

Type Hints sont vivants maintenant.

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

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

cc. @zou3519

@kimdwkimdw dois-je réinstaller pytorch à partir de la source ? Existe-t-il un moyen simple de renouveler dans la plate-forme Windows ?

@541435721
Oui tu devrais. Consultez https://github.com/pytorch/pytorch#install -pytorch cette page.
Je ne sais pas il y a moyen plus simple de le construire.

Cela ne semble rien changer pour Pycharm (2018.1, avec des caches reconstruits).

Vous devriez vérifier la demande de tirage de l » @kimdwkimdw, pas maître pytorch. La demande d'extraction n'a pas encore été fusionnée dans le maître pytorch.

Voici le PR : https://github.com/pytorch/pytorch/pull/8845.

Oui, c'est ce que j'ai fait :

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, vous devez supprimer manuellement les talons python. il ne peut pas être supprimé avec 'invalider le cache'.

Lorsque vous configurez le projet, Pycharm initialise ses fichiers de raccord Python.

Après avoir supprimé le répertoire python stub, redémarrez Pycharm.

PyCharm va régénérer son stub python.

Cela ne semble rien changer, mais c'est peut-être ma configuration. Peut-être pouvons-nous attendre que quelqu'un d'autre essaie ?

Vous devriez trouver le répertoire python stub. Lorsque vous cliquez sur torche, vous pouvez trouver le répertoire stub.

@kimdwkimdw J'ai réinstallé et supprimé le cache, mais aucun changement.

image
Vous ne pouvez pas supprimer le cache PyCharm via ce invalidate Caches

Sous MacOS, vous devez supprimer manuellement les dossiers dans ~/Library/Caches/PyCharm2018.1/python_stubs/ .

Il y a une autre option. Si vous créez un nouveau projet et modifiez les paramètres de votre interprète, PyCharm fera son python stubs

@541435721 @nlgranger

C'est exactement ce que j'ai fait (invalider le cache, arrêter pycharm, rm .PyCharm2018.1/system/python_stubs/* -rf ).
BTW, j'utilise python 3 au cas où cela serait important (je vois des tests python2 dans le PR).

@kimdwkimdw
Je l'ai fait comme guide et mon système d'exploitation est Windows10, mais je suis confronté à ce problème.

@kimdwkimdw je peux le faire ! Merci!

Comme d'autres ont eu des problèmes, je voulais juste noter que le correctif de

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

J'ai supprimé mes talons manuellement, même si je ne sais pas si cela était nécessaire. En tout cas, cela fonctionne au moins sur mon système.

Cependant, j'ai constaté que torch.float32 (et d'autres types de données) et torch.backends.cudnn sont toujours pas résolus par PyCharm (du moins dans mon cas).

@shianiawhite Bon point. Merci. Je pense que je devrais ajouter plus de mises à jour aux Pull Requests.

@zou3519

Cela n'a pas fonctionné pour moi, même si j'ai réussi à créer le PR de python_stub dans ~/.PyCharmCE2018.1/system .

Désolé de demander à nouveau, mais des nouvelles à ce sujet?
Cela aiderait-il d'ouvrir un problème ici sur jetbrains https://youtrack.jetbrains.com/issues/PY?q=pytorch ?

J'ai le même problème dans Ubuntu 16.04 et PyCharm 2017.3

Ce qui est étrange, c'est que lorsque je lance dans la console python, la saisie semi-automatique s'affiche correctement.
working_in_console

Mais quand je lance la même chose dans l'éditeur, cela ne fonctionne pas.
not_working_in_editor

J'utilise python 3.6.6 et PyTorch 0.41. Je l'ai installé en utilisant pip et cuda 9.2

J'ai le même problème dans Window7 PyCharm2018, Win10 PyCharm2018, Win10 VS2017, Win10 Spyder.
et j'essaie d'utiliser pytorch0.4.0 et pytorch0.4.1, les deux ne peuvent pas se compléter automatiquement.
seul ipython affiche correctement la saisie semi-automatique.
Aidez-moi, s'il vous plaît

J'ai ouvert un problème dans PyCharm youtrack. Peut-être qu'ils peuvent aider aussi.

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

J'ai essayé VS2017 et PyCharm2018.2 avec pytorch0.4.1 sur Windows 10 et la saisie semi-automatique ne fonctionne pas pour moi.

PyTorch-0.4.1 installé par pip avec PyCharm-208.2, a toujours les mêmes problèmes.

ce serait bien si les gens pouvaient voter ici https://youtrack.jetbrains.com/issue/PY-31259
donc le correctif a une priorité plus élevée

Salut!
Je suis le cessionnaire de PY-31259.
PyCharm n'exécute aucun code utilisateur lors de l'analyse statique (l'exclusion est la console où l'environnement peut être facilement étudié). Ainsi, la plupart des manières dynamiques de déclarer des attributs ne sont pas détectables.

@sproshev merci pour votre réponse. Pourriez-vous nous expliquer pourquoi la pull request de @kimdwkimdw https://github.com/pytorch/pytorch/pull/8845 fonctionne ?

Pour le contexte, pytorch effectue une attribution dynamique d'attributs lorsque vous l'importez. La pull request de @kimdwkimdw conserve cela, mais le fait d'une manière différente que pycharm est capable de suivre.

Je pense que le moyen le plus raisonnable de résoudre ce problème (au moins pour Python 3) est de générer un stub .pyi.
Un test rapide semble indiquer que cela fonctionnerait bien.
Je ne suis pas moi-même un utilisateur de PyCharm, mais s'il y a suffisamment de gens qui seront extrêmement heureux, je pourrais voir si nous pouvons en générer un à partir de native_functions.yaml et de ses amis.

@t-vi Je n'ai aucune idée de ce dont vous parlez, mais étant donné que cela ne fait que traîner, veuillez générer le .pyi! :RÉ

Le module principal semble donc assez simple :
image

Pour une raison ou une autre, le simple fait d'avoir

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: ...

dans le __init__.pyi ne semble pas permettre à PyCharm de déduire qu'après a = randn((1,2)) , a est de classe torch.Tensor . :(
(J'ai aussi des annotations dans la classe, mais elles ne sont utilisées que si j'épelle l'annotation a : torch.Tensor = ... )

J'ai posté le pyi ici, si vous voulez essayer : https://gist.github.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b

Encore une fois, si vous avez une idée de la raison pour laquelle PyCharm ne semble pas identifier le type de retour, je vous serais très reconnaissant de le partager.

@t-vi La solution fonctionne également pour le code VS. Merci!

Merci ZongyueZhao pour vos commentaires. Je n'ai pas encore essayé avec le code VS, mais si le pyi fonctionne, y compris les types de retour, je soumettrai un correctif pour sa génération.

Merci, ce __init__ fonctionné pour moi ! J'utilise conda env appelé "main", donc ce que j'ai fait était:

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

Je n'ai pas eu besoin de régénérer le cache

En ce qui concerne la raison pour laquelle il ne reconnaît pas le type de retour Tensor, cela a à voir avec des erreurs de syntaxe dans le fichier. Ouvrez le fichier dans PyCharm, et il en montre quelques-uns

screenshot 2018-10-05 16 33 51

Une fois que j'ai supprimé les lignes avec des erreurs, j'ai obtenu la saisie semi-automatique
screenshot 2018-10-05 16 35 40

Une autre chose que j'ai remarquée est que les astuces des membres de la classe Tensor retournent -> Tensor, qui est une référence circulaire, donc elle n'est pas non plus reconnue par PyCharm. La solution est de faire -> "Tensor" au lieu de -> Tensor pour les méthodes de la classe Tensor (https://www.python.org/dev/peps/pep-0484/#forward-references)

Merci @yaroslavvb , c'était exactement ce qui me manquait !

Bosse pour la visibilité. C'est en fait une affaire énorme pour les utilisateurs de PyCharm. J'évaluais PyTorch comme une alternative à notre base de code tf/keras et ce problème est un bloqueur pour nous.

J'utilise pytorch 0.4.1 .

Y a-t-il une solution concrète pour cela. J'utilise pip pour installer pytorch. Il y a tellement de fonctions intégrées de pytorch torch.xxx méconnaissables dans pycharm.

Si ça ne peut pas être réparé. Pouvez-vous aider à suggérer un IDE alternatif qui suggère toutes les fonctions pytorch et aide à la navigation dans le cadre (comme Ctrl + B pour passer à la définition de la fonction pytorch).

Merci.

Quelqu'un veut faire un PR (@t-vi) ? J'utilise maintenant les nightlies PyTorch et c'est un peu fastidieux de le faire chaque fois que je mets à niveau ...

Je discute activement de cela avec les développeurs principaux pour avoir une bonne solution sur quand et comment générer le PYI pendant le processus de construction. La partie difficile est de fusionner les informations des bits définis par python avec celles des bits _C . Nous essayons de trouver une bonne solution et j'espère avoir un PR bientôt, mais il faudra probablement une série d'itérations.

Si vous cherchez un moyen de définir mes priorités, n'hésitez pas à me contacter par mail.

Remplacer __init__.py n'est pas une bonne solution. Dans l' essentiel de @t-vi , par exemple, lors de l'utilisation

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

PyCharm avertit que le paramètre "out" est manquant, mais le paramètre "out" est facultatif.
Dans un autre cas,

x = torch.empty(10, 2)

Cette ligne de code est correcte car la méthode peut accepter (*sizes, ...), mais PyCharm met également en garde contre les paramètres invalides. Avec autant d'avertissements étranges, j'ai finalement choisi d'ignorer "torch.*" dans les paramètres d'inspection du code...

@hitvoice Merci de les avoir
L'essentiel n'est qu'un coup de poing très grossier pour obtenir un bon pyi, donc vos commentaires sont très appréciés ! J'espère que vous pourrez revenir sur l'inspection à la prochaine itération.

Je pense que l'option [out] devrait être out : Optional[Tensor]=None , n'est-ce pas ? C'est facile à corriger.
Pour vide, c'est un peu plus compliqué car cela signifie probablement que nous devons diviser les déclarations avec un seul argument de liste pour accepter également les varargs (j'ai une fois regardé le code C en analysant les arguments python pendant trop longtemps), mais nous sommes certainement engagé à avoir de bons indices de type.

Salut,
J'ai mis à jour le __init__.pyi et j'apprécierais si vous pouviez l'essayer.

  • Je suis beaucoup plus satisfait de la méthode de génération, donc même si c'est dans les coulisses, je pense qu'il y a de bons progrès pour avoir un PR.
  • Je génère également des astuces pour certaines fonctions définies par python (btrifact, einsum), mais je ne les ai pas toutes ajoutées.
  • Je pense avoir corrigé (dans le code de génération) les lacunes signalées par @hitvoice .

Si vous pensez que cela fonctionne à peu près, je vais chercher des moyens d'appeler le code (cela doit être après la construction) et nous avons (presque) un PR.

@t-vi Ça a l'air bien. Jusqu'à présent, cela fonctionne bien pour moi.

Juste curieux, quelle est la raison de générer les astuces de fonction définies par python (btrifact, einsum) ? J'utilise la version nocturne et celles-ci semblent fonctionner pour moi sans les indices.

@elliotwaite Dans mon (courte) expérimentation, je ne x = einsum('ii', a); x. et d'obtenir maintenant les méthodes de tenseur pour x . De plus, je ne sais pas comment le fait d'avoir un pyi affecte la façon dont les éléments non inclus dans le pyi sont traités. D'après ce que je comprends (ce qui n'est pas très bon), c'est une source de subtilités.

@t-vi Ah, je vois. Je testais seulement entre inclure entièrement le fichier pyi et non. Vous avez raison, si j'inclus le fichier pyi et que je commente uniquement la ligne d'indication einsum, cela interrompt également la saisie semi-automatique pour moi. Merci d'avoir expliqué.

@t-vi Je reçois un avertissement "Paramètre(s) non remplis" lorsque je ne passe qu'un seul argument dans torch.tensor().

image

@elliotwaite Merci d'avoir noté !
le tenseur est trop spécial, j'ai donc probablement besoin d'inclure la signature appropriée manuellement.
Je vais mettre à jour le PR. Trouverez-vous plus de problèmes lorsque je mettrai également à jour l'essentiel ? (C'est assez manuel et je le ferais si cela vous aide à lui donner un tour.)

@t-vi Je reçois également un avertissement « argument inattendu » pour torch.Tensor.view() :
torch.randn(2, 2).view(1, 1, 2, 2)

J'ai également créé un script qui a recherché dans tous les documents et extrait toutes les chaînes "tensor.*". Ensuite, je les ai testés pour l'autocomplétion. Voici la liste de ceux pour lesquels la saisie semi-automatique ne fonctionne pas encore. J'ai utilisé la fonction print() pour tester et m'assurer qu'ils sont réellement accessibles lors de l'exécution du script.
https://github.com/elliotwaite/pytorch_typehints/blob/master/no_autocomplete.py

@elliotwaite D'accord , il manque des varargs pour les tenseurs (je pense que je n'arrive pas non plus à agir sur les annotations kwonly dans le yaml).
L'idée d'utiliser des doc(string)s pour voir si les annotations sont bonnes (ou au moins ont une chance d'être assez libérales) est géniale, je chercherai à le faire dans le cadre des tests.

8845 est confirmé du côté de PyCharm. Mais en général, il est préférable d'avoir des pyi car ils contiennent au moins des informations de type. +1 pour eux.

Le problème existe en général avec tous les IDE qui utilisent Jedi comme backend pour la complétion Python, n'est-ce pas ? Et votre solution sera aussi générale ou spécifique pour PyCharm et VS Code ? J'utilise emacs avec Jedi comme backend de complétion et j'ai le même problème. MAIS, ce qui est intéressant, vous pouvez essayer la complétion dans la console IPython et ça marche ! Il voit toutes les fonctions, comment est-ce possible ?

Eh bien, IPython utilise l'introspection dynamique, et cela fonctionne toujours (cela ne fonctionne qu'après avoir créé les objets, vous pourrez donc compléter mytensor.a mais pas mytensor.abs().m , ce que vous pouvez faire avec le type conseils.
Pour autant que je sache, VSCode et Jupyter utilisent également Jedi. Les stubs (fichiers .pyi) sont le moyen "standard" d'ajouter des informations de type sur les modules existants, mais ils ne sont pas encore pris en charge aussi largement que l'on pourrait le souhaiter (et il existe encore des cas extrêmes, par exemple, vous ne pouvez pas exprimer que vous pouvez passer un points de suspension ("...") aux fonctions d'indexation). La bonne marche à suivre consiste à sauter sur Jedi et à ajouter la prise en charge du talon d'indice de type (https://github.com/davidhalter/jedi/issues/839). Votre chance d'investir votre temps ou votre argent pour améliorer votre chaîne d'outils !

@t-vi Merci de continuer à suivre ce problème !

Je comprends que Stubs sont un très bon moyen de résoudre ce problème.
https://www.python.org/dev/peps/pep-0484/#stub -files

Cependant, les Docstring ne sont pas générés avec les stubs. Que diriez-vous d'ajouter Docstring ?

@t-vi Je ne comprends pas ce que je dois faire. Que voulez-vous dire par améliorer ma chaîne d'outils ? J'utilise actuellement Jedi, mais je ne comprends pas vraiment comment travailler avec ces fichiers de raccord. C'est quelque chose que je devrais écrire ou c'est présent dans les modules et je dois mettre à jour Jedi ? Est-ce comme les en-têtes en C++ ?
La documentation PEP et le problème que vous avez liés ne me sont pas vraiment utiles pour savoir comment commencer à les utiliser.

@kimdwkimdw
@piojanu Jedi semble avoir une branche typée, mais je ne sais pas s'il s'agit de pyi en général. Le mieux est probablement de demander à l'auteur Jedi comment vous pouvez aider à faire en sorte que le support pyi se produise.

@t-vi Je comprends maintenant, merci.

Signature et types de méthode inférés à l'origine avec Docstring dans PyTorch 0.3.0 et mon PR (https://github.com/pytorch/pytorch/pull/8845).
image

@t-vi
Docstrings peuvent être ajoutés sous chaque méthode dans PYI .
image

La plupart d'entre eux sont situés dans _torch_docs.py

Pour le commentaire de @sproshev , je pense que #8845 est un bon moyen non seulement dans PyCharm, mais aussi dans un autre IDE car il utilise la méthode standard d'importation de modules. Par conséquent, PyCharm peut générer ses Python stubs automatiquement.

PyTorch's original way 0.3.0 ou #8845 fait en PyCharms, en IPython.
Les informations de type peuvent être incluses dans gen_python_functions.py ou autre.

Je conviens que la génération pyi fichiers

Le même problème, pycharm est fondamentalement inutile lors de l'utilisation de pytorch0.4. Presque tout est souligné soit parce que " ne trouve pas de référence " ou " n'est pas appelable ".

torch

@nimcho J'ai aussi ce problème. C'est pourquoi ?

J'installe torch-nightly sur mon Mac et Pycharm ne peut pas du tout le demander, bien qu'il puisse passer à la source lorsque je commande-clic. Après avoir supprimé les répertoires de cache dans les dossiers suivants, le problème est résolu.

  • /Users/USERNAME/Library/Caches/PyCharm**/python_stubs
  • /Users/USERNAME/Library/Caches/PyCharm**/LocalHistory
  • /Utilisateurs/NOM D'UTILISATEUR/Bibliothèque/Caches/PyCharm**/caches
  • /Utilisateurs/NOM D'UTILISATEUR/Bibliothèque/Caches/PyCharm**/tmp
  • /Users/USERNAME/Library/Caches/PyCharm**/userHistory

J'ai toujours ce problème avec pytorch 1.0.0. Comment puis-je résoudre ce problème avec les solutions ci-dessus ?

C'est embarrassant... presque 8 mois :-(

@ebagdasa Je nous encourage à garder cela productif et non sarcastique. De qui est le « vous » auquel vous faites référence ? D'après mon expérience, les logiciels de production n'ont pas toujours un excellent support d'éditeur.

pour expliquer pourquoi cela a pris si longtemps à corriger :

  • aucun d'entre nous, les développeurs principaux, n'utilise PyCharm, il était donc difficile d'avoir une visibilité sur le problème.
  • une fois que nous avons commencé à l'examiner, il s'agissait d'un problème inter-projets, c'est-à-dire qu'il s'agissait en partie de la partie des types CPython pris en charge par PyCharm pour la saisie semi-automatique, et en partie de ce que PyTorch pouvait faire pour contourner les limitations de PyCharm dans ce paramètre.

    • cela nécessitait une combinaison de connaissance des internes de PyCharm et des internes de PyTorch. J'espère que vous comprenez la difficulté de cela

    • tout comme un contre-point, Microsoft VSCode + PyTorch fonctionne bien pour la saisie semi-automatique, tout comme la saisie semi-automatique IPython. Donc @ebagdasa, je ne pense pas que votre commentaire soit pertinent.

Enfin, @kimdwkimdw et @t-vi ont des correctifs, par exemple dans https://github.com/pytorch/pytorch/pull/12500 en générant des indices de type explicites, et une fois que PR entre, nous devrions, espérons-le, corriger le PyCharm problème.

Et comme toujours, il s'agit d'un projet open source, donc si l'un d'entre vous peut nous aider, n'hésitez pas à le faire. Par exemple, @kimdwkimdw et @t-vi l'ont fait pendant leur temps libre, et ne sont pas payés pour cela, et n'ont pas besoin de haine.

@ebagdasa , vous devriez demander un remboursement

très bien, c'était un commentaire de déception en regardant comment mon code est tout mis en évidence par l'éditeur. Désolé les gars, je comprends comment ça marche. Continue! Il est peut-être temps d'essayer VSCode.

@soumith La torch.randn

1547171211663

Et comme toujours, il s'agit d'un projet open source, donc si l'un d'entre vous peut nous aider, n'hésitez pas à le faire. Par exemple, @kimdwkimdw et @t-vi l'ont fait pendant leur temps libre, et ne sont pas payés pour cela, et n'ont pas besoin de haine.

Ce serait bien, bien sûr, s'ils étaient payés pour cela... serait-il possible pour FAIR d'utiliser quelque chose comme le gitcoin pour encourager la participation par les primes ? Bien sûr, les gens de FAIR sont déjà généreusement rémunérés pour leurs contributions, et la plupart des gens ici (comme moi) ont probablement les mains pleines avec leur travail quotidien...

J'ai essayé VS Code, Atom et Pycharm en utilisant soit pip soit conda, mais aucun d'entre eux ne fonctionne correctement pour la saisie semi-automatique sur certaines fonctions comme torch.max(). IPython et Jupyter n'ont pas ce problème, mais ce ne sont pas des éditeurs.

pareil ici. J'ai essayé PyCharm , VS code , Spyder .. torch.cat impossible à obtenir , le même que le Longtensor.

Tout au long des commentaires de ce numéro, cela a continuellement été présenté comme un problème lié à PyCharm, et il a été mentionné qu'il s'agissait d'un problème lié à la façon dont les composants internes de PyCharm et ceux de PyTorch fonctionnent ensemble. Il s'agit d'une mauvaise description du problème, et le considérer comme tel ne conduira probablement pas à la bonne solution. PyCharm adopte une approche assez standard pour résoudre les packages et, comme cela a été mentionné par plusieurs autres, ce problème n'est pas unique à PyCharm. PyCharm se trouve être l'éditeur le plus populaire qui rencontre ce problème avec PyTorch. Tout éditeur qui ne résout pas dynamiquement le paquet (pour des raisons de vitesse) aura ce problème. Je pense que le fait que IPython/Jupyter/etc puisse le résoudre correctement est l'exception plutôt que la règle. Je voulais juste souligner cela afin que l'accent ne soit pas trop mis sur "le faire fonctionner avec PyCharm" plutôt que sur "le faire fonctionner en général".

Cela étant dit, les talons sur lesquels on travaille dans ce PR sont une bonne solution "standard", et devraient probablement être en mesure de résoudre le problème en général. Pour ceux d'entre vous qui recherchent une solution temporaire rapide, copiez ce fichier de raccord dans vos dist-packages/site-packages comme expliqué dans l'essentiel. Ajoutez manuellement toutes les autres pièces manquantes et signalez ces pièces manquantes pour vous assurer qu'elles sont traitées.

Salut à tous! Le correctif de @t-vi a fusionné avec le maître, donc si vous mettez à jour, vous devriez commencer à travailler avec la saisie semi-automatique pour la torche sur le maître. De plus, nous avons validé un stub de type généré manuellement pour la 1.0.1, donc lorsque cette version arrivera, la saisie semi-automatique fonctionnera également pour les utilisateurs de cette version.

Le stub de type n'est probablement pas assez bon pour la vérification de type de votre code avec mypy. Nous suivons ce travail de suivi dans #16574, veuillez indiquer si cela vous affecte là-bas. De plus, nous n'avons corrigé la saisie semi-automatique que sur la torche ; si vous rencontrez des problèmes avec la saisie semi-automatique sur d'autres modules (ou si vous pensez qu'il manque des identifiants sur la torche), veuillez nous en informer avec un rapport de bogue.

Merci pour votre patience!

juste pour info, la nouvelle version v1.0.1 a maintenant résolu ce problème et c'est expédié.

@ezyang torch.cuda est manquant dans le pyi , par exemple lors de l'utilisation de torch.cuda.is_available .

J'obtiens intellisense pour que VSCode fonctionne partiellement sur la torche 1.0.1, mais certaines fonctions sont toujours manquantes, par exemple torch.as_tensor

Je recevais également des erreurs et aucune saisie semi-automatique pour certaines fonctions dans PyCharm (il manquait au moment où j'en avais le plus besoin), et je ne pense pas que ce soit encore complètement résolu.

J'ai écrit mon premier programme PyTorch le week-end dernier, donc je ne sais pas si j'ai fait une erreur avec la configuration.

@vpj cela a été corrigé dans PyTorch v1.0.1. Tout ce qui est inférieur a toujours le problème. chèque print(torch.__version__)

La version est 1.0.1post2

pytorch_missing_defs

Certaines définitions sont manquantes dans le fichier __init__.pyi.

PyCharm semble également poser quelques problèmes car il ne parvient pas à déduire les types de retour. Par exemple, il ne semble pas déduire que la valeur de retour de torch.exp est un Tensor (cependant, le type de retour est déduit avec Tensor.exp ). Bien que le type de retour soit défini dans la définition de la méthode torch.exp .

oui, je passe également à '1.0.1.post2'
et la complétion automatique ne semble pas fonctionner

image

donc, apparemment, quelques espaces de noms sont toujours manquants, bien que nous ayons résolu le problème plus important.

J'ai ouvert une nouvelle tâche de suivi pour cela ici : https://github.com/pytorch/pytorch/issues/16996

Je ne suis pas tout à fait sûr de celui-ci? (Est-ce résolu ?) La console fonctionne correctement.
(Mais from torch.utils.data import DataLoader, Dataset fonctionne)
untitled2____Documents_python_untitled2__-_____main_py

@yarcowang Nous avons régulièrement ajouté de plus en plus d'espaces de noms. Cela devrait fonctionner assez bien sur 1.2.0. S'il manque encore des éléments, veuillez signaler les bogues.

@ezyang OK. Je vois. Cela semble être un bug à long terme.

Je suis un nouveau pour pytorch. Merci beaucoup, ça marche bien pour moi.

Bonjour à tous, j'ai parcouru tout le fil. Il est assez difficile de savoir si le problème est résolu ou non. J'utilise torch1.4+cpu et torch.tensor a toujours des problèmes d'avertissement. Quelqu'un peut-il aider? Merci

Également toujours confronté à ce problème avec la torche.Tensor

Merci pour les commentaires. Nous avons corrigé beaucoup de petits bugs d'indices de type au cours des derniers mois ; si vous remarquez des choses qui ne fonctionnent pas sur la dernière version ou master, veuillez ouvrir les bogues pour elles et nous les examinerons. Merci!

Choses cassées que j'ai remarquées dans la version 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 Merci pour le signalement. Pourriez-vous ouvrir un nouveau numéro avec ces cas pour plus de visibilité ?

@tjysdsg Merci pour le signalement. Pourriez-vous ouvrir un nouveau numéro avec ces cas pour plus de visibilité ?

@zou3519 Ici c'est #34699, je mettrai aussi à jour le problème si je trouve quelque chose de nouveau

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

keskarnitish picture keskarnitish  ·  3Commentaires

dablyo picture dablyo  ·  3Commentaires

a1363901216 picture a1363901216  ·  3Commentaires

SeparateReality picture SeparateReality  ·  3Commentaires

szagoruyko picture szagoruyko  ·  3Commentaires