matplotlib.testing#

matplotlib.testing#

Hilfsfunktionen für Tests.

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

Erstellt und führt einen Subprozess aus.

Dünne Hülle um subprocess.run, für Testzwecke bestimmt. Markiert fork()-Fehler unter Cygwin als erwartete Fehler: kein Erfolg, aber auch kein Hinweis auf ein Problem mit dem Code.

Parameter:
argsListe von str
envdict[str, str]
timeoutfloat
stdout, stderr
checkbool
textbool

Auch universal_newlines in subprocess genannt. Ich habe diesen Namen gewählt, da der Haupteffekt das Zurückgeben von Bytes (False) vs. str (True) ist, obwohl er auch versucht, Zeilenumbrüche plattformübergreifend zu normalisieren.

capture_outputbool

Setzt stdout und stderr auf subprocess.PIPE

Gibt zurück:
procsubprocess.Popen
Löst aus:
pytest.xfail

Wenn die Plattform Cygwin ist und subprocess einen fork()-Fehler meldet.

Siehe auch

subprocess.run
matplotlib.testing.subprocess_run_helper(func, *args, timeout, extra_env=None)[Quelle]#

Führt eine Funktion in einem Subprozess aus.

Parameter:
funcFunktion

Die auszuführende Funktion. Sie muss sich in einem Modul befinden, das importierbar ist.

*argsstr

Alle zusätzlichen Kommandozeilenargumente, die im ersten Argument an subprocess.run übergeben werden.

extra_envdict[str, str]

Alle zusätzlichen Umgebungsvariablen, die für den Subprozess festgelegt werden sollen.

matplotlib.testing.compare#

Dienstprogramme zum Vergleichen von Bildergebnissen.

matplotlib.testing.compare.calculate_rms(expected_image, actual_image)[Quelle]#

Berechnet die Pixel-für-Pixel-Fehler und ermittelt dann den quadratischen Mittelwertfehler.

matplotlib.testing.compare.comparable_formats()[Quelle]#

Gibt die Liste der Dateiformate zurück, die compare_images auf diesem System vergleichen kann.

Gibt zurück:
Liste von str

Z.B. ['png', 'pdf', 'svg', 'eps'].

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

Vergleicht zwei "Bild"-Dateien und prüft Unterschiede innerhalb einer Toleranz.

Die beiden angegebenen Dateinamen können auf Dateien verweisen, die über das converter-Dictionary in PNG konvertierbar sind. Der zugrunde liegende RMS-Wert wird mit der Funktion calculate_rms berechnet.

Parameter:
expectedstr

Der Dateiname des erwarteten Bildes.

actualstr

Der Dateiname des tatsächlichen Bildes.

tolfloat

Die Toleranz (ein Farbwertunterschied, wobei 255 der maximale Unterschied ist). Der Test schlägt fehl, wenn der durchschnittliche Pixelunterschied diesen Wert überschreitet.

in_decoratorbool

Bestimmt das Ausgabeformat. Wenn aus dem image_comparison-Decorator aufgerufen, sollte dies True sein. (Standard=False)

Gibt zurück:
None oder dict oder str

Gibt *None* zurück, wenn die Bilder innerhalb der angegebenen Toleranz gleich sind.

Wenn sich die Bilder unterscheiden, hängt der Rückgabewert von in_decorator ab. Wenn in_decorator True ist, wird ein Dictionary mit den folgenden Einträgen zurückgegeben:

  • rms: Der RMS des Bildunterschieds.

  • expected: Der Dateiname des erwarteten Bildes.

  • actual: Der Dateiname des tatsächlichen Bildes.

  • diff_image: Der Dateiname des Differenzbildes.

  • tol: Die Vergleichstoleranz.

Andernfalls wird eine menschenlesbare mehrzeilige Zeichenfolgendarstellung dieser Informationen zurückgegeben.

Beispiele

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)[Quelle]#

Decorator für Testfälle, die zwei Abbildungen erstellen und vergleichen.

Die dekorierte Funktion muss zwei Schlüsselwortargumente, fig_test und fig_ref, entgegennehmen und die Test- und Referenzbilder darauf zeichnen. Nach Rückgabe der Funktion werden die Abbildungen gespeichert und verglichen.

Dieser Decorator sollte bevorzugt gegenüber image_comparison verwendet werden, um die Größe der Testsuite nicht aufblähen zu lassen.

