diff --git a/IPython/core/magics/pylab.py b/IPython/core/magics/pylab.py index 265f860..423498d 100644 --- a/IPython/core/magics/pylab.py +++ b/IPython/core/magics/pylab.py @@ -100,7 +100,7 @@ class PylabMagics(Magics): % _list_matplotlib_backends_and_gui_loops() ) else: - gui, backend = self.shell.enable_matplotlib(args.gui.lower() if isinstance(args.gui, str) else args.gui) + gui, backend = self.shell.enable_matplotlib(args.gui) self._show_matplotlib_backend(args.gui, backend) @skip_doctest diff --git a/IPython/core/tests/test_pylabtools.py b/IPython/core/tests/test_pylabtools.py index 6bddb34..e9d98ff 100644 --- a/IPython/core/tests/test_pylabtools.py +++ b/IPython/core/tests/test_pylabtools.py @@ -350,3 +350,27 @@ def test_backend_entry_point(): def test_backend_unknown(): with pytest.raises(RuntimeError if pt._matplotlib_manages_backends() else KeyError): pt.find_gui_and_backend("name-does-not-exist") + + +@dec.skipif(not pt._matplotlib_manages_backends()) +def test_backend_module_name_case_sensitive(): + # Matplotlib backend names are case insensitive unless explicitly specified using + # "module://some_module.some_name" syntax which are case sensitive for mpl >= 3.9.1 + all_lowercase = "module://matplotlib_inline.backend_inline" + some_uppercase = "module://matplotlib_inline.Backend_inline" + ip = get_ipython() + mpl3_9_1 = matplotlib.__version_info__ >= (3, 9, 1) + + ip.enable_matplotlib(all_lowercase) + if mpl3_9_1: + with pytest.raises(RuntimeError): + ip.enable_matplotlib(some_uppercase) + else: + ip.enable_matplotlib(some_uppercase) + + ip.run_line_magic("matplotlib", all_lowercase) + if mpl3_9_1: + with pytest.raises(RuntimeError): + ip.run_line_magic("matplotlib", some_uppercase) + else: + ip.run_line_magic("matplotlib", some_uppercase)