Pytorch: `Ketik Petunjuk` rusak di PyTorch 0.4.0, terkait dengan IDE (mis. PyCharm)

Dibuat pada 5 Mei 2018  ·  106Komentar  ·  Sumber: pytorch/pytorch

Jika Anda memiliki pertanyaan atau ingin bantuan dan dukungan, silakan bertanya di kami
forum .

Jika Anda mengirimkan permintaan fitur, harap awali judul dengan [permintaan fitur].
Jika Anda mengirimkan laporan bug, harap isi detail berikut.

Deskripsi masalah

Baru-baru ini, saya menemukan PyCharm tidak dapat membuat pelengkapan otomatis untuk torch.zeros .

PyCharm mengatakan

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

Saya menggalinya sebentar saya menemukan Type Hints rusak.

Dari perubahan-perubahan tersebut,
https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4
https://github.com/pytorch/pytorch/wiki/Breaking-Changes-from-Variable-and-Tensor-merge

Terutama, https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4#diff -14258fce7c17ccb97b488e64373b0803R308 @colesbury
Baris ini tidak dapat menghasilkan Type Hints untuk banyak IDE.

Awalnya, torch.zeros berada di torch/_C/__init__.py
Tapi, itu pindah ke torch/_C/_VariableFunctions

Contoh kode

https://Gist.github.com/kimdwkimdw/50c18b5cf72c69c2d01bb4146c8a2b5c
Ini adalah Bukti Konsep untuk bug ini.

Jika Anda melihat main.py

import T_B as torch

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

Sistem Informasi

Silakan salin dan tempel output dari kami
skrip koleksi lingkungan
(atau isi daftar periksa di bawah ini secara manual).

Anda bisa mendapatkan skrip dan menjalankannya dengan:

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 atau Caffe2:
  • Bagaimana Anda menginstal PyTorch (conda, pip, sumber):
    Kasus apa pun untuk conda, pip, source.

  • Perintah build yang Anda gunakan (jika dikompilasi dari sumber):

  • OS: Apa saja
  • Versi PyTorch: 0.4.0
  • Versi Python: 3.6.5
  • Versi CUDA/cuDNN: .
  • Model dan konfigurasi GPU: .
  • Versi GCC (jika dikompilasi dari sumber): .
  • Versi CMake: .
  • Versi perpustakaan lain yang relevan
medium priority (this tag is deprecated)

Komentar yang paling membantu

Akan meningkatkan prioritas ini karena banyak pengguna telah meminta ini... kami akan mencoba yang terbaik untuk memeriksanya lebih lanjut.

Semua 106 komentar

poin terkait? #4568

Masalah yang sama, pycharm pada dasarnya tidak berguna saat menggunakan pytorch0.4. Hampir semuanya digarisbawahi baik karena " tidak dapat menemukan referensi " atau " tidak dapat dipanggil ".

torch

Tidak ada pelengkapan otomatis, definisi cepat & dokumentasi cepat untuk torch.tensor , torch.max dan loss.backward .

  • OS: Linux (Fedora 27 64-bit dengan Gnome).
  • Versi PyTorch: 0.4.0.
  • Bagaimana Anda menginstal PyTorch (conda, pip, sumber): pip3.
  • Versi Python: 3.6.5.
  • Saya menggunakan CPU (Tanpa CUDA).

Jika ada di antara Anda yang memiliki saran tentang cara memperbaikinya, beri tahu kami!

Kedengarannya seperti fungsi pencarian PyCharm dapat ditingkatkan, tetapi saya tidak yakin apa yang dapat dilakukan dari sisi PyTorch. Menggunakan torch.tensor sebagai contoh, help(torch.tensor) mendapatkan dokumentasi sementara dir(torch) menunjukkan "tensor" sebagai anggota.

@zou3519
Saya pikir di bawah ini bukan gaya kode yang baik.

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

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

globals()[name] bukan cara Pythonic . Ini bukan hanya masalah untuk PyCharm, tetapi juga untuk gaya kode Python.

Saya pikir _VariableFunctions tidak perlu menjadi Kelas.

Saya mencoba membuat PR untuk masalah ini. Apakah Anda akan mengulas? @zou3519

@kimdwkimdw Saya tidak tahu apa yang terjadi dengan global() di sana atau apa yang akan membuatnya lebih baik, tapi ya, kirimkan PR dan saya akan melihatnya :)

Kedengarannya seperti fungsi pencarian PyCharm dapat ditingkatkan, tetapi saya tidak yakin apa yang dapat dilakukan dari sisi PyTorch.