Parameter:
extensionsListe, Standard: ["png", "pdf", "svg"]

Die zu testenden Erweiterungen.

tolfloat

Die RMS-Schwelle, oberhalb derer der Test als fehlgeschlagen gilt.

Löst aus:
RuntimeError

Wenn neue Abbildungen innerhalb der Testfunktion erstellt werden (und nicht anschließend geschlossen werden).

Beispiele

Überprüft, ob das Aufrufen von Axes.plot mit einem einzigen Argument dieses gegen [0, 1, 2, ...] plottet.

@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'))[Quelle]#

Vergleicht Bilder, die vom Test generiert wurden, mit denen, die in baseline_images angegeben sind. Andernfalls wird eine ImageComparisonFailure-Ausnahme ausgelöst.

Parameter:
baseline_imagesListe oder None

Eine Liste von Zeichenfolgen, die die Namen der Bilder angeben, die durch Aufrufe von Figure.savefig generiert wurden.

Wenn None, muss die Testfunktion die baseline_images-Fixture verwenden, entweder als Parameter oder mit pytest.mark.usefixtures. Dieser Wert ist nur bei Verwendung von pytest zulässig.

extensionsNone oder Liste von str

Die Liste der zu testenden Erweiterungen, z.B. ['png', 'pdf'].

Wenn None, werden standardmäßig alle unterstützten Erweiterungen verwendet: png, pdf und svg.

Beim Testen einer einzelnen Erweiterung kann diese direkt in die an baseline_images übergebenen Namen aufgenommen werden. In diesem Fall darf extensions nicht gesetzt sein.

Um die Größe der Testsuite nicht aufblähen zu lassen, werden die Ausgaben svg oder pdf nur dann einbezogen, wenn der Test explizit eine Funktion testet, die von diesem Backend abhängt (siehe auch den Decorator check_figures_equal zu diesem Zweck).

tolfloat, Standard: 0

Die RMS-Schwelle, oberhalb derer der Test als fehlgeschlagen gilt.

Aufgrund erwarteter kleiner Unterschiede bei Fließkomma-Berechnungen wird auf 32-Bit-Systemen ein zusätzlicher Wert von 0,06 zu diesem Schwellenwert hinzugefügt.

freetype_versionstr oder tuple

Die erwartete FreeType-Version oder der erwartete Versionsbereich, damit dieser Test erfolgreich ist.

remove_textbool

Entfernt den Titel und die Achsenbeschriftungen aus der Abbildung vor dem Vergleich. Dies ist nützlich, um die Basis-Bilder unabhängig von Variationen in der Textdarstellung zwischen verschiedenen FreeType-Versionen zu machen.

Dies entfernt keine anderen, absichtlicheren Texte wie Legenden und Anmerkungen.

savefig_kwargdict

Optionale Argumente, die an die savefig-Methode übergeben werden.

stylestr, dict oder Liste

Der/die optionale(n) Stil(e), der/die auf den Bildtest angewendet werden soll(en). Der Test selbst kann bei Bedarf auch zusätzliche Stile anwenden. Standard ist ["classic", "_classic_test_patch"].

matplotlib.testing.decorators.remove_ticks_and_titles(figure)[Quelle]#

matplotlib.testing.exceptions#

exception matplotlib.testing.exceptions.ImageComparisonFailure[Quelle]#

Bases: AssertionError

Lösen Sie diese Ausnahme aus, um einen Test als Bildvergleich zu markieren.

Testen mit optionalen Abhängigkeiten#

Weitere Informationen zu Fixtures finden Sie unter pytest Fixtures.

matplotlib.testing.conftest.pd()#

Fixture zum Importieren und Konfigurieren von pandas. Bei Verwendung dieser Fixture wird der Test übersprungen, wenn pandas nicht installiert ist. Verwenden Sie diese Fixture anstelle des Imports von pandas in Testdateien.

Beispiele

Fordern Sie die pandas-Fixture an, indem Sie pd als Argument an den Test übergeben.

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()#

Fixture zum Importieren von xarray, sodass der Test übersprungen wird, wenn xarray nicht installiert ist. Verwenden Sie diese Fixture anstelle des Imports von xrray in Testdateien.

Beispiele

Fordern Sie die xarray-Fixture an, indem Sie xr als Argument an den Test übergeben.

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)