test_backend_inline.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import os
  2. from pathlib import Path
  3. from tempfile import TemporaryDirectory
  4. import pytest
  5. from matplotlib.testing import subprocess_run_for_testing
  6. nbformat = pytest.importorskip('nbformat')
  7. pytest.importorskip('nbconvert')
  8. pytest.importorskip('ipykernel')
  9. pytest.importorskip('matplotlib_inline')
  10. def test_ipynb():
  11. nb_path = Path(__file__).parent / 'test_inline_01.ipynb'
  12. with TemporaryDirectory() as tmpdir:
  13. out_path = Path(tmpdir, "out.ipynb")
  14. subprocess_run_for_testing(
  15. ["jupyter", "nbconvert", "--to", "notebook",
  16. "--execute", "--ExecutePreprocessor.timeout=500",
  17. "--output", str(out_path), str(nb_path)],
  18. env={**os.environ, "IPYTHONDIR": tmpdir},
  19. check=True)
  20. with out_path.open() as out:
  21. nb = nbformat.read(out, nbformat.current_nbformat)
  22. errors = [output for cell in nb.cells for output in cell.get("outputs", [])
  23. if output.output_type == "error"]
  24. assert not errors
  25. import IPython
  26. if IPython.version_info[:2] >= (8, 24):
  27. expected_backend = "inline"
  28. else:
  29. # This code can be removed when Python 3.12, the latest version supported by
  30. # IPython < 8.24, reaches end-of-life in late 2028.
  31. expected_backend = "module://matplotlib_inline.backend_inline"
  32. backend_outputs = nb.cells[2]["outputs"]
  33. assert backend_outputs[0]["data"]["text/plain"] == f"'{expected_backend}'"
  34. image = nb.cells[1]["outputs"][1]["data"]
  35. assert image["text/plain"] == "<Figure size 300x200 with 1 Axes>"
  36. assert "image/png" in image