matplotlib / matplotlib/pytest-mpl
Generalize pytest-mpl to support non-Matplotlib visual output
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 272
- Fork
- 53
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
I am currently trying to use the Solara testing framework to try and do unit/regression testing of the rendering of Jupyter widgets, and I was wishing that I could just re-use all the pytest-mpl infrastructure to do figure hashes, galleries, etc. In a discussion with @Cadair we realised that it is possible, although a little ugly right now:
import ipywidgets as widgets
import matplotlib.pyplot as plt
import playwright.sync_api
import pytest
from IPython.display import display
from PIL import Image
@pytest.mark.mpl_image_compare(savefig_kwargs={"dpi": 100})
def test_scatter_solara(
tmp_path,
solara_test,
page_session: playwright.sync_api.Page,
assert_solara_snapshot,
):
from glue_jupyter import jglue
from IPython.display import display
app = jglue()
app.add_data(a={"x": [1, 2, 3], "y": [2, 3, 4]})
scatter = app.scatter2d(show=False)
display(scatter._layout)
button_sel = page_session.locator("text=No selection")
button_sel.wait_for()
screenshot = page_session.screenshot()
with open(tmp_path / "screenshot.png", "wb") as f:
f.write(screenshot)
image = Image.open(tmp_path / "screenshot.png")
size_x, size_y = image.size
fig = plt.figure(figsize=(size_x / 100, size_y / 100))
ax = fig.add_axes([0, 0, 1, 1])
ax.imshow(image)
plt.axis("off")
return fig
Basically one can in principle take any image output and show it in a Matplotlib figure. However this is a bit hacky, and what would be a lot nicer would be if we could generalize this plugin to allow for alternatives to what actually generates the images, with Matplotlib being just one (and given the plugin name the default) option.
To keep this simple, we could also simply allow the returned value from tests to be a PIL Image instance as this would already allow any arbitrary image generation in the tests.
Does anyone have any thoughts on this? Any reason to not at least allow PIL returns?
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia dall’entry point esistente pytest.mark.mpl_image_compare e dal test di esempio nell’issue, quindi segui il modo in cui le figure Matplotlib restituite vengono convertite per gli hash e le gallerie. Definisci il percorso di ritorno supportato senza Matplotlib, includendo PIL.Image, e verifica che il confronto delle immagini, gli hash e le gallerie continuino a funzionare senza il wrapper Matplotlib.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- jupyter, playwright, python
- Ambito
- testing-qa
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100