Ipython: test_history Fehler

Erstellt am 8. Okt. 2018  ·  16Kommentare  ·  Quelle: ipython/ipython

Ich versuche, ipython 7.0.1 für openSUSE zu verpacken und erhalte bei den Komponententests den folgenden Fehler:

======================================================================
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\')]')


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

Es sieht so aus, als hätten die letzten beiden Listenelemente die Plätze getauscht, aber ich weiß nicht, warum das so sein könnte.


BEARBEITEN:

Wir können dieses Problem wahrscheinlich in zwei Schritten beheben:

1) Markieren Sie den Test als überspringen (oder als fehlgeschlagen) für den Bereich der SQLite-Versionen, die anscheinend betroffen sind.
2) tatsächlich herausfinden, ob dies eine zu ändernde Verhaltensänderung ist oder ob der Test entsprechend aktualisiert werden sollte.

Hacktoberfest help wanted

Hilfreichster Kommentar

Ich denke, es ist ohne Unterstrich auf IPython-Codebasis.

Zum Beispiel dort .

@dsblank hast du RipGrep ausprobiert ? Wirklich gut: Standardmäßig .git überspringen, standardmäßig rekursiv suchen, Farben hervorheben und nach Dateitypen filtern. Beispiel für die Suche nach skipif nur in Python-Dateien:

$ 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>

... und 10x schneller auf meiner Maschine.

Alle 16 Kommentare

Auf welcher Python-Version läuft das? Schauen Sie sich auch die Version von SQLite an.

Hier sind die Python- und SQLite-Versionen:

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

Und einige andere, denke ich, könnten relevant sein:

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

Das Problem scheint auch in Version 6.5 aufzutreten. Es sieht so aus, als ob das Problem zum ersten Mal aufgetreten ist, als wir von sqlite3 3.24.0 auf 3.25.0 umgestellt haben.

Tatsächlich hat sich für z=5 die zweite Zahl im Tupel geändert. Es ist das line number (AFAICT).

Warum also 4 statt 1 ...? Es kann sein, dass wir, wenn wir unique anfordern, nur Uniq für die 3. Spalte anfordern und SQLite gerne sein internes Verhalten ändert und es vor dem Sortieren eindeutig macht, wodurch die zweite Iteration von z=5 .

Das habe ich vermisst. Aber ich weiß wirklich nichts über SQL, deshalb weiß ich nicht, warum es passieren könnte. Ich habe bestätigt, dass das Problem bei SQLite 3.25.2, der neuesten Version, weiterhin auftritt.

Ich bin auch kein SQL-Experte, soweit ich das beurteilen kann, sind die Testfehler nicht
kritisch. Würde ein "bekannter Fehler" Ihnen helfen, für openSUSE oder zu packen
Suchen Sie lieber die Grundursache?

Am Sonntag, 14. Oktober 2018, 12:28 Uhr schrieb Todd

Das habe ich vermisst. Aber ich weiß wirklich nichts über SQL, also weiß ich es nicht
warum es passieren könnte. Ich habe bestätigt, dass das Problem weiterhin auftritt
SQLite 3.25.2, die neueste Version.

- -
Sie erhalten dies, weil Sie kommentiert haben.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/ipython/ipython/issues/11372#issuecomment-429654816 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AAUez9oGI6J02rTiDIfuzUCrpY71axO9ks5uk5B1gaJpZM4XMOVJ
.

Ich weiß nicht, wie ernst der Fehler ist, also würde ich mich Ihrem Urteil widersetzen. Natürlich ist eine echte Lösung vorzuziehen, aber wenn Sie der Meinung sind, dass das Problem geringfügig genug ist, können wir vorerst einen bekannten Fehler beheben.

@LucianaMarques Sie haben nach etwas sqlite3.sqlite_version_info > (x, y, z) hinzuzufügen

Wir können die Behebung später verschieben.

@ Carreau danke, ich werde es heute versuchen!

@Carreau Ich habe Probleme, @skip_if zu verwenden. Ich habe es nie verwendet und keine Dokumente darauf gefunden (oder ich suche nicht richtig danach ...). Haben Sie Empfehlungen für Tutorials / Dokumente?

@LucianaMarques Immer wenn ich in einem neuen Bereich mit dem Codieren grep in der Codebasis nach Beispielen für "skip_if" suchen und analog auf das aktuelle Problem anwenden.

Ich denke, es ist ohne Unterstrich auf IPython-Codebasis.

Zum Beispiel dort .

@dsblank hast du RipGrep ausprobiert ? Wirklich gut: Standardmäßig .git überspringen, standardmäßig rekursiv suchen, Farben hervorheben und nach Dateitypen filtern. Beispiel für die Suche nach skipif nur in Python-Dateien:

$ 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>

... und 10x schneller auf meiner Maschine.

Vielen Dank an @Carreau und @dsblank , Ihre Vorschläge waren wirklich hilfreich. Ich glaube nicht, dass ich zuvor mit diesem Befehl vertraut war.

Ich werde bald mit einer Pull-Anfrage zurückkommen.

Wie versprochen, meine Pull-Anfrage .

Skip_if wurde hinzugefügt, ich werde dieses offen lassen, um zur Wurzel des Problems zu gelangen.

Vielen Dank !

Als zukünftige Referenz und möglicherweise als echte Lösung scheint dies zu geschehen, da ipython eine SQL-Klausel "GROUP BY" verwendet, um Duplikate zu quetschen, und gleichzeitig nach Spalten auswählt und sortiert, die weder Spalten gruppieren noch Funktionen aggregieren (Sitzung und Zeile). Weder SQL noch SQLite geben an, aus welcher Zeile jeder resultierenden Gruppe die Werte für diese sogenannten "nackten" Spalten gezogen werden, und anscheinend hat sich das tatsächliche Verhalten von SQLite in dieser Hinsicht geändert.

Ich habe einige Variationen des generierten SQL ausprobiert, ohne Erfolg gegen sqlite3 3.26.0. Es gibt sicherlich Möglichkeiten, dies zu tun, aber es gibt eine Frage der Größe der erforderlichen Änderungen und ihrer Auswirkung auf die Suchleistung.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen