Ipython: فشل test_history

تم إنشاؤها على ٨ أكتوبر ٢٠١٨  ·  16تعليقات  ·  مصدر: ipython/ipython

أحاول حزمة ipython 7.0.1 لـ openSUSE وأتلقى الخطأ التالي في اختبارات الوحدة:

======================================================================
FAIL: IPython.core.tests.test_history.test_history
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/usr/lib/python3.6/site-packages/IPython/core/tests/test_history.py", line 113, in test_history
    newhist[3]])
AssertionError: Lists differ: [(1, [51 chars]rn test'), (1, 3, "b='€Æ¾÷ß'"), (2, 1, 'z=5'), (2, 3, "k='p'")] != [(1, [51 chars]rn test'), (1, 3, "b='€Æ¾÷ß'"), (2, 3, "k='p'"), (2, 4, 'z=5')]

First differing element 3:
(2, 1, 'z=5')
(2, 3, "k='p'")

  [(1, 1, 'a=1'),
   (1, 2, 'def f():\n    test = 1\n    return test'),
   (1, 3, "b='€Æ¾÷ß'"),
-  (2, 1, 'z=5'),
-  (2, 3, "k='p'")]
?                 ^

+  (2, 3, "k='p'"),
?                 ^

+  (2, 4, 'z=5')]
-------------------- >> begin captured stdout << ---------------------
def f():
    test = 1
    return test
b='€Æ¾÷ß'
The following commands were written to file `/tmp/tmphhgt1b7l/tmpsytny8bh/test4.py`:
a=1
def f():
    test = 1
    return test
b='€Æ¾÷ß'

--------------------- >> end captured stdout << ----------------------
    """Fail immediately, with the given message."""
>>  raise self.failureException('Lists differ: [(1, [51 chars]rn test\'), (1, 3, "b=\'€Æ¾÷ß\'"), (2, 1, \'z=5\'), (2, 3, "k=\'p\'")] != [(1, [51 chars]rn test\'), (1, 3, "b=\'€Æ¾÷ß\'"), (2, 3, "k=\'p\'"), (2, 4, \'z=5\')]\n\nFirst differing element 3:\n(2, 1, \'z=5\')\n(2, 3, "k=\'p\'")\n\n  [(1, 1, \'a=1\'),\n   (1, 2, \'def f():\\n    test = 1\\n    return test\'),\n   (1, 3, "b=\'€Æ¾÷ß\'"),\n-  (2, 1, \'z=5\'),\n-  (2, 3, "k=\'p\'")]\n?                 ^\n\n+  (2, 3, "k=\'p\'"),\n?                 ^\n\n+  (2, 4, \'z=5\')]')


----------------------------------------------------------------------

يبدو أن آخر عنصرين في القائمة قد بدلا أماكنهما ولكني لا أعرف لماذا قد يكون هذا هو الحال.


تعديل:

يمكننا على الأرجح حل هذه المشكلة في خطوتين:

1) ضع علامة على الاختبار على أنه تخطي (أو فشل معروف) لمجموعة إصدارات sqlite التي يبدو أنها متأثرة.
2) اكتشف ما إذا كان هذا تغييرًا في السلوك يستحق الإصلاح أو إذا كان يجب تحديث الاختبار وفقًا لذلك.

Hacktoberfest help wanted

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

أعتقد أنه بدون شرطة سفلية في قاعدة بيانات IPython.

على سبيل المثال هناك .

dsblank هل جربت RipGrep ؟ جيد حقًا: تخطي .git افتراضيًا ، والبحث بشكل متكرر افتراضيًا ، وتمييز اللون ، والتصفية حسب أنواع الملفات. مثال ابحث عن skipif فقط في ملفات python:

$ rg <strong i="11">@skipif</strong> -tpy
IPython/extensions/tests/test_autoreload.py
133:    @skipif(sys.version_info < (3, 6))

IPython/core/tests/test_interactiveshell.py
531:    @skipif(not hasattr(signal, 'SIGALRM'))

IPython/lib/tests/test_latextools.py
47:<strong i="12">@skipif_not_matplotlib</strong>
62:<strong i="13">@skipif_not_matplotlib</strong>

