Pytorch: "تلميحات النوع" معطلة في PyTorch 0.4.0 ، ذات الصلة بـ IDEs (مثل PyCharm)

تم إنشاؤها على ٥ مايو ٢٠١٨  ·  106تعليقات  ·  مصدر: pytorch/pytorch

إذا كان لديك سؤال أو ترغب في المساعدة والدعم ، يرجى طرح سؤال على
المنتديات .

إذا كنت تقدم طلب ميزة ، يرجى تقديم العنوان بـ [طلب الميزة].
إذا كنت ترسل تقرير خطأ ، يرجى ملء التفاصيل التالية.

وصف المشكلة

في الآونة الأخيرة ، اكتشفت أن PyCharm لا يمكنه إجراء الإكمال التلقائي مقابل torch.zeros .

يقول PyCharm

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

لقد قمت بحفره لفترة من الوقت وجدت Type Hints مكسورًا.

من هذه التغييرات ،
https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4
https://github.com/pytorch/pytorch/wiki/Breaking-Changes-from-Variable-and-Tensor-merge

خاصة ، https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4#diff -14258fce7c17ccb97b488e64373b0803R308colesbury
هذا الخط لا يمكن أن يجعل Type Hints للعديد من IDEs.

في الأصل ، كان torch.zeros في torch/_C/__init__.py
لكنها انتقلت إلى torch/_C/_VariableFunctions

مثال رمز

https://gist.github.com/kimdwkimdw/50c18b5cf72c69c2d01bb4146c8a2b5c
هذا دليل على مفهوم هذا الخطأ.

إذا نظرت إلى main.py

import T_B as torch

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

معلومات النظام

يرجى نسخ ولصق الإخراج من
البرنامج النصي لجمع البيئة
(أو املأ قائمة التحقق أدناه يدويًا).

يمكنك الحصول على البرنامج النصي وتشغيله باستخدام:

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 أو Caffe2:
  • كيف قمت بتثبيت PyTorch (كوندا ، نقطة ، مصدر):
    أي حالة لـ conda ، pip ، source.

  • أمر الإنشاء الذي استخدمته (في حالة التحويل البرمجي من المصدر):

  • نظام التشغيل: أي
  • إصدار PyTorch: 0.4.0
  • إصدار Python: 3.6.5
  • إصدار CUDA / cuDNN:.
  • نماذج وتكوين وحدة معالجة الرسومات:.
  • نسخة مجلس التعاون الخليجي (إذا كانت مجمعة من المصدر):.
  • إصدار CMake:.
  • إصدارات أي مكتبات أخرى ذات صلة
medium priority (this tag is deprecated)

التعليق الأكثر فائدة

سنقوم بإعطاء الأولوية لهذا لأن الكثير من المستخدمين يطلبون ذلك ... سنبذل قصارى جهدنا للنظر في الأمر أكثر.

ال 106 كومينتر

أي نقطة ذات صلة؟ # 4568

نفس المشكلة ، pycharm غير مجدية بشكل أساسي عند استخدام pytorch0.4. يتم وضع خط تحت كل شيء تقريبًا إما لأنه " لا يمكن العثور على مرجع " أو " غير قابل للاستدعاء ".

torch

لا يوجد إكمال تلقائي ، تعريف سريع ووثائق سريعة لـ torch.tensor ، torch.max و loss.backward .

  • نظام التشغيل: Linux (64 بت Fedora 27 مع Gnome).
  • إصدار PyTorch: 0.4.0.
  • كيف قمت بتثبيت PyTorch (conda ، pip ، source): pip3.
  • إصدار Python: 3.6.5.
  • أنا استخدم وحدة المعالجة المركزية (لا CUDA).

إذا كان لدى أي منكم اقتراحات حول كيفية إصلاح ذلك ، فيرجى إخبارنا بذلك!

يبدو أنه يمكن تحسين بحث PyCharm عن الوظائف ، لكنني لست متأكدًا مما يمكن عمله من جانب PyTorch. باستخدام torch.tensor كمثال ، يحصل help(torch.tensor) على الوثائق بينما يظهر dir(torch) "tensor" كعضو.

@ zou3519
اعتقدت أن أدناه ليس أسلوب كود جيد.

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

من https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4

globals()[name] ليس طريقة Pythonic . إنها ليست مشكلة لـ PyCharm فحسب ، بل أيضًا في نمط كود Python.

اعتقدت أن _VariableFunctions ليس بالضرورة أن يكون Class.

أحاول تقديم العلاقات العامة لهذه المشكلة. هل تراجع؟ @ zou3519

kimdwkimdw لا أعرف ما الذي يحدث مع العالمية () هناك أو ما الذي يمكن أن يجعله أفضل ، ولكن نعم ، يرجى تقديم PR

يبدو أنه يمكن تحسين بحث PyCharm عن الوظائف ، لكنني لست متأكدًا مما يمكن عمله من جانب PyTorch.

