Pytorch: "Sugerencias de tipo" rotas en PyTorch 0.4.0, relacionadas con IDE (eq. PyCharm)

Creado en 5 may. 2018  ·  106Comentarios  ·  Fuente: pytorch/pytorch

Si tiene alguna pregunta o desea ayuda y apoyo, pregunte en nuestro
foros .

Si envías una solicitud de función, antecede el título con [solicitud de función].
Si envía un informe de error, complete los siguientes detalles.

Descripcion del problema

Recientemente, descubrí que PyCharm no puede completar la función de autocompletar por torch.zeros .

PyCharm dice

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

Lo busqué por un tiempo y encontré roto Type Hints .

De estos cambios,
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 línea no puede generar Type Hints para muchos IDE.

Originalmente, torch.zeros estaba en torch/_C/__init__.py
Pero, se movió a torch/_C/_VariableFunctions

Ejemplo de código

https://gist.github.com/kimdwkimdw/50c18b5cf72c69c2d01bb4146c8a2b5c
Esta es una prueba de concepto para este error.

Si miras main.py

import T_B as torch

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

Información del sistema

Copie y pegue la salida de nuestro
script de colección de entorno
(o complete la lista de verificación a continuación manualmente).

Puede obtener el script y ejecutarlo con:

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 o Caffe2:
  • Cómo instaló PyTorch (conda, pip, source):
    Cualquier caso para conda, pip, source.

  • Comando de compilación que usó (si se compila desde la fuente):

  • SO: Cualquiera
  • Versión de PyTorch: 0.4.0
  • Versión de Python: 3.6.5
  • Versión CUDA / cuDNN:.
  • Modelos y configuración de GPU:.
  • Versión de GCC (si se compila desde la fuente):.
  • Versión de CMake:.
  • Versiones de cualquier otra biblioteca relevante
medium priority (this tag is deprecated)

Comentario más útil

Vamos a darle prioridad a esto porque muchos usuarios lo han estado solicitando ... haremos todo lo posible para investigarlo más.

Todos 106 comentarios

algún punto relacionado? N.º 4568

El mismo problema, pycharm es básicamente inútil cuando se usa pytorch0.4. Casi todo está subrayado porque " no se puede encontrar la referencia " o " no se puede llamar ".

torch

No hay autocompletado, definición rápida y documentación rápida para torch.tensor , torch.max y loss.backward .

  • SO: Linux (Fedora 27 de 64 bits con Gnome).
  • Versión de PyTorch: 0.4.0.
  • Cómo instaló PyTorch (conda, pip, source): pip3.
  • Versión de Python: 3.6.5.
  • Yo uso CPU (No CUDA).

Si alguno de ustedes tiene sugerencias sobre cómo solucionar este problema, ¡háganoslo saber!

Parece que la búsqueda de funciones de PyCharm podría mejorarse, pero no estoy seguro de qué se puede hacer desde el lado de PyTorch. Usando torch.tensor como ejemplo, help(torch.tensor) obtiene la documentación mientras que dir(torch) muestra "tensor" como miembro.

@ zou3519
Pensé que a continuación no hay un buen 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] no es Pythonic way. No solo es un problema para PyCharm, sino también para el estilo del código Python.

Pensé que _VariableFunctions no es necesario para ser Clase.

Estoy tratando de hacer relaciones públicas para este problema. ¿Lo revisarías? @ zou3519

@kimdwkimdw No sé qué está pasando con el global () allí o qué lo mejoraría, pero sí, envíe un PR y lo veré :)

Parece que la búsqueda de funciones de PyCharm podría mejorarse, pero no estoy seguro de qué se puede hacer desde el lado de PyTorch.

Solo quería señalar que nunca me he encontrado con este problema con ningún otro paquete en PyCharm. Eso no quiere decir que PyCharm no debería estar haciendo las cosas de manera diferente, pero este problema parece ser un caso poco común.

