matplotlib.testing#

matplotlib.testing#

用于测试的辅助函数。

matplotlib.testing.ipython_in_subprocess(requested_backend_or_gui_framework, all_expected_backends)[源代码][源代码]#
matplotlib.testing.is_ci_environment()[源代码][源代码]#
matplotlib.testing.set_font_settings_for_testing()[源代码][源代码]#
matplotlib.testing.set_reproducibility_for_testing()[源代码][源代码]#
matplotlib.testing.setup()[源代码][源代码]#
matplotlib.testing.subprocess_run_for_testing(command, env=None, timeout=60, stdout=None, stderr=None, check=False, text=True, capture_output=False)[源代码][源代码]#

创建并运行一个子进程。

围绕 subprocess.run 的薄包装,用于测试。在 Cygwin 上标记 fork() 失败为预期失败:不是成功,但也不表示代码有问题。

参数:
参数list of str
环境dict[str, str]
超时浮动
标准输出, 标准错误
检查布尔
文本布尔

在 subprocess 中也称为 universal_newlines。我选择这个名字是因为主要效果是返回字节 (False) 还是字符串 (True),尽管它也试图跨平台标准化换行符。

capture_output布尔

将 stdout 和 stderr 设置为 subprocess.PIPE

返回:
进程subprocess.Popen
引发:
pytest.xfail

如果平台是 Cygwin 并且子进程报告了 fork() 失败。

matplotlib.testing.subprocess_run_helper(func, *args, timeout, extra_env=None)[源代码][源代码]#

在子进程中运行一个函数。

参数:
函数函数

要运行的函数。它必须位于可导入的模块中。

*argsstr

要传递给 subprocess.run 的第一个参数的任何额外命令行参数。

extra_envdict[str, str]

为子进程设置的任何额外环境变量。

matplotlib.testing.compare#

用于比较图像结果的工具。

matplotlib.testing.compare.calculate_rms(expected_image, actual_image)[源代码][源代码]#

计算每像素误差,然后计算均方根误差。

matplotlib.testing.compare.comparable_formats()[源代码][源代码]#

返回 compare_images 可以在此系统上比较的文件格式列表。

返回:
list of str

例如 ['png', 'pdf', 'svg', 'eps'].

matplotlib.testing.compare.compare_images(expected, actual, tol, in_decorator=False)[源代码][源代码]#

比较两个“图像”文件,检查在容差范围内的差异。

两个给定的文件名可能指向可以通过 converter 字典转换为 PNG 的文件。底层的 RMS 是通过 calculate_rms 函数计算的。

参数:
预期str

预期图像的文件名。

实际str

实际图像的文件名。

容忍度浮动

容差(一个颜色值差异,其中255是最大差异)。如果平均像素差异大于此值,则测试失败。

in_decorator布尔

确定输出格式。如果从 image_comparison 装饰器调用,这应该是 True。(默认=False)

返回:
None 或 dict 或 str

如果图像在给定的容差范围内相等,则返回 None

如果图像不同,返回值取决于 in_decorator。如果 in_decorator 为真,则返回一个包含以下条目的字典:

  • rms: 图像差异的均方根。

  • expected: 预期图像的文件名。

  • actual: 实际图像的文件名。

  • diff_image: 差异图像的文件名。

  • tol: 比较容差。

否则,将返回此信息的人类可读的多行字符串表示形式。

示例

img1 = "./baseline/plot.png"
img2 = "./output/plot.png"
compare_images(img1, img2, 0.001)

matplotlib.testing.decorators#

matplotlib.testing.decorators.check_figures_equal(*, extensions=('png', 'pdf', 'svg'), tol=0)[源代码][源代码]#

用于生成并比较两张图的测试用例装饰器。

装饰函数必须接受两个关键字参数,fig_testfig_ref,并在它们上面绘制测试和参考图像。函数返回后,图形将被保存并进行比较。

在可能的情况下,应优先使用此装饰器而不是 image_comparison,以防止测试套件的大小急剧膨胀。

参数:
扩展列表,默认值:["png", "pdf", "svg"]

要测试的扩展。

容忍度浮动

测试被视为失败的RMS阈值。

引发:
RuntimeError

如果在测试函数内部创建了任何新图形(并且随后未关闭)。

示例

检查调用 Axes.plot 时,如果只提供一个参数,它将针对 [0, 1, 2, ...] 进行绘制:

@check_figures_equal()
def test_plot(fig_test, fig_ref):
    fig_test.subplots().plot([1, 3, 5])
    fig_ref.subplots().plot([0, 1, 2], [1, 3, 5])
matplotlib.testing.decorators.image_comparison(baseline_images, extensions=None, tol=0, freetype_version=None, remove_text=False, savefig_kwarg=None, style=('classic', '_classic_test_patch'))[源代码][源代码]#

将测试生成的图像与 baseline_images 中指定的图像进行比较,这些图像必须对应,否则将引发 ImageComparisonFailure 异常。

参数:
baseline_images列表或无

一个字符串列表,指定由调用 Figure.savefig 生成的图像的名称。

如果为 None,测试函数必须使用 baseline_images 夹具,可以作为参数或使用 pytest.mark.usefixtures。此值仅在使用 pytest 时允许。

扩展None 或 str 列表

要测试的扩展列表,例如 ['png', 'pdf']

如果为 None ,则默认为所有支持的扩展名:png、pdf 和 svg。

在测试单个扩展时,可以将其直接包含在传递给 baseline_images 的名称中。在这种情况下,extensions 必须不设置。

为了防止测试套件的规模过度膨胀,我们仅在测试明确执行依赖于该后端的功能时才包含 svgpdf 输出(另见 check_figures_equal 装饰器以达到此目的)。

容忍度float, 默认: 0

测试被视为失败的RMS阈值。

由于浮点计算中预期的小差异,在32位系统上,此阈值额外增加了0.06。

freetype_version字符串或元组

此测试通过所需的 freetype 版本或版本范围。

remove_text布尔

在比较之前,从图中移除标题和刻度文本。这对于使基线图像独立于不同版本的FreeType之间文本渲染的变化非常有用。

这不会移除其他更故意的文本,例如图例和注释。

savefig_kwargdict

传递给 savefig 方法的可选参数。

风格str, dict, 或 list

可选的样式应用于图像测试。测试本身也可以根据需要应用额外的样式。默认为 ["classic", "_classic_test_patch"]

matplotlib.testing.decorators.remove_ticks_and_titles(figure)[源代码][源代码]#

matplotlib.testing.exceptions#

exception matplotlib.testing.exceptions.ImageComparisonFailure[源代码][源代码]#

基类:AssertionError

引发此异常以将测试标记为两个图像之间的比较。