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, предназначенная для тестирования. Ошибки fork() в Cygwin будут помечены как ожидаемые сбои: это не успех, но и не признак проблемы в коде.- Параметры:
-
- argslist of str
- envdict[str, str]
- timeoutfloat
- stdout, stderr
- checkbool
- textbool
-
Также называется
universal_newlinesв subprocess. Я выбрал это название, поскольку основной эффект — возврат байтов (False) вместо строк (True), хотя эта настройка также пытается нормализовать символы перевода строки на разных платформах. - capture_outputbool
-
Установить stdout и stderr в subprocess.PIPE
- Возвращает:
-
- procsubprocess.Popen
- Вызывает исключение:
-
- pytest.xfail
-
Если платформа — Cygwin и subprocess сообщает об ошибке fork().
См. также
- matplotlib.testing.subprocess_run_helper(func, *args, timeout, extra_env=None)[исходный код]
-
Запустить функцию в подпроцессе.
- Параметры:
-
- funcfunction
-
Функция для запуска. Она должна находиться в импортируемом модуле.
- *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)[исходный код]
-
Сравнить два файла «изображений», проверяя, что различия не превышают заданный допуск.
Указанные имена файлов могут ссылаться на файлы, которые можно преобразовать в PNG с помощью словаря
converter. RMS вычисляется функциейcalculate_rms.- Параметры:
-
- expectedstr
-
Имя файла ожидаемого изображения.
- actualstr
-
Имя файла фактического изображения.
- tolfloat
-
Допуск (разница значений цвета, где 255 — максимальная разница). Тест завершается неудачей, если средняя разница между пикселями превышает это значение.
- in_decoratorbool
-
Определяет формат вывода. Если функция вызвана из декоратора image_comparison, это значение должно быть True. (по умолчанию=False)
- Возвращает:
-
- None or dict or str
-
Возвращает None, если изображения совпадают в пределах заданного допуска.
Если изображения различаются, возвращаемое значение зависит от in_decorator. Если in_decorator имеет значение true, возвращается dict со следующими элементами:
- rms: 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_test и fig_ref — и строить на них тестовое и эталонное изображения. После возврата функции рисунки сохраняются и сравниваются.
По возможности следует предпочитать этот декоратор декоратору
image_comparison, чтобы избежать чрезмерного увеличения размера набора тестов.- Параметры:
-
- extensionslist, default: ["png", "pdf", "svg"]
-
Проверяемые расширения.
- tolfloat
-
Порог 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_imageslist or None
-
Список строк, задающих имена изображений, созданных вызовами
Figure.savefig.Если значение равно None, тестовая функция должна использовать фикстуру
baseline_images— в качестве параметра или с помощьюpytest.mark.usefixtures. Это значение разрешено только при использовании pytest. - extensionsNone or list of str
-
Список проверяемых расширений, например
['png', 'pdf'].Если значение равно None, по умолчанию используются все поддерживаемые расширения: png, pdf и svg.
При проверке одного расширения его можно непосредственно включить в имена, передаваемые в baseline_images. В этом случае параметр extensions задавать не следует.
Чтобы избежать чрезмерного увеличения размера набора тестов, мы включаем результаты
svgилиpdfтолько в том случае, если тест явно проверяет функцию, зависящую от этого бэкенда (см. также декораторcheck_figures_equal, предназначенный для этой цели). - tolfloat, default: 0
-
Порог RMS, выше которого тест считается проваленным.
Из-за ожидаемых небольших различий в вычислениях с плавающей точкой в 32-разрядных системах к этому порогу добавляется 0.06.
- freetype_versionstr or tuple
-
Ожидаемая версия или диапазон версий freetype, при которых тест должен пройти.
- remove_textbool
-
Удалить заголовок и текст делений с рисунка перед сравнением. Это полезно, чтобы эталонные изображения не зависели от различий в отображении текста между версиями FreeType.
Другой текст, добавленный намеренно, например легенды и аннотации, не удаляется.
- savefig_kwargdict
-
Необязательные аргументы, передаваемые методу savefig.
- stylestr, dict, or list
-
Необязательный стиль или стили, применяемые к тесту изображений. При необходимости тест может также применять дополнительные стили. По умолчанию используется
["classic", "_classic_test_patch"].
- matplotlib.testing.decorators.remove_ticks_and_titles(figure)[исходный код]
matplotlib.testing.exceptions
- exceptionmatplotlib.testing.exceptions.ImageComparisonFailure[исходный код]
-
Базовые классы:
AssertionErrorВызовите это исключение, чтобы отметить тест как сравнение двух изображений.
Тестирование с необязательными зависимостями
Подробнее о фикстурах см. в разделе фикстуры pytest.
- matplotlib.testing.conftest.pd()
-
Фикстура для импорта и настройки pandas. При использовании этой фикстуры тест пропускается, если pandas не установлен. Используйте эту фикстуру вместо импорта pandas в файлах тестов.
Примеры
Запросите фикстуру pandas, передав
pdв качестве аргумента тестаdef test_matshow_pandas(pd): df = pd.DataFrame({'x':[1,2,3], 'y':[4,5,6]}) im = plt.figure().subplots().matshow(df) np.testing.assert_array_equal(im.get_array(), df)
- matplotlib.testing.conftest.xr()
-
Фикстура для импорта xarray, благодаря которой тест пропускается, если xarray не установлен. Используйте эту фикстуру вместо импорта xrray в файлах тестов.
Примеры
Запросите фикстуру xarray, передав
xrв качестве аргумента тестаdef test_imshow_xarray(xr): ds = xr.DataArray(np.random.randn(2, 3)) im = plt.figure().subplots().imshow(ds) np.testing.assert_array_equal(im.get_array(), ds)
© 2012–2026 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/stable/api/testing_api.html