Principalmente trabajo en estos archivos.

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

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

Tratando de averiguar qué ha cambiado cuando genera extensiones C.
Pronto haré relaciones públicas.

¿Alguna actualización?

Hice un ejemplo de trabajo en mi tenedor.

Si alguien quiere usar la función de autocompletar primero, intente a continuación.

1. git clon

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

2. Instale PyTorch

3. Borrar caché en PyCharm

  • por lo general, los cachés se encuentran en /Users/USERNAME/Library/Caches/PyCharm*/python_stubs/
  • verifique su project interpreter en PyCharm

Antes de pull request , necesito agregar más confirmaciones para organizar los resultados.

la instalación falló siguiendo la descripción anterior.
¿Existe alguna forma sencilla de instalar?

Estoy teniendo el mismo problema. Siempre me ha gustado pytorch y pycharm. Es una pena que no funcionen bien: (
Esperamos actualizaciones.

Esto es realmente extraño cuando usé el mismo código en la consola de Python con pycharm, es normal, pero en el editor. O__O "…

Vamos a darle prioridad a esto porque muchos usuarios lo han estado solicitando ... haremos todo lo posible para investigarlo más.

Muchos usuarios están solicitando ... Debería hacer una solicitud de extracción este fin de semana.

Fusioné mi código con la rama actual master .

Type Hints están vivos ahora.

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 ¿debo reinstalar pytorch desde la fuente? ¿Existe alguna forma fácil de renovar en la plataforma de Windows?

@ 541435721
Si deberías. Consulte https://github.com/pytorch/pytorch#install -pytorch esta página.
No sé que haya una forma más sencilla de construirlo.

No parece cambiar nada para Pycharm (2018.1, con cachés reconstruidos).

Que debe salir solicitud de extracción @kimdwkimdw 's, no pytorch maestro. La solicitud de extracción aún no se ha fusionado con pytorch master.

Este es el PR: https://github.com/pytorch/pytorch/pull/8845.

Sí, esto es lo que hice:

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 , debe eliminar los stubs de Python manualmente. no se puede eliminar con 'invalidar caché'.

Cuando configura el proyecto, Pycharm inicializa sus archivos de código auxiliar de Python.

Después de eliminar el directorio stub de Python, reinicie Pycharm.

PyCharm volverá a generar su código auxiliar de Python.

No parece cambiar nada, pero podría ser mi configuración. ¿Quizás podamos esperar a que alguien más lo intente?

Debería encontrar el directorio stub de Python. Al hacer clic en antorcha, puede encontrar el directorio de resguardos.

@kimdwkimdw He reinstalado y eliminado el caché, pero no hay cambios.

image
No puede eliminar PyCharm Cache a través de este invalidate Caches

En MacOS, debe eliminar manualmente las carpetas en ~/Library/Caches/PyCharm2018.1/python_stubs/ .

Existe otra opción. Si crea un nuevo proyecto y cambia la configuración de su intérprete, PyCharm hará que su python stubs

@ 541435721 @nlgranger

Esto es exactamente lo que he hecho (invalidar caché, detener pycharm, rm .PyCharm2018.1/system/python_stubs/* -rf ).
Por cierto, estoy usando Python 3 en caso de que eso importe (veo algunas pruebas de Python2 en el PR).

@kimdwkimdw
Hice esto como guía y mi sistema operativo es Windows10, pero estoy enfrentando este problema.

@kimdwkimdw ¡Puedo hacer eso! ¡gracias!

Como otros han tenido problemas, solo quería señalar que la solución 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

Eliminé mis códigos auxiliares manualmente, aunque no sé si era necesario. En cualquier caso, al menos funciona en mi sistema.

Sin embargo, descubrí que PyCharm aún no resuelve torch.float32 (y otros tipos de datos) y torch.backends.cudnn (al menos en mi caso).

@shianiawhite Buen punto. Gracias. Creo que debería agregar más actualizaciones a las solicitudes de extracción.

@ zou3519

No funcionó para mí, a pesar de que construí con éxito el PR de @kimdwkimdw y python_stub en ~/.PyCharmCE2018.1/system .

Perdón por volver a preguntar, pero ¿alguna noticia sobre esto?
¿Ayudaría a abrir un problema aquí en jetbrains https://youtrack.jetbrains.com/issues/PY?q=pytorch ?

Tengo el mismo problema en Ubuntu 16.04 y PyCharm 2017.3

Lo extraño es que cuando ejecuto en la consola de Python, muestra la función de autocompletar correctamente.
working_in_console

Pero cuando ejecuto lo mismo en el editor, no funciona.
not_working_in_editor

Estoy usando Python 3.6.6 y PyTorch 0.41. Lo instalé usando pip y cuda 9.2

Tengo el mismo problema en Window7 PyCharm2018, Win10 PyCharm2018, Win10 VS2017, Win10 Spyder.
e intento usar pytorch0.4.0 y pytorch0.4.1, ambos no se pueden completar automáticamente.
solo ipython muestra autocompletar correctamente.
por favor, ayúdame

Abrí un problema en PyCharm youtrack. Quizás ellos también puedan ayudar.

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

Probé VS2017 y PyCharm2018.2 con pytorch0.4.1 en Windows 10 y el autocompletado no me funciona.

PyTorch-0.4.1 instalado por pip con PyCharm-2018.2, todavía tiene los mismos problemas.

sería bueno si la gente pudiera votar aquí https://youtrack.jetbrains.com/issue/PY-31259
por lo que la solución tiene mayor prioridad

¡Hola!
Soy el cesionario de PY-31259.
PyCharm no ejecuta ningún código de usuario mientras realiza un análisis estático (la exclusión es una consola donde el entorno podría investigarse fácilmente). Por tanto, la mayoría de las formas dinámicas de declarar atributos no se pueden descubrir.

@sproshev gracias por su respuesta. ¿Podría arrojar algo de luz sobre por qué funciona la solicitud de extracción de https://github.com/pytorch/pytorch/pull/8845 ?

Para el contexto, pytorch realiza una asignación dinámica de atributos cuando lo importa. La solicitud de extracción de @kimdwkimdw mantiene eso, pero lo hace de una manera diferente que pycharm puede seguir.

Creo que la forma más razonable de solucionar esto (al menos para Python 3) es generar un código auxiliar .pyi.
Una prueba rápida parece indicar que funcionaría bien.
Yo mismo no soy un usuario de PyCharm, pero si hay suficientes personas que estarán extremadamente felices, podría ver si podemos generar uno a partir de native_functions.yaml y amigos.

@ t-vi No tengo idea de lo que estás hablando, pero dado que esto se ha estado prolongando una y otra vez, ¡genera el .pyi! :D

Entonces, el módulo principal parece bastante fácil:
image

Por alguna razón u otra, solo tener

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

en el __init__.pyi no parece permitir que PyCharm infiera que después de a = randn((1,2)) , a es de clase torch.Tensor . :(
(De hecho, también tengo anotaciones en la clase, pero solo se usan si deletreo la anotación a : torch.Tensor = ... )

Publiqué el pyi aquí, si quieres probar: https://gist.github.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b

Nuevamente, si tiene una idea de por qué PyCharm no parece identificar el tipo de retorno, le agradecería mucho que lo compartiera.

@ t-vi La solución también funciona para código VS. ¡Gracias!

Gracias, ZongyueZhao, por sus comentarios. Todavía no probé con el código VS, pero si el pyi funciona, incluidos los tipos de retorno, enviaré un parche para su generación.

¡Gracias, ese __init__ funcionó para mí! Estoy usando conda env llamado "main", así que lo que hice fue:

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

No necesitaba regenerar el caché

En cuanto a por qué no reconoce el tipo de retorno Tensor, tiene que ver con errores de sintaxis en el archivo. Abra el archivo en PyCharm y muestra algunos de ellos

screenshot 2018-10-05 16 33 51

Una vez que eliminé las líneas con errores, obtuve el autocompletado
screenshot 2018-10-05 16 35 40

Otra cosa que noté es que las sugerencias de miembros de la clase Tensor regresan -> Tensor, que es una referencia circular, por lo que PyCharm tampoco lo reconoce. La solución es hacer -> "Tensor" en lugar de -> Tensor para métodos de la clase Tensor (https://www.python.org/dev/peps/pep-0484/#forward-references)

Gracias @yaroslavvb , ¡eso era exactamente lo que me había estado perdiendo!

Golpe para la visibilidad. En realidad, es un gran negocio para los usuarios de PyCharm. Estaba evaluando PyTorch como una alternativa a nuestro código base tf / keras y este problema es un bloqueador para nosotros.

Yo uso pytorch 0.4.1 .

¿Existe alguna solución concreta para esto? Utilizo pip para instalar pytorch. Hay tantas funciones integradas de pytorch torch.xxx irreconocibles en pycharm.

Si no se puede arreglar. ¿Puede ayudar a sugerir un IDE alternativo que sugiera todas las funciones de pytorch y ayude a la navegación dentro del marco (como Ctrl + B para saltar a la definición de la función de pytorch)?

Gracias.

¿Alguien quiere hacer un PR (@ t-vi)? Estoy usando PyTorch nightlies ahora y es un poco complicado hacer esto cada vez que actualizo ...

Estoy discutiendo esto activamente con los desarrolladores principales para tener una buena solución de cuándo y cómo generar el PYI durante el proceso de compilación. La parte difícil es fusionar la información de los bits definidos por Python con los de los bits _C . Estamos tratando de encontrar una buena solución y espero tener un PR pronto, pero probablemente necesite una ronda de iteración.

Si está buscando una forma de establecer mis prioridades, no dude en ponerse en contacto conmigo por correo.

Reemplazar __init__.py no es una buena solución. En la esencia de @ t-vi, por ejemplo, cuando se usa

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

PyCharm advierte que falta el parámetro "out", pero el parámetro "out" es opcional.
En otro caso,

x = torch.empty(10, 2)

Esta línea de código es correcta porque el método puede aceptar (* tamaños, ...), pero PyCharm también advierte sobre parámetros no válidos. Con tantas advertencias extrañas, finalmente elijo ignorar "antorcha. *" En la configuración de inspección de código ...

@hitvoice Gracias por señalarlos.
La esencia es solo un puñetazo muy duro para obtener un pyi adecuado, ¡por lo que sus comentarios son muy apreciados! Espero que pueda volver atrás en la inspección con la próxima iteración.

Creo que el [out] opcional debería ser out : Optional[Tensor]=None , ¿verdad? Eso es fácil de arreglar.
Para el vacío, es un poco más complicado, ya que probablemente significa que necesitamos dividir declaraciones con un solo argumento de lista para aceptar también varargs (una vez miré el código C analizando los argumentos de python durante demasiado tiempo), pero ciertamente estamos comprometido a tener excelentes pistas de tipografía.

Hola,
Actualicé el __init__.pyi y te agradecería si pudieras darle una vuelta.

  • Estoy mucho más contento con el método de generación, así que aunque eso está detrás de escena, creo que hay un buen progreso hacia tener un PR.
  • También genero sugerencias para algunas funciones definidas por Python (btrifact, einsum), pero no las agregué todas.
  • Creo que arreglé (en el código de generación) las deficiencias que señalaron @yaroslavvb y @hitvoice .

Si cree que esto funciona aproximadamente, buscaré formas de llamar al código (debe ser después de la compilación) y tenemos (casi) un PR.

@ t-vi Se ve bien. Hasta ahora me está funcionando muy bien.

Solo por curiosidad, ¿cuál es la razón para generar las sugerencias de funciones definidas por python (btrifact, einsum)? Estoy usando la compilación nocturna y parece que funcionan para mí sin las pistas.

@elliotwaite En mi (breve) experimentación, no parece que obtengo autocompletado en los resultados a menos que agregue sugerencias de tipo en ellos, es decir, en x = einsum('ii', a); x. y ahora obtengo los métodos de tensor por x . Además, no estoy seguro de cómo tener un pyi afecta la forma en que se tratan las cosas que no están incluidas en el pyi. Por lo que tengo entendido (que no es muy bueno), esa es una fuente de sutilezas.

@ t-vi Ah, ya veo. Solo estaba probando entre incluir el archivo pyi por completo y no. Tiene razón, si incluyo el archivo pyi y solo comento la línea de sugerencia einsum, también me rompe el autocompletado. Gracias por la explicación.

@ t-vi Recibo una advertencia de "Parámetro (s) sin completar" cuando solo paso un único argumento a torch.tensor ().

image

@elliotwaite ¡ Gracias por señalar!
El tensor es demasiado especial, por lo que probablemente necesite incluir la firma adecuada manualmente.
Actualizaré el PR. ¿Encontrará más problemas cuando también actualice la esencia? (Eso es bastante manual y lo haría si te ayuda a darle una vuelta).

@ t-vi también recibo una advertencia de "argumento inesperado" para torch.Tensor.view ():
torch.randn(2, 2).view(1, 1, 2, 2)

También hice un script que buscó en todos los documentos y saqué todas las cadenas de "tensor. *". Luego los probé para el autocompletado. Aquí está la lista de aquellos en los que el autocompletado aún no funciona. Usé la función print () para probar y asegurarme de que sean realmente accesibles al ejecutar el script.
https://github.com/elliotwaite/pytorch_typehints/blob/master/no_autocomplete.py

@elliotwaite Correcto, hay algo de varargs para los tensores que faltan (creo que tampoco estoy actuando sobre las anotaciones kwonly en el yaml).
La idea de usar doc (string) s para ver si las anotaciones son buenas (o al menos tienen la posibilidad de ser lo suficientemente liberales) es genial, buscaré hacer esto como parte de la prueba.

8845 se confirma desde el lado de PyCharm. Pero, en general, es mejor tener pyi porque al menos contienen información de tipo. +1 para ellos.

El problema existe en general con todos los IDE que usan Jedi como backend para completar Python, ¿verdad? ¿Y su solución también será general o específica para PyCharm y VS Code? Utilizo emacs con Jedi como backend de finalización y tengo el mismo problema. PERO, lo que es interesante, puedes probar la finalización en la consola IPython y ¡funciona! Ve todas las funciones, ¿cómo es posible?

Bueno, IPython usa la introspección dinámica, y eso siempre funciona (solo funciona después de haber creado los objetos, por lo que podrá completar mytensor.a pero no mytensor.abs().m , lo que puede hacer con el tipo pistas.
Por lo que tengo entendido, tanto VSCode como Jupyter también usan Jedi. Los stubs (archivos .pyi) son la forma "estándar" de agregar información de tipo en la parte superior de los módulos existentes, pero aún no se admiten tan ampliamente como uno quisiera (y todavía hay casos de esquina, por ejemplo, no puede expresar que puede pasar un puntos suspensivos ("...") para indexar funciones). El curso de acción correcto es saltar a Jedi y agregar soporte de talón de sugerencias de tipo (https://github.com/davidhalter/jedi/issues/839). ¡Su oportunidad de invertir su tiempo o dinero para mejorar su cadena de herramientas!

@ t-vi ¡Gracias por seguir rastreando este problema!

Entiendo que Stubs son una buena manera de resolver este problema.
https://www.python.org/dev/peps/pep-0484/#stub -files

Sin embargo, Docstring s no se generan con Stubs. ¿Qué tal agregar Docstring ?

@ t-vi No entiendo qué debo hacer. ¿Qué quieres decir con mejorar mi cadena de herramientas? Actualmente uso Jedi, pero no entiendo cómo trabajar con esos archivos de código auxiliar. ¿Esto es algo que debería escribir o está presente en módulos y tengo que actualizar Jedi? ¿Es como encabezados en C ++?
La documentación de PEP y el problema que ha vinculado no son realmente útiles para mí sobre cómo puedo comenzar a usarlos.

@kimdwkimdw ¿Dónde pones las cadenas de documentos para que todos las encuentren? (No creo que puedas ponerlos en el PYI (?)). Si tiene una idea de dónde ponerlos, me aseguraré de ponerlos allí ...
@piojanu Jedi parece tener una rama mecanografiada, pero no sé si se trata de pyi en general. Probablemente sea mejor preguntarle al autor Jedi cómo puede ayudar a que suceda el apoyo de pyi.

@ t-vi Ya lo entiendo, gracias.

Firma y tipos de método inferidos originalmente con Docstring en PyTorch 0.3.0 y mi PR (https://github.com/pytorch/pytorch/pull/8845).
image

@ t-vi
Docstrings se puede agregar debajo de cada método en PYI .
image

La mayoría de ellos se encuentra en _torch_docs.py

Para el comentario de @sproshev , creo que # 8845 es una buena forma no solo en PyCharm, sino también en otros IDE porque usa la forma estándar de importar módulos. Por lo tanto, PyCharm puede generar su Python stubs automáticamente.

PyTorch's original way 0.3.0 o # 8845 hace en PyCharms, en IPython.
La información de tipo se puede incluir en gen_python_functions.py o bien.

Estoy de acuerdo en que generar archivos pyi explícitos es una forma de resolver este problema. pero quizás no de la forma más limpia.

El mismo problema, pycharm es básicamente inútil cuando se usa pytorch0.4. Casi todo está subrayado porque " no se puede encontrar la referencia " o " no se puede llamar ".

torch

@nimcho También tengo este problema, ¿por qué?

Instalo Torch-nightly en mi Mac y Pycharm no pudo solicitarlo en absoluto, aunque puedo saltar a la fuente cuando hago Comando-Clic. Después de eliminar los directorios de caché en las siguientes carpetas, el problema se soluciona.

  • / Usuarios / NOMBRE DE USUARIO / Biblioteca / Caches / PyCharm ** / python_stubs
  • / Usuarios / NOMBRE DE USUARIO / Biblioteca / Cachés / PyCharm ** / LocalHistory
  • / Usuarios / NOMBRE DE USUARIO / Biblioteca / Caches / PyCharm ** / caches
  • / Usuarios / NOMBRE DE USUARIO / Biblioteca / Caches / PyCharm ** / tmp
  • / Usuarios / NOMBRE DE USUARIO / Biblioteca / Caches / PyCharm ** / userHistory

Todavía tengo este problema con pytorch 1.0.0. ¿Cómo puedo resolver este problema con las soluciones anteriores?

Esto es vergonzoso ... casi 8 meses :-(

@ebagdasa Nos animaría a mantener esto productivo y no sarcástico. ¿Quién es el "tú" al que te refieres? En mi experiencia, el software de producción no siempre tiene un gran soporte de edición.

para dar contexto sobre por qué esto ha tardado tanto en solucionarse:

  • Ninguno de los desarrolladores principales usamos PyCharm, por lo que primero fue difícil obtener visibilidad del problema
  • una vez que empezamos a investigarlo, era un problema que era de proyectos cruzados, es decir, era en parte qué parte de los tipos de CPython admitía PyCharm para autocompletar, y en parte lo que PyTorch podía hacer para solucionar las limitaciones de PyCharm en esta configuración.

    • esto necesitaba una combinación de conocer los componentes internos de PyCharm y los componentes internos de PyTorch. Espero que entiendas la dificultad de este

    • solo como un contrapunto, Microsoft VSCode + PyTorch funciona bien para autocompletar, al igual que IPython autocompletar funciona bien. Entonces, @ebagdasa , no creo que tu comentario sea relevante.

Por último, @kimdwkimdw y @ t-vi tienen correcciones, por ejemplo, en https://github.com/pytorch/pytorch/pull/12500 mediante la generación de sugerencias de tipo explícitas, y una vez que el PR entra, con suerte deberíamos arreglar PyCharm asunto.

Y como siempre, este es un proyecto de código abierto, así que si alguno de ustedes puede ayudar con esto, no dude en hacerlo. Por ejemplo, @kimdwkimdw y @ t-vi lo hicieron en su propio tiempo libre, y no se les paga por ello, y no necesitan el odio.

@ebagdasa , debes solicitar un reembolso

De acuerdo, ese fue un comentario de decepción al ver cómo mi código está resaltado por el editor. Lo siento chicos, entiendo cómo funciona. ¡Sigue adelante! Quizás sea hora de probar VSCode.

@soumith El autocompletado de VS Code también está roto en algunas funciones como torch.randn

1547171211663

Y como siempre, este es un proyecto de código abierto, así que si alguno de ustedes puede ayudar con esto, no dude en hacerlo. Por ejemplo, @kimdwkimdw y @ t-vi lo hicieron en su propio tiempo libre, y no se les paga por ello, y no necesitan el odio.

Sería bueno, por supuesto, que se les pagara por ello ... ¿sería posible que FAIR usara algo como gitcoin para alentar la participación mediante recompensas? Por supuesto, la gente de FAIR ya es recompensada generosamente por sus contribuciones, y la mayoría de la gente aquí (como yo) probablemente esté muy ocupada con sus trabajos diarios ...

Probé VS Code, Atom y Pycharm usando pip o conda, pero ninguno de ellos funciona bien para autocompletar en algunas funciones como torch.max (). IPython y Jupyter no tienen este problema, pero no son editores.

lo mismo aquí. Probé PyCharm, código VS, Spyder .. torch.cat imposible de conseguir, lo mismo que el Longtensor.

A lo largo de los comentarios de este número, esto se ha considerado continuamente como un problema relacionado con PyCharm, y se ha mencionado que es un problema con la forma en que los componentes internos de PyCharm y los componentes internos de PyTorch funcionan juntos. Esta es una caracterización errónea del problema, y ​​verlo como tal probablemente no conducirá a la solución correcta. PyCharm está adoptando un enfoque bastante estándar para resolver paquetes y, como han mencionado varios otros, este problema no es exclusivo de PyCharm. PyCharm resulta ser el editor más popular que se encuentra con este problema con PyTorch. Cualquier editor que no resuelva dinámicamente el paquete (por motivos de velocidad) tendrá este problema. Creo que el hecho de que IPython / Jupyter / etc pueda resolverlo correctamente es la excepción y no la regla. Solo quería enfatizar esto para que no se ponga demasiado énfasis en "hacer que funcione con PyCharm" en lugar de "hacer que funcione en general".

Dicho esto, los stubs en los que se está trabajando en este PR son una buena solución "estándar" y probablemente deberían poder resolver el problema en general. Para aquellos de ustedes que buscan una solución temporal rápida, copie ese archivo stub en su dist-packages / site-packages como se explica en la esencia. Agregue manualmente cualquier otra pieza faltante e informe de esas piezas faltantes para asegurarse de que se manipulen.

¡Hola a todos! El parche de @ t-vi se ha fusionado con el maestro, por lo que si actualiza, debería comenzar a funcionar el autocompletado para antorcha en el maestro. Además, comprometimos un código auxiliar de tipo generado a mano para 1.0.1, por lo que cuando se produzca esa versión, el autocompletado también funcionará para las personas en esa versión.

El código auxiliar de tipo probablemente no sea lo suficientemente bueno para verificar el código con mypy. Estamos rastreando este trabajo de seguimiento en el n. ° 16574, comuníquese si lo afecta allí. Además, solo arreglamos el autocompletado en la antorcha; Si tiene problemas con la función de autocompletar en otros módulos (o cree que faltan identificadores en la antorcha), háganoslo saber con un informe de error.

¡Gracias por su paciencia!

solo para su información, la nueva versión v1.0.1 ahora tiene esto resuelto, y se envía.

@ezyang torch.cuda falta en pyi , por ejemplo cuando se usa torch.cuda.is_available .

Obtengo intellisense para que VSCode funcione parcialmente en la antorcha 1.0.1, pero aún faltan algunas funciones, por ejemplo, torch.as_tensor

También recibía errores y no había autocompletado para algunas funciones en PyCharm (faltaba cuando más lo necesitaba), y no creo que esto esté completamente resuelto todavía.

Escribí mi primer programa PyTorch el fin de semana pasado, así que no estoy seguro si cometí algún error con la configuración.

@vpj se corrigió en PyTorch v1.0.1. Cualquier cosa más baja todavía tiene el problema. cheque print(torch.__version__)

La versión es 1.0.1post2

pytorch_missing_defs

Faltan algunas definiciones en el archivo __init __. Pyi.

PyCharm también parece estar causando algunos problemas porque no puede inferir tipos de retorno. Por ejemplo, no parece inferir que el valor de retorno de torch.exp sea Tensor (sin embargo, el tipo de retorno se infiere con Tensor.exp ). Aunque el tipo de retorno se define en la definición del método torch.exp .

sí, también actualizo a '1.0.1.post2'
y la autocompletar no parece funcionar

image

por lo que, aparentemente, todavía faltan algunos espacios de nombres, aunque solucionamos el problema mayor.

Abrí una nueva tarea de seguimiento para esto aquí: https://github.com/pytorch/pytorch/issues/16996

¿No estoy muy seguro de este? (¿Esto está arreglado?) La consola funciona bien.
(Pero from torch.utils.data import DataLoader, Dataset funciona)
untitled2____Documents_python_untitled2__-_____main_py

@yarcowang Hemos ido agregando cada vez más espacios de nombres. Esto debería funcionar bastante bien en 1.2.0. Si todavía faltan cosas, presente los errores.

@ezyang OK. Veo. Parece un error a largo plazo.

Soy nuevo en pytorch. Muchas gracias, me funciona bien.

Hola a todos, pasé por todo el hilo. Es bastante difícil saber si el problema está resuelto o no. Estoy usando torch1.4 + cpu y torch.tensor todavía tiene problemas de advertencia. ¿Alguien puede ayudar? Gracias

También sigo experimentando este problema con la antorcha.

Gracias por los comentarios. Hemos estado solucionando muchos errores de sugerencia de tipo pequeño durante los últimos meses; Si nota cosas que no funcionan en la última versión o en el maestro, abra los errores y lo buscaremos. ¡Gracias!

Cosas rotas que he notado en la versión 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 Gracias por informar. ¿Podría abrir un nuevo problema con esos casos para obtener más visibilidad?

@tjysdsg Gracias por informar. ¿Podría abrir un nuevo problema con esos casos para obtener más visibilidad?

@ zou3519 Aquí está # 34699, también actualizaré el problema si encuentro algo nuevo

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

soumith picture soumith  ·  3Comentarios

Coderx7 picture Coderx7  ·  3Comentarios

NgPDat picture NgPDat  ·  3Comentarios

ikostrikov picture ikostrikov  ·  3Comentarios

szagoruyko picture szagoruyko  ·  3Comentarios