Configure an IPython shell object for matplotlib use. Parameters ---------- shell : InteractiveShell instance backend : matplotlib backend
(shell, backend)
| 361 | |
| 362 | |
| 363 | def configure_inline_support(shell, backend): |
| 364 | """Configure an IPython shell object for matplotlib use. |
| 365 | |
| 366 | Parameters |
| 367 | ---------- |
| 368 | shell : InteractiveShell instance |
| 369 | |
| 370 | backend : matplotlib backend |
| 371 | """ |
| 372 | # If using our svg payload backend, register the post-execution |
| 373 | # function that will pick up the results for display. This can only be |
| 374 | # done with access to the real shell object. |
| 375 | |
| 376 | # Note: if we can't load the inline backend, then there's no point |
| 377 | # continuing (such as in terminal-only shells in environments without |
| 378 | # zeromq available). |
| 379 | try: |
| 380 | from ipykernel.pylab.backend_inline import InlineBackend |
| 381 | except ImportError: |
| 382 | return |
| 383 | import matplotlib |
| 384 | |
| 385 | cfg = InlineBackend.instance(parent=shell) |
| 386 | cfg.shell = shell |
| 387 | if cfg not in shell.configurables: |
| 388 | shell.configurables.append(cfg) |
| 389 | |
| 390 | if backend == backends['inline']: |
| 391 | from ipykernel.pylab.backend_inline import flush_figures |
| 392 | shell.events.register('post_execute', flush_figures) |
| 393 | |
| 394 | # Save rcParams that will be overwrittern |
| 395 | shell._saved_rcParams = {} |
| 396 | for k in cfg.rc: |
| 397 | shell._saved_rcParams[k] = matplotlib.rcParams[k] |
| 398 | # load inline_rc |
| 399 | matplotlib.rcParams.update(cfg.rc) |
| 400 | new_backend_name = "inline" |
| 401 | else: |
| 402 | from ipykernel.pylab.backend_inline import flush_figures |
| 403 | try: |
| 404 | shell.events.unregister('post_execute', flush_figures) |
| 405 | except ValueError: |
| 406 | pass |
| 407 | if hasattr(shell, '_saved_rcParams'): |
| 408 | matplotlib.rcParams.update(shell._saved_rcParams) |
| 409 | del shell._saved_rcParams |
| 410 | new_backend_name = "other" |
| 411 | |
| 412 | # only enable the formats once -> don't change the enabled formats (which the user may |
| 413 | # has changed) when getting another "%matplotlib inline" call. |
| 414 | # See https://github.com/ipython/ipykernel/issues/29 |
| 415 | cur_backend = getattr(configure_inline_support, "current_backend", "unset") |
| 416 | if new_backend_name != cur_backend: |
| 417 | # Setup the default figure format |
| 418 | select_figure_formats(shell, cfg.figure_formats, **cfg.print_figure_kwargs) |
| 419 | configure_inline_support.current_backend = new_backend_name |
nothing calls this directly
no test coverage detected