IPython/lib/tests/test_display.py
182:<strong i="14">@skipif_not_numpy</strong>
 ~/dev/ipython[master ✗] $ rg <strong i="15">@skip_if</strong> -tpy
IPython/lib/tests/test_clipboard.py
7:<strong i="16">@skip_if_no_x11</strong>

IPython/utils/tests/test_path.py
102:<strong i="17">@skip_if_not_win32</strong>
117:<strong i="18">@skip_if_not_win32</strong>
157:<strong i="19">@skip_if_not_win32</strong>
377:    <strong i="20">@skip_if_not_win32</strong>
468:    <strong i="21">@skip_if_not_win32</strong>

... وأسرع 10 مرات على جهازي.

ال 16 كومينتر

ما هو إصدار Python الذي تستخدمه؟ انظر إلى إصدار sqlite أيضًا.

فيما يلي إصدارات python و sqlite:

libsqlite3-0-3.25.0-1.1
python3-3.6.5-3.4

وأعتقد أن البعض الآخر قد يكون ذا صلة:

bash-4.4-107.1
coreutils-8.30-1.2
gcc8-8.2.1+r264010-1.1
gettext-runtime-mini-0.19.8.1-9.1
gettext-tools-mini-0.19.8.1-9.1
glibc-2.27-6.1
libdb-4_8-4.8.30-36.5
libgdbm5-1.14.1-1.6
libgdbm_compat4-1.14.1-1.6
libncurses6-6.1-6.5
libreadline7-7.0-2.1
libstdc++6-8.2.1+r264010-1.1
libzmq5-4.2.5-2.1
linux-glibc-devel-4.18-1.1
ncurses-utils-6.1-6.5
python3-ipython_genutils-0.2.0-2.1
python3-jedi-0.12.1-1.1
python3-jsonschema-2.6.0-2.2
python3-jupyter_client-5.2.3-4.1
python3-jupyter_core-4.4.0-3.1
python3-jupyter_ipyparallel-6.2.2-6.27
python3-jupyter_ipywidgets-7.4.2-10.1
python3-jupyter_nbconvert-5.4.0-15.11
python3-jupyter_nbformat-4.4.0-3.1
python3-jupyter_notebook-5.7.0-8.3
python3-jupyter_qtconsole-4.4.1-5.2
python3-jupyter_widgetsnbextension-3.4
python3-nose-1.3.7-10.1
python3-pexpect-4.6.0-2.1
python3-pyparsing-2.2.0-2.1
python3-pyzmq-17.1.2-1.1
python3-setuptools-40.4.3-1.1
python3-simplegeneric-0.8.1-8.4
python3-simplejson-3.16.1-1.1
python3-six-1.11.0-4.1
python3-terminado-0.8.1-3.1
python3-testpath-0.4.1-4.1
python3-traitlets-4.3.2-4.1
python3-wcwidth-0.1.7-2.1

يبدو أن المشكلة تحدث أيضًا في الإصدار 6.5. يبدو أن المشكلة حدثت لأول مرة عندما انتقلنا من sqlite3 3.24.0 إلى 3.25.0.

في الواقع مقابل z=5 تم تغيير الرقم الثاني في المجموعة. إنه line number (AFAICT).

فلماذا 4 بدلاً من 1 ...؟ ربما عندما نطلب unique نطلب فقط uniq wrt العمود الثالث ويسعد sqlite بتغيير سلوكه الداخلي وتوحيده قبل الفرز ، وبالتالي إعادة التكرار الثاني z=5 ؟

فاتني ذلك. لكنني لا أعرف حقًا أي شيء عن SQL ، لذلك لا أعرف سبب حدوث ذلك. لقد أكدت أن المشكلة لا تزال تحدث مع sqlite 3.25.2 ، أحدث إصدار.

أنا لست خبيرًا في SQL أيضًا ، مما يمكنني قوله أن فشل الاختبار ليس كذلك
حرج. هل ستساعدك علامة "فشل معروف" على إنشاء حزمة لـ openSUSE أو
هل تفضل البحث عن السبب الجذري؟

في الأحد ، 14 أكتوبر 2018 ، 12:28 كتب Todd [email protected] :