Hanya ingin mencatat bahwa saya tidak pernah mengalami masalah ini dengan paket lain di PyCharm. Itu tidak berarti PyCharm tidak boleh melakukan hal-hal yang berbeda, tetapi masalah ini tampaknya merupakan kasus yang tidak biasa.

Saya terutama mengerjakan file-file ini.

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

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

Mencoba mencari tahu apa yang berubah saat membuat ekstensi C.
Aku akan membuat PR segera.

Ada pembaruan?

Saya membuat contoh kerja di garpu saya.

Jika ada yang ingin menggunakan pelengkapan otomatis terlebih dahulu, coba di bawah ini.

1. git klon

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

2. Instal PyTorch

3. Hapus cache di PyCharm

  • biasanya cache terletak di /Users/USERNAME/Library/Caches/PyCharm*/python_stubs/
  • periksa project interpreter di PyCharm

Sebelum pull request , saya perlu menambahkan lebih banyak komitmen untuk mengatur hasil.

instal gagal mengikuti deskripsi di atas.
apakah ada cara sederhana untuk menginstal?

Saya mempunyai masalah yang sama. Saya selalu menyukai pytorch dan pycharm. Sayang sekali mereka tidak bekerja sama dengan baik :(
Menantikan pembaruan.

Ini benar-benar aneh ketika saya menggunakan kode yang sama di konsol python dengan pycharm, itu normal, tetapi di editor. O__O "…

Akan meningkatkan prioritas ini karena banyak pengguna telah meminta ini... kami akan mencoba yang terbaik untuk memeriksanya lebih lanjut.

Banyak pengguna yang meminta.... Saya harus membuat permintaan tarik akhir pekan ini.

Saya menggabungkan kode saya dengan cabang master .

Type Hints masih hidup sekarang.

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

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

cc. @zou3519

@kimdwkimdw haruskah saya menginstal ulang pytorch dari sumber? Apakah ada cara mudah untuk memperbarui di platform windows?

@541435721
Ya kamu harus. Lihat https://github.com/pytorch/pytorch#install -pytorch halaman ini.
Saya tidak tahu ada cara yang lebih sederhana untuk membangunnya.

Tampaknya tidak mengubah apa pun untuk Pycharm (2018.1, dengan cache yang dibangun kembali).

Anda harus memeriksa permintaan tarik @kimdwkimdw 's, tidak pytorch menguasai. Permintaan tarik belum digabungkan ke master pytorch.

Ini adalah PR: https://github.com/pytorch/pytorch/pull/8845.

Ya, ini yang saya lakukan:

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 Anda harus menghapus rintisan python secara manual. itu tidak dapat dihapus dengan 'cache tidak valid'.

Saat Anda menyiapkan proyek, Pycharm menginisialisasi file rintisan python-nya.

Setelah Anda menghapus direktori rintisan python, mulai ulang Pycharm.

PyCharm akan membuat kembali rintisan python-nya.

Tampaknya tidak mengubah apa pun, tetapi itu mungkin pengaturan saya. Mungkin kita bisa menunggu orang lain untuk mencoba?

Anda harus menemukan direktori rintisan python. Ketika Anda mengklik obor, Anda dapat menemukan direktori rintisan.

@kimdwkimdw Saya telah menginstal ulang dan menghapus cache, tetapi tidak ada perubahan.

image
Anda tidak dapat menghapus PyCharm Cache melalui invalidate Caches

Di MacOS, Anda harus menghapus folder secara manual di ~/Library/Caches/PyCharm2018.1/python_stubs/ .

Ada pilihan lain. Jika Anda membuat proyek baru dan mengubah pengaturan juru bahasa Anda, PyCharm akan membuat python stubs

@541435721 @nlgranger

Inilah yang telah saya lakukan (membatalkan cache, menghentikan pycharm, rm .PyCharm2018.1/system/python_stubs/* -rf ).
BTW Saya menggunakan python 3 jika itu penting (saya melihat beberapa tes python2 di PR).

@kimdwkimdw
Saya melakukan ini sebagai panduan dan os saya adalah windows10, tetapi saya menghadapi masalah ini.

@kimdwkimdw saya bisa melakukannya! Terima kasih!

Karena orang lain mengalami masalah, saya hanya ingin mencatat bahwa perbaikan @kimdwkimdw berfungsi untuk saya. Ini dengan Python 3 di macOS. Menggunakan:

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

Saya memang menghapus rintisan saya secara manual, meskipun saya tidak tahu apakah itu diperlukan. Bagaimanapun, itu setidaknya berfungsi di sistem saya.

Namun, saya telah menemukan bahwa torch.float32 (dan tipe data lainnya) dan torch.backends.cudnn masih belum terselesaikan oleh PyCharm (setidaknya dalam kasus saya).

@shianiawhite Poin bagus. Terima kasih. Saya pikir saya harus menambahkan lebih banyak pembaruan ke Permintaan Tarik.

@zou3519

Tidak bekerja untuk saya, meskipun saya berhasil membangun @kimdwkimdw 's PR dan secara manual menghapus python_stub di ~/.PyCharmCE2018.1/system .

Maaf mau tanya lagi tapi ada kabar tentang ini?
Akankah membantu membuka masalah di sini di jetbrains https://youtrack.jetbrains.com/issues/PY?q=pytorch ?

Saya mengalami masalah yang sama di Ubuntu 16.04 dan PyCharm 2017.3

Yang aneh adalah ketika saya menjalankan di konsol python, itu menunjukkan pelengkapan otomatis dengan benar.
working_in_console

Tetapi ketika saya menjalankan yang sama di editor itu tidak berfungsi.
not_working_in_editor

Saya menggunakan python 3.6.6 dan PyTorch 0.41. Saya menginstalnya menggunakan pip dan cuda 9.2

Saya memiliki masalah yang sama di Window7 PyCharm2018, Win10 PyCharm2018, Win10 VS2017, Win10 Spyder.
dan saya mencoba menggunakan pytorch0.4.0 dan pytorch0.4.1, keduanya tidak dapat dilengkapi secara otomatis.
hanya ipython yang menunjukkan pelengkapan otomatis dengan benar.
tolong bantu aku

Saya membuka masalah di youtrack PyCharm. Mungkin mereka juga bisa membantu.

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

Saya telah mencoba VS2017 dan PyCharm2018.2 dengan pytorch0.4.1 di Windows 10 dan pelengkapan otomatis tidak berfungsi untuk saya.

PyTorch-0.4.1 diinstal oleh pip dengan PyCharm-2018.2, masih memiliki masalah yang sama.

akan lebih baik jika orang dapat memilih di sini https://youtrack.jetbrains.com/issue/PY-31259
jadi perbaikannya memiliki prioritas lebih tinggi

Halo!
Saya penerima tugas dari PY-31259.
PyCharm tidak menjalankan kode pengguna apa pun saat melakukan analisis statis (pengecualian adalah konsol tempat lingkungan dapat dengan mudah diselidiki). Jadi cara paling dinamis untuk mendeklarasikan atribut tidak dapat ditemukan.

@sproshev terima kasih atas balasan Anda. Bisakah Anda menjelaskan mengapa permintaan tarik @kimdwkimdw https://github.com/pytorch/pytorch/pull/8845 berfungsi?

Untuk konteks, pytorch melakukan beberapa penetapan atribut secara dinamis saat Anda mengimpornya. Permintaan tarik

Saya pikir cara paling masuk akal untuk memperbaikinya (setidaknya untuk Python 3) adalah dengan menghasilkan rintisan .pyi.
Tes cepat tampaknya menunjukkan bahwa itu akan bekerja dengan baik.
Saya sendiri bukan pengguna PyCharm, tetapi jika ada cukup banyak orang yang akan sangat senang, saya dapat melihat apakah kami dapat membuatnya dari native_functions.yaml dan teman-teman.

@t-vi Saya tidak tahu apa yang Anda bicarakan, tetapi mengingat ini terus berlanjut, harap buat file .pyi! :D

Jadi modul utama tampaknya cukup mudah:
image

Untuk beberapa alasan atau lainnya, hanya memiliki

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

di __init__.pyi tampaknya tidak mengizinkan PyCharm untuk menyimpulkan bahwa setelah a = randn((1,2)) , a adalah kelas torch.Tensor . :(
(Saya sebenarnya memiliki anotasi di kelas, tetapi hanya digunakan jika saya mengeja anotasi a : torch.Tensor = ... )

Saya memposting pyi di sini, jika Anda ingin mencoba: https://Gist.github.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b

Sekali lagi, jika Anda memiliki gagasan mengapa PyCharm tampaknya tidak mengidentifikasi tipe pengembalian, saya akan sangat berterima kasih jika Anda membagikannya.

@t-vi Solusinya juga berfungsi untuk kode VS. Terima kasih!

Terima kasih, ZongyueZhao, atas tanggapan Anda. Saya belum mencoba dengan kode VS, tetapi jika pyi berfungsi termasuk tipe pengembalian, saya akan mengirimkan tambalan untuk pembuatannya.

Terima kasih, __init__ berhasil untuk saya! Saya menggunakan conda env yang disebut "main" jadi yang saya lakukan adalah:

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

Saya tidak perlu membuat ulang cache

Mengenai mengapa itu tidak mengenali tipe pengembalian Tensor, itu ada hubungannya dengan kesalahan sintaksis dalam file. Buka file di PyCharm, dan itu menunjukkan beberapa di antaranya

screenshot 2018-10-05 16 33 51

Setelah saya menghapus baris dengan kesalahan, saya mendapatkan pelengkapan otomatis
screenshot 2018-10-05 16 35 40

Hal lain yang saya perhatikan adalah bahwa anggota kelas Tensor mengisyaratkan return -> Tensor, yang merupakan referensi melingkar, jadi itu juga tidak dikenali oleh PyCharm. Solusinya adalah melakukan -> "Tensor" alih-alih -> Tensor untuk metode kelas Tensor ( https://www.python.org/dev/peps/pep-0484/#forward-references )

Terima kasih @yaroslavvb , itulah yang saya lewatkan!

Bump untuk visibilitas. Ini sebenarnya masalah besar bagi pengguna PyCharm. Saya sedang mengevaluasi PyTorch sebagai alternatif untuk basis kode tf/keras kami dan masalah ini merupakan pemblokiran bagi kami.

Saya menggunakan pytorch 0.4.1 .

Apakah ada solusi konkret untuk ini. Saya menggunakan pip untuk menginstal pytorch. Ada begitu banyak fungsi bawaan pytorch torch.xxx tidak dapat dikenali di pycharm.

Jika tidak bisa diperbaiki. Bisakah Anda membantu menyarankan IDE alternatif yang menyarankan semua fungsi pytorch dan membantu navigasi dalam kerangka kerja (seperti Ctrl+B untuk melompat ke definisi fungsi pytorch).

Terima kasih.

Ada yang mau ngerjain PR (@t-vi)? Saya menggunakan nightlies PyTorch sekarang dan agak sulit untuk melakukan ini setiap kali saya memutakhirkan ...

Saya secara aktif mendiskusikan hal ini dengan para pengembang inti untuk mendapatkan solusi yang baik tentang kapan dan bagaimana menghasilkan PYI selama proses pembuatan. Bagian yang sulit adalah menggabungkan informasi dari bit yang ditentukan python dengan bit dari _C . Kami mencoba untuk mencari solusi yang baik dan saya berharap untuk memiliki PR segera, tetapi mungkin perlu putaran iterasi.

Jika Anda mencari cara untuk menetapkan prioritas saya, jangan ragu untuk menghubungi saya melalui surat.

Mengganti __init__.py bukanlah solusi yang baik. Di @t-vi's Gist , misalnya, saat menggunakan

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

PyCharm memberikan peringatan bahwa parameter "keluar" tidak ada, tetapi parameter "keluar" bersifat opsional.
Dalam kasus lain,

x = torch.empty(10, 2)

Baris kode ini benar karena metode ini dapat menerima (*sizes, ...), tetapi PyCharm juga memperingatkan tentang parameter yang tidak valid. Dengan begitu banyak peringatan aneh, saya akhirnya memilih untuk mengabaikan "obor.*" dalam pengaturan pemeriksaan kode...

@hitvoice Terima kasih telah menunjukkan ini.
Intinya saja adalah pukulan tinju yang sangat kasar untuk mendapatkan pyi yang tepat, jadi umpan balik Anda sangat dihargai! Saya harap Anda dapat mengaktifkan kembali pemeriksaan dengan iterasi berikutnya.

Saya pikir Optional[out] seharusnya out : Optional[Tensor]=None , bukan? Itu mudah diperbaiki.
Untuk kosong, ini sedikit lebih rumit karena kemungkinan berarti kita perlu membagi deklarasi dengan hanya satu argumen daftar untuk juga menerima varargs (saya pernah menatap kode C yang terlalu lama mengurai python args), tapi kami pasti berkomitmen untuk memiliki petunjuk tipe yang bagus.

Hai,
Saya memperbarui __init__.pyi dan akan sangat menghargai jika Anda dapat mencobanya.

  • Saya jauh lebih senang dengan metode generasi, jadi meskipun itu di belakang layar, saya pikir ada kemajuan yang baik untuk memiliki PR.
  • Saya juga membuat petunjuk untuk beberapa fungsi yang ditentukan python (btrifact, einsum), tetapi saya tidak menambahkan semuanya.
  • Saya pikir saya telah memperbaiki (dalam kode generasi) kekurangan yang ditunjukkan oleh @hitvoice .

Jika menurut Anda ini bekerja secara kasar, saya akan mencari cara untuk memanggil kode (harus setelah build) dan kami memiliki (hampir) PR.

@t-vi Terlihat bagus. Sejauh ini bekerja dengan baik untuk saya.

Hanya ingin tahu, apa alasan untuk menghasilkan petunjuk fungsi yang ditentukan python (btrifact, einsum)? Saya menggunakan build malam dan itu tampaknya berfungsi untuk saya tanpa petunjuk.

@elliotwaite Dalam eksperimen (pendek) saya, saya sepertinya tidak mendapatkan pelengkapan otomatis pada hasil kecuali saya menambahkan petunjuk jenis pada mereka, yaitu pada x = einsum('ii', a); x. dan sekarang mendapatkan metode tensor untuk x . Juga, saya tidak yakin bagaimana memiliki pyi memengaruhi bagaimana hal-hal yang tidak termasuk dalam pyi diperlakukan. Sejauh yang saya mengerti (yang tidak terlalu bagus), itu adalah sumber kehalusan.

@t-vi Ah, begitu. Saya hanya menguji antara memasukkan file pyi sepenuhnya vs tidak. Anda benar, jika saya menyertakan file pyi dan hanya mengomentari baris petunjuk einsum, itu juga merusak pelengkapan otomatis untuk saya. Terima kasih telah menjelaskan.

@t-vi Saya mendapatkan peringatan "Parameter tidak terisi" ketika hanya meneruskan argumen tunggal ke torch.tensor().

image

@elliotwaite Terima kasih telah mencatat!
tensor terlalu istimewa, jadi saya mungkin perlu memasukkan tanda tangan yang tepat secara manual.
Saya akan memperbarui PR. Apakah Anda akan menemukan lebih banyak masalah ketika saya juga memperbarui intinya? (Itu cukup manual dan saya akan melakukannya jika itu membantu Anda mencobanya.)

@t-vi Saya juga mendapatkan peringatan "Argumen tak terduga" untuk torch.Tensor.view():
torch.randn(2, 2).view(1, 1, 2, 2)

Saya juga membuat skrip yang menelusuri semua dokumen dan mengeluarkan semua string "tensor.*". Kemudian saya mengujinya untuk pelengkapan otomatis. Inilah daftar yang belum dilengkapi pelengkapan otomatis. Saya menggunakan fungsi print() untuk menguji dan memastikan bahwa mereka benar-benar dapat diakses saat menjalankan skrip.
https://github.com/elliotwaite/pytorch_typehints/blob/master/no_autocomplete.py

@elliotwaite Benar, ada beberapa hal varargs untuk tensor yang hilang (saya pikir saya juga gagal untuk bertindak berdasarkan anotasi kwonly di yaml).
Gagasan menggunakan doc(string)s untuk melihat apakah anotasinya bagus (atau setidaknya memiliki peluang untuk menjadi cukup liberal) bagus, saya akan mencari untuk melakukan ini sebagai bagian dari pengujian.

8845 dikonfirmasi dari sisi PyCharm. Tetapi secara umum lebih baik memiliki pyi stub karena setidaknya berisi informasi tipe. +1 untuk mereka.

Masalahnya ada secara umum dengan semua IDE yang menggunakan Jedi sebagai backend untuk penyelesaian Python bukan? Dan solusi Anda akan bersifat umum atau spesifik untuk PyCharm dan VS Code? Saya menggunakan emacs dengan Jedi sebagai backend penyelesaian dan saya memiliki masalah yang sama. TAPI, yang menarik, Anda dapat mencoba penyelesaian di konsol IPython dan berhasil! Ia melihat semua fungsi, bagaimana mungkin?

Yah, IPython menggunakan introspeksi dinamis, dan itu selalu berhasil (hanya berfungsi setelah Anda membuat objek, jadi Anda akan dapat menyelesaikan mytensor.a tetapi tidak mytensor.abs().m , yang Anda dapat dengan mengetik petunjuk.
Sejauh yang saya mengerti baik VSCode dan Jupyter juga menggunakan Jedi. Rintisan (file .pyi) adalah cara "standar" untuk menambahkan informasi jenis di atas modul yang ada, tetapi belum didukung seluas yang diinginkan (dan masih ada kasus sudut, misalnya Anda tidak dapat menyatakan bahwa Anda dapat melewati elipsis ("...") ke fungsi pengindeksan). Tindakan yang tepat adalah melompat ke Jedi dan menambahkan dukungan petunjuk rintisan jenis (https://github.com/davidhalter/jedi/issues/839). Kesempatan Anda untuk menginvestasikan waktu atau uang Anda untuk membuat rantai alat Anda lebih baik!

@t-vi Terima kasih untuk terus melacak masalah ini!

Saya mengerti Stubs adalah cara yang cukup baik untuk menyelesaikan masalah ini.
https://www.python.org/dev/peps/pep-0484/#stub -files

Namun, Docstring s tidak dihasilkan dengan Rintisan. Bagaimana kalau menambahkan Docstring ?

@t-vi Saya tidak mengerti apa yang harus saya lakukan. Apa maksud Anda untuk meningkatkan rantai alat saya? Saya menggunakan Jedi saat ini, tetapi saya tidak begitu mengerti bagaimana bekerja dengan file rintisan itu. Ini adalah sesuatu yang harus saya tulis atau ada dalam modul dan saya harus memperbarui Jedi? Apakah ini seperti header di C++?
Dokumentasi PEP dan masalah yang Anda tautkan tidak terlalu membantu saya tentang bagaimana saya bisa mulai menggunakannya.

@kimdwkimdw Di mana Anda meletakkan docstrings sehingga semua orang akan menemukannya? (Saya tidak berpikir Anda dapat menempatkannya di PYI (?)). Jika Anda memiliki ide di mana harus meletakkannya, saya pasti akan meletakkannya di sana ...
@piojanu Jedi tampaknya memiliki cabang yang diketik, tetapi saya tidak tahu apakah itu tentang pyi secara umum. Mungkin yang terbaik untuk bertanya kepada penulis Jedi bagaimana Anda dapat membantu mewujudkan dukungan pyi.

@t-vi Saya mengerti sekarang, terima kasih.

Tanda tangan dan tipe metode yang awalnya disimpulkan dengan Docstring di PyTorch 0.3.0 dan PR saya (https://github.com/pytorch/pytorch/pull/8845).
image

@t-vi
Docstrings dapat ditambahkan di bawah setiap metode di PYI .
image

Sebagian besar terletak di _torch_docs.py

Untuk komentar @sproshev , saya pikir #8845 adalah cara yang baik tidak hanya di PyCharm, tetapi juga di IDE lain karena menggunakan cara standar untuk mengimpor modul. Oleh karena itu, PyCharm dapat menghasilkan Python stubs secara otomatis.

PyTorch's original way 0.3.0 atau #8845 menghasilkan di PyCharms, di IPython.
Jenis informasi dapat dimasukkan dalam gen_python_functions.py atau lainnya.

Saya setuju bahwa menghasilkan file pyi eksplisit adalah salah satu cara untuk mengatasi masalah ini. tapi mungkin bukan cara terbersih.

Masalah yang sama, pycharm pada dasarnya tidak berguna saat menggunakan pytorch0.4. Hampir semuanya digarisbawahi baik karena " tidak dapat menemukan referensi " atau " tidak dapat dipanggil ".

torch

@nimcho Saya juga punya masalah ini. Ini kenapa?

Saya menginstal torch-nightly di Mac saya dan Pycharm tidak dapat memintanya sama sekali, meskipun dapat melompat ke sumber ketika saya Command-Click. Setelah menghapus direktori cache di folder berikut, masalahnya telah diperbaiki.

  • /Users/USERNAME/Library/Caches/PyCharm**/python_stubs
  • /Users/USERNAME/Library/Cache/PyCharm**/LocalHistory
  • /Users/USERNAME/Library/Caches/PyCharm**/caches
  • /Users/USERNAME/Library/Cache/PyCharm**/tmp
  • /Users/USERNAME/Library/Caches/PyCharm**/userHistory

Saya masih memiliki masalah ini dengan pytorch 1.0.0. Bagaimana saya bisa mengatasi masalah ini dengan solusi di atas?

Ini memalukan ... hampir 8 bulan :-(

@ebagdasa Saya mendorong kami untuk tetap produktif dan tidak sombong. Siapa 'Anda' yang Anda maksud? Perangkat lunak produksi tidak selalu memiliki dukungan editor yang hebat, menurut pengalaman saya.

untuk memberikan konteks mengapa ini membutuhkan waktu lama untuk diperbaiki:

  • tidak ada dari kami pengembang inti yang menggunakan PyCharm, jadi pertama-tama sulit untuk mendapatkan visibilitas ke dalam masalah ini
  • setelah kami mulai menyelidikinya, itu adalah masalah yang bersifat lintas proyek, yaitu sebagian dari jenis CPython yang didukung PyCharm untuk pelengkapan otomatis, dan sebagian lagi apa yang dapat dilakukan PyTorch untuk mengatasi keterbatasan PyCharm dalam pengaturan ini.

    • ini membutuhkan kombinasi untuk mengetahui internal PyCharm dan internal PyTorch. Saya harap Anda memahami kesulitan ini

    • sama seperti titik tandingan, Microsoft VSCode + PyTorch berfungsi dengan baik untuk pelengkapan otomatis, dan begitu juga pelengkapan otomatis IPython berfungsi dengan baik. Jadi @ebagdasa saya rasa komentar Anda tidak relevan.

Terakhir, @kimdwkimdw dan @t-vi memiliki perbaikan, misalnya di https://github.com/pytorch/pytorch/pull/12500 dengan membuat petunjuk tipe eksplisit, dan setelah PR masuk, semoga kita harus memperbaiki PyCharm isu.

Dan seperti biasa, ini adalah proyek open-source, jadi jika ada di antara Anda yang bisa membantu, jangan ragu untuk melakukannya. Misalnya @kimdwkimdw dan @t-vi melakukannya di waktu luang mereka sendiri, dan tidak dibayar untuk itu, dan tidak perlu kebencian.

@ebagdasa , Anda harus meminta pengembalian dana

baiklah, itu adalah komentar kekecewaan melihat bagaimana kode saya semua disorot oleh editor. Maaf teman-teman, saya mengerti cara kerjanya. Terus berlanjut! Mungkin saatnya mencoba VSCode.

@soumith Pelengkapan otomatis VS Code juga rusak pada beberapa fungsi seperti torch.randn

1547171211663

Dan seperti biasa, ini adalah proyek open-source, jadi jika ada di antara Anda yang bisa membantu, jangan ragu untuk melakukannya. Misalnya @kimdwkimdw dan @t-vi melakukannya di waktu luang mereka sendiri, dan tidak dibayar untuk itu, dan tidak perlu kebencian.

Akan lebih baik tentu saja jika mereka _did_ dibayar untuk itu... mungkinkah FAIR menggunakan sesuatu seperti gitcoin untuk mendorong partisipasi melalui bounty? Tentu saja orang-orang di FAIR sudah mendapatkan kompensasi yang mahal atas kontribusi mereka, dan kebanyakan orang di sini (seperti saya) mungkin sibuk dengan pekerjaan sehari-hari mereka...

Saya sudah mencoba VS Code, Atom, dan Pycharm menggunakan pip atau conda, tetapi tidak ada yang berfungsi dengan baik untuk pelengkapan otomatis pada beberapa fungsi seperti torch.max(). IPython dan Jupyter tidak memiliki masalah ini, tetapi mereka bukan editor.

sama di sini. Mencoba PyCharm , kode VS , Spyder .. torch.cat tidak mungkin didapat , sama seperti Longtensor.

Sepanjang komentar dalam masalah ini, ini terus-menerus dianggap sebagai masalah yang terkait dengan PyCharm, dan telah disebutkan bahwa ini adalah masalah dengan cara internal PyCharm dan internal PyTorch bekerja bersama. Ini adalah kesalahan karakterisasi masalah, dan melihatnya seperti itu mungkin tidak akan mengarah pada solusi yang benar. PyCharm mengambil pendekatan yang cukup standar untuk menyelesaikan paket, dan, seperti yang telah disebutkan oleh beberapa orang lain, masalah ini bukan PyCharm yang unik. PyCharm kebetulan menjadi editor paling populer yang mengalami masalah ini dengan PyTorch. Setiap editor yang tidak menyelesaikan paket secara dinamis (untuk tujuan kecepatan) akan mengalami masalah ini. Saya pikir fakta bahwa IPython/Jupyter/etc dapat menyelesaikannya dengan benar adalah pengecualian daripada aturan. Saya hanya ingin menekankan ini agar tidak terlalu banyak fokus pada "membuatnya berfungsi dengan PyCharm" daripada "membuatnya berfungsi secara umum".

Meskipun demikian, PR ini adalah solusi "standar" yang baik, dan mungkin harus dapat menyelesaikan masalah secara umum. Bagi Anda yang mencari solusi sementara cepat, salin file rintisan itu ke dist-packages/site-packages Anda seperti yang dijelaskan dalam Gist. Tambahkan bagian lain yang hilang secara manual, dan laporkan bagian yang hilang itu untuk memastikannya ditangani.

Halo semuanya! Tambalan @t-vi telah bergabung menjadi master, jadi jika Anda memperbarui, Anda harus mendapatkan pelengkapan otomatis yang berfungsi untuk obor pada master. Selain itu, kami melakukan rintisan jenis yang dibuat dengan tangan untuk 1.0.1, jadi ketika rilis itu terjadi, pelengkapan otomatis juga akan berfungsi untuk orang-orang di rilis itu.

Jenis rintisan mungkin tidak cukup baik untuk benar-benar mengetik kode Anda dengan mypy. Kami melacak pekerjaan tindak lanjut ini di #16574, harap sampaikan jika itu memengaruhi Anda di sana. Selain itu, kami hanya memperbaiki pelengkapan otomatis pada obor; jika Anda mengalami masalah dengan pelengkapan otomatis pada modul lain (atau menurut Anda ada pengidentifikasi yang hilang pada obor), beri tahu kami dengan laporan bug.

Terima kasih atas kesabaran Anda!

hanya fyi, rilis v1.0.1 yang baru sekarang telah menyelesaikan ini, dan telah dikirimkan.

@ezyang torch.cuda tidak ada di pyi , misalnya saat menggunakan torch.cuda.is_available .

Saya mendapatkan intellisense agar VSCode berfungsi sebagian pada obor 1.0.1, tetapi beberapa fungsi masih hilang, misalnya, torch.as_tensor

Saya juga mendapatkan kesalahan dan tidak ada pelengkapan otomatis untuk beberapa fungsi di PyCharm (hilang saat saya sangat membutuhkannya), dan saya rasa ini belum sepenuhnya terpecahkan.

Saya menulis program PyTorch pertama saya akhir pekan lalu jadi tidak yakin apakah saya membuat kesalahan dengan pengaturan.

@vpj sudah diperbaiki di PyTorch v1.0.1. Apa pun yang lebih rendah masih memiliki masalah. cek print(torch.__version__)

Versi 1.0.1post2

pytorch_missing_defs

Beberapa definisi hilang dalam file __init__.pyi.

PyCharm juga tampaknya menyebabkan beberapa masalah karena gagal menyimpulkan tipe pengembalian. Misalnya, tampaknya tidak menyimpulkan bahwa nilai pengembalian torch.exp adalah Tensor (namun tipe pengembalian disimpulkan dengan Tensor.exp ). Meskipun tipe pengembalian didefinisikan dalam definisi metode torch.exp .

ya, saya juga mengupgrade ke '1.0.1.post2'
dan penyelesaian otomatis sepertinya tidak berfungsi

image

jadi, tampaknya beberapa ruang nama masih hilang, meskipun kami telah memperbaiki masalah yang lebih besar.

Saya membuka tugas pelacakan baru untuk ini di sini: https://github.com/pytorch/pytorch/issues/16996

Saya tidak yakin tentang yang satu ini? (Apakah ini sudah diperbaiki?) Konsol berfungsi dengan baik.
(Tapi from torch.utils.data import DataLoader, Dataset berhasil)
untitled2____Documents_python_untitled2__-_____main_py

@yarcowang Kami terus menambahkan lebih banyak ruang nama. Ini akan bekerja cukup baik pada 1.2.0. Jika masih ada yang kurang silahkan laporkan bug.

@ezyang oke. Jadi begitu. Tampaknya bug jangka panjang.

Saya baru untuk pytorch. Terima kasih banyak, ini bekerja dengan baik untuk saya.

Halo semuanya, pergi melalui seluruh utas. Cukup sulit untuk menemukan apakah masalah tersebut teratasi atau tidak. Saya menggunakan torch1.4+cpu dan torch.tensor masih memiliki masalah peringatan. Adakah yang bisa membantu? Terima kasih

Juga masih mengalami masalah ini dengan obor.Tensor

Terima kasih atas komentarnya. Kami telah memperbaiki banyak bug petunjuk tipe kecil selama beberapa bulan terakhir; jika Anda melihat hal-hal yang tidak berfungsi pada rilis atau master terbaru, silakan buka bug untuk mereka dan kami akan memeriksanya. Terima kasih!

Hal-hal yang rusak yang saya perhatikan di versi 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 Terima kasih telah melaporkan. Bisakah Anda membuka masalah baru dengan kasing itu untuk visibilitas lebih?

@tjysdsg Terima kasih telah melaporkan. Bisakah Anda membuka masalah baru dengan kasing itu untuk visibilitas lebih?

@zou3519 Ini dia #34699, saya juga akan memperbarui masalah ini jika saya menemukan sesuatu yang baru

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

soumith picture soumith  ·  3Komentar

NgPDat picture NgPDat  ·  3Komentar

ikostrikov picture ikostrikov  ·  3Komentar

kdexd picture kdexd  ·  3Komentar

eliabruni picture eliabruni  ·  3Komentar