From 42007f33b1a403e708ebc9b973f50d8b3609b734 2024-04-26 13:38:43
From: Ian Thomas <ianthomas23@gmail.com>
Date: 2024-04-26 13:38:43
Subject: [PATCH] Convert "osx" gui framework to/from "macosx" in Matplotlib

---

diff --git a/IPython/core/pylabtools.py b/IPython/core/pylabtools.py
index 1f5a11f..4287834 100644
--- a/IPython/core/pylabtools.py
+++ b/IPython/core/pylabtools.py
@@ -345,8 +345,10 @@ def find_gui_and_backend(gui=None, gui_select=None):
             backend = matplotlib.rcParamsOrig["backend"]
             backend, gui = backend_registry.resolve_backend(backend)
         else:
+            gui = _convert_gui_to_matplotlib(gui)
             backend, gui = backend_registry.resolve_gui_or_backend(gui)
 
+        gui = _convert_gui_from_matplotlib(gui)
         return gui, backend
 
     # Fallback to previous behaviour (Matplotlib < 3.9)
@@ -509,10 +511,28 @@ def _list_matplotlib_backends_and_gui_loops() -> list[str]:
     if _matplotlib_manages_backends():
         from matplotlib.backends.registry import backend_registry
 
-        ret = backend_registry.list_all() + backend_registry.list_gui_frameworks()
+        ret = backend_registry.list_all() + [
+            _convert_gui_from_matplotlib(gui)
+            for gui in backend_registry.list_gui_frameworks()
+        ]
     else:
         from IPython.core import pylabtools
 
         ret = list(pylabtools.backends.keys())
 
     return sorted(["auto"] + ret)
+
+
+# Matplotlib and IPython do not always use the same gui framework name.
+# Always use the approprate one of these conversion functions when passing a
+# gui framework name to/from Matplotlib.
+def _convert_gui_to_matplotlib(gui: str | None) -> str | None:
+    if gui and gui.lower() == "osx":
+        return "macosx"
+    return gui
+
+
+def _convert_gui_from_matplotlib(gui: str | None) -> str | None:
+    if gui and gui.lower() == "macosx":
+        return "osx"
+    return gui