فاتني ذلك. لكنني لا أعرف شيئًا عن SQL لذا لا أعرف
لماذا قد يحدث ذلك. لقد أكدت أن المشكلة لا تزال تحدث مع
sqlite 3.25.2 ، أحدث إصدار.

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/ipython/ipython/issues/11372#issuecomment-429654816 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AAUez9oGI6J02rTiDIfuzUCrpY71axO9ks5uk5B1gaJpZM4XMOVJ
.

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

LucianaMarques كنت تبحث عن شيء سهل ، لا ينبغي أن يكون صعبًا جدًا لإضافة "skip_if" بشرط مثل ... sqlite3.sqlite_version_info > (x, y, z)

يمكننا تأخير إصلاح ذلك لاحقًا.

Carreau شكرا لك ،

Carreau أواجه مشكلة في استخدام skip_if ، لم أستخدمه مطلقًا ولم أجد أي مستندات عليه (أو لا أبحث عنه بشكل صحيح ...) ، هل لديك أي دروس تعليمية / توصيات للمستندات؟

LucianaMarques عندما أبدأ الترميز في منطقة جديدة ، أحاول العثور على أمثلة في الكود الحالي. إذا كنت تستخدم نظامًا قائمًا على نظام Unix ، فيمكنك استخدام grep للبحث في قاعدة الشفرة عن أمثلة على "skip_if" ، وقياسًا لذلك ، تنطبق على المشكلة الحالية.

أعتقد أنه بدون شرطة سفلية في قاعدة بيانات IPython.

على سبيل المثال هناك .

dsblank هل جربت RipGrep ؟ جيد حقًا: تخطي .git افتراضيًا ، والبحث بشكل متكرر افتراضيًا ، وتمييز اللون ، والتصفية حسب أنواع الملفات. مثال ابحث عن skipif فقط في ملفات python:

$ rg <strong i="11">@skipif</strong> -tpy
IPython/extensions/tests/test_autoreload.py
133:    @skipif(sys.version_info < (3, 6))

IPython/core/tests/test_interactiveshell.py
531:    @skipif(not hasattr(signal, 'SIGALRM'))

IPython/lib/tests/test_latextools.py
47:<strong i="12">@skipif_not_matplotlib</strong>
62:<strong i="13">@skipif_not_matplotlib</strong>

IPython/lib/tests/test_display.py
182:<strong i="14">@skipif_not_numpy</strong>
 ~/dev/ipython[master ✗] $ rg <strong i="15">@skip_if</strong> -tpy
IPython/lib/tests/test_clipboard.py
7:<strong i="16">@skip_if_no_x11</strong>

IPython/utils/tests/test_path.py
102:<strong i="17">@skip_if_not_win32</strong>
117:<strong i="18">@skip_if_not_win32</strong>
157:<strong i="19">@skip_if_not_win32</strong>
377:    <strong i="20">@skip_if_not_win32</strong>
468:    <strong i="21">@skip_if_not_win32</strong>

... وأسرع 10 مرات على جهازي.

شكرًا لك Carreau و dsblank ، كانت اقتراحاتك مفيدة حقًا ، ولا أعتقد أنني كنت على دراية بهذا الأمر سابقًا.

سأعود مع طلب سحب قريبًا.

كما وعدت ، طلب السحب الخاص بي.

تمت إضافة Skip_if ، سأترك هذا مفتوحًا للانتقال إلى جذر المشكلة.

شكر !

للرجوع إليها في المستقبل وربما إصلاحًا حقيقيًا في وقت ما ، يبدو أن هذا يحدث لأن ipython يستخدم عبارة SQL "GROUP BY" لسحق التكرارات ، مع التحديد والترتيب حسب الأعمدة التي لا تجمع الأعمدة أو الوظائف المجمعة (الجلسة والخط). لا تحدد SQL ولا sqlite أي صف من كل مجموعة ناتجة سيتم رسم القيم الخاصة بما يسمى بالأعمدة "المجردة" ، ويبدو أن سلوك sqlite الفعلي قد تغير في هذا الصدد.

لقد جربت نوعين من الأشكال المختلفة على SQL الذي تم إنشاؤه ، دون نجاح مقابل sqlite3 3.26.0. هناك بالتأكيد طرق للقيام بذلك ، ولكن هناك سؤال حول حجم التغييرات المطلوبة وتأثيرها على أداء البحث.

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