أردت فقط ملاحظة أنني لم أواجه هذه المشكلة مطلقًا مع أي حزمة أخرى في PyCharm. هذا لا يعني أن PyCharm لا ينبغي أن تفعل الأشياء بشكل مختلف ، ولكن يبدو أن هذه المشكلة غير شائعة.

أنا أعمل بشكل أساسي على هذه الملفات.

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

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

محاولة معرفة ما تغير عند إنشاء امتدادات C.
سأقوم بالعلاقات العامة قريبًا.

أي تحديثات؟

لقد صنعت مثالًا عمليًا في مفترقتي.

إذا أراد أي شخص استخدام ميزة الإكمال التلقائي أولاً ، فجرّب أدناه.

1. بوابة استنساخ

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

2. تثبيت PyTorch

3. مسح ذاكرة التخزين المؤقت في PyCharm

  • عادة ما توجد ذاكرات التخزين المؤقت في /Users/USERNAME/Library/Caches/PyCharm*/python_stubs/
  • تحقق من project interpreter في PyCharm

قبل pull request ، أحتاج إلى إضافة المزيد من الالتزامات لتنظيم النتائج.

فشل التثبيت باتباع الوصف أعلاه.
هل هناك طريقة بسيطة للتثبيت؟

انا لدى نفس المشكله. لطالما أحببت pytorch و pycharm. هذا عار أنهم لا يعملون بشكل جيد: (
نتطلع إلى التحديثات.

هذا أمر غريب حقًا عندما استخدمت نفس الرمز في وحدة تحكم Python مع pycharm ، هذا أمر طبيعي ، لكن في المحرر. O__O "...

سنقوم بإعطاء الأولوية لهذا لأن الكثير من المستخدمين يطلبون ذلك ... سنبذل قصارى جهدنا للنظر في الأمر أكثر.

يطلب الكثير من المستخدمين .... يجب أن أقدم طلب سحب في نهاية هذا الأسبوع.

لقد دمجت الكود مع الفرع الحالي master .

Type Hints على قيد الحياة الآن.

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

تسجيل الخروج PR - https://github.com/pytorch/pytorch/pull/8845

نسخة. @ zou3519

kimdwkimdw هل يجب إعادة تثبيت pytorch من المصدر؟ هل توجد طريقة سهلة للتجديد في منصة windows؟

@ 541435721
نعم يجب عليك. تحقق من https://github.com/pytorch/pytorch#install -pytorch هذه الصفحة.
لا أعرف أن هناك طريقة أبسط لإنشائه.

لا يبدو أنه يغير أي شيء لـ Pycharm (2018.1 ، مع مخابئ أعيد بناؤها).

يجب عليك التحقق من طلب سحبkimdwkimdw الصورة، وليس سيد pytorch. لم يتم دمج طلب السحب في pytorch master حتى الآن.

هذه هي العلاقات العامة: https://github.com/pytorch/pytorch/pull/8845.

نعم ، هذا ما فعلته:

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 ، يجب حذف

عندما تقوم بإعداد مشروع ، تقوم Pycharm بتهيئة ملفات python stub الخاصة بها.

بعد حذف دليل python stub ، أعد تشغيل Pycharm.

ستقوم PyCharm بإعادة إنشاء كعب بيثون الخاص بها.

لا يبدو أنه يغير أي شيء ، ولكن قد يكون هذا هو الإعداد الخاص بي. ربما يمكننا انتظار شخص آخر ليحاول؟

يجب أن تجد دليل كعب بيثون. عند النقر فوق torch ، يمكنك العثور على دليل stub.

kimdwkimdw لقد

image
لا يمكنك حذف PyCharm Cache من خلال invalidate Caches

في نظام MacOS ، يجب حذف المجلدات يدويًا الموجودة في ~/Library/Caches/PyCharm2018.1/python_stubs/ .

هناك خيار آخر. إذا قمت بإنشاء مشروع جديد وقمت بتغيير إعداد المترجم الفوري الخاص بك ، فإن PyCharm ستجعل python stubs

@ 541435721 @ nlgranger

هذا هو بالضبط ما فعلته (إبطال ذاكرة التخزين المؤقت ، وإيقاف pycharm ، rm .PyCharm2018.1/system/python_stubs/* -rf ).
راجع للشغل أنا أستخدم python 3 في حال كان ذلك مهمًا (أرى بعض اختبارات python2 في العلاقات العامة).

تضمين التغريدة
لقد فعلت هذا كدليل ونظام التشغيل الخاص بي هو windows10 ، لكنني أواجه هذه المشكلة.

@ kimdwkimdw أستطيع أن أفعل ذلك! اشكرك!

نظرًا لأن الآخرين يواجهون مشكلة ، أردت فقط ملاحظة أن إصلاح kimdwkimdw يعمل بالنسبة لي. هذا مع Python 3 على macOS. استخدام:

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

لقد قمت بحذف بذراتي يدويًا ، على الرغم من أنني لا أعرف ما إذا كان ذلك ضروريًا. على أي حال ، فهو يعمل على الأقل على نظامي.

ومع ذلك ، فقد وجدت أن كلا من torch.float32 (وأنواع البيانات الأخرى) و torch.backends.cudnn لا يزالان دون حل بواسطة PyCharm (على الأقل في حالتي).

shianiawhite نقطة جيدة. شكرا. أعتقد أنه يجب علي إضافة المزيد من التحديثات إلى طلبات السحب.

@ zou3519

لم ينجح معي ، على الرغم من أنني نجحت في بناء العلاقات العامة لـ kimdwkimdw وحذفت يدويًا python_stub في ~/.PyCharmCE2018.1/system .

آسف للسؤال مرة أخرى ولكن أي أخبار عن هذا؟
هل سيساعد في فتح مشكلة هنا في jetbrains https://youtrack.jetbrains.com/issues/PY؟q=pytorch ؟

أواجه نفس المشكلة في Ubuntu 16.04 و PyCharm 2017.3

الشيء الغريب هو أنه عندما أركض في وحدة تحكم بايثون ، فإنه يظهر الإكمال التلقائي بشكل صحيح.
working_in_console

لكن عندما أقوم بتشغيل نفس الشيء في المحرر ، فإنه لا يعمل.
not_working_in_editor

أنا أستخدم python 3.6.6 و PyTorch 0.41. لقد قمت بتثبيته باستخدام pip و cuda 9.2

لدي نفس المشكلة في Window7 PyCharm2018 و Win10 PyCharm2018 و Win10 VS2017 و Win10 Spyder.
وأحاول استخدام pytorch0.4.0 و pytorch0.4.1 ، كلاهما لا يمكن الإكمال التلقائي.
فقط ipython يظهر الإكمال التلقائي بشكل صحيح.
ساعدني من فضلك

فتحت قضية في PyCharm youtrack. ربما يمكنهم المساعدة أيضًا.

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

لقد جربت VS2017 و PyCharm2018.2 مع pytorch0.4.1 على نظام التشغيل Windows 10 ولا يعمل الإكمال التلقائي بالنسبة لي.

تم تثبيت PyTorch-0.4.1 بواسطة نقطة باستخدام PyCharm-2018.2 ، ولا يزال يعاني من نفس المشكلات.

سيكون من الجيد أن يصوت الناس هنا https://youtrack.jetbrains.com/issue/PY-31259
لذلك فإن الإصلاح له أولوية أعلى

أهلا!
أنا المحال إليه من PY-31259.
لا تقوم PyCharm بتشغيل أي رمز مستخدم أثناء إجراء تحليل ثابت (الاستثناء هو وحدة التحكم حيث يمكن التحقق من البيئة بسهولة). لذا فإن معظم الطرق الديناميكية للإعلان عن السمات غير قابلة للاكتشاف.

sproshev شكرا لك على ردك. هل يمكنك إلقاء بعض الضوء على سبب طلبkimdwkimdw للسحب https://github.com/pytorch/pytorch/pull/8845 ؟

بالنسبة للسياق ، تقوم pytorch ببعض التخصيص الديناميكي للسمات عند استيرادها. طلب السحب الخاص بـ kimdwkimdw يحافظ على ذلك ، لكنه يفعل ذلك بطريقة مختلفة تستطيع شركة pycharm متابعتها.

أعتقد أن الطريقة الأكثر منطقية لإصلاح هذا (على الأقل في Python 3) هي إنشاء كعب .pyi.
يبدو أن الاختبار السريع يشير إلى أنه سيعمل بشكل جيد.
أنا لست مستخدمًا لـ PyCharm بنفسي ، ولكن إذا كان هناك عدد كافٍ من الأشخاص الذين سيكونون سعداء للغاية ، فيمكنني معرفة ما إذا كان بإمكاننا إنشاء واحد من الوظائف المحلية. yaml والأصدقاء.

@ t-vi ليس لدي أي فكرة عما تتحدث عنه ، ولكن بالنظر إلى أن هذا كان يتأخر فقط ، يرجى إنشاء ملف .pyi! :د

لذا فإن الوحدة الرئيسية تبدو سهلة بما فيه الكفاية:
image

لسبب أو لآخر ، مجرد وجود

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

في __init__.pyi يبدو أنه لا يسمح لـ PyCharm باستنتاج أنه بعد a = randn((1,2)) ، a من الدرجة torch.Tensor . :(
(لدي بالفعل تعليقات توضيحية في الفصل أيضًا ، ولكن يتم استخدامها فقط إذا قمت بتهجئة التعليق التوضيحي a : torch.Tensor = ... )

لقد قمت بنشر pyi هنا ، إذا كنت تريد المحاولة: https://gist.github.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b

مرة أخرى ، إذا كانت لديك فكرة عن سبب عدم تحديد PyCharm لنوع الإرجاع ، فسأكون ممتنًا للغاية إذا قمت بمشاركته.

@ t-vi يعمل الحل مع رمز VS أيضًا. شكرا لك!

شكرًا لك ، ZongyueZhao ، على ملاحظاتك. لم أحاول استخدام كود VS حتى الآن ، ولكن إذا كانت pyi تعمل بما في ذلك أنواع الإرجاع ، فسأرسل تصحيحًا لتوليدها.

شكرًا ، لقد نجح هذا __init__ بالنسبة لي! أنا أستخدم conda env تسمى "main" لذلك ما فعلته كان:

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

لم أكن بحاجة إلى إعادة إنشاء ذاكرة التخزين المؤقت

فيما يتعلق بسبب عدم التعرف على نوع إرجاع Tensor ، فإن الأمر يتعلق بأخطاء بناء الجملة في الملف. افتح الملف في PyCharm ، وسيظهر عددًا قليلاً منهم

screenshot 2018-10-05 16 33 51

بمجرد حذف الأسطر التي بها أخطاء ، حصلت على الإكمال التلقائي
screenshot 2018-10-05 16 35 40

شيء آخر لاحظته هو أن عضو فئة Tensor يلمح إلى العودة -> Tensor ، وهو مرجع دائري ، لذلك لم يتعرف عليه PyCharm أيضًا. الحل هو أن تفعل -> "Tensor" بدلاً من -> Tensor لأساليب فئة Tensor (https://www.python.org/dev/peps/pep-0484/#forward-references)

شكرًا yaroslavvb ، كان هذا بالضبط ما كنت في عداد المفقودين!

نتوء للرؤية. إنها في الواقع صفقة ضخمة لمستخدمي PyCharm. كنت أقوم بتقييم PyTorch كبديل لقاعدة كود tf / keras لدينا وهذه المشكلة هي مانع بالنسبة لنا.

أستخدم pytorch 0.4.1 .

هل هناك أي حل ملموس لهذا. يمكنني استخدام النقطة لتثبيت pytorch. هناك العديد من وظائف pytorch المضمنة torch.xxx لا يمكن التعرف عليها في pycharm.

إذا كان لا يمكن إصلاحه. هل يمكنك المساعدة في اقتراح IDE بديل يقترح جميع وظائف pytorch ويساعد في التنقل داخل الإطار (مثل Ctrl + B للانتقال إلى تعريف وظيفة pytorch).

شكرا لك.

أي شخص يهتم بعمل العلاقات العامة (@ t-vi)؟ أنا أستخدم النوادي الليلية في PyTorch الآن ، ومن الصعب القيام بذلك في كل مرة أقوم فيها بالترقية ...

أناقش هذا الأمر بنشاط مع المطورين الأساسيين للحصول على حل جيد لوقت وكيفية إنشاء PYI أثناء عملية الإنشاء. الجزء الصعب هو دمج المعلومات من وحدات البت المعرفة ببيثون مع تلك الموجودة في وحدات البت _C . نحاول التوصل إلى حل جيد وآمل أن يكون لدي علاقات عامة قريبًا ، ولكن ربما يحتاج إلى جولة من التكرار.

إذا كنت تبحث عن طريقة لتحديد أولوياتي ، فلا تتردد في الاتصال بي عبر البريد.

استبدال __init__.py ليس حلاً جيدًا. في جوهر @ t-vi ، على سبيل المثال ، عند استخدام

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

يعطي PyCharm تحذيرًا من أن المعلمة "out" مفقودة ، لكن المعلمة "out" اختيارية.
في حالة اخرى،

x = torch.empty(10, 2)

هذا السطر من التعليمات البرمجية صحيح لأن الطريقة يمكن أن تقبل (* الأحجام ، ...) ، لكن PyCharm تحذر أيضًا من المعلمات غير الصالحة. مع العديد من التحذيرات الغريبة اخترت أخيرًا تجاهل "torch. *" في إعدادات فحص الكود ...

hitvoice شكرا لك على الإشارة إلى هذه.
الجوهر فقط هو طعنة قبضة خشنة للحصول على بايي مناسب ، لذا فإن تعليقاتك موضع تقدير كبير ! آمل أن تتمكن من إعادة الفحص مع التكرار التالي.

أعتقد أن [الإخراج] الاختياري يجب أن يكون out : Optional[Tensor]=None ، أليس كذلك؟ هذا سهل الإصلاح.
بالنسبة للفراغ ، يكون الأمر أكثر تعقيدًا بعض الشيء لأنه يعني على الأرجح أننا بحاجة إلى تقسيم الإعلانات باستخدام وسيطة قائمة واحدة فقط لقبول varargs (لقد حدقت ذات مرة في كود C الذي يحلل حجج python لفترة طويلة جدًا) ، لكننا بالتأكيد ملتزمون بالحصول على تلميحات رائعة للكتابة.

أهلا،
لقد قمت بتحديث __init__.pyi وسأكون ممتنًا إذا أمكنك إعطائه دورة.

  • أنا أكثر سعادة فيما يتعلق بطريقة التوليد ، لذلك على الرغم من أن هذا وراء الكواليس ، أعتقد أن هناك تقدمًا جيدًا نحو الحصول على علاقات عامة.
  • أقوم أيضًا بإنشاء تلميحات لبعض الوظائف المعرفة ببيثون (btrifact ، einsum) ، لكنني لم أضفها جميعًا.
  • أعتقد أنني ثابت (في رمز جيل) وأوجه القصور التيyaroslavvb وhitvoice أشار.

إذا كنت تعتقد أن هذا يعمل تقريبًا ، فسأبحث عن طرق للاتصال بالرمز (يجب أن يكون بعد الإنشاء) ولدينا (تقريبًا) العلاقات العامة.

@ t-vi تبدو جيدة. حتى الآن يعمل بشكل جيد بالنسبة لي.

مجرد فضول ، ما هو سبب إنشاء تلميحات دالة معرفة بيثون (btrifact ، einsum)؟ أنا أستخدم التصميم الليلي ويبدو أن هؤلاء يعملون من أجلي دون التلميحات.

elliotwaite في تجربتي (القصيرة) ، لا يبدو أنني أحصل على الإكمال التلقائي للنتائج إلا إذا أضفت تلميحات الكتابة عليها ، أي على x = einsum('ii', a); x. وأحصل الآن على طرق الموتر مقابل x . أيضًا ، لست متأكدًا من كيفية تأثير وجود البيضة على كيفية معالجة الأشياء غير المدرجة في البيي. بقدر ما أفهم (وهو ليس جيدًا جدًا) ، هذا مصدر للدقائق.

@ t-vi آه ، فهمت. كنت أختبر فقط بين تضمين ملف pyi بالكامل مقابل عدم تضمينه. أنت على حق ، إذا قمت بتضمين ملف pyi وقمت فقط بالتعليق على سطر تلميح einsum ، فسيؤدي ذلك إلى كسر الإكمال التلقائي بالنسبة لي أيضًا. شكرا للتوضيح.

@ t-vi أحصل على تحذير "معلمة (معاملات) شاغرة" عند تمرير وسيطة sinlge فقط إلى torch.tensor ().

image

elliotwaite شكرا على الملاحظة!
tensor خاص جدًا ، لذلك ربما أحتاج إلى تضمين التوقيع الصحيح يدويًا.
سوف أقوم بتحديث العلاقات العامة. هل ستجد المزيد من المشكلات عندما أقوم أيضًا بتحديث الجوهر؟ (هذا دليل جميل وسأفعل ذلك إذا كان يساعدك على إعطائه دورًا.)

@ t-vi أتلقى أيضًا تحذير "حجة غير متوقعة" بخصوص torch.Tensor.view ():
torch.randn(2, 2).view(1, 1, 2, 2)

لقد صنعت أيضًا نصًا يبحث في جميع المستندات وسحب جميع سلاسل "tensor. *". ثم اختبرتهم من أجل الإكمال التلقائي. فيما يلي قائمة بتلك التي لا يعمل فيها الإكمال التلقائي بعد. لقد استخدمت وظيفة print () للاختبار والتأكد من إمكانية الوصول إليها بالفعل عند تشغيل البرنامج النصي.
https://github.com/elliotwaite/pytorch_typehints/blob/master/no_autocomplete.py

elliotwaite حسنًا ، هناك بعض الشيء الفارارج للموترات المفقودة (أعتقد أنني أخفق أيضًا في العمل على التعليقات التوضيحية kwonly في yaml).
إن فكرة استخدام doc (string) s لمعرفة ما إذا كانت التعليقات التوضيحية جيدة (أو على الأقل لديها فرصة أن تكون ليبرالية بدرجة كافية) فكرة رائعة ، وسأبحث عن القيام بذلك كجزء من الاختبار.

تم تأكيد 8845 من جانب PyCharm. لكن بشكل عام ، من الأفضل أن يكون لديك بذرة pyi لأنها تحتوي على الأقل على معلومات النوع. +1 لهم.

توجد المشكلة بشكل عام مع جميع IDEs التي تستخدم Jedi كخلفية لإكمال Python ، أليس كذلك؟ وهل سيكون الحل الخاص بك عامًا أيضًا أو خاصًا بـ PyCharm و VS Code؟ أستخدم emacs مع Jedi كخلفية مكتملة ولدي نفس المشكلة. ولكن ، ما هو مثير للاهتمام ، يمكنك تجربة الإكمال في وحدة تحكم IPython وهو يعمل! ترى كل الوظائف ، كيف يكون ذلك ممكنا؟

حسنًا ، يستخدم IPython الاستبطان الديناميكي ، وهذا يعمل دائمًا (لا يعمل إلا بعد إنشاء الكائنات ، لذلك ستتمكن من إكمال mytensor.a ولكن ليس mytensor.abs().m ، والذي يمكنك من خلال الكتابة تلميحات.
بقدر ما أفهم ، يستخدم كل من VSCode و Jupyter أيضًا Jedi. Stubs (ملفات .pyi) هي الطريقة "القياسية" لإضافة معلومات الكتابة أعلى الوحدات النمطية الموجودة ، لكنها لم يتم دعمها بعد على نطاق واسع كما قد يرغب المرء (ولا تزال هناك حالات زاوية ، على سبيل المثال لا يمكنك التعبير عن أنه يمكنك تمرير علامة القطع ("...") لوظائف الفهرسة). المسار الصحيح للعمل هو الانتقال إلى Jedi وإضافة دعم كعب تلميح النوع (https://github.com/davidhalter/jedi/issues/839). فرصتك لاستثمار وقتك أو أموالك لجعل سلسلة أدواتك أفضل!

@ t-vi نشكرك على متابعة تتبع هذه المشكلة!

أتفهم أن Stubs طريقة جيدة لحل هذه المشكلة.
https://www.python.org/dev/peps/pep-0484/#stub- الملفات

ومع ذلك ، لا يتم إنشاء Docstring s باستخدام Stubs. ماذا عن إضافة Docstring ؟

@ t-vi لا أفهم ماذا أفعل. ماذا تقصد لتحسين سلسلة الأدوات الخاصة بي؟ أنا أستخدم Jedi حاليًا ، لكنني لا أفهم كثيرًا كيفية العمل مع تلك الملفات الروتينية. هذا شيء يجب أن أكتبه أو أنه موجود في وحدات ويجب علي تحديث Jedi؟ هل هي مثل الرؤوس في C ++؟
وثائق PEP والمشكلة التي ربطتها ليست مفيدة حقًا بالنسبة لي حول كيف يمكنني البدء في استخدامها.

kimdwkimdw أين تضع docstrings حتى يجدها الجميع؟ (لا أعتقد أنه يمكنك وضعها في PYI (؟)). إذا كانت لديك فكرة عن مكان وضعها ، فسأكون متأكدًا من وضعها هناك ...
يبدوpiojanu جدي أن يكون لها فرع typeshed، ولكن أنا لا أعرف ما إذا كان ذلك هو حول بيي بشكل عام. ربما يكون من الأفضل أن تسأل مؤلف Jedi كيف يمكنك المساعدة في جعل دعم pyi يحدث.

@ t-vi أحصل عليه الآن ، شكرًا.

أصلاً توقيع وأنواع الأسلوب المستنتج بـ Docstring في PyTorch 0.3.0 و PR (https://github.com/pytorch/pytorch/pull/8845).
image

@ t-vi
Docstrings أسفل كل طريقة في PYI .
image

يقع معظمهم في _torch_docs.py

بالنسبة لتعليقsproshev ، أعتقد أن # 8845 طريقة جيدة ليس فقط في PyCharm ، ولكن أيضًا في IDEs أخرى لأنه يستخدم الطريقة القياسية لاستيراد الوحدات. لذلك ، يمكن لـ PyCharm توليد Python stubs تلقائيًا.

PyTorch's original way 0.3.0 أو # 8845 يصنع في PyCharms ، في IPython.
يمكن تضمين نوع المعلومات في gen_python_functions.py أو آخر.

أوافق على أن إنشاء ملفات pyi صريحة هي إحدى طرق حل هذه المشكلة. ولكن ربما ليست الطريقة الأنظف.

نفس المشكلة ، pycharm غير مجدية بشكل أساسي عند استخدام pytorch0.4. يتم وضع خط تحت كل شيء تقريبًا إما لأنه " لا يمكن العثور على مرجع " أو " غير قابل للاستدعاء ".

torch

nimcho لدي أيضًا هذه

أقوم بتثبيت torch-nightly على جهاز Mac الخاص بي ولم يتمكن Pycharm من المطالبة به على الإطلاق ، على الرغم من أنه قادر على القفز إلى المصدر عندما أقوم بالنقر فوق Command-Click. بعد إزالة أدلة ذاكرة التخزين المؤقت في المجلدات التالية ، تم إصلاح المشكلة.

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

ما زلت أواجه هذه المشكلة مع pytorch 1.0.0. كيف يمكنني حل هذه المشكلة بالحلول أعلاه؟

هذا محرج ... تقريبا 8 شهور :-(

ebagdasa أود أن

لإعطاء سياق حول سبب استغراق ذلك وقتًا طويلاً لإصلاحه:

  • لا يستخدم أحد من المطورين الأساسيين PyCharm ، لذلك كان من الصعب أولاً الحصول على رؤية حول المشكلة
  • بمجرد أن بدأنا النظر في الأمر ، كانت مشكلة تتعلق بمشروع مشترك ، أي أنها كانت جزئيًا أي جزء من أنواع CPython التي تدعمها PyCharm للإكمال التلقائي ، وجزئيًا ما يمكن أن تفعله PyTorch لحل قيود PyCharm في هذا الإعداد.

    • كان هذا بحاجة إلى مزيج من معرفة الأجزاء الداخلية لـ PyCharm و الداخلية لـ PyTorch. أتمنى أن تفهم صعوبة هذا

    • تمامًا كنقطة مضادة ، يعمل Microsoft VSCode + PyTorch بشكل جيد للإكمال التلقائي ، وكذلك يعمل الإكمال التلقائي لـ IPython بشكل جيد. لذا ebagdasa لا أعتقد أن تعليقك ذا صلة.

أخيرًا ، kimdwkimdw و @ t-vi لهما إصلاحات ، على سبيل المثال في https://github.com/pytorch/pytorch/pull/12500 من خلال إنشاء تلميحات كتابة صريحة ، وبمجرد دخول ذلك العلاقات العامة ، نأمل أن نصلح PyCharm مشكلة.

وكما هو الحال دائمًا ، هذا مشروع مفتوح المصدر ، لذا إذا كان بإمكان أي منكم المساعدة في ذلك ، فلا تتردد في القيام بذلك. على سبيل المثال kimdwkimdw و @ t-vi فعلوا ذلك في أوقات فراغهم ، ولا يتم الدفع لهم مقابل ذلك ، ولا يحتاجون إلى الكراهية.

ebagdasa ، يجب أن تطلب استرداد

حسنًا ، كان هذا تعليقًا بسبب خيبة الأمل بالنظر إلى كيفية إبراز الكود الخاص بي من قبل المحرر. آسف يا شباب ، أنا أفهم كيف يعمل. استمر امضي قدما! ربما حان الوقت لتجربة VSCode.

soumith الإكمال التلقائي لـ VS Code معطل أيضًا في بعض الوظائف مثل torch.randn

1547171211663

وكما هو الحال دائمًا ، هذا مشروع مفتوح المصدر ، لذا إذا كان بإمكان أي منكم المساعدة في ذلك ، فلا تتردد في القيام بذلك. على سبيل المثال kimdwkimdw و @ t-vi فعلوا ذلك في أوقات فراغهم ، ولا يتم الدفع لهم مقابل ذلك ، ولا يحتاجون إلى الكراهية.

سيكون من الرائع بالطبع أن يحصلوا على أموال مقابل ذلك ... هل سيكون من الممكن لـ FAIR استخدام شيء مثل gitcoin لتشجيع المشاركة عن طريق المكافآت؟ بالطبع يحصل الأشخاص في معرض FAIR بالفعل على تعويض جيد عن مساهماتهم ، وربما يكون معظم الناس هنا (مثلي) ممتلئين بوظائفهم اليومية ...

لقد جربت VS Code و Atom و Pycharm باستخدام إما pip أو conda ، لكن لا يعمل أي منها بشكل جيد للإكمال التلقائي في بعض الوظائف مثل torch.max (). ليس لدى IPython و Jupyter هذه المشكلة ، لكنهما ليسا محررين.

نفس الشيء هنا. حاولت PyCharm ، VS code ، Spyder .. من المستحيل الحصول على torch.cat ، مثل Longtensor.

طوال التعليقات في هذه المشكلة ، تم وصف هذا باستمرار على أنه مشكلة متعلقة بـ PyCharm ، وقد ذكر أنها مشكلة في كيفية عمل الأجزاء الداخلية لـ PyCharm وداخل PyTorch معًا. يعد هذا وصفًا خاطئًا للمشكلة ، ومن المحتمل ألا يؤدي النظر إليها على هذا النحو إلى الحل الصحيح. تتخذ PyCharm نهجًا قياسيًا إلى حد ما لحل الحزم ، وكما ذكر العديد من الآخرين ، فإن هذه المشكلة ليست فريدة من نوعها في PyCharm. يعد PyCharm هو المحرر الأكثر شيوعًا الذي يواجه هذه المشكلة مع PyTorch. أي محرر لا يحل الحزمة ديناميكيًا (لأغراض السرعة) سيواجه هذه المشكلة. أعتقد أن حقيقة أن IPython / Jupyter / إلخ يمكنه حلها بشكل صحيح هو الاستثناء وليس القاعدة. أردت فقط التأكيد على هذا حتى لا يتم التركيز كثيرًا على "جعلها تعمل مع PyCharm" بدلاً من "جعلها تعمل بشكل عام".

أن يقال، و بذرة يجري العمل عليها في هذا PR هي خير حل "قياسي"، وربما ينبغي أن تكون قادرة على حل هذه القضية بشكل عام. لأولئك الذين يبحثون عن الحل المؤقت السريع ، انسخ ملف كعب الروتين هذا إلى حزم التوزيع / حزم الموقع كما هو موضح في الجوهر. أضف يدويًا أي أجزاء أخرى مفقودة ، وأبلغ عن تلك الأجزاء المفقودة لضمان التعامل معها.

مرحبا جميعا! تم دمج تصحيح @ t-vi للإتقان ، لذا إذا قمت بالتحديث ، يجب أن تحصل على الإكمال التلقائي للعمل للشعلة على المستوى الرئيسي. بالإضافة إلى ذلك ، التزمنا ببتر نوع تم إنشاؤه يدويًا لـ 1.0.1 ، لذلك عندما يحدث هذا الإصدار ، سيعمل الإكمال التلقائي أيضًا مع الأشخاص في هذا الإصدار.

ربما لا يكون كعب الكتابة جيدًا بما يكفي لفحص الكود الخاص بك باستخدام mypy. نحن نتتبع عمل المتابعة هذا في # 16574 ، يرجى إرسال خط إذا كان يؤثر عليك هناك. أيضًا ، قمنا فقط بإصلاح الإكمال التلقائي على الشعلة ؛ إذا كنت تواجه مشكلات في الإكمال التلقائي على وحدات أخرى (أو كنت تعتقد أن هناك معرّفات مفقودة على الكشاف) ، فيرجى إخبارنا بتقرير خطأ.

شكرا لصبرك!

فقط لمعلوماتك ، تم حل هذا الإصدار الجديد v1.0.1 الآن ، وتم شحنه.

ezyang torch.cuda مفقود في pyi ، على سبيل المثال عند استخدام torch.cuda.is_available .

أحصل على حساسية لـ VSCode للعمل جزئيًا على torch 1.0.1 ، لكن بعض الوظائف لا تزال مفقودة ، على سبيل المثال ، torch.as_tensor

كنت أتلقى أيضًا أخطاء ولم يتم إكمال بعض الوظائف تلقائيًا في PyCharm (كانت مفقودة عندما كنت في أشد الحاجة إليها) ، ولا أعتقد أن هذا قد تم حله تمامًا حتى الآن.

لقد كتبت برنامج PyTorch الأول الخاص بي في نهاية الأسبوع الماضي ، لذا لست متأكدًا مما إذا كنت قد ارتكبت بعض الأخطاء في الإعداد.

vpj تم إصلاحه في PyTorch v1.0.1. أي شيء أقل لا يزال لديه المشكلة. check print(torch.__version__)

الإصدار هو 1.0.1post2

pytorch_missing_defs

بعض التعريفات مفقودة في ملف pyi __init __.

يبدو أيضًا أن PyCharm يسبب بعض المشاكل لأنه فشل في استنتاج أنواع الإرجاع. على سبيل المثال ، لا يبدو أنه يستنتج أن قيمة الإرجاع torch.exp هي Tensor (مع ذلك ، يُستدل على نوع الإرجاع بـ Tensor.exp ). على الرغم من تحديد نوع الإرجاع في تعريف طريقة torch.exp .

نعم ، أقوم أيضًا بالترقية إلى "1.0.1.post2"
ويبدو أن الإكمال التلقائي لا يعمل

image

لذلك ، يبدو أن بعض مساحات الأسماء ما زالت مفقودة ، على الرغم من أننا أصلحنا المشكلة الأكبر.

فتحت مهمة تتبع جديدة لهذا هنا: https://github.com/pytorch/pytorch/issues/16996

لست متأكدًا تمامًا من هذا؟ (هل هذا ثابت؟) وحدة التحكم تعمل بشكل جيد.
(لكن from torch.utils.data import DataLoader, Dataset يعمل)
untitled2____Documents_python_untitled2__-_____main_py

yarcowang لقد قمنا بإضافة المزيد والمزيد من مساحات الأسماء بشكل مطرد. يجب أن يعمل هذا بشكل جيد على 1.2.0. إذا كان لا يزال هناك أشياء مفقودة ، يرجى تسجيل الأخطاء.

ezyang موافق. أرى. يبدو خطأ طويل الأمد.

أنا أحدث ل pytorch. شكرا جزيلا ، إنه يعمل بشكل جيد بالنسبة لي.

مرحبًا بالجميع ، مرر الخيط بأكمله. من الصعب جدًا معرفة ما إذا كانت المشكلة قد تم حلها أم لا. أنا أستخدم torch1.4 + cpu و torch.tensor لا يزال لديه مشكلات تحذير. هل أستطيع مساعدتك؟ شكرا

أيضا لا تزال تواجه هذه المشكلة مع torch.Tensor

شكرا على التعليقات. لقد عكفنا على إصلاح الكثير من أخطاء التلميح الصغيرة على مدار الأشهر القليلة الماضية ؛ إذا لاحظت أشياء لا تعمل على أحدث إصدار أو إتقان ، فيرجى فتح الأخطاء لهم وسنبحث. شكرا!

الأشياء المكسورة التي لاحظتها في الإصدار 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 شكرا على الإبلاغ. هل يمكنك فتح مشكلة جديدة مع تلك الحالات لمزيد من الوضوح؟

tjysdsg شكرا على الإبلاغ. هل يمكنك فتح مشكلة جديدة مع تلك الحالات لمزيد من الوضوح؟

@ zou3519 هنا رقم 34699 ، سأقوم أيضًا بتحديث المشكلة إذا وجدت أي شيء جديد

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات