##// END OF EJS Templates
Merge pull request #13741 from Carreau/ruff...
Merge pull request #13741 from Carreau/ruff try ruff to find unused imports

File last commit:

r27764:aefe51c6
r27785:ae0dfcd9 merge
Show More
test_pylabtools.py
271 lines | 7.7 KiB | text/x-python | PythonLexer
/ IPython / core / tests / test_pylabtools.py
Fernando Perez
Add test file I forgot to commit.
r3734 """Tests for pylab tools module.
"""
Min RK
fix instantiation of shell in test_inline_twice...
r21765
# Copyright (c) IPython Development Team.
Fernando Perez
Add test file I forgot to commit.
r3734 # Distributed under the terms of the Modified BSD License.
Min RK
print_figure return base64 str instead of bytes...
r26812 from binascii import a2b_base64
from io import BytesIO
MinRK
check that PIL can save JPEG to BytesIO...
r15684
Nikita Kniazev
Skip test_pylabtools when no matplotlib installed...
r26998 import pytest
matplotlib = pytest.importorskip("matplotlib")
MinRK
test select_figure_formats
r15390 matplotlib.use('Agg')
from matplotlib.figure import Figure
Fernando Perez
Add test file I forgot to commit.
r3734
from matplotlib import pyplot as plt
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 from matplotlib_inline import backend_inline
Fernando Perez
Fix critical bug with pylab support inadvertently introduced in #648....
r5468 import numpy as np
Fernando Perez
Add test file I forgot to commit.
r3734
MinRK
test select_figure_formats
r15390 from IPython.core.getipython import get_ipython
MinRK
update pylabtools tests
r11329 from IPython.core.interactiveshell import InteractiveShell
MinRK
test select_figure_formats
r15390 from IPython.core.display import _PNG, _JPEG
Fernando Perez
Add test file I forgot to commit.
r3734 from .. import pylabtools as pt
Daniel B. Vasquez
use testing decorators to enable tests on module availability
r14777 from IPython.testing import decorators as dec
Fernando Perez
Add test file I forgot to commit.
r3734
def test_figure_to_svg():
# simple empty-figure test
fig = plt.figure()
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert pt.print_figure(fig, "svg") is None
Fernando Perez
Add test file I forgot to commit.
r3734
plt.close('all')
# simple check for at least svg-looking output
Fernando Perez
Don't use new subplots() call in matplotlib so tests pass with mpl 0.99
r3745 fig = plt.figure()
ax = fig.add_subplot(1,1,1)
Fernando Perez
Add test file I forgot to commit.
r3734 ax.plot([1,2,3])
plt.draw()
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 svg = pt.print_figure(fig, "svg")[:100].lower()
assert "doctype svg" in svg
Fernando Perez
Fix critical bug with pylab support inadvertently introduced in #648....
r5468
MinRK
check that PIL can save JPEG to BytesIO...
r15684 def _check_pil_jpeg_bytes():
"""Skip if PIL can't write JPEGs to BytesIO objects"""
MinRK
add note about PIL's jpeg support
r15686 # PIL's JPEG plugin can't write to BytesIO objects
# Pillow fixes this
MinRK
check that PIL can save JPEG to BytesIO...
r15684 from PIL import Image
buf = BytesIO()
img = Image.new("RGB", (4,4))
try:
img.save(buf, 'jpeg')
except Exception as e:
ename = e.__class__.__name__
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 raise pytest.skip("PIL can't write JPEG to BytesIO: %s: %s" % (ename, e)) from e
MinRK
check that PIL can save JPEG to BytesIO...
r15684
Daniel B. Vasquez
use testing decorators to enable tests on module availability
r14777 @dec.skip_without("PIL.Image")
MinRK
check that PIL can save JPEG to BytesIO...
r15684 def test_figure_to_jpeg():
_check_pil_jpeg_bytes()
# simple check for at least jpeg-looking output
Daniel B. Vasquez
use testing decorators to enable tests on module availability
r14777 fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
plt.draw()
Matthias Bussonnier
remove deprecated usage of matplotlib quality parameter
r25633 jpeg = pt.print_figure(fig, 'jpeg', pil_kwargs={'optimize': 50})[:100].lower()
MinRK
check that PIL can save JPEG to BytesIO...
r15684 assert jpeg.startswith(_JPEG)
Daniel B. Vasquez
add unittest for jpg, only activated if PIL/Pillow is installed
r14775
MinRK
test select_figure_formats
r15390 def test_retina_figure():
Christopher Roach
Added a fix for issue #8871
r21813 # simple empty-figure test
fig = plt.figure()
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert pt.retina_figure(fig) == None
Christopher Roach
Added a fix for issue #8871
r21813 plt.close('all')
MinRK
test select_figure_formats
r15390 fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
plt.draw()
png, md = pt.retina_figure(fig)
assert png.startswith(_PNG)
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert "width" in md
assert "height" in md
MinRK
test select_figure_formats
r15390
_fmt_mime_map = {
'png': 'image/png',
'jpeg': 'image/jpeg',
'pdf': 'application/pdf',
'retina': 'image/png',
'svg': 'image/svg+xml',
}
def test_select_figure_formats_str():
ip = get_ipython()
for fmt, active_mime in _fmt_mime_map.items():
pt.select_figure_formats(ip, fmt)
for mime, f in ip.display_formatter.formatters.items():
if mime == active_mime:
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert Figure in f
MinRK
test select_figure_formats
r15390 else:
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert Figure not in f
MinRK
test select_figure_formats
r15390
def test_select_figure_formats_kwargs():
ip = get_ipython()
Nikita Kniazev
Suppress bunch of self-deprecation warnings...
r27009 kwargs = dict(bbox_inches="tight")
pt.select_figure_formats(ip, "png", **kwargs)
formatter = ip.display_formatter.formatters["image/png"]
MinRK
test select_figure_formats
r15390 f = formatter.lookup_by_type(Figure)
Min RK
print_figure return base64 str instead of bytes...
r26812 cell = f.keywords
expected = kwargs
expected["base64"] = True
expected["fmt"] = "png"
assert cell == expected
Thomas A Caswell
FIX: Remove the non-interactive backends from pylabtools.backend2gui...
r24290
MinRK
test select_figure_formats
r15390 # check that the formatter doesn't raise
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
plt.draw()
formatter.enabled = True
png = formatter(fig)
Min RK
print_figure return base64 str instead of bytes...
r26812 assert isinstance(png, str)
png_bytes = a2b_base64(png)
assert png_bytes.startswith(_PNG)
Fernando Perez
Fix critical bug with pylab support inadvertently introduced in #648....
r5468
MinRK
test select_figure_formats
r15390 def test_select_figure_formats_set():
Fernando Perez
Fix critical bug with pylab support inadvertently introduced in #648....
r5468 ip = get_ipython()
MinRK
test select_figure_formats
r15390 for fmts in [
{'png', 'svg'},
['png'],
('jpeg', 'pdf', 'retina'),
{'svg'},
]:
active_mimes = {_fmt_mime_map[fmt] for fmt in fmts}
pt.select_figure_formats(ip, fmts)
for mime, f in ip.display_formatter.formatters.items():
if mime in active_mimes:
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert Figure in f
MinRK
test select_figure_formats
r15390 else:
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert Figure not in f
MinRK
test select_figure_formats
r15390
def test_select_figure_formats_bad():
ip = get_ipython()
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 with pytest.raises(ValueError):
MinRK
test select_figure_formats
r15390 pt.select_figure_formats(ip, 'foo')
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 with pytest.raises(ValueError):
MinRK
test select_figure_formats
r15390 pt.select_figure_formats(ip, {'png', 'foo'})
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 with pytest.raises(ValueError):
MinRK
test select_figure_formats
r15390 pt.select_figure_formats(ip, ['retina', 'pdf', 'bar', 'bad'])
def test_import_pylab():
Fernando Perez
Refactor gui/pylab integration to eliminate code duplication....
r5469 ns = {}
pt.import_pylab(ns, import_all=False)
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert "plt" in ns
assert ns["np"] == np
Ryan May
Add tests of switching logic.
r7966
class TestPylabSwitch(object):
MinRK
update pylabtools tests
r11329 class Shell(InteractiveShell):
Matthias Bussonnier
Finish fixing the at-exit spurious failures....
r26428 def init_history(self):
"""Sets up the command history, and starts regular autosaves."""
self.config.HistoryManager.hist_file = ":memory:"
super().init_history()
MinRK
update pylabtools tests
r11329 def enable_gui(self, gui):
pass
Thomas A Caswell
FIX: Remove the non-interactive backends from pylabtools.backend2gui...
r24290
Ryan May
Add tests of switching logic.
r7966 def setup(self):
Ryan May
Improve test mocking to actually capture failure mode.
r8003 import matplotlib
def act_mpl(backend):
matplotlib.rcParams['backend'] = backend
# Save rcParams since they get modified
self._saved_rcParams = matplotlib.rcParams
Thomas Kluyver
test_pylabtools also needs to modify matplotlib.rcParamsOrig...
r12924 self._saved_rcParamsOrig = matplotlib.rcParamsOrig
Ryan May
Improve test mocking to actually capture failure mode.
r8003 matplotlib.rcParams = dict(backend='Qt4Agg')
Thomas Kluyver
test_pylabtools also needs to modify matplotlib.rcParamsOrig...
r12924 matplotlib.rcParamsOrig = dict(backend='Qt4Agg')
Ryan May
Improve test mocking to actually capture failure mode.
r8003
# Mock out functions
Ryan May
Add tests of switching logic.
r7966 self._save_am = pt.activate_matplotlib
Ryan May
Improve test mocking to actually capture failure mode.
r8003 pt.activate_matplotlib = act_mpl
Ryan May
Add tests of switching logic.
r7966 self._save_ip = pt.import_pylab
pt.import_pylab = lambda *a,**kw:None
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 self._save_cis = backend_inline.configure_inline_support
backend_inline.configure_inline_support = lambda *a, **kw: None
Ryan May
Add tests of switching logic.
r7966
def teardown(self):
pt.activate_matplotlib = self._save_am
pt.import_pylab = self._save_ip
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 backend_inline.configure_inline_support = self._save_cis
Ryan May
Improve test mocking to actually capture failure mode.
r8003 import matplotlib
matplotlib.rcParams = self._saved_rcParams
Thomas Kluyver
test_pylabtools also needs to modify matplotlib.rcParamsOrig...
r12924 matplotlib.rcParamsOrig = self._saved_rcParamsOrig
Ryan May
Add tests of switching logic.
r7966
def test_qt(self):
Matthias Bussonnier
Finish fixing the at-exit spurious failures....
r26428
Ryan May
Add tests of switching logic.
r7966 s = self.Shell()
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib(None)
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert gui == "qt"
assert s.pylab_gui_select == "qt"
Ryan May
Add tests of switching logic.
r7966
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 gui, backend = s.enable_matplotlib("inline")
assert gui == "inline"
assert s.pylab_gui_select == "qt"
Ryan May
Add tests of switching logic.
r7966
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 gui, backend = s.enable_matplotlib("qt")
assert gui == "qt"
assert s.pylab_gui_select == "qt"
Ryan May
Add tests of switching logic.
r7966
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 gui, backend = s.enable_matplotlib("inline")
assert gui == "inline"
assert s.pylab_gui_select == "qt"
Ryan May
Add tests of switching logic.
r7966
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib()
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert gui == "qt"
assert s.pylab_gui_select == "qt"
Ryan May
Add tests of switching logic.
r7966
def test_inline(self):
s = self.Shell()
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 gui, backend = s.enable_matplotlib("inline")
assert gui == "inline"
assert s.pylab_gui_select == None
Ryan May
Add tests of switching logic.
r7966
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 gui, backend = s.enable_matplotlib("inline")
assert gui == "inline"
assert s.pylab_gui_select == None
Ryan May
Add tests of switching logic.
r7966
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 gui, backend = s.enable_matplotlib("qt")
assert gui == "qt"
assert s.pylab_gui_select == "qt"
Ryan May
Add tests of switching logic.
r7966
Jan Schulz
Prevent reset of matplotlib formatters when enabled again...
r21756 def test_inline_twice(self):
"Using '%matplotlib inline' twice should not reset formatters"
Min RK
fix instantiation of shell in test_inline_twice...
r21765 ip = self.Shell()
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 gui, backend = ip.enable_matplotlib("inline")
assert gui == "inline"
Jan Schulz
Prevent reset of matplotlib formatters when enabled again...
r21756
fmts = {'png'}
active_mimes = {_fmt_mime_map[fmt] for fmt in fmts}
pt.select_figure_formats(ip, fmts)
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 gui, backend = ip.enable_matplotlib("inline")
assert gui == "inline"
Jan Schulz
Prevent reset of matplotlib formatters when enabled again...
r21756
for mime, f in ip.display_formatter.formatters.items():
if mime in active_mimes:
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert Figure in f
Jan Schulz
Prevent reset of matplotlib formatters when enabled again...
r21756 else:
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 assert Figure not in f
Jan Schulz
Prevent reset of matplotlib formatters when enabled again...
r21756
Ryan May
Add tests of switching logic.
r7966 def test_qt_gtk(self):
s = self.Shell()
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 gui, backend = s.enable_matplotlib("qt")
assert gui == "qt"
assert s.pylab_gui_select == "qt"
Ryan May
Add tests of switching logic.
r7966
Samuel Gaist
[core][tests][pylabtools] Remove nose
r26907 gui, backend = s.enable_matplotlib("gtk")
assert gui == "qt"
assert s.pylab_gui_select == "qt"
Ryan May
Add tests of switching logic.
r7966
Thomas A Caswell
FIX: Remove the non-interactive backends from pylabtools.backend2gui...
r24290
def test_no_gui_backends():
for k in ['agg', 'svg', 'pdf', 'ps']:
assert k not in pt.backend2gui
Thomas A Caswell
MNT: ensure we can show un-pickled figures...
r25419
def test_figure_no_canvas():
fig = Figure()
fig.canvas = None
pt.print_figure(fig)