Ipython: test_history失败

创建于 2018-10-08  ·  16评论  ·  资料来源: ipython/ipython

我正在尝试为openSUSE打包ipython 7.0.1,并且在单元测试中遇到以下错误:

======================================================================
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,默认情况下递归搜索,突出显示颜色,并按文件类型过滤。 FR示例仅在python文件中搜索skipif:

$ 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乐于更改其内部行为并在排序前进行uniquify,从而返回z=5的第二次迭代?

我错过了。 但是我对SQL一点也不了解,所以我不知道为什么会发生这种情况。 我已经确认最新版本的sqlite 3.25.2仍然会出现此问题。

我也不是SQL专家,据我所知测试失败不是
危急。 “已知失败”标记会帮助您打包openSUSE还是
您更愿意找到根本原因?

在2018年10月14日星期日,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您正在寻找简单的东西,在条件类似于... sqlite3.sqlite_version_info > (x, y, z)的情况下添加“ @skip_if”应该不难

我们可以延迟将其修复到以后。

@Carreau谢谢您,我今天尝试一下!

@Carreau我在使用@skip_if时遇到了麻烦,我从未使用过它,也没有发现文档(或者我没有正确搜索它...),您有任何教程/文档建议吗?

@LucianaMarques每当我开始在新区域中进行编码时,我都会尝试在当前代码中查找示例。 如果您使用的是基于Unix的系统,则可以使用grep在代码库中搜索“ skip_if”的示例,以此类推,适用于当前问题。

我认为在IPython代码库上没有下划线。

例如那里

@dsblank您是否尝试过RipGrep ? 很好:默认情况下跳过.git,默认情况下递归搜索,突出显示颜色,并按文件类型过滤。 FR示例仅在python文件中搜索skipif:

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