Source code for manim.utils.testing._show_diff

from __future__ import annotations

import logging
import warnings

import numpy as np

from manim.typing import PixelArray


[docs] def show_diff_helper( frame_number: int, frame_data: PixelArray, expected_frame_data: PixelArray, control_data_filename: str, ) -> None: """Will visually display with matplotlib differences between frame generated and the one expected.""" import matplotlib.gridspec as gridspec import matplotlib.pyplot as plt gs = gridspec.GridSpec(2, 2) fig = plt.figure() fig.suptitle(f"Test difference summary at frame {frame_number}", fontsize=16) ax = fig.add_subplot(gs[0, 0]) ax.imshow(frame_data) ax.set_title("Generated") ax = fig.add_subplot(gs[0, 1]) ax.imshow(expected_frame_data) ax.set_title("Expected") ax = fig.add_subplot(gs[1, :]) diff_im = expected_frame_data.copy() diff_im = np.where( frame_data != np.array([0, 0, 0, 255]), np.array([0, 255, 0, 255], dtype="uint8"), np.array([0, 0, 0, 255], dtype="uint8"), ) # Set any non-black pixels to green np.putmask( diff_im, expected_frame_data != frame_data, np.array([255, 0, 0, 255], dtype="uint8"), ) # Set any different pixels to red ax.imshow(diff_im, interpolation="nearest") ax.set_title("Difference summary: (green = same, red = different)") with warnings.catch_warnings(): warnings.simplefilter("error") try: plt.show() except UserWarning: filename = f"{control_data_filename[:-4]}-diff.pdf" plt.savefig(filename) logging.warning( "Interactive matplotlib interface not available," f" diff saved to {filename}." )