matplotlib.testing#
matplotlib.testing#
Hilfsfunktionen für Tests.
- matplotlib.testing.ipython_in_subprocess(requested_backend_or_gui_framework, all_expected_backends)[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_newlinesin 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
- 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_imagesauf 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 Funktioncalculate_rmsberechnet.- 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_comparisonverwendet 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.plotmit 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.savefiggeneriert 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
svgoderpdfnur dann einbezogen, wenn der Test explizit eine Funktion testet, die von diesem Backend abhängt (siehe auch den Decoratorcheck_figures_equalzu 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.exceptions#
- exception matplotlib.testing.exceptions.ImageComparisonFailure[Quelle]#
Bases:
AssertionErrorLö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
pdals 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
xrals 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)