0% found this document useful (0 votes)
1K views681 pages

IPython

IPython Documentation
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views681 pages

IPython

IPython Documentation
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 681

IPython Documentation

Release 7.1.0.dev

The IPython Development Team

October 03, 2018


Contents

1 Overview 3

2 What’s new in IPython 7

3 Installation 277

4 Tutorial 283

5 Configuration and customization 355

6 Developer’s guide for third party tools and libraries 419

7 Guide for IPython core Developers 431

8 IPython release process 433

9 The IPython API 439

10 IPython Sphinx extension 641

11 About IPython 645

Python Module Index 655

i
ii
IPython Documentation, Release 7.1.0.dev

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

Contents 1
IPython Documentation, Release 7.1.0.dev

2 Contents
CHAPTER 1

Overview

One of Python’s most useful features is its interactive interpreter. It allows for very fast testing of ideas without the
overhead of creating test files as is typical in most programming languages. However, the interpreter supplied with the
standard Python distribution is somewhat limited for extended interactive use.
The goal of IPython is to create a comprehensive environment for interactive and exploratory computing. To support
this goal, IPython has three main components:
• An enhanced interactive Python shell.
• A decoupled two-process communication model, which allows for multiple clients to connect to a computation
kernel, most notably the web-based notebook provided with Jupyter.
• An architecture for interactive parallel computing now part of the ipyparallel package.
All of IPython is open source (released under the revised BSD license).

1.1 Enhanced interactive Python shell

IPython’s interactive shell (ipython), has the following goals, amongst others:
1. Provide an interactive shell superior to Python’s default. IPython has many features for tab-completion, object
introspection, system shell access, command history retrieval across sessions, and its own special command
system for adding functionality when working interactively. It tries to be a very efficient environment both for
Python code development and for exploration of problems using Python objects (in situations like data analysis).
2. Serve as an embeddable, ready to use interpreter for your own programs. An interactive IPython shell can be
started with a single call from inside another program, providing access to the current namespace. This can be
very useful both for debugging purposes and for situations where a blend of batch-processing and interactive
exploration are needed.
3. Offer a flexible framework which can be used as the base environment for working with other systems, with
Python as the underlying bridge language. Specifically scientific environments like Mathematica, IDL and
Matlab inspired its design, but similar ideas can be useful in many fields.

3
IPython Documentation, Release 7.1.0.dev

4. Allow interactive testing of threaded graphical toolkits. IPython has support for interactive, non-blocking control
of GTK, Qt, WX, GLUT, and OS X applications via special threading flags. The normal Python shell can only
do this for Tkinter applications.

1.1.1 Main features of the interactive shell

• Dynamic object introspection. One can access docstrings, function definition prototypes, source code, source
files and other details of any object accessible to the interpreter with a single keystroke (?, and using ?? provides
additional detail).
• Searching through modules and namespaces with * wildcards, both when using the ? system and via the
%psearch command.
• Completion in the local namespace, by typing TAB at the prompt. This works for keywords, modules, methods,
variables and files in the current directory. This is supported via the prompt_toolkit library. Custom
completers can be implemented easily for different purposes (system commands, magic arguments etc.)
• Numbered input/output prompts with command history (persistent across sessions and tied to each profile), full
searching in this history and caching of all input and output.
• User-extensible ‘magic’ commands. A set of commands prefixed with % or %% is available for controlling
IPython itself and provides directory control, namespace information and many aliases to common system shell
commands.
• Alias facility for defining your own system aliases.
• Complete system shell access. Lines starting with ! are passed directly to the system shell, and using !! or
var = !cmd captures shell output into python variables for further use.
• The ability to expand python variables when calling the system shell. In a shell command, any python vari-
able prefixed with $ is expanded. A double $$ allows passing a literal $ to the shell (for access to shell and
environment variables like PATH).
• Filesystem navigation, via a magic %cd command, along with a persistent bookmark system (using
%bookmark) for fast access to frequently visited directories.
• A lightweight persistence framework via the %store command, which allows you to save arbitrary Python
variables. These get restored when you run the %store -r command.
• Automatic indentation and highlighting of code as you type (through the prompt_toolkit library).
• Macro system for quickly re-executing multiple lines of previous input with a single name via the %macro
command. Macros can be stored persistently via %store and edited via %edit.
• Session logging (you can then later use these logs as code in your programs). Logs can optionally timestamp all
input, and also store session output (marked as comments, so the log remains valid Python source code).
• Session restoring: logs can be replayed to restore a previous session to the state where you left it.
• Verbose and colored exception traceback printouts. Easier to parse visually, and in verbose mode they produce
a lot of useful debugging information (basically a terminal version of the cgitb module).
• Auto-parentheses via the %autocall command: callable objects can be executed without parentheses: sin
3 is automatically converted to sin(3)
• Auto-quoting: using ,, or ; as the first character forces auto-quoting of the rest of the line: ,
my_function a b becomes automatically my_function("a","b"), while ;my_function a b be-
comes my_function("a b").
• Extensible input syntax. You can define filters that pre-process user input to simplify input in special situations.
This allows for example pasting multi-line code fragments which start with >>> or ... such as those from
other python sessions or the standard Python documentation.

4 Chapter 1. Overview
IPython Documentation, Release 7.1.0.dev

• Flexible configuration system. It uses a configuration file which allows permanent setting of all command-line
options, module loading, code and file execution. The system allows recursive file inclusion, so you can have a
base file with defaults and layers which load other customizations for particular projects.
• Embeddable. You can call IPython as a python shell inside your own python programs. This can be used
both for debugging code or for providing interactive abilities to your programs with knowledge about the local
namespaces (very useful in debugging and data analysis situations).
• Easy debugger access. You can set IPython to call up an enhanced version of the Python debugger (pdb) every
time there is an uncaught exception. This drops you inside the code which triggered the exception with all the
data live and it is possible to navigate the stack to rapidly isolate the source of a bug. The %run magic command
(with the -d option) can run any script under pdb’s control, automatically setting initial breakpoints for you. This
version of pdb has IPython-specific improvements, including tab-completion and traceback coloring support.
For even easier debugger access, try %debug after seeing an exception.
• Profiler support. You can run single statements (similar to profile.run()) or complete programs under
the profiler’s control. While this is possible with standard cProfile or profile modules, IPython wraps this
functionality with magic commands (see %prun and %run -p) convenient for rapid interactive work.
• Simple timing information. You can use the %timeit command to get the execution time of a Python statement
or expression. This machinery is intelligent enough to do more repetitions for commands that finish very quickly
in order to get a better estimate of their running time.

In [1]: %timeit 1+1


10000000 loops, best of 3: 25.5 ns per loop

In [2]: %timeit [math.sin(x) for x in range(5000)]


1000 loops, best of 3: 719 µs per loop

To get the timing information for more than one expression, use the %%timeit cell magic command.
• Doctest support. The special %doctest_mode command toggles a mode to use doctest-compatible prompts,
so you can use IPython sessions as doctest code. By default, IPython also allows you to paste existing doctests,
and strips out the leading >>> and ... prompts in them.

1.2 Decoupled two-process model

IPython has abstracted and extended the notion of a traditional Read-Evaluate-Print Loop (REPL) environment by
decoupling the evaluation into its own process. We call this process a kernel: it receives execution instructions from
clients and communicates the results back to them.
This decoupling allows us to have several clients connected to the same kernel, and even allows clients and kernels to
live on different machines. With the exclusion of the traditional single process terminal-based IPython (what you start
if you run ipython without any subcommands), all other IPython machinery uses this two-process model. Most
of this is now part of the Jupyter project, which includes jupyter console, jupyter qtconsole, and
jupyter notebook.
As an example, this means that when you start jupyter qtconsole, you’re really starting two processes, a
kernel and a Qt-based client can send commands to and receive results from that kernel. If there is already a kernel
running that you want to connect to, you can pass the --existing flag which will skip initiating a new kernel and
connect to the most recent kernel, instead. To connect to a specific kernel once you have several kernels running,
use the %connect_info magic to get the unique connection file, which will be something like --existing
kernel-19732.json but with different numbers which correspond to the Process ID of the kernel.
You can read more about using jupyter qtconsole, and jupyter notebook. There is also a message spec which documents
the protocol for communication between kernels and clients.

1.2. Decoupled two-process model 5


IPython Documentation, Release 7.1.0.dev

See also:
Frontend/Kernel Model example notebook

1.3 Interactive parallel computing

This functionality is optional and now part of the ipyparallel project.

1.3.1 Portability and Python requirements

Version 7.0+ supports Python 3.4 and higher. Versions 6.x support Python 3.3 and higher. Versions 2.0 to 5.x work
with Python 2.7.x releases and Python 3.3 and higher. Version 1.0 additionally worked with Python 2.6 and 3.2.
Version 0.12 was the first version to fully support Python 3.
IPython is known to work on the following operating systems:
• Linux
• Most other Unix-like OSs (AIX, Solaris, BSD, etc.)
• Mac OS X
• Windows (CygWin, XP, Vista, etc.)
See here for instructions on how to install IPython.

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

6 Chapter 1. Overview
CHAPTER 2

What’s new in IPython

Development version in-progress features:

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.1 Development version

This document describes in-flight development work.

Warning: Please do not edit this file by hand (doing so will likely cause merge conflicts for other Pull Requests).
Instead, create a new file in the docs/source/whatsnew/pr folder

Released . . . . . . . ., 2017
Need to be updated:

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

7
IPython Documentation, Release 7.1.0.dev

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.1.1 Antigravity feature

Example new antigravity feature. Try import antigravity in a Python 3 console.

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.1.2 Incompatible change switch to perl

Document which filename start with incompat- will be gathers in their own incompatibility section.
Starting with IPython 42, only perl code execution is allowed. See PR #42

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

IPython.display.Video now supports width and height arguments, allowing a custom width and height to
be set instead of using the video’s width and height

2.1.3 Backwards incompatible changes

This section documents the changes that have been made in various versions of IPython. Users should consult these
pages to learn about new features, bug fixes and backwards incompatibilities. Developers should summarize the
development work they do here in a user friendly format.

8 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.2 7.x Series

2.2.1 IPython 7.0.0

Released Thursday September 27th, 2018


IPython 7 include major features improvement as you can read in the following changelog. This is also the second
major version of IPython to support only Python 3 – starting at Python 3.4. Python 2 is still community supported on
the bugfix only 5.x branch, but we remind you that Python 2 “end of life” is on Jan 1st 2020.
We were able to backport bug fixes to the 5.x branch thanks to our backport bot which backported more than 70 Pull-
Requests, but there are still many PRs that required manually work, and this is an area of the project were you can
easily contribute by looking for PRs still needed backport
IPython 6.x branch will likely not see any further release unless critical bugs are found.
Make sure you have pip > 9.0 before upgrading. You should be able to update by simply running

pip install ipython --upgrade

If you are trying to install or update an alpha, beta, or rc version, use pip --pre flag.

pip install ipython --upgrade --pre

Or if you have conda installed:

conda install ipython

Prompt Toolkit 2.0

IPython 7.0+ now uses prompt_toolkit 2.0, if you still need to use earlier prompt_toolkit version you
may need to pin IPython to <7.0.

Autowait: Asynchronous REPL

Staring with IPython 7.0 and on Python 3.6+, IPython can automatically await code at top level, you should not need
to access an event loop or runner yourself. To know more read the Asynchronous in REPL: Autoawait section of our
docs, see PR #11265 or try the following code:

2.2. 7.x Series 9


IPython Documentation, Release 7.1.0.dev

Python 3.6.0
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import aiohttp


...: result = aiohttp.get('https://api.github.com')

In [2]: response = await result


<pause for a few 100s ms>

In [3]: await response.json()


Out[3]:
{'authorizations_url': 'https://api.github.com/authorizations',
'code_search_url': 'https://api.github.com/search/code?q={query}{&page,per_page,sort,
˓→order}',

...
}

Note: Async integration is experimental code, behavior may change or be removed between Python and IPython
versions without warnings.

Integration is by default with asyncio, but other libraries can be configured, like curio or trio, to improve
concurrency in the REPL:

In [1]: %autoawait trio

In [2]: import trio

In [3]: async def child(i):


...: print(" child %s goes to sleep"%i)
...: await trio.sleep(2)
...: print(" child %s wakes up"%i)

In [4]: print('parent start')


...: async with trio.open_nursery() as n:
...: for i in range(3):
...: n.spawn(child, i)
...: print('parent end')
parent start
child 2 goes to sleep
child 0 goes to sleep
child 1 goes to sleep
<about 2 seconds pause>
child 2 wakes up
child 1 wakes up
child 0 wakes up
parent end

See Asynchronous in REPL: Autoawait for more information.


Asynchronous code in a Notebook interface or any other frontend using the Jupyter Protocol will need further updates
of the IPykernel package.

10 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

Non-Asynchronous code

As the internal API of IPython are now asynchronous, IPython need to run under an even loop. In order to allow many
workflow, (like using the %run magic, or copy_pasting code that explicitly starts/stop event loop), when top-level
code is detected as not being asynchronous, IPython code is advanced via a pseudo-synchronous runner, and will not
may not advance pending tasks.

Change to Nested Embed

The introduction of the ability to run async code had some effect on the IPython.embed() API. By default embed
will not allow you to run asynchronous code unless a event loop is specified.

Effects on Magics

Some magics will not work with Async, and will need updates. Contribution welcome.

Expected Future changes

We expect more internal but public IPython function to become async, and will likely end up having a persisting
event loop while IPython is running.

Thanks

This took more than a year in the making, and the code was rebased a number of time leading to commit authorship
that may have been lost in the final Pull-Request. Huge thanks to many people for contribution, discussion, code, doc-
umentation, use-case: dalejung, danielballan, ellisonbg, fperez, gnestor, minrk, njsmith, pganssle, tacaswell, takluyver
, vidartf . . . And many others.

Autoreload Improvement

The magic %autoreload 2 now captures new methods added to classes. Earlier, only methods existing as of the
initial import were being tracked and updated.
This new feature helps dual environment development - Jupyter+IDE - where the code gradually moves from notebook
cells to package files, as it gets structured.
Example: An instance of the class MyClass will be able to access the method cube() after it is uncommented and
the file file1.py saved on disk.
..code:

# notebook

from mymodule import MyClass


first = MyClass(5)

# mymodule/file1.py

class MyClass:

(continues on next page)

2.2. 7.x Series 11


IPython Documentation, Release 7.1.0.dev

(continued from previous page)


def __init__(self, a=10):
self.a = a

def square(self):
print('compute square')
return self.a*self.a

# def cube(self):
# print('compute cube')
# return self.a*self.a*self.a

Misc

The autoindent feature that was deprecated in 5.x was re-enabled and un-deprecated in PR #11257
Make %run -n -i ... work correctly. Earlier, if %run was passed both arguments, -n would be silently ignored.
See PR #10308
The %%script` (as well as %%bash`, %%ruby`. . . ) cell magics now raise by default if the return code of the
given code is non-zero (thus halting execution of further cells in a notebook). The behavior can be disable by passing
the --no-raise-error flag.

Deprecations

A couple of unused function and methods have been deprecated and will be removed in future versions:
• IPython.utils.io.raw_print_err
• IPython.utils.io.raw_print

Backwards incompatible changes

• The API for transforming input before it is parsed as Python code has been completely redesigned, and any
custom input transformations will need to be rewritten. See Custom input transformation for details of the new
API.

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

12 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

2.3 Issues closed in the 7.x development cycle

2.3.1 Issues closed in 7.0

GitHub stats for 2018/07/29 - 2018/09/27 (since tag: 6.5.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 20 issues and merged 76 pull requests. The full list can be seen on GitHub
The following 49 authors contributed 471 commits.
• alphaCTzo7G
• Alyssa Whitwell
• Anatol Ulrich
• apunisal
• Benjamin Ragan-Kelley
• Chaz Reid
• Christoph
• Dale Jung
• Dave Hirschfeld
• dhirschf
• Doug Latornell
• Fernando Perez
• Fred Mitchell
• Gabriel Potter
• gpotter2
• Grant Nestor
• hongshaoyang
• Hugo
• J Forde
• Jonathan Slenders
• Jörg Dietrich
• Kyle Kelley
• luz.paz
• M Pacer
• Matthew R. Scott
• Matthew Seal
• Matthias Bussonnier
• meeseeksdev[bot]
• Michael Käufl

2.3. Issues closed in the 7.x development cycle 13


IPython Documentation, Release 7.1.0.dev

• Olesya Baranova
• oscar6echo
• Paul Ganssle
• Paul Ivanov
• Peter Parente
• prasanth
• Shailyn javier Ortiz jimenez
• Sourav Singh
• Srinivas Reddy Thatiparthy
• Steven Silvester
• stonebig
• Subhendu Ranjan Mishra
• Takafumi Arakaki
• Thomas A Caswell
• Thomas Kluyver
• Todd
• Wei Yen
• Yarko Tymciurak
• Yutao Yuan
• Zi Chong Kao

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.4 6.x Series

2.4.1 IPython 6.5.0

Miscellaneous bug fixes and compatibility with Python 3.7.


• Autocompletion fix for modules with out __init__.py PR #11227
• update the %pastebin magic to use dpaste.com instead og GitHub Gist which now requires authentication
PR #11182

14 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Fix crash with multiprocessing PR #11185

2.4.2 IPython 6.4.0

Everything new in IPython 5.7


• Fix display object not emitting metadata PR #11106
• Comments failing Jedi test PR #11110

2.4.3 IPython 6.3.1

This is a bugfix release to switch the default completions back to IPython’s own completion machinery. We discovered
some problems with the completions from Jedi, including completing column names on pandas data frames.
You can switch the completions source with the config option Completer.use_jedi.

2.4.4 IPython 6.3

IPython 6.3 contains all the bug fixes and features in IPython 5.6. In addition:
• A new display class IPython.display.Code can be used to display syntax highlighted code in a notebook
(PR #10978).
• The %%html magic now takes a --isolated option to put the content in an iframe (PR #10962).
• The code to find completions using the Jedi library has had various adjustments. This is still a work in progress,
but we hope this version has fewer annoyances (PR #10956, PR #10969, PR #10999, PR #11035, PR #11063,
PR #11065).
• The post event callbacks are now always called, even when the execution failed (for example because of a
SyntaxError).
• The execution info and result objects are now made available in the corresponding pre or post *_run_cell
event callbacks in a backward compatible manner (#10774 and PR #10795).
• Performance with very long code cells (hundreds of lines) is greatly improved (PR #10898). Further improve-
ments are planned for IPython 7.
You can see all pull requests for the 6.3 milestone.

2.4.5 IPython 6.2

IPython 6.2 contains all the bugs fixes and features available in IPython 5.5, like built in progress bar support, and
system-wide configuration
The following features are specific to IPython 6.2:

Function signature in completions

Terminal IPython will now show the signature of the function while completing. Only the currently highlighted
function will show its signature on the line below the completer by default. This functionality is recent, so it might be
limited; we welcome bug reports and requests for enhancements. PR #10507

2.4. 6.x Series 15


IPython Documentation, Release 7.1.0.dev

Assignments return values

IPython can now trigger the display hook on the last assignment of cells. Up until 6.2 the following code wouldn’t
show the value of the assigned variable:
In[1]: xyz = "something"
# nothing shown

You would have to actually make it the last statement:


In [2]: xyz = "something else"
... : xyz
Out[2]: "something else"

With the option InteractiveShell.ast_node_interactivity='last_expr_or_assign' you can


now do:
In [2]: xyz = "something else"
Out[2]: "something else"

This option can be toggled at runtime with the %config magic, and will trigger on assignment a = 1, augmented
assignment +=, -=, |= . . . as well as type annotated assignments: a:int = 2.
See PR #10598

Recursive Call of ipdb

Advanced users of the debugger can now correctly recursively enter ipdb. This is thanks to @segevfiner on PR
#10721.

2.4.6 IPython 6.1

• Quotes in a filename are always escaped during tab-completion on non-Windows. PR #10069


• Variables now shadow magics in autocompletion. See #4877 and PR #10542.
• Added the ability to add parameters to alias_magic. For example:
In [2]: %alias_magic hist history --params "-l 2" --line
Created `%hist` as an alias for `%history -l 2`.

In [3]: hist
%alias_magic hist history --params "-l 30" --line
%alias_magic hist history --params "-l 2" --line

Previously it was only possible to have an alias attached to a single function, and you would have to pass in the
given parameters every time:
In [4]: %alias_magic hist history --line
Created `%hist` as an alias for `%history`.

In [5]: hist -l 2
hist
%alias_magic hist history --line

• To suppress log state messages, you can now either use %logstart -q, pass --LoggingMagics.
quiet=True on the command line, or set c.LoggingMagics.quiet=True in your configuration file.

16 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• An additional flag --TerminalInteractiveShell.term_title_format is introduced to allow the


user to control the format of the terminal title. It is specified as a python format string, and currently the only
variable it will format is {cwd}.
• ??/%pinfo2 will now show object docstrings if the source can’t be retrieved. PR #10532
• IPython.display has gained a %markdown cell magic. PR #10563
• %config options can now be tab completed. PR #10555
• %config with no arguments are now unique and sorted. PR #10548
• Completion on keyword arguments does not duplicate = sign if already present. PR #10547
• %run -m <module> now <module> passes extra arguments to <module>. PR #10546
• completer now understand “snake case auto complete”: if foo_bar_kittens is a valid completion, I can
type f_b<tab> will complete to it. PR #10537
• tracebacks are better standardized and will compress /path/to/home to ~. PR #10515
The following changes were also added to IPython 5.4, see what’s new in IPython 5.4 for more detail description:
• TerminalInteractiveShell is configurable and can be configured to (re)-use the readline interface.
• objects can now define a _repr_mimebundle_
• Execution heuristics improve for single line statements
• display() can now return a display id to update display areas.

2.4.7 IPython 6.0

Released April 19th, 2017


IPython 6 features a major improvement in the completion machinery which is now capable of completing non-
executed code. It is also the first version of IPython to stop compatibility with Python 2, which is still supported on
the bugfix only 5.x branch. Read below for a non-exhaustive list of new features.
Make sure you have pip > 9.0 before upgrading. You should be able to update by using:

pip install ipython --upgrade

Note: If your pip version is greater than or equal to pip 9.0.1 you will automatically get the most recent version of
IPython compatible with your system: on Python 2 you will get the latest IPython 5.x bugfix, while in Python 3 you
will get the latest 6.x stable version.

New completion API and Interface

The completer Completion API has seen an overhaul, and the new completer has plenty of improvements both from
the end users of terminal IPython and for consumers of the API.
This new API is capable of pulling completions from jedi, thus allowing type inference on non-executed code. If
jedi is installed, completions like the following are now possible without code evaluation:

>>> data = ['Number of users', 123_456]


... data[0].<tab>

2.4. 6.x Series 17


IPython Documentation, Release 7.1.0.dev

That is to say, IPython is now capable of inferring that data[0] is a string, and will suggest completions like .
capitalize. The completion power of IPython will increase with new Jedi releases, and a number of bug-fixes and
more completions are already available on the development version of jedi if you are curious.
With the help of prompt toolkit, types of completions can be shown in the completer interface:

The appearance of the completer is con-


trolled by the c.TerminalInteractiveShell.display_completions option that will show the type dif-
ferently depending on the value among 'column', 'multicolumn' and 'readlinelike'
The use of Jedi also fulfills a number of requests and fixes a number of bugs like case-insensitive completion and
completion after division operator: See PR #10182.
Extra patches and updates will be needed to the ipykernel package for this feature to be available to other clients
like Jupyter Notebook, Lab, Nteract, Hydrogen. . .
The use of Jedi should be barely noticeable on recent machines, but can be slower on older ones. To tweak the
performance, the amount of time given to Jedi to compute type inference can be adjusted with c.IPCompleter.
jedi_compute_type_timeout. The objects whose type were not inferred will be shown as <unknown>. Jedi
can also be completely deactivated by using the c.Completer.use_jedi=False option.
The old Completer.complete() API is waiting deprecation and should be replaced replaced by Completer.
completions() in the near future. Feedback on the current state of the API and suggestions are welcome.

Python 3 only codebase

One of the large challenges in IPython 6.0 has been the adoption of a pure Python 3 codebase, which has led to
upstream patches in pip, pypi and warehouse to make sure Python 2 systems still upgrade to the latest compatible
Python version.
We remind our Python 2 users that IPython 5 is still compatible with Python 2.7, still maintained and will get regular
releases. Using pip 9+, upgrading IPython will automatically upgrade to the latest version compatible with your
system.

Warning: If you are on a system using an older version of pip on Python 2, pip may still install IPython 6.0 on
your system, and IPython will refuse to start. You can fix this by upgrading pip, and reinstalling ipython, or forcing
pip to install an earlier version: pip install 'ipython<6'

The ability to use only Python 3 on the code base of IPython brings a number of advantages. Most of the newly written
code make use of optional function type annotation leading to clearer code and better documentation.
The total size of the repository has also decreased by about 1500 lines (for the first time excluding the big split for
4.0). The decrease is potentially a bit more for the sour as some documents like this one are append only and are about
300 lines long.

18 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

The removal of the Python2/Python3 shim layer has made the code quite a lot clearer and more idiomatic in a number
of locations, and much friendlier to work with and understand. We hope to further embrace Python 3 capabilities in
the next release cycle and introduce more of the Python 3 only idioms (yield from, kwarg only, general unpacking) in
the IPython code base, and see if we can take advantage of these to improve user experience with better error messages
and hints.

Configurable TerminalInteractiveShell, readline interface

IPython gained a new c.TerminalIPythonApp.interactive_shell_class option that allows customiz-


ing the class used to start the terminal frontend. This should allow a user to use custom interfaces, like reviving the
former readline interface which is now a separate package not actively maintained by the core team. See the project to
bring back the readline interface: rlipython.
This change will be backported to the IPython 5.x series.

Misc improvements

• The %%capture magic can now capture the result of a cell (from an expression on the last line), as well as
printed and displayed output. PR #9851.
• Pressing Ctrl-Z in the terminal debugger now suspends IPython, as it already does in the main terminal prompt.
• Autoreload can now reload Enum. See #10232 and PR #10316
• IPython.display has gained a GeoJSON object. PR #10288 and PR #10253

Functions Deprecated in 6.x Development cycle

• Loading extensions from ipython_extension_dir prints a warning that this location is pend-
ing deprecation. This should only affect users still having extensions installed with %install_ext
which has been deprecated since IPython 4.0, and removed in 5.0. Extensions still present in
ipython_extension_dir may shadow more recently installed versions using pip. It is thus recommended
to clean ipython_extension_dir of any extension now available as a package.
• IPython.utils.warn was deprecated in IPython 4.0, and has now been removed. instead of IPython.
utils.warn inbuilt warnings module is used.
• The function IPython.core.oinspect.py:call_tip is unused, was marked as deprecated (raising a
DeprecationWarning) and marked for later removal. PR #10104

Backward incompatible changes

Functions Removed in 6.x Development cycle

The following functions have been removed in the development cycle marked for Milestone 6.0.
• IPython/utils/process.py - is_cmd_found
• IPython/utils/process.py - pycmd2argv
• The --deep-reload flag and the corresponding options to inject dreload or reload into the interactive
namespace have been removed. You have to explicitly import reload from IPython.lib.deepreload
to use it.

2.4. 6.x Series 19


IPython Documentation, Release 7.1.0.dev

• The %profile used to print the current IPython profile, and which was deprecated in IPython 2.0 does now
raise a DeprecationWarning error when used. It is often confused with the %prun and the deprecation
removal should free up the profile name in future versions.

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.5 Issues closed in the 6.x development cycle

2.5.1 Issues closed in 6.3

GitHub stats for 2017/09/15 - 2018/04/02 (tag: 6.2.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 10 issues and merged 50 pull requests. The full list can be seen on GitHub
The following 35 authors contributed 253 commits.
• Anatoly Techtonik
• Antony Lee
• Benjamin Ragan-Kelley
• Corey McCandless
• Craig Citro
• Cristian Ciupitu
• David Cottrell
• David Straub
• Doug Latornell
• Fabio Niephaus
• Gergely Nagy
• Henry Fredrick Schreiner
• Hugo
• Ismael Venegas Castelló
• Ivan Gonzalez
• J Forde
• Jeremy Sikes
• Joris Van den Bossche

20 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Lesley Cordero
• luzpaz
• madhu94
• Matthew R. Scott
• Matthias Bussonnier
• Matthias Geier
• Olesya Baranova
• Peter Williams
• Rastislav Barlik
• Roshan Rao
• rs2
• Samuel Lelièvre
• Shailyn javier Ortiz jimenez
• Sjoerd de Vries
• Teddy Rendahl
• Thomas A Caswell
• Thomas Kluyver

2.5.2 Issues closed in 6.2

GitHub stats for 2017/05/31 - 2017/09/15 (tag: 6.1.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 3 issues and merged 37 pull requests. The full list can be seen on GitHub
The following 32 authors contributed 196 commits.
• adityausathe
• Antony Lee
• Benjamin Ragan-Kelley
• Carl Smith
• Eren Halici
• Erich Spaker
• Grant Nestor
• Jean Cruypenynck
• Jeroen Demeyer
• jfbu
• jlstevens
• jus1tin
• Kyle Kelley

2.5. Issues closed in the 6.x development cycle 21


IPython Documentation, Release 7.1.0.dev

• M Pacer
• Marc Richter
• Marius van Niekerk
• Matthias Bussonnier
• mpacer
• Mradul Dubey
• ormung
• pepie34
• Ritesh Kadmawala
• ryan thielke
• Segev Finer
• Srinath
• Srinivas Reddy Thatiparthy
• Steven Maude
• Sudarshan Raghunathan
• Sudarshan Rangarajan
• Thomas A Caswell
• Thomas Ballinger
• Thomas Kluyver

2.5.3 Issues closed in 6.1

GitHub stats for 2017/04/19 - 2017/05/30 (tag: 6.0.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 10 issues and merged 43 pull requests. The full list can be seen on GitHub
The following 26 authors contributed 116 commits.
• Alex Alekseyev
• Benjamin Ragan-Kelley
• Brian E. Granger
• Christopher C. Aycock
• Dave Willmer
• David Bradway
• ICanWaitAndFishAllDay
• Ignat Shining
• Jarrod Janssen
• Joshua Storck
• Luke Pfister

22 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Matthias Bussonnier
• Matti Remes
• meeseeksdev[bot]
• memeplex
• Ming Zhang
• Nick Weseman
• Paul Ivanov
• Piotr Zielinski
• ryan thielke
• sagnak
• Sang Min Park
• Srinivas Reddy Thatiparthy
• Steve Bartz
• Thomas Kluyver
• Tory Haavik

2.5.4 Issues closed in 6.0

GitHub stats for 2017/04/10 - 2017/04/19 (milestone: 6.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 49 issues and merged 145 pull requests. The full list can be seen on GitHub
The following 34 authors contributed 176 commits.
• Adam Eury
• anantkaushik89
• Antonino Ingargiola
• Benjamin Ragan-Kelley
• Carol Willing
• Chilaka Ramakrishna
• chillaranand
• Denis S. Tereshchenko
• Diego Garcia
• fatData
• Fermi paradox
• fuho
• Grant Nestor
• Ian Rose
• Jeroen Demeyer

2.5. Issues closed in the 6.x development cycle 23


IPython Documentation, Release 7.1.0.dev

• kaushikanant
• Keshav Ramaswamy
• Matteo
• Matthias Bussonnier
• mbyt
• Michael Käufl
• michaelpacer
• Moez Bouhlel
• Pablo Galindo
• Paul Ivanov
• Piotr Przetacznik
• Rounak Banik
• sachet-mittal
• Srinivas Reddy Thatiparthy
• Tamir Bahar
• Thomas Hisch
• Thomas Kluyver
• Utkarsh Upadhyay
• Yuri Numerov

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.6 5.x Series

2.6.1 IPython 5.7

• Fix IPython trying to import non-existing matplotlib backends PR #11087


• fix for display hook not publishing object metadata PR #11101

24 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

2.6.2 IPython 5.6

• In Python 3.6 and above, dictionaries preserve the order items were added to them. On these versions, IPython
will display dictionaries in their native order, rather than sorting by the keys (PR #10958).
• ProgressBar can now be used as an iterator (PR #10813).
• The shell object gains a check_complete() method, to allow a smoother transition to new input processing
machinery planned for IPython 7 (PR #11044).
• IPython should start faster, as it no longer looks for all available pygments styles on startup (PR #10859).
You can see all the PR marked for the 5.6. milestone, and all the backport versions.

2.6.3 IPython 5.5

System Wide config

• IPython now looks for config files in {sys.prefix}/etc/ipython for environment-specific configura-
tion.
• Startup files can be found in /etc/ipython/startup or {sys.prefix}/etc/ipython/startup
in addition to the profile directory, for system-wide or env-specific startup files.
See PR #10644

ProgressBar

IPython now has built-in support for progressbars:

In[1]: from IPython.display import ProgressBar


... : pb = ProgressBar(100)
... : pb

In[2]: pb.progress = 50

# progress bar in cell 1 updates.

See PR #10755

Misc

• Fix IPython.core.display:Pretty._repr_pretty_ had the wrong signature. (PR #10625)


• %timeit now give a correct SyntaxError if naked return used. (PR #10637)
• Prepare the :ipython: directive to be compatible with Sphinx 1.7. (PR #10668)
• Make IPython work with OpenSSL in FIPS mode; change hash algorithm of input from md5 to sha1. (PR
#10696)
• Clear breakpoints before running any script with debugger. (PR #10699)
• Document that %profile is deprecated, not to be confused with %prun. (PR #10707)
• Limit default number of returned completions to 500. (PR #10743)
You can see all the PR marked for the 5.5. milestone, and all the backport versions.

2.6. 5.x Series 25


IPython Documentation, Release 7.1.0.dev

2.6.4 IPython 5.4

IPython 5.4-LTS is the first release of IPython after the release of the 6.x series which is Python 3 only. It backports
most of the new exposed API additions made in IPython 6.0 and 6.1 and avoid having to write conditional logics
depending of the version of IPython.
Please upgrade to pip 9 or greater before upgrading IPython. Failing to do so on Python 2 may lead to a broken IPython
install.

Configurable TerminalInteractiveShell

Backported from the 6.x branch as an exceptional new feature. See PR #10373 and #10364
IPython gained a new c.TerminalIPythonApp.interactive_shell_class option that allow to cus-
tomize the class used to start the terminal frontend. This should allow user to use custom interfaces, like reviving
the former readline interface which is now a separate package not maintained by the core team.

Define _repr_mimebundle_

Object can now define _repr_mimebundle_ in place of multiple _repr_*_ methods and return a full mime-
bundle. This greatly simplify many implementation and allow to publish custom mimetypes (like geojson, plotly,
dataframes. . . .). See the Custom Display Logic example notebook for more information.

Execution Heuristics

The heuristic for execution in the command line interface is now more biased toward executing for single statement.
While in IPython 4.x and before a single line would be executed when enter is pressed, IPython 5.x would insert a
new line. For single line statement this is not true anymore and if a single line is valid Python, IPython will execute it
regardless of the cursor position. Use Ctrl-O to insert a new line. PR #10489

Implement Display IDs

Implement display id and ability to update a given display. This should greatly simplify a lot of code by removing the
need for widgets and allow other frontend to implement things like progress-bars. See PR #10048

Display function

The display() function is now available by default in an IPython session, meaning users can call it on any object to
see their rich representation. This should allow for better interactivity both at the REPL and in notebook environment.
Scripts and library that rely on display and may be run outside of IPython still need to import the display function
using from IPython.display import display. See PR #10596

Miscs

• _mp_main_ is not reloaded which fixes issues with multiprocessing. PR #10523


• Use user colorscheme in Pdb as well PR #10479
• Faster shutdown. PR #10408
• Fix a crash in reverse search. PR #10371

26 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• added Completer.backslash_combining_completions boolean option to deactivate backslash-tab


completion that may conflict with windows path.

2.6.5 IPython 5.3

Released on February 24th, 2017. Remarkable changes and fixes:


• Fix a bug in set_next_input leading to a crash of terminal IPython. PR #10231, #10296, #10229
• Always wait for editor inputhook for terminal IPython PR #10239, PR #10240
• Disable _ipython_display_ in terminal PR #10249, PR #10274
• Update terminal colors to be more visible by default on windows PR #10260, PR #10238, #10281
• Add Ctrl-Z shortcut (suspend) in terminal debugger PR #10254, #10273
• Indent on new line by looking at the text before the cursor PR #10264, PR #10275, #9283
• Update QtEventloop integration to fix some matplotlib integration issues PR #10201, PR #10311, #10201
• Respect completions display style in terminal debugger PR #10305, PR #10313
• Add a config option TerminalInteractiveShell.extra_open_editor_shortcuts to enable ex-
tra shortcuts to open the input in an editor. These are v in vi mode, and C-X C-E in emacs mode (PR #10330).
The F2 shortcut is always enabled.

2.6.6 IPython 5.2.2

• Fix error when starting with IPCompleter.limit_to__all__ configured.

2.6.7 IPython 5.2.1

• Fix tab completion in the debugger. PR #10223

2.6.8 IPython 5.2

Released on January 29th, 2017. Remarkable changes and fixes:


• restore IPython’s debugger to raise on quit. PR #10009
• The configuration value c.TerminalInteractiveShell.highlighting_style can now directly
take a class argument for custom color style. PR #9848
• Correctly handle matplotlib figures dpi PR #9868
• Deprecate -e flag for the %notebook magic that had no effects. PR #9872
• You can now press F2 while typing at a terminal prompt to edit the contents in your favourite terminal editor.
Set the EDITOR environment variable to pick which editor is used. PR #9929
• sdists will now only be .tar.gz as per upstream PyPI requirements. PR #9925
• IPython.core.debugger have gained a set_trace() method for convenience. PR #9947
• The ‘smart command mode’ added to the debugger in 5.0 was removed, as more people preferred the previous
behaviour. Therefore, debugger commands such as c will act as debugger commands even when c is defined as
a variable. PR #10050

2.6. 5.x Series 27


IPython Documentation, Release 7.1.0.dev

• Fixes OS X event loop issues at startup, PR #10150


• Deprecate the %autoindent magic. PR #10176
• Emit a DeprecationWarning when setting the deprecated limit_to_all option of the completer. PR
#10198
• The %%capture magic can now capture the result of a cell (from an expression on the last line), as well as
printed and displayed output. PR #9851.
Changes of behavior to InteractiveShellEmbed.
InteractiveShellEmbed interactive behavior have changed a bit in between 5.1 and 5.2. By default
%kill_embedded magic will prevent further invocation of the current call location instead of preventing
further invocation of the current instance creation location. For most use case this will not change much for you,
though previous behavior was confusing and less consistent with previous IPython versions.
You can now deactivate instances by using %kill_embedded --instance flag, (or -i in short). The
%kill_embedded magic also gained a --yes/-y option which skip confirmation step, and -x/--exit which
also exit the current embedded call without asking for confirmation.
See PR #10207.

2.6.9 IPython 5.1

• Broken %timeit on Python2 due to the use of __qualname__. PR #9804


• Restore %gui qt to create and return a QApplication if necessary. PR #9789
• Don’t set terminal title by default. PR #9801
• Preserve indentation when inserting newlines with Ctrl-O. PR #9770
• Restore completion in debugger. PR #9785
• Deprecate IPython.core.debugger.Tracer() in favor of simpler, newer, APIs. PR #9731
• Restore NoOpContext context manager removed by mistake, and add DeprecationWarning. PR #9765
• Add option allowing Prompt_toolkit to use 24bits colors. PR #9736
• Fix for closing interactive matplotlib windows on OS X. PR #9854
• An embedded interactive shell instance can be used more than once. PR #9843
• More robust check for whether IPython is in a terminal. PR #9833
• Better pretty-printing of dicts on PyPy. PR #9827
• Some coloured output now looks better on dark background command prompts in Windows. PR #9838
• Improved tab completion of paths on Windows . PR #9826
• Fix tkinter event loop integration on Python 2 with future installed. PR #9824
• Restore Ctrl-\ as a shortcut to quit IPython.
• Make get_ipython() accessible when modules are imported by startup files. PR #9818
• Add support for running directories containing a __main__.py file with the ipython command. PR #9813

28 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

True Color feature

prompt_toolkit uses pygments styles for syntax highlighting. By default, the colors specified in the style are
approximated using a standard 256-color palette. prompt_toolkit also supports 24bit, a.k.a. “true”, a.k.a. 16-
million color escape sequences which enable compatible terminals to display the exact colors specified instead of an
approximation. This true_color option exposes that capability in prompt_toolkit to the IPython shell.
Here is a good source for the current state of true color support in various terminal emulators and software projects:
https://gist.github.com/XVilka/8346728

2.6.10 IPython 5.0

Released July 7, 2016

New terminal interface

IPython 5 features a major upgrade to the terminal interface, bringing live syntax highlighting as you
type, proper multiline editing and multiline paste, and tab completions that don’t clutter up your history.

These features are


provided by the Python library prompt_toolkit, which replaces readline throughout our terminal interface.
Relying on this pure-Python, cross platform module also makes it simpler to install IPython. We have removed
dependencies on pyreadline for Windows and gnureadline for Mac.

Backwards incompatible changes

• The %install_ext magic function, deprecated since 4.0, has now been deleted. You can distribute and
install extensions as packages on PyPI.
• Callbacks registered while an event is being handled will now only be called for subsequent events; previously
they could be called for the current event. Similarly, callbacks removed while handling an event will always get
that event. See #9447 and PR #9453.
• Integration with pydb has been removed since pydb development has been stopped since 2012, and pydb is not
installable from PyPI.
• The autoedit_syntax option has apparently been broken for many years. It has been removed.

2.6. 5.x Series 29


IPython Documentation, Release 7.1.0.dev

New terminal interface

The overhaul of the terminal interface will probably cause a range of minor issues for existing users. This is inevitable
for such a significant change, and we’ve done our best to minimise these issues. Some changes that we’re aware of,
with suggestions on how to handle them:
IPython no longer uses readline configuration (~/.inputrc). We hope that the functionality you want (e.g. vi input
mode) will be available by configuring IPython directly (see Terminal IPython options). If something’s missing, please
file an issue.
The PromptManager class has been removed, and the prompt machinery simplified. See Custom Prompts to cus-
tomise prompts with the new machinery.
IPython.core.debugger now provides a plainer interface. IPython.terminal.debugger contains the
terminal debugger using prompt_toolkit.
There are new options to configure the colours used in syntax highlighting. We have tried to integrate them with our
classic --colors option and %colors magic, but there’s a mismatch in possibilities, so some configurations may
produce unexpected results. See Terminal Colors for more information.
The new interface is not compatible with Emacs ‘inferior-shell’ feature. To continue using this, add the
--simple-prompt flag to the command Emacs runs. This flag disables most IPython features, relying on Emacs
to provide things like tab completion.

Provisional Changes

Provisional changes are experimental functionality that may, or may not, make it into a future version of IPython, and
which API may change without warnings. Activating these features and using these API are at your own risk, and may
have security implication for your system, especially if used with the Jupyter notebook,
When running via the Jupyter notebook interfaces, or other compatible client, you can enable rich documentation
experimental functionality:
When the docrepr package is installed setting the boolean flag InteractiveShell.
sphinxify_docstring to True, will process the various object through sphinx before displaying them
(see the docrepr package documentation for more information.
You need to also enable the IPython pager display rich HTML representation using the InteractiveShell.
enable_html_pager boolean configuration option. As usual you can set these configuration options globally in
your configuration files, alternatively you can turn them on dynamically using the following snippet:

ip = get_ipython()
ip.sphinxify_docstring = True
ip.enable_html_pager = True

You can test the effect of various combinations of the above configuration in the Jupyter notebook, with things example
like :

import numpy as np
np.histogram?

This is part of an effort to make Documentation in Python richer and provide in the long term if possible dynamic
examples that can contain math, images, widgets. . . As stated above this is nightly experimental feature with a lot of
(fun) problem to solve. We would be happy to get your feedback and expertise on it.

30 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

Deprecated Features

Some deprecated features are listed in this section. Don’t forget to enable DeprecationWarning as an error if
you are using IPython in a Continuous Integration setup or in your testing in general:

import warnings
warnings.filterwarnings('error', '.*', DeprecationWarning, module='yourmodule.*')

• hooks.fix_error_editor seems unused and is pending deprecation.


• IPython/core/excolors.py:ExceptionColors is deprecated.
• IPython.core.InteractiveShell:write() is deprecated; use sys.stdout instead.
• IPython.core.InteractiveShell:write_err() is deprecated; use sys.stderr instead.
• The formatter keyword argument to Inspector.info in IPython.core.oinspec has no effect.
• The global_ns keyword argument of IPython Embed was deprecated, and has no effect. Use module
keyword argument instead.

Known Issues:

• <Esc> Key does not dismiss the completer and does not clear the current buffer. This is an on purpose modi-
fication due to current technical limitation. Cf PR #9572. Escape the control character which is used for other
shortcut, and there is no practical way to distinguish. Use Ctr-G or Ctrl-C as an alternative.
• Cannot use Shift-Enter and Ctrl-Enter to submit code in terminal. cf #9587 and #9401. In terminal
there is no practical way to distinguish these key sequences from a normal new line return.
• PageUp and pageDown do not move through completion menu.
• Color styles might not adapt to terminal emulator themes. This will need new version of Pygments to be released,
and can be mitigated with custom themes.

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.7 Issues closed in the 5.x development cycle

2.7.1 Issues closed in 5.6

GitHub stats for 2017/09/15 - 2018/04/02 (tag: 5.5.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 2 issues and merged 28 pull requests. The full list can be seen on GitHub

2.7. Issues closed in the 5.x development cycle 31


IPython Documentation, Release 7.1.0.dev

The following 10 authors contributed 47 commits.


• Benjamin Ragan-Kelley
• Henry Fredrick Schreiner
• Joris Van den Bossche
• Matthias Bussonnier
• Mradul Dubey
• Roshan Rao
• Samuel Lelièvre
• Teddy Rendahl
• Thomas A Caswell
• Thomas Kluyver

2.7.2 Issues closed in 5.4

GitHub stats for 2017/02/24 - 2017/05/30 (tag: 5.3.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 8 issues and merged 43 pull requests. The full list can be seen on GitHub
The following 11 authors contributed 64 commits.
• Benjamin Ragan-Kelley
• Carol Willing
• Kyle Kelley
• Leo Singer
• Luke Pfister
• Lumir Balhar
• Matthias Bussonnier
• meeseeksdev[bot]
• memeplex
• Thomas Kluyver
• Ximin Luo

2.7.3 Issues closed in 5.3

GitHub stats for 2017/02/24 - 2017/05/30 (tag: 5.3.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 6 issues and merged 28 pull requests. The full list can be seen on GitHub
The following 11 authors contributed 53 commits.
• Benjamin Ragan-Kelley
• Carol Willing

32 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Justin Jent
• Kyle Kelley
• Lumir Balhar
• Matthias Bussonnier
• meeseeksdev[bot]
• Segev Finer
• Steven Maude
• Thomas A Caswell
• Thomas Kluyver

2.7.4 Issues closed in 5.2

GitHub stats for 2016/08/13 - 2017/01/29 (tag: 5.1.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 30 issues and merged 74 pull requests. The full list can be seen on GitHub
The following 40 authors contributed 434 commits.
• Adam Eury
• anantkaushik89
• anatoly techtonik
• Benjamin Ragan-Kelley
• Bibo Hao
• Carl Smith
• Carol Willing
• Chilaka Ramakrishna
• Christopher Welborn
• Denis S. Tereshchenko
• Diego Garcia
• fatData
• Fermi paradox
• Fernando Perez
• fuho
• Hassan Kibirige
• Jamshed Vesuna
• Jens Hedegaard Nielsen
• Jeroen Demeyer
• kaushikanant
• Kenneth Hoste

2.7. Issues closed in the 5.x development cycle 33


IPython Documentation, Release 7.1.0.dev

• Keshav Ramaswamy
• Kyle Kelley
• Matteo
• Matthias Bussonnier
• mbyt
• memeplex
• Moez Bouhlel
• Pablo Galindo
• Paul Ivanov
• pietvo
• Piotr Przetacznik
• Rounak Banik
• sachet-mittal
• Srinivas Reddy Thatiparthy
• Tamir Bahar
• Thomas A Caswell
• Thomas Kluyver
• tillahoffmann
• Yuri Numerov

2.7.5 Issues closed in 5.1

GitHub stats for 2016/07/08 - 2016/08/13 (tag: 5.0.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 33 issues and merged 43 pull requests. The full list can be seen on GitHub
The following 17 authors contributed 129 commits.
• Antony Lee
• Benjamin Ragan-Kelley
• Carol Willing
• Danilo J. S. Bellini
• (dongweiming)
• Fernando Perez
• Gavin Cooper
• Gil Forsyth
• Jacob Niehus
• Julian Kuhlmann
• Matthias Bussonnier

34 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Michael Pacer
• Nik Nyby
• Pavol Juhas
• Luke Deen Taylor
• Thomas Kluyver
• Tamir Bahar

2.7.6 Issues closed in 5.0

GitHub stats for 2016/07/05 - 2016/07/07 (tag: 5.0.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 95 issues and merged 191 pull requests. The full list can be seen on GitHub
The following 27 authors contributed 229 commits.
• Adam Greenhall
• Adrian
• Antony Lee
• Benjamin Ragan-Kelley
• Carlos Cordoba
• Carol Willing
• Chris
• Craig Citro
• Dmitry Zotikov
• Fernando Perez
• Gil Forsyth
• Jason Grout
• Jonathan Frederic
• Jonathan Slenders
• Justin Zymbaluk
• Kelly Liu
• klonuo
• Matthias Bussonnier
• nvdv
• Pavol Juhas
• Pierre Gerold
• sukisuki
• Sylvain Corlay
• Thomas A Caswell

2.7. Issues closed in the 5.x development cycle 35


IPython Documentation, Release 7.1.0.dev

• Thomas Kluyver
• Trevor Bekolay
• Yuri Numerov

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.8 4.x Series

2.8.1 IPython 4.2

IPython 4.2 (April, 2016) includes various bugfixes and improvements over 4.1.
• Fix ipython -i on errors, which was broken in 4.1.
• The delay meant to highlight deprecated commands that have moved to jupyter has been removed.
• Improve compatibility with future versions of traitlets and matplotlib.
• Use stdlib shutil.get_terminal_size() to measure terminal width when displaying tracebacks (pro-
vided by backports.shutil_get_terminal_size on Python 2).
You can see the rest on GitHub.

2.8.2 IPython 4.1

IPython 4.1.2 (March, 2016) fixes installation issues with some versions of setuptools.
Released February, 2016. IPython 4.1 contains mostly bug fixes, though there are a few improvements.
• IPython debugger (IPdb) now supports the number of context lines for the where (and w) commands. The
context keyword is also available in various APIs. See PR PR #9097
• YouTube video will now show thumbnail when exported to a media that do not support video. (PR #9086)
• Add warning when running ipython <subcommand> when subcommand is deprecated. jupyter should
now be used.
• Code in %pinfo (also known as ??) are now highlighter (PR #8947)
• %aimport now support module completion. (PR #8884)
• ipdb output is now colored ! (PR #8842)
• Add ability to transpose columns for completion: (PR #8748)
Many many docs improvements and bug fixes, you can see the list of changes

36 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

2.8.3 IPython 4.0

Released August, 2015


IPython 4.0 is the first major release after the Big Split. IPython no longer contains the notebook, qtconsole, etc. which
have moved to jupyter. IPython subprojects, such as IPython.parallel and widgets have moved to their own repos as
well.
The following subpackages are deprecated:
• IPython.kernel (now jupyter_client and ipykernel)
• IPython.consoleapp (now jupyter_client.consoleapp)
• IPython.nbformat (now nbformat)
• IPython.nbconvert (now nbconvert)
• IPython.html (now notebook)
• IPython.parallel (now ipyparallel)
• IPython.utils.traitlets (now traitlets)
• IPython.config (now traitlets.config)
• IPython.qt (now qtconsole)
• IPython.terminal.console (now jupyter_console)
and a few other utilities.
Shims for the deprecated subpackages have been added, so existing code should continue to work with a warning
about the new home.
There are few changes to the code beyond the reorganization and some bugfixes.
IPython highlights:
• Public APIs for discovering IPython paths is moved from IPython.utils.path to IPython.paths.
The old function locations continue to work with deprecation warnings.
• Code raising DeprecationWarning entered by the user in an interactive session will now display the warn-
ing by default. See PR #8480 an #8478.
• The --deep-reload flag and the corresponding options to inject dreload or reload into the interactive
namespace have been deprecated, and will be removed in future versions. You should now explicitly import
reload from IPython.lib.deepreload to use it.

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.8. 4.x Series 37


IPython Documentation, Release 7.1.0.dev

2.9 Issues closed in the 4.x development cycle

2.9.1 Issues closed in 4.2

GitHub stats for 2015/02/02 - 2016/04/20 (since 4.1)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 10 issues and merged 22 pull requests. The full list can be seen on GitHub
The following 10 authors contributed 27 commits.
• Benjamin Ragan-Kelley
• Carlos Cordoba
• Gökhan Karabulut
• Jonas Rauber
• Matthias Bussonnier
• Paul Ivanov
• Sebastian Bank
• Thomas A Caswell
• Thomas Kluyver
• Vincent Woo

2.9.2 Issues closed in 4.1

GitHub stats for 2015/08/12 - 2016/02/02 (since 4.0.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 60 issues and merged 148 pull requests. The full list can be seen on GitHub
The following 52 authors contributed 468 commits.
• Aaron Meurer
• Alexandre Avanian
• Anthony Sottile
• Antony Lee
• Arthur Loder
• Ben Kasel
• Ben Rousch
• Benjamin Ragan-Kelley
• bollwyvl
• Carol Willing
• Christopher Roach
• Douglas La Rocca
• Fairly

38 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Fernando Perez
• Frank Sachsenheim
• Guillaume DOUMENC
• Gábor Luk
• Hoyt Koepke
• Ivan Timokhin
• Jacob Niehus
• JamshedVesuna
• Jan Schulz
• Jan-Philip Gehrcke
• jc
• Jessica B. Hamrick
• jferrara
• John Bohannon
• John Kirkham
• Jonathan Frederic
• Kyle Kelley
• Lev Givon
• Lilian Besson
• lingxz
• Matthias Bussonnier
• memeplex
• Michael Droettboom
• naught101
• Peter Waller
• Pierre Gerold
• Rémy Léone
• Scott Sanderson
• Shanzhuo Zhang
• Sylvain Corlay
• Tayfun Sen
• Thomas A Caswell
• Thomas Ballinger
• Thomas Kluyver
• Vincent Legoll
• Wouter Bolsterlee

2.9. Issues closed in the 4.x development cycle 39


IPython Documentation, Release 7.1.0.dev

• xconverge
• Yuri Numerov
• Zachary Pincus

2.9.3 Issues closed in 4.0

GitHub stats for 2015/02/27 - 2015/08/11 (since 3.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 35 issues and merged 125 pull requests. The full list can be seen on GitHub
The following 69 authors contributed 1186 commits.
• Abe Guerra
• Adal Chiriliuc
• Alexander Belopolsky
• Andrew Murray
• Antonio Russo
• Benjamin Ragan-Kelley
• Björn Linse
• Brian Drawert
• chebee7i
• Daniel Rocco
• Donny Winston
• Drekin
• Erik Hvatum
• Fernando Perez
• Francisco de la Peña
• Frazer McLean
• Gareth Elston
• Gert-Ludwig Ingold
• Giuseppe Venturini
• Ian Barfield
• Ivan Pozdeev
• Jakob Gager
• Jan Schulz
• Jason Grout
• Jeff Hussmann
• Jessica B. Hamrick
• Joe Borg

40 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Joel Nothman
• Johan Forsberg
• Jonathan Frederic
• Justin Tyberg
• Koen van Besien
• Kyle Kelley
• Lorena Pantano
• Lucretiel
• Marin Gilles
• mashenjun
• Mathieu
• Matthias Bussonnier
• Merlijn van Deen
• Mikhail Korobov
• Naveen Nathan
• Nicholas Bollweg
• nottaanibot
• Omer Katz
• onesandzeroes
• Patrick Snape
• patter001
• Peter Parente
• Pietro Battiston
• RickWinter
• Robert Smith
• Ryan Nelson
• Scott Sanderson
• Sebastiaan Mathot
• Sylvain Corlay
• thethomask
• Thomas A Caswell
• Thomas Adriaan Hellinger
• Thomas Kluyver
• Tianhui Michael Li
• tmtabor
• unknown

2.9. Issues closed in the 4.x development cycle 41


IPython Documentation, Release 7.1.0.dev

• Victor Ramirez
• Volker Braun
• Wieland Hoffmann
• Yuval Langer
• Zoltán Vörös
• Élie Michel

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.10 3.x Series

2.10.1 IPython 3.2.3

Fixes compatibility with Python 3.4.4.

2.10.2 IPython 3.2.2

Address vulnerabilities when files have maliciously crafted filenames (CVE-2015-6938), or vulnerability when open-
ing text files with malicious binary content (CVE pending).
Users are strongly encouraged to upgrade immediately. There are also a few small unicode and nbconvert-related
fixes.

2.10.3 IPython 3.2.1

IPython 3.2.1 is a small bugfix release, primarily for cross-site security fixes in the notebook. Users are strongly
encouraged to upgrade immediately. There are also a few small unicode and nbconvert-related fixes.
See Issues closed in the 3.x development cycle for details.

2.10.4 IPython 3.2

IPython 3.2 contains important security fixes. Users are strongly encouraged to upgrade immediately.
Highlights:
• Address cross-site scripting vulnerabilities CVE-2015-4706, CVE-2015-4707
• A security improvement that set the secure attribute to login cookie to prevent them to be sent over http

42 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Revert the face color of matplotlib axes in the inline backend to not be transparent.
• Enable mathjax safe mode by default
• Fix XSS vulnerability in JSON error messages
• Various widget-related fixes
See Issues closed in the 3.x development cycle for details.

2.10.5 IPython 3.1

Released April 3, 2015


The first 3.x bugfix release, with 33 contributors and 344 commits. This primarily includes bugfixes to notebook layout
and focus problems.
Highlights:
• Various focus jumping and scrolling fixes in the notebook.
• Various message ordering and widget fixes in the notebook.
• Images in markdown and output are confined to the notebook width. An .unconfined CSS class is added to
disable this behavior per-image. The resize handle on output images is removed.
• Improved ordering of tooltip content for Python functions, putting the signature at the top.
• Fix UnicodeErrors when displaying some objects with unicode reprs on Python 2.
• Set the kernel’s working directory to the notebook directory when running nbconvert --execute, so that
behavior matches the live notebook.
• Allow setting custom SSL options for the tornado server with NotebookApp.ssl_options, and protect
against POODLE with default settings by disabling SSLv3.
• Fix memory leak in the IPython.parallel Controller on Python 3.
See Issues closed in the 3.x development cycle for details.

2.10.6 Release 3.0

Released February 27, 2015


This is a really big release. Over 150 contributors, and almost 6000 commits in a bit under a year. Support for
languages other than Python is greatly improved, notebook UI has been significantly redesigned, and a lot of improve-
ment has happened in the experimental interactive widgets. The message protocol and document format have both
been updated, while maintaining better compatibility with previous versions than prior updates. The notebook webapp
now enables editing of any text file, and even a web-based terminal (on Unix platforms).
3.x will be the last monolithic release of IPython, as the next release cycle will see the growing project split into its
Python-specific and language-agnostic components. Language-agnostic projects (notebook, qtconsole, etc.) will move
under the umbrella of the new Project Jupyter name, while Python-specific projects (interactive Python shell, Python
kernel, IPython.parallel) will remain under IPython, and be split into a few smaller packages. To reflect this, IPython
is in a bit of a transition state. The logo on the notebook is now the Jupyter logo. When installing kernels system-wide,
they go in a jupyter directory. We are going to do our best to ease this transition for users and developers.
Big changes are ahead.

2.10. 3.x Series 43


IPython Documentation, Release 7.1.0.dev

Using different kernels

You can now choose a kernel for a notebook within the user interface, rather than starting up a separate notebook
server for each kernel you want to use. The syntax highlighting adapts to match the language you’re working in.
Information about the kernel is stored in the notebook file, so when you open a notebook, it will automatically start
the correct kernel.
It is also easier to use the Qt console and the terminal console with other kernels, using the –kernel flag:

ipython qtconsole --kernel bash


ipython console --kernel bash

# To list available kernels


ipython kernelspec list

Kernel authors should see Kernel specs for how to register their kernels with IPython so that these mechanisms work.

44 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

Typing unicode identifiers

Complex expressions can be much cleaner when written with a wider choice of characters. Python 3 allows unicode
identifiers, and IPython 3 makes it easier to type those, using a feature from Julia. Type a backslash followed by a
LaTeX style short name, such as \alpha. Press tab, and it will turn into 𝛼.

Widget migration guide

The widget framework has a lot of backwards incompatible changes. For information about migrating widget note-
books and custom widgets to 3.0 refer to the widget migration guide.

Other new features

• TextWidget and TextareaWidget objects now include a placeholder attribute, for displaying place-
holder text before the user has typed anything.
• The %load magic can now find the source for objects in the user namespace. To enable searching the names-
pace, use the -n option.

In [1]: %load -n my_module.some_function

• DirectView objects have a new use_cloudpickle() method, which works like view.use_dill(),
but causes the cloudpickle module from PiCloud’s cloud library to be used rather than dill or the builtin
pickle module.
• Added a .ipynb exporter to nbconvert. It can be used by passing --to notebook as a commandline argument
to nbconvert.
• New nbconvert preprocessor called ClearOutputPreprocessor. This clears the output from IPython
notebooks.
• New preprocessor for nbconvert that executes all the code cells in a notebook. To run a notebook and save its
output in a new notebook:

ipython nbconvert InputNotebook --ExecutePreprocessor.enabled=True --to notebook -


˓→-output Executed

• Consecutive stream (stdout/stderr) output is merged into a single output in the notebook document. Previously,
all output messages were preserved as separate output fields in the JSON. Now, the same merge is applied to the
stored output as the displayed output, improving document load time for notebooks with many small outputs.
• NotebookApp.webapp_settings is deprecated and replaced with the more informatively named
NotebookApp.tornado_settings.
• Using %timeit prints warnings if there is at least a 4x difference in timings between the slowest and fastest
runs, since this might meant that the multiple runs are not independent of one another.

2.10. 3.x Series 45


IPython Documentation, Release 7.1.0.dev

• It’s now possible to provide mechanisms to integrate IPython with other event loops, in addition to the ones
we already support. This lets you run GUI code in IPython with an interactive prompt, and to embed the
IPython kernel in GUI applications. See Integrating with GUI event loops for details. As part of this, the
direct enable_* and disable_* functions for various GUIs in IPython.lib.inputhook have been
deprecated in favour of enable_gui() and disable_gui().
• A ScrollManager was added to the notebook. The ScrollManager controls how the notebook document
is scrolled using keyboard. Users can inherit from the ScrollManager or TargetScrollManager to
customize how their notebook scrolls. The default ScrollManager is the SlideScrollManager, which
tries to scroll to the nearest slide or sub-slide cell.
• The function interact_manual() has been added which behaves similarly to interact(), but adds a
button to explicitly run the interacted-with function, rather than doing it automatically for every change of the
parameter widgets. This should be useful for long-running functions.
• The %cython magic is now part of the Cython module. Use %load_ext Cython with a version of Cython
>= 0.21 to have access to the magic now.
• The Notebook application now offers integrated terminals on Unix platforms, intended for when it is used on a
remote server. To enable these, install the terminado Python package.
• The Notebook application can now edit any plain text files, via a full-page CodeMirror instance.
• Setting the default highlighting language for nbconvert with the config option NbConvertBase.
default_language is deprecated. Nbconvert now respects metadata stored in the kernel spec.
• IPython can now be configured systemwide, with files in /etc/ipython or /usr/local/etc/ipython
on Unix systems, or %PROGRAMDATA%\ipython on Windows.
• Added support for configurable user-supplied Jinja HTML templates for the notebook. Paths to directories
containing template files can be specified via NotebookApp.extra_template_paths. User-supplied
template directories searched first by the notebook, making it possible to replace existing templates with your
own files.
For example, to replace the notebook’s built-in error.html with your own, create a directory like /home/
my_templates and put your override template at /home/my_templates/error.html. To start the
notebook with your custom error page enabled, you would run:

ipython notebook '--extra_template_paths=["/home/my_templates/"]'

It’s also possible to override a template while also inheriting from that template, by prepending templates/
to the {% extends %} target of your child template. This is useful when you only want to override a specific
block of a template. For example, to add additional CSS to the built-in error.html, you might create an
override that looks like:

{% extends "templates/error.html" %}

{% block stylesheet %}
{{super()}}
<style type="text/css">
/* My Awesome CSS */
</style>
{% endblock %}

• Added a widget persistence API. This allows you to persist your notebooks interactive widgets. Two levels of
control are provided: 1. Higher level- WidgetManager.set_state_callbacks allows you to register
callbacks for loading and saving widget state. The callbacks you register are automatically called when neces-
sary. 2. Lower level- the WidgetManager Javascript class now has get_state and set_state methods
that allow you to get and set the state of the widget runtime.

46 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

Example code for persisting your widget state to session data:

%%javascript
require(['widgets/js/manager'], function(manager) {
manager.WidgetManager.set_state_callbacks(function() { // Load
return JSON.parse(sessionStorage.widgets_state || '{}');
}, function(state) { // Save
sessionStorage.widgets_state = JSON.stringify(state);
});
});

• Enhanced support for %env magic. As before, %env with no arguments displays all environment variables
and values. Additionally, %env can be used to get or set individual environment variables. To display an
individual value, use the %env var syntax. To set a value, use env var val or env var=val. Python
value expansion using $ works as usual.

Backwards incompatible changes

• The message protocol has been updated from version 4 to version 5. Adapters are included, so IPython frontends
can still talk to kernels that implement protocol version 4.
• The notebook format has been updated from version 3 to version 4. Read-only support for v4 notebooks has
been backported to IPython 2.4. Notable changes:
– heading cells are removed in favor or markdown headings
– notebook outputs and output messages are more consistent with each other
– use IPython.nbformat.read() and write() to read and write notebook files instead of the dep-
recated IPython.nbformat.current APIs.
You can downgrade a notebook to v3 via nbconvert:

ipython nbconvert --to notebook --nbformat 3 <notebook>

which will create notebook.v3.ipynb, a copy of the notebook in v3 format.


• IPython.core.oinspect.getsource() call specification has changed:
– oname keyword argument has been added for property source formatting
– is_binary keyword argument has been dropped, passing True had previously short-circuited the func-
tion to return None unconditionally
• Removed the octavemagic extension: it is now available as oct2py.ipython.
• Creating PDFs with LaTeX no longer uses a post processor. Use nbconvert --to pdf instead of
nbconvert --to latex --post pdf.
• Used https://github.com/jdfreder/bootstrap2to3 to migrate the Notebook to Bootstrap 3.
Additional changes:
– Set .tab-content .row 0px; left and right margin (bootstrap default is -15px;)
– Removed height: @btn_mini_height; from .list_header>div, .list_item>div in
tree.less
– Set #header div margin-bottom: 0px;
– Set #menus to float: left;
– Set #maintoolbar .navbar-text to float: none;

2.10. 3.x Series 47


IPython Documentation, Release 7.1.0.dev

– Added no-padding convenience class.


– Set border of #maintoolbar to 0px
• Accessing the container DOM object when displaying javascript has been deprecated in IPython 2.0 in favor
of accessing element. Starting with IPython 3.0 trying to access container will raise an error in browser
javascript console.
• IPython.utils.py3compat.open was removed: io.open() provides all the same functionality.
• The NotebookManager and /api/notebooks service has been replaced by a more generic ContentsManager
and /api/contents service, which supports all kinds of files.
• The Dashboard now lists all files, not just notebooks and directories.
• The --script hook for saving notebooks to Python scripts is removed, use ipython nbconvert --to
python notebook instead.
• The rmagic extension is deprecated, as it is now part of rpy2. See rpy2.ipython.rmagic.
• start_kernel() and format_kernel_cmd() no longer accept a executable parameter. Use the
kernelspec machinery instead.
• The widget classes have been renamed from *Widget to *. The old names are still functional, but are depre-
cated. i.e. IntSliderWidget has been renamed to IntSlider.
• The ContainerWidget was renamed to Box and no longer defaults as a flexible box in the web browser. A new
FlexBox widget was added, which allows you to use the flexible box model.
• The notebook now uses a single websocket at /kernels/<kernel-id>/channels instead of separate
/kernels/<kernel-id>/{shell|iopub|stdin} channels. Messages on each channel are identified
by a channel key in the message dict, for both send and recv.

Content Security Policy

The Content Security Policy is a web standard for adding a layer of security to detect and mitigate certain classes of
attacks, including Cross Site Scripting (XSS) and data injection attacks. This was introduced into the notebook to
ensure that the IPython Notebook and its APIs (by default) can only be embedded in an iframe on the same origin.
Override headers['Content-Security-Policy'] within your notebook configuration to extend for alter-
nate domains and security settings.:
c.NotebookApp.tornado_settings = {
'headers': {
'Content-Security-Policy': "frame-ancestors 'self'"
}
}

Example policies:
Content-Security-Policy: default-src 'self' https://*.jupyter.org

Matches embeddings on any subdomain of jupyter.org, so long as they are served over SSL.
There is a report-uri endpoint available for logging CSP violations, located at /api/security/csp-report. To
use it, set report-uri as part of the CSP:
c.NotebookApp.tornado_settings = {
'headers': {
'Content-Security-Policy': "frame-ancestors 'self'; report-uri /api/security/
˓→csp-report"
(continues on next page)

48 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

(continued from previous page)


}
}

It simply provides the CSP report as a warning in IPython’s logs. The default CSP sets this report-uri relative to the
base_url (not shown above).
For a more thorough and accurate guide on Content Security Policies, check out MDN’s Using Content Security Policy
for more examples.

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.11 Issues closed in the 3.x development cycle

2.11.1 Issues closed in 3.2.1

GitHub stats for 2015/06/22 - 2015/07/12 (since 3.2)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 1 issue and merged 3 pull requests. The full list can be seen on GitHub
The following 5 authors contributed 9 commits.
• Benjamin Ragan-Kelley
• Matthias Bussonnier
• Nitin Dahyabhai
• Sebastiaan Mathot
• Thomas Kluyver

2.11.2 Issues closed in 3.2

GitHub stats for 2015/04/03 - 2015/06/21 (since 3.1)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 7 issues and merged 30 pull requests. The full list can be seen on GitHub
The following 15 authors contributed 74 commits.
• Benjamin Ragan-Kelley
• Brian Gough
• Damián Avila

2.11. Issues closed in the 3.x development cycle 49


IPython Documentation, Release 7.1.0.dev

• Ian Barfield
• Jason Grout
• Jeff Hussmann
• Jessica B. Hamrick
• Kyle Kelley
• Matthias Bussonnier
• Nicholas Bollweg
• Randy Lai
• Scott Sanderson
• Sylvain Corlay
• Thomas A Caswell
• Thomas Kluyver

2.11.3 Issues closed in 3.1

GitHub stats for 2015/02/27 - 2015/04/03 (since 3.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 46 issues and merged 133 pull requests. The full list can be seen on GitHub.
The following 33 authors contributed 344 commits:
• Abe Guerra
• Adal Chiriliuc
• Benjamin Ragan-Kelley
• Brian Drawert
• Fernando Perez
• Gareth Elston
• Gert-Ludwig Ingold
• Giuseppe Venturini
• Jakob Gager
• Jan Schulz
• Jason Grout
• Jessica B. Hamrick
• Jonathan Frederic
• Justin Tyberg
• Lorena Pantano
• mashenjun
• Mathieu
• Matthias Bussonnier

50 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Morten Enemark Lund


• Naveen Nathan
• Nicholas Bollweg
• onesandzeroes
• Patrick Snape
• Peter Parente
• RickWinter
• Robert Smith
• Ryan Nelson
• Scott Sanderson
• Sylvain Corlay
• Thomas Kluyver
• tmtabor
• Wieland Hoffmann
• Yuval Langer

2.11.4 Issues closed in 3.0

GitHub stats for 2014/04/02 - 2015/02/13 (since 2.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
We closed 469 issues and merged 925 pull requests. The full list can be seen on GitHub.
The following 155 authors contributed 5975 commits.
• A.J. Holyoake
• abalkin
• Adam Hodgen
• Adrian Price-Whelan
• Amin Bandali
• Andreas Amann
• Andrew Dawes
• Andrew Jesaitis
• Andrew Payne
• AnneTheAgile
• Aron Ahmadia
• Ben Duffield
• Benjamin ABEL
• Benjamin Ragan-Kelley
• Benjamin Schultz

2.11. Issues closed in the 3.x development cycle 51


IPython Documentation, Release 7.1.0.dev

• Björn Grüning
• Björn Linse
• Blake Griffith
• Boris Egorov
• Brian E. Granger
• bsvh
• Carlos Cordoba
• Cedric GESTES
• cel
• chebee7i
• Christoph Gohlke
• CJ Carey
• Cyrille Rossant
• Dale Jung
• Damián Avila
• Damon Allen
• Daniel B. Vasquez
• Daniel Rocco
• Daniel Wehner
• Dav Clark
• David Hirschfeld
• David Neto
• dexterdev
• Dimitry Kloper
• dongweiming
• Doug Blank
• drevicko
• Dustin Rodriguez
• Eric Firing
• Eric Galloway
• Erik M. Bray
• Erik Tollerud
• Ezequiel (Zac) Panepucci
• Fernando Perez
• foogunlana
• Francisco de la Peña

52 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• George Titsworth
• Gordon Ball
• gporras
• Grzegorz Rożniecki
• Helen ST
• immerrr
• Ingolf Becker
• Jakob Gager
• James Goppert
• James Porter
• Jan Schulz
• Jason Goad
• Jason Gors
• Jason Grout
• Jason Newton
• jdavidheiser
• Jean-Christophe Jaskula
• Jeff Hemmelgarn
• Jeffrey Bush
• Jeroen Demeyer
• Jessica B. Hamrick
• Jessica Frazelle
• jhemmelg
• Jim Garrison
• Joel Nothman
• Johannes Feist
• John Stowers
• John Zwinck
• jonasc
• Jonathan Frederic
• Juergen Hasch
• Julia Evans
• Justyna Ilczuk
• Jörg Dietrich
• K.-Michael Aye
• Kalibri

2.11. Issues closed in the 3.x development cycle 53


IPython Documentation, Release 7.1.0.dev

• Kester Tong
• Kyle Kelley
• Kyle Rawlins
• Lev Abalkin
• Manuel Riel
• Martin Bergtholdt
• Martin Spacek
• Mateusz Paprocki
• Mathieu
• Matthias Bussonnier
• Maximilian Albert
• mbyt
• MechCoder
• Mohan Raj Rajamanickam
• mvr
• Narahari
• Nathan Goldbaum
• Nathan Heijermans
• Nathaniel J. Smith
• ncornette
• Nicholas Bollweg
• Nick White
• Nikolay Koldunov
• Nile Geisinger
• Olga Botvinnik
• Osada Paranaliyanage
• Pankaj Pandey
• Pascal Bugnion
• patricktokeeffe
• Paul Ivanov
• Peter Odding
• Peter Parente
• Peter Würtz
• Phil Elson
• Phillip Nordwall
• Pierre Gerold

54 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Pierre Haessig
• Raffaele De Feo
• Ramiro Gómez
• Reggie Pierce
• Remi Rampin
• Renaud Richardet
• Richard Everson
• Scott Sanderson
• Silvia Vinyes
• Simon Guillot
• Spencer Nelson
• Stefan Zimmermann
• Steve Chan
• Steven Anton
• Steven Silvester
• sunny
• Susan Tan
• Sylvain Corlay
• Tarun Gaba
• Thomas Ballinger
• Thomas Kluyver
• Thomas Robitaille
• Thomas Spura
• Tobias Oberstein
• Torsten Bittner
• unknown
• v923z
• vaibhavsagar
• W. Trevor King
• weichm
• Xiuming Chen
• Yaroslav Halchenko
• zah

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

2.11. Issues closed in the 3.x development cycle 55


IPython Documentation, Release 7.1.0.dev

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.12 Migrating Widgets to IPython 3

2.12.1 Upgrading Notebooks

1. The first thing you’ll notice when upgrading an IPython 2.0 widget notebook to IPython 3.0 is the “Notebook
converted” dialog. Click “ok”.
2. All of the widgets distributed with IPython have been renamed. The “Widget” suffix was removed from the end
of the class name. i.e. ButtonWidget is now Button.
3. ContainerWidget was renamed to Box.
4. PopupWidget was removed from IPython, because bootstrapjs was problematic (creates global variables,
etc.). If you use the PopupWidget, try using a Box widget instead. If your notebook can’t live without the
popup functionality, subclass the Box widget (both in Python and JS) and use JQuery UI’s draggable() and
resizable() methods to mimic the behavior.
5. add_class and remove_class were removed. More often than not a new attribute exists on the widget
that allows you to achieve the same explicitly. i.e. the Button widget now has a button_style attribute
which you can set to ‘primary’, ‘success’, ‘info’, ‘warning’, ‘danger’, or ‘’ instead of using add_class to
add the bootstrap class. VBox and HBox classes (flexible Box subclasses) were added that allow you to avoid
using add_class and remove_class to make flexible box model layouts. As a last resort, if you can’t find
a built in attribute for the class you want to use, a new _dom_classes list trait was added, which combines
add_class and remove_class into one stateful list.
6. set_css and get_css were removed in favor of explicit style attributes - visible, width,
height, padding, margin, color, background_color, border_color, border_width,
border_radius, border_style, font_style, font_weight, font_size, and font_family
are a few. If you can’t find a trait to see the css attribute you need, you can, in order of preference, (A) subclass
to create your own custom widget, (B) use CSS and the _dom_classes trait to set _dom_classes, or (C)
use the _css dictionary to set CSS styling like set_css and get_css.
7. For selection widgets, such as Dropdown, the values argument has been renamed to options.

2.12.2 Upgrading Custom Widgets

Javascript

1. If you are distributing your widget and decide to use the deferred loading technique (preferred), you can remove
all references to the WidgetManager and the register model/view calls (see the Python section below for more
information).
2. In 2.0 require.js was used incorrectly, that has been fixed and now loading works more like Python’s import.
Requiring widgets/js/widget doesn’t import the WidgetManager class, instead it imports a dictionary
that exposes the classes within that module:

56 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

{
'WidgetModel': WidgetModel,
'WidgetView': WidgetView,
'DOMWidgetView': DOMWidgetView,
'ViewList': ViewList,
}

If you decide to continue to use the widget registry (by registering your widgets with the manager), you can
import a dictionary with a handle to the WidgetManager class by requiring widgets/js/manager. Doing
so will import:

{'WidgetManager': WidgetManager}

3. Don’t rely on the IPython namespace for anything. To inherit from the DOMWidgetView, WidgetView, or
WidgetModel, require widgets/js/widget as widget. If you were inheriting from DOMWidgetView,
and the code looked like this:

IPython.DOMWidgetView.extend({...})

It would become this:

widget.DOMWidgetView.extend({...})

4. Custom models are encouraged. When possible, it’s recommended to move your code into a custom model, so
actions are performed 1 time, instead of N times where N is the number of displayed views.

Python

Generally, custom widget Python code can remain unchanged. If you distribute your custom widget, you may be using
display and Javascript to publish the widget’s Javascript to the front-end. That is no longer the recommended
way of distributing widget Javascript. Instead have the user install the Javascript to his/her nbextension directory or
their profile’s static directory. Then use the new _view_module and _model_module traitlets in combination
with _view_name and _model_name to instruct require.js on how to load the widget’s Javascript. The Javascript
is then loaded when the widget is used for the first time.

2.12.3 Details

Asynchronous

In the IPython 2.x series the only way to register custom widget views and models was to use the registry in the widget
manager. Unfortunately, using this method made distributing and running custom widgets difficult. The widget
maintainer had to either use the rich display framework to push the widget’s Javascript to the notebook or instruct
the users to install the Javascript by hand in a custom profile. With the first method, the maintainer would have to
be careful about when the Javascript was pushed to the front-end. If the Javascript was pushed on Python widget
import, the widgets wouldn’t work after page refresh. This is because refreshing the page does not restart the kernel,
and the Python import statement only runs once in a given kernel instance (unless you reload the Python modules,
which isn’t straight forward). This meant the maintainer would have to have a separate push_js() method that the
user would have to call after importing the widget’s Python code.
Our solution was to add support for loading widget views and models using require.js paths. Thus the comm and
widget frameworks now support lazy loading. To do so, everything had to be converted to asynchronous code. HTML5
promises are used to accomplish that (#6818, #6914).

2.12. Migrating Widgets to IPython 3 57


IPython Documentation, Release 7.1.0.dev

Symmetry

In IPython 3.0, widgets can be instantiated from the front-end (#6664). On top of this, a widget persistence API was
added (#7163, #7227). With the widget persistence API, you can persist your widget instances using Javascript. This
makes it easy to persist your widgets to your notebook document (with a small amount of custom JS). By default, the
widgets are persisted to your web browsers local storage which makes them reappear when your refresh the page.

Smaller Changes

• Latex math is supported in widget descriptions (#5937).


• Widgets can be display more than once within a single container widget (#5963, #6990).
• FloatRangeSlider and IntRangeSlider were added (#6050).
• “Widget” was removed from the ends of all of the widget class names (#6125).
• ContainerWidget was renamed to Box (#6125).
• HBox and VBox widgets were added (#6125).
• add\_class and remove\_class were removed in favor of a _dom_classes list (#6235).
• get\_css and set\_css were removed in favor of explicit traits for widget styling (#6235).
• jslink and jsdlink were added (#6454, #7468).
• An Output widget was added, which allows you to print and display within widgets (#6670).
• PopupWidget was removed (#7341).
• A visual cue was added for widgets with ‘dead’ comms (#7227).
• A SelectMultiple widget was added (a Select widget that allows multiple things to be selected at once)
(#6890).
• A class was added to help manage children views (#6990).
• A warning was added that shows on widget import because it’s expected that the API will change again by
IPython 4.0. This warning can be suppressed (#7107, #7200, #7201, #7204).

2.12.4 Comm and Widget PR Index

Here is a chronological list of PRs affecting the widget and comm frameworks for IPython 3.0. Note that later PRs
may revert changes made in earlier PRs:
• Add placeholder attribute to text widgets #5652
• Add latex support in widget labels, #5937
• Allow widgets to display more than once within container widgets. #5963
• use require.js, #5980
• Range widgets #6050
• Interact on_demand option #6051
• Allow text input on slider widgets #6106
• support binary buffers in comm messages #6110
• Embrace the flexible box model in the widgets #6125

58 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Widget trait serialization #6128


• Make Container widgets take children as the first positional argument #6153
• once-displayed #6168
• Validate slider value, when limits change #6171
• Unregistering comms in Comm Manager #6216
• Add EventfulList and EventfulDict trait types. #6228
• Remove add/remove_class and set/get_css. #6235
• avoid unregistering widget model twice #6250
• Widget property lock should compare json states, not python states #6332
• Strip the IPY_MODEL_ prefix from widget IDs before referencing them. #6377
• “event” is not defined error in Firefox #6437
• Javascript link #6454
• Bulk update of widget attributes #6463
• Creating a widget registry on the Python side. #6493
• Allow widget views to be loaded from require modules #6494
• Fix Issue #6530 #6532
• Make comm manager (mostly) independent of InteractiveShell #6540
• Add semantic classes to top-level containers for single widgets #6609
• Selection Widgets: forcing ‘value’ to be in ‘values’ #6617
• Allow widgets to be constructed from Javascript #6664
• Output widget #6670
• Minor change in widgets.less to fix alignment issue #6681
• Make Selection widgets respect values order. #6747
• Widget persistence API #6789
• Add promises to the widget framework. #6818
• SelectMultiple widget #6890
• Tooltip on toggle button #6923
• Allow empty text box *while typing* for numeric widgets #6943
• Ignore failure of widget MathJax typesetting #6948
• Refactor the do_diff and manual child view lists into a separate ViewList object #6990
• Add warning to widget namespace import. #7107
• lazy load widgets #7120
• Fix padding of widgets. #7139
• Persist widgets across page refresh #7163
• Make the widget experimental error a real python warning #7200
• Make the widget error message shorter and more understandable. #7201

2.12. Migrating Widgets to IPython 3 59


IPython Documentation, Release 7.1.0.dev

• Make the widget warning brief and easy to filter #7204


• Add visual cue for widgets with dead comms #7227
• Widget values as positional arguments #7260
• Remove the popup widget #7341
• document and validate link, dlink #7468
• Document interact 5637 #7525
• Update some broken examples of using widgets #7547
• Use Output widget with Interact #7554
• don’t send empty execute_result messages #7560
• Validation on the python side #7602
• only show prompt overlay if there’s a prompt #7661
• Allow predictate to be used for comparison in selection widgets #7674
• Fix widget view persistence. #7680
• Revert “Use Output widget with Interact” #7703

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.13 2.x Series

2.13.1 Release 2.4

January, 2014

Note: Some of the patches marked for 2.4 were left out of 2.4.0. Please use 2.4.1.

• backport read support for nbformat v4 from IPython 3


• support for PyQt5 in the kernel (not QtConsole)
• support for Pygments 2.0
For more information on what fixes have been backported to 2.4, see our detailed release info.

60 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

2.13.2 Release 2.3.1

November, 2014
• Fix CRCRLF line-ending bug in notebooks on Windows
For more information on what fixes have been backported to 2.3.1, see our detailed release info.

2.13.3 Release 2.3.0

October, 2014
• improve qt5 support
• prevent notebook data loss with atomic writes
For more information on what fixes have been backported to 2.3, see our detailed release info.

2.13.4 Release 2.2.0

August, 2014
• Add CORS configuration
For more information on what fixes have been backported to 2.2, see our detailed release info.

2.13.5 Release 2.1.0

May, 2014
IPython 2.1 is the first bugfix release for 2.0. For more information on what fixes have been backported to 2.1, see our
detailed release info.

2.13.6 Release 2.0.0

April, 2014
IPython 2.0 requires Python 2.7.2 or 3.3.0. It does not support Python 3.0, 3.1, 3.2, 2.5, or 2.6.
The principal milestones of 2.0 are:
• interactive widgets for the notebook
• directory navigation in the notebook dashboard
• persistent URLs for notebooks
• a new modal user interface in the notebook
• a security model for notebooks
Contribution summary since IPython 1.0 in August, 2013:
• ~8 months of work
• ~650 pull requests merged
• ~400 issues closed (non-pull requests)
• contributions from ~100 authors

2.13. 2.x Series 61


IPython Documentation, Release 7.1.0.dev

• ~4000 commits
The amount of work included in this release is so large that we can only cover here the main highlights; please see our
detailed release statistics for links to every issue and pull request closed on GitHub as well as a full list of individual
contributors.

New stuff in the IPython notebook

Directory navigation

The IPython notebook dashboard allows navigation into subdirectories. URLs are persistent based on the notebook’s
path and name, so no more random UUID URLs.
Serving local files no longer needs the files/ prefix. Relative links across notebooks and other files should work
just as if notebooks were regular HTML files.

62 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

Interactive widgets

IPython 2.0 adds IPython.html.widgets, for manipulating Python objects in the kernel with GUI controls in
the notebook. IPython comes with a few built-in widgets for simple data types, and an API designed for developers to
build more complex widgets. See the widget docs for more information.

Modal user interface

The notebook has added separate Edit and Command modes, allowing easier keyboard commands and making key-
board shortcut customization possible. See the new User Interface notebook for more information.
You can familiarize yourself with the updated notebook user interface, including an explanation of Edit and Command
modes, by going through the short guided tour which can be started from the Help menu.

2.13. 2.x Series 63


IPython Documentation, Release 7.1.0.dev

Security

2.0 introduces a security model for notebooks, to prevent untrusted code from executing on users’ behalf when note-
books open. A quick summary of the model:
• Trust is determined by signing notebooks.
• Untrusted HTML output is sanitized.
• Untrusted Javascript is never executed.
• HTML and Javascript in Markdown are never trusted.

Dashboard “Running” tab

The dashboard now has a “Running” tab which shows all of the running notebooks.

64 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

Single codebase Python 3 support

IPython previously supported Python 3 by running 2to3 during setup. We have now switched to a single codebase
which runs natively on Python 2.7 and 3.3.
For notes on how to maintain this, see /development/pycompat.

Selecting matplotlib figure formats

Deprecate single-format InlineBackend.figure_format configurable in favor of InlineBackend.


figure_formats, which is a set, supporting multiple simultaneous figure formats (e.g. png, pdf).
This is available at runtime with the new API function IPython.display.set_matplotlib_formats().

clear_output changes

• There is no longer a 500ms delay when calling clear_output.


• The ability to clear stderr and stdout individually was removed.
• A new wait flag that prevents clear_output from being executed until new output is available. This
eliminates animation flickering by allowing the user to double buffer the output.
• The output div height is remembered when the wait=True flag is used.

Extending configurable containers

Some configurable traits are containers (list, dict, set) Config objects now support calling extend, update,
insert, etc. on traits in config files, which will ultimately result in calling those methods on the original object.
The effect being that you can now add to containers without having to copy/paste the initial value:

c = get_config()
c.InlineBackend.rc.update({ 'figure.figsize' : (6, 4) })

Changes to hidden namespace on startup

Previously, all names declared in code run at startup (startup files, ipython -i script.py, etc.) were added to
the hidden namespace, which hides the names from tools like %whos. There are two changes to this behavior:
1. Scripts run on the command-line ipython -i script.py``now behave the same as if they
were passed to ``%run, so their variables are never hidden.
2. A boolean config flag InteractiveShellApp.hide_initial_ns has been added to optionally disable
the hidden behavior altogether. The default behavior is unchanged.

Using dill to expand serialization support

The new function use_dill() allows dill to extend serialization support in IPython.parallel (closures, etc.).
A DirectView.use_dill() convenience method was also added, to enable dill locally and on all engines with
one call.

2.13. 2.x Series 65


IPython Documentation, Release 7.1.0.dev

New IPython console lexer

The IPython console lexer has been rewritten and now supports tracebacks and customized input/output prompts. See
the new lexer docs for details.

DisplayFormatter changes

There was no official way to query or remove callbacks in the Formatter API. To remedy this, the following methods
are added to BaseFormatter:
• lookup(instance) - return appropriate callback or a given object
• lookup_by_type(type_or_str) - return appropriate callback for a given type or 'mod.name' type
string
• pop(type_or_str) - remove a type (by type or string). Pass a second argument to avoid KeyError (like
dict).
All of the above methods raise a KeyError if no match is found.
And the following methods are changed:
• for_type(type_or_str) - behaves the same as before, only adding support for 'mod.name' type
strings in addition to plain types. This removes the need for for_type_by_name(), but it remains for
backward compatibility.
Formatters can now raise NotImplementedError in addition to returning None to indicate that they cannot format a
given object.

Exceptions and Warnings

Exceptions are no longer silenced when formatters fail. Instead, these are turned into a FormatterWarning. A
FormatterWarning will also be issued if a formatter returns data of an invalid type (e.g. an integer for ‘image/png’).

Other changes

• %%capture cell magic now captures the rich display output, not just stdout/stderr
• In notebook, Showing tooltip on tab has been disables to avoid conflict with completion, Shift-Tab could still be
used to invoke tooltip when inside function signature and/or on selection.
• object_info_request has been replaced by object_info for consistency in the javascript API.
object_info is a simpler interface to register callback that is incompatible with object_info_request.
• Previous versions of IPython on Linux would use the XDG config directory, creating ~/.config/ipython
by default. We have decided to go back to ~/.ipython for consistency among systems. IPython will issue a
warning if it finds the XDG location, and will move it to the new location if there isn’t already a directory there.
• Equations, images and tables are now centered in Markdown cells.
• Multiline equations are now centered in output areas; single line equations remain left justified.
• IPython config objects can be loaded from and serialized to JSON. JSON config file have the same base name
as their .py counterpart, and will be loaded with higher priority if found.
• bash completion updated with support for all ipython subcommands and flags, including nbconvert
• ipython history trim: added --keep=<N> as an alias for the more verbose --HistoryTrim.
keep=<N>

66 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• New ipython history clear subcommand, which is the same as the newly supported ipython
history trim --keep=0
• You can now run notebooks in an interactive session via %run notebook.ipynb.
• Print preview is back in the notebook menus, along with options to download the open notebook in various
formats. This is powered by nbconvert.
• PandocMissing exceptions will be raised if Pandoc is unavailable, and warnings will be printed if the version
found is too old. The recommended Pandoc version for use with nbconvert is 1.12.1.
• The InlineBackend.figure_format now supports JPEG output if PIL/Pillow is available.
• Input transformers (see Custom input transformation) may now raise SyntaxError if they determine that
input is invalid. The input transformation machinery in IPython will handle displaying the exception to the user
and resetting state.
• Calling container.show() on javascript display is deprecated and will trigger errors on future IPython
notebook versions. container now show itself as soon as non-empty
• Added InlineBackend.print_figure_kwargs to allow passing keyword arguments to matplotlib’s
Canvas.print_figure. This can be used to change the value of bbox_inches, which is ‘tight’ by
default, or set the quality of JPEG figures.
• A new callback system has been introduced. For details, see IPython Events.
• jQuery and require.js are loaded from CDNs in the default HTML template, so javascript is available in static
HTML export (e.g. nbviewer).

Backwards incompatible changes

• Python 2.6 and 3.2 are no longer supported: the minimum required Python versions are now 2.7 and 3.3.
• The Transformer classes have been renamed to Preprocessor in nbconvert and their call methods have been
renamed to preprocess.
• The call methods of nbconvert post-processsors have been renamed to postprocess.
• The module IPython.core.fakemodule has been removed.
• The alias system has been reimplemented to use magic functions. There should be little visible difference while
automagics are enabled, as they are by default, but parts of the AliasManager API have been removed.
• We fixed an issue with switching between matplotlib inline and GUI backends, but the fix requires matplotlib
1.1 or newer. So from now on, we consider matplotlib 1.1 to be the minimally supported version for IPython.
Older versions for the most part will work, but we make no guarantees about it.
• The pycolor command has been removed. We recommend the much more capable pygmentize command
from the Pygments project. If you need to keep the exact output of pycolor, you can still use python -m
IPython.utils.PyColorize foo.py.
• IPython.lib.irunner and its command-line entry point have been removed. It had fallen out of use long
ago.
• The input_prefilter hook has been removed, as it was never actually used by the code. The input trans-
former system offers much more powerful APIs to work with input code. See Custom input transformation for
details.
• IPython.core.inputsplitter.IPythonInputSplitter no longer has a method
source_raw_reset(), but gains raw_reset() instead. Use of source_raw_reset can be
replaced with:

2.13. 2.x Series 67


IPython Documentation, Release 7.1.0.dev

raw = isp.source_raw
transformed = isp.source_reset()

• The Azure notebook manager was removed as it was no longer compatible with the notebook storage scheme.
• Simplifying configurable URLs
– base_project_url is renamed to base_url (base_project_url is kept as a deprecated alias, for now)
– base_kernel_url configurable is removed (use base_url)
– websocket_url configurable is removed (use base_url)

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.14 Issues closed in the 2.x development cycle

2.14.1 Issues closed in 2.4.1

GitHub stats for 2014/11/01 - 2015/01/30

Note: IPython 2.4.0 was released without a few of the backports listed below. 2.4.1 has the correct patches intended
for 2.4.0.

These lists are automatically generated, and may be incomplete or contain duplicates.
The following 7 authors contributed 35 commits.
• Benjamin Ragan-Kelley
• Carlos Cordoba
• Damon Allen
• Jessica B. Hamrick
• Mateusz Paprocki
• Peter Würtz
• Thomas Kluyver
We closed 10 issues and merged 6 pull requests; this is the full list (generated with the script tools/
github_stats.py):
Pull Requests (10):
• PR #7106: Changed the display order of rich output in the live notebook.

68 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #6878: Update pygments monkeypatch for compatibility with Pygments 2.0


• PR #6778: backport nbformat v4 to 2.x
• PR #6761: object_info_reply field is oname, not name
• PR #6653: Fix IPython.utils.ansispan() to ignore stray [0m
• PR #6706: Correctly display prompt numbers that are None
• PR #6634: don’t use contains in SelectWidget item_query
• PR #6593: note how to start the qtconsole
• PR #6281: more minor fixes to release scripts
• PR #5458: Add support for PyQt5.
Issues (6):
• #7272: qtconsole problems with pygments
• #7049: Cause TypeError: ‘NoneType’ object is not callable in qtconsole
• #6877: Qt console doesn’t work with pygments 2.0rc1
• #6689: Problem with string containing two or more question marks
• #6702: Cell numbering after ClearOutput preprocessor
• #6633: selectwidget doesn’t display 1 as a selection choice when passed in as a member of values list

2.14.2 Issues closed in 2.3.1

Just one bugfix: fixed bad CRCRLF line-endings in notebooks on Windows


Pull Requests (1):
• PR #6911: don’t use text mode in mkstemp
Issues (1):
• #6599: Notebook.ipynb CR+LF turned into CR+CR+LF

2.14.3 Issues closed in 2.3.0

GitHub stats for 2014/08/06 - 2014/10/01


These lists are automatically generated, and may be incomplete or contain duplicates.
The following 6 authors contributed 31 commits.
• Benjamin Ragan-Kelley
• David Hirschfeld
• Eric Firing
• Jessica B. Hamrick
• Matthias Bussonnier
• Thomas Kluyver

2.14. Issues closed in the 2.x development cycle 69


IPython Documentation, Release 7.1.0.dev

We closed 16 issues and merged 9 pull requests; this is the full list (generated with the script tools/
github_stats.py):
Pull Requests (16):
• PR #6587: support %matplotlib qt5 and %matplotlib nbagg
• PR #6583: Windows symlink test fixes
• PR #6585: fixes #6473
• PR #6581: Properly mock winreg functions for test
• PR #6556: Use some more informative asserts in inprocess kernel tests
• PR #6514: Fix for copying metadata flags
• PR #6453: Copy file metadata in atomic save
• PR #6480: only compare host:port in Websocket.check_origin
• PR #6483: Trim anchor link in heading cells, fixes #6324
• PR #6410: Fix relative import in appnope
• PR #6395: update mathjax CDN url in nbconvert template
• PR #6269: Implement atomic save
• PR #6374: Rename abort_queues –> _abort_queues
• PR #6321: Use appnope in qt and wx gui support from the terminal; closes #6189
• PR #6318: use write_error instead of get_error_html
• PR #6303: Fix error message when failing to load a notebook
Issues (9):
• #6057: %matplotlib + qt5
• #6518: Test failure in atomic save on Windows
• #6473: Switching between “Raw Cell Format” and “Edit Metadata” does not work
• #6405: Creating a notebook should respect directory permissions; saving should respect prior permissions
• #6324: Anchors in Heading don’t work.
• #6409: No module named ‘_dummy’
• #6392: Mathjax library link broken
• #6329: IPython Notebook Server URL now requires “tree” at the end of the URL? (version 2.2)
• #6189: ipython console freezes for increasing no of seconds in %pylab mode

2.14.4 Issues closed in 2.2.0

GitHub stats for 2014/05/21 - 2014/08/06 (tag: rel-2.1.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
The following 13 authors contributed 36 commits.
• Adam Hodgen
• Benjamin Ragan-Kelley

70 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Björn Grüning
• Dara Adib
• Eric Galloway
• Jonathan Frederic
• Kyle Kelley
• Matthias Bussonnier
• Paul Ivanov
• Shayne Hodge
• Steven Anton
• Thomas Kluyver
• Zahari
We closed 23 issues and merged 11 pull requests; this is the full list (generated with the script tools/
github_stats.py):
Pull Requests (23):
• PR #6279: minor updates to release scripts
• PR #6273: Upgrade default mathjax version.
• PR #6249: always use HTTPS getting mathjax from CDN
• PR #6114: update hmac signature comparison
• PR #6195: Close handle on new temporary files before returning filename
• PR #6143: pin tornado to < 4 on travis js tests
• PR #6134: remove rackcdn https workaround for mathjax cdn
• PR #6120: Only allow iframe embedding on same origin.
• PR #6117: Remove / from route of TreeRedirectHandler.
• PR #6105: only set allow_origin_pat if defined
• PR #6102: Add newline if missing to end of script magic cell
• PR #6077: allow unicode keys in dicts in json_clean
• PR #6061: make CORS configurable
• PR #6081: don’t modify dict keys while iterating through them
• PR #5803: unify visual line handling
• PR #6005: Changed right arrow key movement function to mirror left arrow key
• PR #6029: add pickleutil.PICKLE_PROTOCOL
• PR #6003: Set kernel_id before checking websocket
• PR #5994: Fix ssh tunnel for Python3
• PR #5973: Do not create checkpoint_dir relative to current dir
• PR #5933: fix qt_loader import hook signature
• PR #5944: Markdown rendering bug fix.

2.14. Issues closed in the 2.x development cycle 71


IPython Documentation, Release 7.1.0.dev

• PR #5917: use shutil.move instead of os.rename


Issues (11):
• #6246: Include MathJax by default or access the CDN over a secure connection
• #5525: Websocket origin check fails when used with Apache WS proxy
• #5901: 2 test failures in Python 3.4 in parallel group
• #5926: QT console: text selection cannot be made from left to right with keyboard
• #5998: use_dill does not work in Python 3.4
• #5964: Traceback on Qt console exit
• #5787: Error in Notebook-Generated latex (nbconvert)
• #5950: qtconsole truncates help
• #5943: 2.x: notebook fails to load when using HTML comments
• #5932: Qt ImportDenier Does Not Adhere to PEP302
• #5898: OSError when moving configuration file

2.14.5 Issues closed in 2.1.0

GitHub stats for 2014/04/02 - 2014/05/21 (since 2.0.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
The following 35 authors contributed 145 commits.
• Adrian Price-Whelan
• Aron Ahmadia
• Benjamin Ragan-Kelley
• Benjamin Schultz
• Björn Linse
• Blake Griffith
• chebee7i
• Damián Avila
• Dav Clark
• dexterdev
• Erik Tollerud
• Grzegorz Rożniecki
• Jakob Gager
• jdavidheiser
• Jessica B. Hamrick
• Jim Garrison
• Jonathan Frederic
• Matthias Bussonnier

72 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Maximilian Albert
• Mohan Raj Rajamanickam
• ncornette
• Nikolay Koldunov
• Nile Geisinger
• Pankaj Pandey
• Paul Ivanov
• Pierre Haessig
• Raffaele De Feo
• Renaud Richardet
• Spencer Nelson
• Steve Chan
• sunny
• Susan Tan
• Thomas Kluyver
• Yaroslav Halchenko
• zah
We closed a total of 129 issues, 92 pull requests and 37 regular issues; this is the full list (generated with the script
tools/github_stats.py --milestone 2.1):
Pull Requests (92):
• PR #5871: specify encoding in msgpack.unpackb
• PR #5869: Catch more errors from clipboard access on Windows
• PR #5866: Make test robust against differences in line endings
• PR #5605: Two cell toolbar fixes.
• PR #5843: remove Firefox-specific CSS workaround
• PR #5845: Pass Windows interrupt event to kernels as an environment variable
• PR #5835: fix typo in v2 convert
• PR #5841: Fix writing history with output to a file in Python 2
• PR #5842: fix typo in nbconvert help
• PR #5846: Fix typos in Cython example
• PR #5839: Close graphics dev in finally clause
• PR #5837: pass on install docs
• PR #5832: Fixed example to work with python3
• PR #5826: allow notebook tour instantiation to fail
• PR #5560: Minor expansion of Cython example
• PR #5818: interpret any exception in getcallargs as not callable

2.14. Issues closed in the 2.x development cycle 73


IPython Documentation, Release 7.1.0.dev

• PR #5816: Add output to IPython directive when in verbatim mode.


• PR #5822: Don’t overwrite widget description in interact
• PR #5782: Silence exception thrown by completer when dir() does not return a list
• PR #5807: Drop log level to info for Qt console shutdown
• PR #5814: Remove -i options from mv, rm and cp aliases
• PR #5812: Fix application name when printing subcommand help.
• PR #5804: remove an inappropriate !
• PR #5805: fix engine startup files
• PR #5806: Don’t auto-move .config/ipython if symbolic link
• PR #5716: Add booktabs package to latex base.tplx
• PR #5669: allows threadsafe sys.stdout.flush from background threads
• PR #5668: allow async output on the most recent request
• PR #5768: fix cursor keys in long lines wrapped in markdown
• PR #5788: run cells with silent=True in %run nb.ipynb
• PR #5715: log all failed ajax API requests
• PR #5769: Don’t urlescape the text that goes into a title tag
• PR #5762: Fix check for pickling closures
• PR #5766: View.map with empty sequence should return empty list
• PR #5758: Applied bug fix: using fc and ec did not properly set the figure canvas . . .
• PR #5754: Format command name into subcommand_description at run time, not import
• PR #5744: Describe using PyPI/pip to distribute & install extensions
• PR #5712: monkeypatch inspect.findsource only when we use it
• PR #5708: create checkpoints dir in notebook subdirectories
• PR #5714: log error message when API requests fail
• PR #5732: Quick typo fix in nbformat/convert.py
• PR #5713: Fix a NameError in IPython.parallel
• PR #5704: Update nbconvertapp.py
• PR #5534: cleanup some pre css inheritance
• PR #5699: don’t use common names in require decorators
• PR #5692: Update notebook.rst fixing broken reference to notebook examples readme
• PR #5693: Update parallel_intro.rst to fix a broken link to examples
• PR #5486: disambiguate to location when no IPs can be determined
• PR #5574: Remove the outdated keyboard shortcuts from notebook docs
• PR #5568: Use __qualname__ in pretty reprs for Python 3
• PR #5678: Fix copy & paste error in docstring of ImageWidget class
• PR #5677: Fix %bookmark -l for Python 3

74 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #5670: nbconvert: Fix CWD imports


• PR #5647: Mention git hooks in install documentation
• PR #5671: Fix blank slides issue in Reveal slideshow pdf export
• PR #5657: use ‘localhost’ as default for the notebook server
• PR #5584: more semantic icons
• PR #5594: update components with marked-0.3.2
• PR #5500: check for Python 3.2
• PR #5582: reset readline after running PYTHONSTARTUP
• PR #5630: Fixed Issue #4012 Added Help menubar link to Github markdown doc
• PR #5613: Fixing bug #5607
• PR #5633: Provide more help if lessc is not found.
• PR #5620: fixed a typo in IPython.core.formatters
• PR #5619: Fix typo in storemagic module docstring
• PR #5592: add missing browser to notebook_aliases list
• PR #5506: Fix ipconfig regex pattern
• PR #5581: Fix rmagic for cells ending in comment.
• PR #5576: only process cr if it’s found
• PR #5478: Add git-hooks install script. Update README.md
• PR #5546: do not shutdown notebook if ‘n’ is part of answer
• PR #5527: Don’t remove upload items from nav tree unless explicitly requested.
• PR #5501: remove inappropriate wheel tag override
• PR #5548: FileNotebookManager: Use shutil.move() instead of os.rename()
• PR #5524: never use for (var i in array)
• PR #5459: Fix interact animation page jump FF
• PR #5559: Minor typo fix in “Cython Magics.ipynb”
• PR #5507: Fix typo in interactive widgets examples index notebook
• PR #5554: Make HasTraits pickleable
• PR #5535: fix n^2 performance issue in coalesce_streams preprocessor
• PR #5522: fix iteration over Client
• PR #5488: Added missing require and jquery from cdn.
• PR #5516: ENH: list generated config files in generated, and rm them upon clean
• PR #5493: made a minor fix to one of the widget examples
• PR #5512: Update tooltips to refer to shift-tab
• PR #5505: Make backport_pr work on Python 3
• PR #5503: check explicitly for ‘dev’ before adding the note to docs
• PR #5498: use milestones to indicate backport

2.14. Issues closed in the 2.x development cycle 75


IPython Documentation, Release 7.1.0.dev

• PR #5492: Polish whatsnew docs


• PR #5495: Fix various broken things in docs
• PR #5496: Exclude whatsnew/pr directory from docs builds
• PR #5489: Fix required Python versions
Issues (37):
• #5364: Horizontal scrollbar hides cell’s last line on Firefox
• #5192: horisontal scrollbar overlaps output or touches next cell
• #5840: Third-party Windows kernels don’t get interrupt signal
• #2412: print history to file using qtconsole and notebook
• #5703: Notebook doesn’t render with “ask me every time” cookie setting in Firefox
• #5817: calling mock object in IPython 2.0.0 under Python 3.4.0 raises AttributeError
• #5499: Error running widgets nbconvert example
• #5654: Broken links from ipython documentation
• #5019: print in QT event callback doesn’t show up in ipython notebook.
• #5800: Only last In prompt number set ?
• #5801: startup_command specified in ipengine_config.py is not executed
• #5690: ipython 2.0.0 and pandoc 1.12.2.1 problem
• #5408: Add checking/flushing of background output from kernel in mainloop
• #5407: clearing message handlers on status=idle loses async output
• #5467: Incorrect behavior of up/down keyboard arrows in code cells on wrapped lines
• #3085: nicer notebook error message when lacking permissions
• #5765: map_sync over empty list raises IndexError
• #5553: Notebook matplotlib inline backend: can’t set figure facecolor
• #5710: inspect.findsource monkeypatch raises wrong exception for C extensions
• #5706: Multi-Directory notebooks overwrite each other’s checkpoints
• #5698: can’t require a function named f
• #5569: Keyboard shortcuts in documentation are out of date
• #5566: Function name printing should use __qualname__ instead of __name__ (Python 3)
• #5676: “bookmark -l” not working in ipython 2.0
• #5555: Differentiate more clearly between Notebooks and Folders in new UI
• #5590: Marked double escape
• #5514: import tab-complete fail with ipython 2.0 shell
• #4012: Notebook: link to markdown formatting reference
• #5611: Typo in ‘storemagic’ documentation
• #5589: Kernel start fails when using –browser argument
• #5491: Bug in Windows ipconfig ip address regular expression

76 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #5579: rmagic extension throws ‘Error while parsing the string.’ when last line is comment
• #5518: Ipython2 will not open ipynb in example directory
• #5561: New widget documentation has missing notebook link
• #5128: Page jumping when output from widget interaction replaced
• #5519: IPython.parallel.Client behavior as iterator
• #5510: Tab-completion for function argument list

2.14.6 Issues closed in 2.0.0

GitHub stats for 2013/08/09 - 2014/04/01 (since 1.0.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
The following 94 authors contributed 3949 commits.
• Aaron Meurer
• Abhinav Upadhyay
• Adam Riggall
• Alex Rudy
• Andrew Mark
• Angus Griffith
• Antony Lee
• Aron Ahmadia
• Arun Persaud
• Benjamin Ragan-Kelley
• Bing Xia
• Blake Griffith
• Bouke van der Bijl
• Bradley M. Froehle
• Brian E. Granger
• Carlos Cordoba
• chapmanb
• chebee7i
• Christoph Gohlke
• Christophe Pradal
• Cyrille Rossant
• Damián Avila
• Daniel B. Vasquez
• Dav Clark
• David Hirschfeld

2.14. Issues closed in the 2.x development cycle 77


IPython Documentation, Release 7.1.0.dev

• David P. Sanders
• David Wyde
• David Österberg
• Doug Blank
• Dražen Lučanin
• epifanio
• Fernando Perez
• Gabriel Becker
• Geert Barentsen
• Hans Meine
• Ingolf Becker
• Jake Vanderplas
• Jakob Gager
• James Porter
• Jason Grout
• Jeffrey Tratner
• Jonah Graham
• Jonathan Frederic
• Joris Van den Bossche
• Juergen Hasch
• Julian Taylor
• Katie Silverio
• Kevin Burke
• Kieran O’Mahony
• Konrad Hinsen
• Kyle Kelley
• Lawrence Fu
• Marc Molla
• Martín Gaitán
• Matt Henderson
• Matthew Brett
• Matthias Bussonnier
• Michael Droettboom
• Mike McKerns
• Nathan Goldbaum
• Pablo de Oliveira

78 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Pankaj Pandey
• Pascal Schetelat
• Paul Ivanov
• Paul Moore
• Pere Vilas
• Peter Davis
• Philippe Mallet-Ladeira
• Preston Holmes
• Puneeth Chaganti
• Richard Everson
• Roberto Bonvallet
• Samuel Ainsworth
• Sean Vig
• Shashi Gowda
• Skipper Seabold
• Stephan Rave
• Steve Fox
• Steven Silvester
• stonebig
• Susan Tan
• Sylvain Corlay
• Takeshi Kanmae
• Ted Drain
• Thomas A Caswell
• Thomas Kluyver
• Théophile Studer
• Volker Braun
• Wieland Hoffmann
• Yaroslav Halchenko
• Yoval P.
• Yung Siang Liau
• Zachary Sailer
• zah
We closed a total of 1121 issues, 687 pull requests and 434 regular issues; this is the full list (generated with the script
tools/github_stats.py):
Pull Requests (687):

2.14. Issues closed in the 2.x development cycle 79


IPython Documentation, Release 7.1.0.dev

• PR #5487: remove weird unicode space in the new copyright header


• PR #5476: For 2.0: Fix links in Notebook Help Menu
• PR #5337: Examples reorganization
• PR #5436: CodeMirror shortcuts in QuickHelp
• PR #5444: Fix numeric verification for Int and Float text widgets.
• PR #5449: Stretch keyboard shortcut dialog
• PR #5473: Minor corrections of git-hooks setup instructions
• PR #5471: Add coding magic comment to nbconvert Python template
• PR #5452: print_figure returns unicode for svg
• PR #5450: proposal: remove codename
• PR #5462: DOC : fixed minor error in using topological sort
• PR #5463: make spin_thread tests more forgiving of slow VMs
• PR #5464: Fix starting notebook server with file/directory at command line.
• PR #5453: remove gitwash
• PR #5454: Improve history API docs
• PR #5431: update github_stats and gh_api for 2.0
• PR #5290: Add dual mode JS tests
• PR #5451: check that a handler is actually registered in ShortcutManager.handles
• PR #5447: Add %%python2 cell magic
• PR #5439: Point to the stable SymPy docs, not the dev docs
• PR #5437: Install jquery-ui images
• PR #5434: fix check for empty cells in rst template
• PR #5432: update links in notebook help menu
• PR #5435: Update whatsnew (notebook tour)
• PR #5433: Document extraction of octave and R magics
• PR #5428: Update COPYING.txt
• PR #5426: Separate get_session_info between HistoryAccessor and HistoryManager
• PR #5419: move prompts from margin to main column on small screens
• PR #5430: Make sure element is correct in the context of displayed JS
• PR #5396: prevent saving of partially loaded notebooks
• PR #5429: Fix tooltip pager feature
• PR #5330: Updates to shell reference doc
• PR #5404: Fix broken accordion widget
• PR #5339: Don’t use fork to start the notebook in js tests
• PR #5320: Fix for Tooltip & completer click focus bug.
• PR #5421: Move configuration of Python test controllers into setup()

80 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #5418: fix typo in ssh launcher send_file


• PR #5403: remove alt– shortcut
• PR #5389: better log message in deprecated files/ redirect
• PR #5333: Fix filenbmanager.list_dirs fails for Windows user profile directory
• PR #5390: finish PR #5333
• PR #5326: Some gardening on iptest result reporting
• PR #5375: remove unnecessary onload hack from mathjax macro
• PR #5368: Flexbox classes specificity fixes
• PR #5331: fix raw_input CSS
• PR #5395: urlencode images for rst files
• PR #5049: update quickhelp on adding and removing shortcuts
• PR #5391: Fix Gecko (Netscape) keyboard handling
• PR #5387: Respect ‘r’ characters in nbconvert.
• PR #5399: Revert PR #5388
• PR #5388: Suppress output even when a comment follows ;. Fixes #4525.
• PR #5394: nbconvert doc update
• PR #5359: do not install less sources
• PR #5346: give hint on where to find custom.js
• PR #5357: catch exception in copystat
• PR #5380: Remove DefineShortVerb. . . line from latex base template
• PR #5376: elide long containers in pretty
• PR #5310: remove raw cell placeholder on focus, closes #5238
• PR #5332: semantic names for indicator icons
• PR #5386: Fix import of socketserver on Python 3
• PR #5360: remove some redundant font-family: monospace
• PR #5379: don’t instantiate Application just for default logger
• PR #5372: Don’t autoclose strings
• PR #5296: unify keyboard shortcut and codemirror interaction
• PR #5349: Make Hub.registration_timeout configurable
• PR #5340: install bootstrap-tour css
• PR #5335: Update docstring for deepreload module
• PR #5321: Improve assignment regex to match more tuple unpacking syntax
• PR #5325: add NotebookNotary to NotebookApp’s class list
• PR #5313: avoid loading preprocessors twice
• PR #5308: fix HTML capitalization in Highlight2HTML
• PR #5295: OutputArea.append_type functions are not prototype methods

2.14. Issues closed in the 2.x development cycle 81


IPython Documentation, Release 7.1.0.dev

• PR #5318: Fix local import of select_figure_formats


• PR #5300: Fix NameError: name ‘_rl’ is not defined
• PR #5292: focus next cell on shift+enter
• PR #5291: debug occasional error in test_queue_status
• PR #5289: Finishing up #5274 (widget paths fixes)
• PR #5232: Make nbconvert html full output like notebook’s html.
• PR #5288: Correct initial state of kernel status indicator
• PR #5253: display any output from this session in terminal console
• PR #4802: Tour of the notebook UI (was UI elements inline with highlighting)
• PR #5285: Update signature presentation in pinfo classes
• PR #5268: Refactoring Notebook.command_mode
• PR #5226: Don’t run PYTHONSTARTUP file if a file or code is passed
• PR #5283: Remove Widget.closed attribute
• PR #5279: nbconvert: Make sure node is atleast version 0.9.12
• PR #5281: fix a typo introduced by a rebased PR
• PR #5280: append Firefox overflow-x fix
• PR #5277: check that PIL can save JPEG to BytesIO
• PR #5044: Store timestamps for modules to autoreload
• PR #5278: Update whatsnew doc from pr files
• PR #5276: Fix kernel restart in case connection file is deleted.
• PR #5272: allow highlighting language to be set from notebook metadata
• PR #5158: log refusal to serve hidden directories
• PR #5188: New events system
• PR #5265: Missing class def for TimeoutError
• PR #5267: normalize unicode in notebook API tests
• PR #5076: Refactor keyboard handling
• PR #5241: Add some tests for utils
• PR #5261: Don’t allow edit mode up arrow to continue past index == 0
• PR #5223: use on-load event to trigger resizable images
• PR #5252: make one strptime call at import of jsonutil
• PR #5153: Dashboard sorting
• PR #5169: Allow custom header
• PR #5242: clear _reply_content cache before using it
• PR #5194: require latex titles to be ascii
• PR #5244: try to avoid EADDRINUSE errors on travis
• PR #5245: support extracted output in HTML template

82 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #5209: make input_area css generic to cells


• PR #5246: less %pylab, more cowbell!
• PR #4895: Improvements to %run completions
• PR #5243: Add Javscript to base display priority list.
• PR #5175: Audit .html() calls take #2
• PR #5146: Dual mode bug fixes.
• PR #5207: Children fire event
• PR #5215: Dashboard “Running” Tab
• PR #5240: Remove unused IPython.nbconvert.utils.console module
• PR #5239: Fix exclusion of tests directories from coverage reports
• PR #5203: capture some logging/warning output in some tests
• PR #5216: fixup positional arg handling in notebook app
• PR #5229: get _ipython_display_ method safely
• PR #5234: DOC : modified docs is HasTraits.traits and HasTraits.class_traits
• PR #5221: Change widget children List to Tuple.
• PR #5231: don’t forget base_url when updating address bar in rename
• PR #5173: Moved widget files into static/widgets/*
• PR #5222: Unset PYTHONWARNINGS envvar before running subprocess tests.
• PR #5172: Prevent page breaks when printing notebooks via print-view.
• PR #4985: Add automatic Closebrackets function to Codemirror.
• PR #5220: Make traitlets notify check more robust against classes redefining equality and bool
• PR #5197: If there is an error comparing traitlet values when setting a trait, default to go ahead and notify of the
new value.
• PR #5210: fix pyreadline import in rlineimpl
• PR #5212: Wrap nbconvert Markdown/Heading cells in live divs
• PR #5200: Allow to pass option to jinja env
• PR #5202: handle nodejs executable on debian
• PR #5112: band-aid for completion
• PR #5187: handle missing output metadata in nbconvert
• PR #5181: use gnureadline on OS X
• PR #5136: set default value from signature defaults in interact
• PR #5132: remove application/pdf->pdf transform in javascript
• PR #5116: reorganize who knows what about paths
• PR #5165: Don’t introspect __call__ for simple callables
• PR #5170: Added msg_throttle sync=True widget traitlet
• PR #5191: Translate markdown link to rst

2.14. Issues closed in the 2.x development cycle 83


IPython Documentation, Release 7.1.0.dev

• PR #5037: FF Fix: alignment and scale of text widget


• PR #5179: remove websocket url
• PR #5110: add InlineBackend.print_figure_kwargs
• PR #5147: Some template URL changes
• PR #5100: remove base_kernel_url
• PR #5163: Simplify implementation of TemporaryWorkingDirectory.
• PR #5166: remove mktemp usage
• PR #5133: don’t use combine option on ucs package
• PR #5089: Remove legacy azure nbmanager
• PR #5159: remove append_json reference
• PR #5095: handle image size metadata in nbconvert html
• PR #5156: fix IPython typo, closes #5155
• PR #5150: fix a link that was broken
• PR #5114: use non-breaking space for button with no description
• PR #4778: add APIs for installing notebook extensions
• PR #5125: Fix the display of functions with keyword-only arguments on Python 3.
• PR #5097: minor notebook logging changes
• PR #5047: only validate package_data when it might be used
• PR #5121: fix remove event in KeyboardManager.register_events
• PR #5119: Removed ‘list’ view from Variable Inspector example
• PR #4925: Notebook manager api fixes
• PR #4996: require print_method to be a bound method
• PR #5108: require specifying the version for gh-pages
• PR #5111: Minor typo in docstring of IPython.parallel DirectView
• PR #5098: mostly debugging changes for IPython.parallel
• PR #5087: trust cells with no output
• PR #5059: Fix incorrect Patch logic in widget code
• PR #5075: More flexible box model fixes
• PR #5091: Provide logging messages in ipcluster log when engine or controllers fail to start
• PR #5090: Print a warning when iptest is run from the IPython source directory
• PR #5077: flush replies when entering an eventloop
• PR #5055: Minimal changes to import IPython from IronPython
• PR #5078: Updating JS tests README.md
• PR #5083: don’t create js test directories unless they are being used
• PR #5062: adjust some events in nb_roundtrip
• PR #5043: various unicode / url fixes

84 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #5066: remove (almost) all mentions of pylab from our examples


• PR #4977: ensure scp destination directories exist (with mkdir -p)
• PR #5053: Move&rename JS tests
• PR #5067: show traceback in widget handlers
• PR #4920: Adding PDFFormatter and kernel side handling of PDF display data
• PR #5048: Add edit/command mode indicator
• PR #5061: make execute button in menu bar match shift-enter
• PR #5052: Add q to toggle the pager.
• PR #5070: fix flex: auto
• PR #5065: Add example of using annotations in interact
• PR #5063: another pass on Interact example notebooks
• PR #5051: FF Fix: code cell missing hscroll (2)
• PR #4960: Interact/Interactive for widget
• PR #5045: Clear timeout in multi-press keyboard shortcuts.
• PR #5060: Change ‘bind’ to ‘link’
• PR #5039: Expose kernel_info method on inprocess kernel client
• PR #5058: Fix iopubwatcher.py example script.
• PR #5035: FF Fix: code cell missing hscroll
• PR #5040: Polishing some docs
• PR #5001: Add directory navigation to dashboard
• PR #5042: Remove duplicated Channel ABC classes.
• PR #5036: FF Fix: ext link icon same line as link text in help menu
• PR #4975: setup.py changes for 2.0
• PR #4774: emit event on appended element on dom
• PR #5023: Widgets- add ability to pack and unpack arrays on JS side.
• PR #5003: Fix pretty reprs of super() objects
• PR #4974: make paste focus the pasted cell
• PR #5012: Make SelectionWidget.values a dict
• PR #5018: Prevent ‘iptest IPython’ from trying to run.
• PR #5025: citation2latex filter (using HTMLParser)
• PR #5027: pin lessc to 1.4
• PR #4952: Widget test inconsistencies
• PR #5014: Fix command mode & popup view bug
• PR #4842: more subtle kernel indicator
• PR #5017: Add notebook examples link to help menu.
• PR #5015: don’t write cell.trusted to disk

2.14. Issues closed in the 2.x development cycle 85


IPython Documentation, Release 7.1.0.dev

• PR #5007: Update whatsnew doc from PR files


• PR #5010: Fixes for widget alignment in FF
• PR #4901: Add a convenience class to sync traitlet attributes
• PR #5008: updated explanation of ‘pyin’ messages
• PR #5004: Fix widget vslider spacing
• PR #4933: Small Widget inconsistency fixes
• PR #4979: add versioning notes to small message spec changes
• PR #4893: add font-awesome 3.2.1
• PR #4982: Live readout for slider widgets
• PR #4813: make help menu a template
• PR #4939: Embed qtconsole docs (continued)
• PR #4964: remove shift-= merge keyboard shortcut
• PR #4504: Allow input transformers to raise SyntaxError
• PR #4929: Fixing various modal/focus related bugs
• PR #4971: Fixing issues with js tests
• PR #4972: Work around problem in doctest discovery in Python 3.4 with PyQt
• PR #4937: pickle arrays with dtype=object
• PR #4934: ipython profile create respects --ipython-dir
• PR #4954: generate unicode filename
• PR #4845: Add Origin Checking.
• PR #4916: Fine tuning the behavior of the modal UI
• PR #4966: Ignore sys.argv for NotebookNotary in tests
• PR #4967: Fix typo in warning about web socket being closed
• PR #4965: Remove mention of iplogger from setup.py
• PR #4962: Fixed typos in quick-help text
• PR #4953: add utils.wait_for_idle in js tests
• PR #4870: ipython_directive, report except/warn in block and add :okexcept: :okwarning: options to suppress
• PR #4662: Menu cleanup
• PR #4824: sign notebooks
• PR #4943: Docs shotgun 4
• PR #4848: avoid import of nearby temporary with %edit
• PR #4950: Two fixes for file upload related bugs
• PR #4927: there shouldn’t be a ‘files/’ prefix in FileLink[s]
• PR #4928: use importlib.machinery when available
• PR #4949: Remove the docscrape modules, which are part of numpydoc
• PR #4849: Various unicode fixes (mostly on Windows)

86 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #4932: always point py3compat.input to builtin_mod.input


• PR #4807: Correct handling of ansi colour codes when nbconverting to latex
• PR #4922: Python nbconvert output shouldn’t have output
• PR #4912: Skip some Windows io failures
• PR #4919: flush output before showing tracebacks
• PR #4915: ZMQCompleter inherits from IPCompleter
• PR #4890: better cleanup channel FDs
• PR #4880: set profile name from profile_dir
• PR #4853: fix setting image height/width from metadata
• PR #4786: Reduce spacing of heading cells
• PR #4680: Minimal pandoc version warning
• PR #4908: detect builtin docstrings in oinspect
• PR #4911: Don’t use python -m package on Windows Python 2
• PR #4909: sort dictionary keys before comparison, ordering is not guaranteed
• PR #4374: IPEP 23: Backbone.js Widgets
• PR #4903: use https for all embeds
• PR #4894: Shortcut changes
• PR #4897: More detailed documentation about kernel_cmd
• PR #4891: Squash a few Sphinx warnings from nbconvert.utils.lexers docstrings
• PR #4679: JPG compression for inline pylab
• PR #4708: Fix indent and center
• PR #4789: fix IPython.embed
• PR #4655: prefer marked to pandoc for markdown2html
• PR #4876: don’t show tooltip if object is not found
• PR #4873: use ‘combine’ option to ucs package
• PR #4732: Accents in notebook names and in command-line (nbconvert)
• PR #4867: Update URL for Lawrence Hall of Science webcam image
• PR #4868: Static path fixes
• PR #4858: fix tb_offset when running a file
• PR #4826: some $.html( -> $.text(
• PR #4847: add js kernel_info request
• PR #4832: allow NotImplementedError in formatters
• PR #4803: BUG: fix cython magic support in ipython_directive
• PR #4865: build listed twice in .gitignore. Removing one.
• PR #4851: fix tooltip token regex for single-character names
• PR #4846: Remove some leftover traces of irunner

2.14. Issues closed in the 2.x development cycle 87


IPython Documentation, Release 7.1.0.dev

• PR #4820: fix regex for cleaning old logs with ipcluster


• PR #4844: adjustments to notebook app logging
• PR #4840: Error in Session.send_raw()
• PR #4819: update CodeMirror to 3.21
• PR #4823: Minor fixes for typos/inconsistencies in parallel docs
• PR #4811: document code mirror tab and shift-tab
• PR #4795: merge reveal templates
• PR #4796: update components
• PR #4806: Correct order of packages for unicode in nbconvert to LaTeX
• PR #4800: Qt frontend: Handle ‘aborted’ prompt replies.
• PR #4794: Compatibility fix for Python3 (Issue #4783 )
• PR #4799: minor js test fix
• PR #4788: warn when notebook is started in pylab mode
• PR #4772: Notebook server info files
• PR #4797: be conservative about kernel_info implementation
• PR #4787: non-python kernels run python code with qtconsole
• PR #4565: various display type validations
• PR #4703: Math macro in jinja templates.
• PR #4781: Fix “Source” text for the “Other Syntax” section of the “Typesetting Math” notebook
• PR #4776: Manually document py3compat module.
• PR #4533: propagate display metadata to all mimetypes
• PR #4785: Replacing a for-in loop by an index loop on an array
• PR #4780: Updating CSS for UI example.
• PR #3605: Modal UI
• PR #4758: Python 3.4 fixes
• PR #4735: add some HTML error pages
• PR #4775: Update whatsnew doc from PR files
• PR #4760: Make examples and docs more Python 3 aware
• PR #4773: Don’t wait forever for notebook server to launch/die for tests
• PR #4768: Qt console: Fix _prompt_pos accounting on timer flush output.
• PR #4727: Remove Nbconvert template loading magic
• PR #4763: Set numpydoc options to produce fewer Sphinx warnings.
• PR #4770: always define aliases, even if empty
• PR #4766: add python -m entry points for everything
• PR #4767: remove manpages for irunner, iplogger
• PR #4751: Added –post-serve explanation into the nbconvert docs.

88 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #4762: whitelist alphanumeric characters for cookie_name


• PR #4625: Deprecate %profile magic
• PR #4745: warn on failed formatter calls
• PR #4746: remove redundant cls alias on Windows
• PR #4749: Fix bug in determination of public ips.
• PR #4715: restore use of tornado static_url in templates
• PR #4748: fix race condition in profiledir creation.
• PR #4720: never use ssh multiplexer in tunnels
• PR #4658: Bug fix for #4643: Regex object needs to be reset between calls in toolt. . .
• PR #4561: Add Formatter.pop(type)
• PR #4712: Docs shotgun 3
• PR #4713: Fix saving kernel history in Python 2
• PR #4744: don’t use lazily-evaluated rc.ids in wait_for_idle
• PR #4740: %env can’t set variables
• PR #4737: check every link when detecting virutalenv
• PR #4738: don’t inject help into user_ns
• PR #4739: skip html nbconvert tests when their dependencies are missing
• PR #4730: Fix stripping continuation prompts when copying from Qt console
• PR #4725: Doc fixes
• PR #4656: Nbconvert HTTP service
• PR #4710: make @interactive decorator friendlier with dill
• PR #4722: allow purging local results as long as they are not outstanding
• PR #4549: Updated IPython console lexers.
• PR #4570: Update IPython directive
• PR #4719: Fix comment typo in prefilter.py
• PR #4575: make sure to encode URL components for API requests
• PR #4718: Fixed typo in displaypub
• PR #4716: Remove input_prefilter hook
• PR #4691: survive failure to bind to localhost in zmq.iostream
• PR #4696: don’t do anything if add_anchor fails
• PR #4711: some typos in the docs
• PR #4700: use if main block in entry points
• PR #4692: setup.py symlink improvements
• PR #4265: JSON configuration file
• PR #4505: Nbconvert latex markdown images2
• PR #4608: transparent background match . . . all colors

2.14. Issues closed in the 2.x development cycle 89


IPython Documentation, Release 7.1.0.dev

• PR #4678: allow ipython console to handle text/plain display


• PR #4706: remove irunner, iplogger
• PR #4701: Delete an old dictionary available for selecting the aligment of text.
• PR #4702: Making reveal font-size a relative unit.
• PR #4649: added a quiet option to %cpaste to suppress output
• PR #4690: Option to spew subprocess streams during tests
• PR #4688: Fixed various typos in docstrings.
• PR #4645: CasperJs utility functions.
• PR #4670: Stop bundling the numpydoc Sphinx extension
• PR #4675: common IPython prefix for ModIndex
• PR #4672: Remove unused ‘attic’ module
• PR #4671: Fix docstrings in utils.text
• PR #4669: add missing help strings to HistoryManager configurables
• PR #4668: Make non-ASCII docstring unicode
• PR #4650: added a note about sharing of nbconvert tempates
• PR #4646: Fixing various output related things:
• PR #4665: check for libedit in readline on OS X
• PR #4606: Make running PYTHONSTARTUP optional
• PR #4654: Fixing left padding of text cells to match that of code cells.
• PR #4306: add raw_mimetype metadata to raw cells
• PR #4576: Tighten up the vertical spacing on cells and make the padding of cells more consistent
• PR #4353: Don’t reset the readline completer after each prompt
• PR #4567: Adding prompt area to non-CodeCells to indent content.
• PR #4446: Use SVG plots in OctaveMagic by default due to lack of Ghostscript on Windows Octave
• PR #4613: remove configurable.created
• PR #4631: Use argument lists for command help tests
• PR #4633: Modifies test_get_long_path_name_winr32() to allow for long path names in temp dir
• PR #4642: Allow docs to build without PyQt installed.
• PR #4641: Don’t check for wx in the test suite.
• PR #4622: make QtConsole Lexer configurable
• PR #4594: Fixed #2923 Move Save Away from Cut in toolbar
• PR #4593: don’t interfere with set_next_input contents in qtconsole
• PR #4640: Support matplotlib’s Gtk3 backend in –pylab mode
• PR #4639: Minor import fix to get qtconsole with –pylab=qt working
• PR #4637: Fixed typo in links.txt.
• PR #4634: Fix nbrun in notebooks with non-code cells.

90 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #4632: Restore the ability to run tests from a function.


• PR #4624: Fix crash when $EDITOR is non-ASCII
• PR #4453: Play nice with App Nap
• PR #4541: relax ipconfig matching on Windows
• PR #4552: add pickleutil.use_dill
• PR #4590: Font awesome for IPython slides
• PR #4589: Inherit the width of pre code inside the input code cells.
• PR #4588: Update reveal.js CDN to 2.5.0.
• PR #4569: store cell toolbar preset in notebook metadata
• PR #4609: Fix bytes regex for Python 3.
• PR #4581: Writing unicode to stdout
• PR #4591: Documenting codemirror shorcuts.
• PR #4607: Tutorial doc should link to user config intro
• PR #4601: test that rename fails with 409 if it would clobber
• PR #4599: re-cast int/float subclasses to int/float in json_clean
• PR #4542: new ipython history clear subcommand
• PR #4568: don’t use lazily-evaluated rc.ids in wait_for_idle
• PR #4572: DOC: %profile docstring should reference %prun
• PR #4571: no longer need 3 suffix on travis, tox
• PR #4566: Fixing cell_type in CodeCell constructor.
• PR #4563: Specify encoding for reading notebook file.
• PR #4452: support notebooks in %run
• PR #4546: fix warning condition on notebook startup
• PR #4540: Apidocs3
• PR #4553: Fix Python 3 handling of urllib
• PR #4543: make hiding of initial namespace optional
• PR #4517: send shutdown_request on exit of ipython console
• PR #4528: improvements to bash completion
• PR #4532: Hide dynamically defined metaclass base from Sphinx.
• PR #4515: Spring Cleaning, and Load speedup
• PR #4529: note routing identities needed for input requests
• PR #4514: allow restart in %run -d
• PR #4527: add redirect for 1.0-style ‘files/’ prefix links
• PR #4526: Allow unicode arguments to passwd_check on Python 2
• PR #4403: Global highlight language selection.
• PR #4250: outputarea.js: Wrap inline SVGs inside an iframe

2.14. Issues closed in the 2.x development cycle 91


IPython Documentation, Release 7.1.0.dev

• PR #4521: Read wav files in binary mode


• PR #4444: Css cleaning
• PR #4523: Use username and password for MongoDB on ShiningPanda
• PR #4510: Update whatsnew from PR files
• PR #4441: add setup.py jsversion
• PR #4518: Fix for race condition in url file decoding.
• PR #4497: don’t automatically unpack datetime objects in the message spec
• PR #4506: wait for empty queues as well as load-balanced tasks
• PR #4492: Configuration docs refresh
• PR #4508: Fix some uses of map() in Qt console completion code.
• PR #4498: Daemon StreamCapturer
• PR #4499: Skip clipboard test on unix systems if headless.
• PR #4460: Better clipboard handling, esp. with pywin32
• PR #4496: Pass nbformat object to write call to save .py script
• PR #4466: various pandoc latex fixes
• PR #4473: Setup for Python 2/3
• PR #4459: protect against broken repr in lib.pretty
• PR #4457: Use ~/.ipython as default config directory
• PR #4489: check realpath of env in init_virtualenv
• PR #4490: fix possible race condition in test_await_data
• PR #4476: Fix: Remove space added by display(JavaScript) on page reload
• PR #4398: [Notebook] Deactivate tooltip on tab by default.
• PR #4480: Docs shotgun 2
• PR #4488: fix typo in message spec doc
• PR #4479: yet another JS race condition fix
• PR #4477: Allow incremental builds of the html_noapi docs target
• PR #4470: Various Config object cleanups
• PR #4410: make close-and-halt work on new tabs in Chrome
• PR #4469: Python 3 & getcwdu
• PR #4451: fix: allow JS test to run after shutdown test
• PR #4456: Simplify StreamCapturer for subprocess testing
• PR #4464: Correct description for Bytes traitlet type
• PR #4465: Clean up MANIFEST.in
• PR #4461: Correct TypeError message in svg2pdf
• PR #4458: use signalstatus if exit status is undefined
• PR #4438: Single codebase Python 3 support (again)

92 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #4198: Version conversion, support for X to Y even if Y < X (nbformat)


• PR #4415: More tooltips in the Notebook menu
• PR #4450: remove monkey patch for older versions of tornado
• PR #4423: Fix progress bar and scrolling bug.
• PR #4435: raise 404 on not found static file
• PR #4442: fix and add shim for change introduce by #4195
• PR #4436: allow require("nbextensions/extname") to load from IPYTHONDIR/nbextensions
• PR #4437: don’t compute etags in static file handlers
• PR #4427: notebooks should always have one checkpoint
• PR #4425: fix js pythonisme
• PR #4195: IPEP 21: widget messages
• PR #4434: Fix broken link for Dive Into Python.
• PR #4428: bump minimum tornado version to 3.1.0
• PR #4302: Add an Audio display class
• PR #4285: Notebook javascript test suite using CasperJS
• PR #4420: Allow checking for backports via milestone
• PR #4426: set kernel cwd to notebook’s directory
• PR #4389: By default, Magics inherit from Configurable
• PR #4393: Capture output from subprocs during test, and display on failure
• PR #4419: define InlineBackend configurable in its own file
• PR #4303: Multidirectory support for the Notebook
• PR #4371: Restored ipython profile locate dir and fixed typo. (Fixes #3708).
• PR #4414: Specify unicode type properly in rmagic
• PR #4413: don’t instantiate IPython shell as class attr
• PR #4400: Remove 5s wait on inactivity on GUI inputhook loops
• PR #4412: Fix traitlet _notify_trait by-ref issue
• PR #4378: split adds new cell above, rather than below
• PR #4405: Bring display of builtin types and functions in line with Py 2
• PR #4367: clean up of documentation files
• PR #4401: Provide a name of the HistorySavingThread
• PR #4384: fix menubar height measurement
• PR #4377: fix tooltip cancel
• PR #4293: Factorise code in tooltip for julia monkeypatching
• PR #4292: improve js-completer logic.
• PR #4363: set_next_input: keep only last input when repeatedly called in a single cell
• PR #4382: Use safe_hasattr in dir2

2.14. Issues closed in the 2.x development cycle 93


IPython Documentation, Release 7.1.0.dev

• PR #4379: fix (CTRL-M -) shortcut for splitting cell in FF


• PR #4380: Test and fixes for localinterfaces
• PR #4372: Don’t assume that SyntaxTB is always called with a SyntaxError
• PR #4342: Return value directly from the try block and avoid a variable
• PR #4154: Center LaTeX and figures in markdown
• PR #4311: %load -s to load specific functions or classes
• PR #4350: WinHPC launcher fixes
• PR #4345: Make irunner compatible with upcoming pexpect 3.0 interface
• PR #4276: Support container methods in config
• PR #4359: test_pylabtools also needs to modify matplotlib.rcParamsOrig
• PR #4355: remove hardcoded box-orient
• PR #4333: Add Edit Notebook Metadata to Edit menu
• PR #4349: Script to update What’s New file
• PR #4348: Call PDF viewer after latex compiling (nbconvert)
• PR #4346: getpass() on Windows & Python 2 needs bytes prompt
• PR #4304: use netifaces for faster IPython.utils.localinterfaces
• PR #4305: Add even more ways to populate localinterfaces
• PR #4313: remove strip_math_space
• PR #4325: Some changes to improve readability.
• PR #4281: Adjust tab completion widget if too close to bottom of page.
• PR #4347: Remove pycolor script
• PR #4322: Scroll to the top after change of slides in the IPython slides
• PR #4289: Fix scrolling output (not working post clear_output changes)
• PR #4343: Make parameters for kernel start method more general
• PR #4237: Keywords should shadow magic functions
• PR #4338: adjust default value of level in sync_imports
• PR #4328: Remove unused loop variable.
• PR #4340: fix mathjax download url to new GitHub format
• PR #4336: use simple replacement rather than string formatting in format_kernel_cmd
• PR #4264: catch unicode error listing profiles
• PR #4314: catch EACCES when binding notebook app
• PR #4324: Remove commented addthis toolbar
• PR #4327: Use the with statement to open a file.
• PR #4318: fix initial sys.path
• PR #4315: Explicitly state what version of Pandoc is supported in docs/install
• PR #4316: underscore missing on notebook_p4

94 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #4295: Implement boundary option for load magic (#1093)


• PR #4300: traits defauts are strings not object
• PR #4297: Remove an unreachable return statement.
• PR #4260: Use subprocess for system_raw
• PR #4277: add nbextensions
• PR #4294: don’t require tornado 3 in --post serve
• PR #4270: adjust Scheduler timeout logic
• PR #4278: add -a to easy_install command in libedit warning
• PR #4282: Enable automatic line breaks in MathJax.
• PR #4279: Fixing line-height of list items in tree view.
• PR #4253: fixes #4039.
• PR #4131: Add module’s name argument in %%cython magic
• PR #4269: Add mathletters option and longtable package to latex_base.tplx
• PR #4230: Switch correctly to the user’s default matplotlib backend after inline.
• PR #4271: Hopefully fix ordering of output on ShiningPanda
• PR #4239: more informative error message for bad serialization
• PR #4263: Fix excludes for IPython.testing
• PR #4112: nbconvert: Latex template refactor
• PR #4261: Fixing a formatting error in the custom display example notebook.
• PR #4259: Fix Windows test exclusions
• PR #4229: Clear_output: Animation & widget related changes.
• PR #4151: Refactor alias machinery
• PR #4153: make timeit return an object that contains values
• PR #4258: to-backport label is now 1.2
• PR #4242: Allow passing extra arguments to iptest through for nose
• PR #4257: fix unicode argv parsing
• PR #4166: avoid executing code in utils.localinterfaces at import time
• PR #4214: engine ID metadata should be unicode, not bytes
• PR #4232: no highlight if no language specified
• PR #4218: Fix display of SyntaxError when .py file is modified
• PR #4207: add setup.py css command
• PR #4224: clear previous callbacks on execute
• PR #4180: Iptest refactoring
• PR #4105: JS output area misaligned
• PR #4220: Various improvements to docs formatting
• PR #4187: Select adequate highlighter for cell magic languages

2.14. Issues closed in the 2.x development cycle 95


IPython Documentation, Release 7.1.0.dev

• PR #4228: update -dev docs to reflect latest stable version


• PR #4219: Drop bundled argparse
• PR #3851: Adds an explicit newline for pretty-printing.
• PR #3622: Drop fakemodule
• PR #4080: change default behavior of database task storage
• PR #4197: enable cython highlight in notebook
• PR #4225: Updated docstring for core.display.Image
• PR #4175: nbconvert: Jinjaless exporter base
• PR #4208: Added a lightweight “htmlcore” Makefile entry
• PR #4209: Magic doc fixes
• PR #4217: avoid importing numpy at the module level
• PR #4213: fixed dead link in examples/notebooks readme to Part 3
• PR #4183: ESC should be handled by CM if tooltip is not on
• PR #4193: Update for #3549: Append Firefox overflow-x fix
• PR #4205: use TextIOWrapper when communicating with pandoc subprocess
• PR #4204: remove some extraneous print statements from IPython.parallel
• PR #4201: HeadingCells cannot be split or merged
• PR #4048: finish up speaker-notes PR
• PR #4079: trigger Kernel.status_started after websockets open
• PR #4186: moved DummyMod to proper namespace to enable dill pickling
• PR #4190: update version-check message in setup.py and IPython.__init__
• PR #4188: Allow user_ns trait to be None
• PR #4189: always fire LOCAL_IPS.extend(PUBLIC_IPS)
• PR #4174: various issues in markdown and rst templates
• PR #4178: add missing data_javascript
• PR #4168: Py3 failing tests
• PR #4181: nbconvert: Fix, sphinx template not removing new lines from headers
• PR #4043: don’t ‘restore_bytes’ in from_JSON
• PR #4149: reuse more kernels in kernel tests
• PR #4163: Fix for incorrect default encoding on Windows.
• PR #4136: catch javascript errors in any output
• PR #4171: add nbconvert config file when creating profiles
• PR #4172: add ability to check what PRs should be backported in backport_pr
• PR #4167: –fast flag for test suite!
• PR #4125: Basic exercise of ipython [subcommand] -h and help-all
• PR #4085: nbconvert: Fix sphinx preprocessor date format string for Windows

96 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #4159: don’t split .cell and div.cell CSS


• PR #4165: Remove use of parametric tests
• PR #4158: generate choices for --gui configurable from real mapping
• PR #4083: Implement a better check for hidden values for %who etc.
• PR #4147: Reference notebook examples, fixes #4146.
• PR #4065: do not include specific css in embedable one
• PR #4092: nbconvert: Fix for unicode html headers, Windows + Python 2.x
• PR #4074: close Client sockets if connection fails
• PR #4064: Store default codemirror mode in only 1 place
• PR #4104: Add way to install MathJax to a particular profile
• PR #4161: Select name when renaming a notebook
• PR #4160: Add quotes around “.[notebook]” in readme
• PR #4144: help_end transformer shouldn’t pick up ? in multiline string
• PR #4090: Add LaTeX citation handling to nbconvert
• PR #4143: update example custom.js
• PR #4142: DOC: unwrap openssl line in public_server doc
• PR #4126: update tox.ini
• PR #4141: add files with a separate add call in backport_pr
• PR #4137: Restore autorestore option for storemagic
• PR #4098: pass profile-dir instead of profile name to Kernel
• PR #4120: support input in Python 2 kernels
• PR #4088: nbconvert: Fix coalescestreams line with incorrect nesting causing strange behavior
• PR #4060: only strip continuation prompts if regular prompts seen first
• PR #4132: Fixed name error bug in function safe_unicode in module py3compat.
• PR #4121: move test_kernel from IPython.zmq to IPython.kernel
• PR #4118: ZMQ heartbeat channel: catch EINTR exceptions and continue.
• PR #4070: New changes should go into pr/ folder
• PR #4054: use unicode for HTML export
• PR #4106: fix a couple of default block values
• PR #4107: update parallel magic tests with capture_output API
• PR #4102: Fix clashes between debugger tests and coverage.py
• PR #4115: Update docs on declaring a magic function
• PR #4101: restore accidentally removed EngineError
• PR #4096: minor docs changes
• PR #4094: Update target branch before backporting PR
• PR #4069: Drop monkeypatch for pre-1.0 nose

2.14. Issues closed in the 2.x development cycle 97


IPython Documentation, Release 7.1.0.dev

• PR #4056: respect pylab_import_all when --pylab specified at the command-line


• PR #4091: Make Qt console banner configurable
• PR #4086: fix missing errno import
• PR #4084: Use msvcrt.getwch() for Windows pager.
• PR #4073: rename post_processors submodule to postprocessors
• PR #4075: Update supported Python versions in tools/test_pr
• PR #4068: minor bug fix, define ‘cell’ in dialog.js.
• PR #4044: rename call methods to transform and postprocess
• PR #3744: capture rich output as well as stdout/err in capture_output
• PR #3969: “use strict” in most (if not all) our javascript
• PR #4030: exclude .git in MANIFEST.in
• PR #4047: Use istype() when checking if canned object is a dict
• PR #4031: don’t close_fds on Windows
• PR #4029: bson.Binary moved
• PR #3883: skip test on unix when x11 not available
• PR #3863: Added working speaker notes for slides.
• PR #4035: Fixed custom jinja2 templates being ignored when setting template_path
• PR #4002: Drop Python 2.6 and 3.2
• PR #4026: small doc fix in nbconvert
• PR #4016: Fix IPython.start_* functions
• PR #4021: Fix parallel.client.View map() on numpy arrays
• PR #4022: DOC: fix links to matplotlib, notebook docs
• PR #4018: Fix warning when running IPython.kernel tests
• PR #4017: Add REPL-like printing of final/return value to %%R cell magic
• PR #4019: Test skipping without unicode paths
• PR #4008: Transform code before %prun/%%prun runs
• PR #4014: Fix typo in ipapp
• PR #3997: DOC: typos + rewording in examples/notebooks/Cell Magics.ipynb
• PR #3914: nbconvert: Transformer tests
• PR #3987: get files list in backport_pr
• PR #3923: nbconvert: Writer tests
• PR #3974: nbconvert: Fix app tests on Window7 w/ Python 3.3
• PR #3937: make tab visible in codemirror and light red background
• PR #3933: nbconvert: Post-processor tests
• PR #3978: fix --existing with non-localhost IP
• PR #3939: minor checkpoint cleanup

98 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #3955: complete on % for magic in notebook


• PR #3981: BF: fix nbconert rst input prompt spacing
• PR #3960: Don’t make sphinx a dependency for importing nbconvert
• PR #3973: logging.Formatter is not new-style in 2.6
Issues (434):
• #5476: For 2.0: Fix links in Notebook Help Menu
• #5337: Examples reorganization
• #5436: CodeMirror shortcuts in QuickHelp
• #5444: Fix numeric verification for Int and Float text widgets.
• #5443: Int and Float Widgets don’t allow negative signs
• #5449: Stretch keyboard shortcut dialog
• #5471: Add coding magic comment to nbconvert Python template
• #5470: UTF-8 Issue When Converting Notebook to a Script.
• #5369: FormatterWarning for SVG matplotlib output in notebook
• #5460: Can’t start the notebook server specifying a notebook
• #2918: CodeMirror related issues.
• #5431: update github_stats and gh_api for 2.0
• #4887: Add tests for modal UI
• #5290: Add dual mode JS tests
• #5448: Cmd+/ shortcut doesn’t work in IPython master
• #5447: Add %%python2 cell magic
• #5442: Make a “python2” alias or rename the “python”cell magic.
• #2495: non-ascii characters in the path
• #4554: dictDB: Exception due to str to datetime comparission
• #5006: Comm code is not run in the same context as notebook code
• #5118: Weird interact behavior
• #5401: Empty code cells in nbconvert rst output cause problems
• #5434: fix check for empty cells in rst template
• #4944: Trouble finding ipynb path in Windows 8
• #4605: Change the url of Editor Shorcuts in the notebook menu.
• #5425: Update COPYING.txt
• #5348: BUG: HistoryAccessor.get_session_info(0) - exception
• #5293: Javascript(“element.append()”) looks broken.
• #5363: Disable saving if notebook has stopped loading
• #5189: Tooltip pager mode is broken
• #5330: Updates to shell reference doc

2.14. Issues closed in the 2.x development cycle 99


IPython Documentation, Release 7.1.0.dev

• #5397: Accordion widget broken


• #5106: Flexbox CSS specificity bugs
• #5297: tooltip triggers focus bug
• #5417: scp checking for existence of directories: directory names are incorrect
• #5302: Parallel engine registration fails for slow engines
• #5334: notebook’s split-cell shortcut dangerous / incompatible with Neo layout (for instance)
• #5324: Style of raw_input UI is off in notebook
• #5350: Converting notebooks with spaces in their names to RST gives broken images
• #5049: update quickhelp on adding and removing shortcuts
• #4941: Eliminating display of intermediate stages in progress bars
• #5345: nbconvert to markdown does not use backticks
• #5357: catch exception in copystat
• #5351: Notebook saving fails on smb share
• #4946: TeX produced cannot be converted to PDF
• #5347: pretty print list too slow
• #5238: Raw cell placeholder is not removed when you edit the cell
• #5382: Qtconsole doesn’t run in Python 3
• #5378: Unexpected and new conflict between PyFileConfigLoader and IPythonQtConsoleApp
• #4945: Heading/cells positioning problem and cell output wrapping
• #5084: Consistent approach for HTML/JS output on nbviewer
• #4902: print preview does not work, custom.css not found
• #5336: TypeError in bootstrap-tour.min.js
• #5303: Changed Hub.registration_timeout to be a config input.
• #995: Paste-able mode in terminal
• #5305: Tuple unpacking for shell escape
• #5232: Make nbconvert html full output like notebook’s html.
• #5224: Audit nbconvert HTML output
• #5253: display any output from this session in terminal console
• #5251: ipython console ignoring some stream messages?
• #4802: Tour of the notebook UI (was UI elements inline with highlighting)
• #5103: Moving Constructor definition to the top like a Function definition
• #5264: Test failures on master with Anaconda
• #4833: Serve /usr/share/javascript at /_sysassets/javascript/ in notebook
• #5071: Prevent %pylab from clobbering interactive
• #5282: Exception in widget __del__ methods in Python 3.4.
• #5280: append Firefox overflow-x fix

100 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #5120: append Firefox overflow-x fix, again


• #4127: autoreload shouldn’t rely on .pyc modification times
• #5272: allow highlighting language to be set from notebook metadata
• #5050: Notebook cells truncated with Firefox
• #4839: Error in Session.send_raw()
• #5188: New events system
• #5076: Refactor keyboard handling
• #4886: Refactor and consolidate different keyboard logic in JavaScript code
• #5002: the green cell border moving forever in Chrome, when there are many code cells.
• #5259: Codemirror still active in command mode
• #5219: Output images appear as small thumbnails (Notebook)
• #4829: Not able to connect qtconsole in Windows 8
• #5152: Hide __pycache__ in dashboard directory list
• #5151: Case-insesitive sort for dashboard list
• #4603: Warn when overwriting a notebook with upload
• #4895: Improvements to %run completions
• #3459: Filename completion when run script with %run
• #5225: Add JavaScript to nbconvert HTML display priority
• #5034: Audit the places where we call .html(something)
• #5094: Dancing cells in notebook
• #4999: Notebook focus effects
• #5149: Clicking on a TextBoxWidget in FF completely breaks dual mode.
• #5207: Children fire event
• #5227: display_method of objects with custom __getattr__
• #5236: Cursor keys do not work to leave Markdown cell while it’s being edited
• #5205: Use CTuple traitlet for Widget children
• #5230: notebook rename does not respect url prefix
• #5218: Test failures with Python 3 and enabled warnings
• #5115: Page Breaks for Print Preview Broken by display: flex - Simple CSS Fix
• #5024: Make nbconvert HTML output smart about page breaking
• #4985: Add automatic Closebrackets function to Codemirror.
• #5184: print ‘xa’ crashes the interactive shell
• #5214: Downloading notebook as Python (.py) fails
• #5211: AttributeError: ‘module’ object has no attribute ‘_outputfile’
• #5206: [CSS?] Inconsistencies in nbconvert divs and IPython Notebook divs?
• #5201: node != nodejs within Debian packages

2.14. Issues closed in the 2.x development cycle 101


IPython Documentation, Release 7.1.0.dev

• #5112: band-aid for completion


• #4860: Completer As-You-Type Broken
• #5116: reorganize who knows what about paths
• #4973: Adding security.js with 1st attempt at is_safe
• #5164: test_oinspect.test_calltip_builtin failure with python3.4
• #5127: Widgets: skip intermediate callbacks during throttling
• #5013: Widget alignment differs between FF and Chrome
• #5141: tornado error static file
• #5160: TemporaryWorkingDirectory incompatible with python3.4
• #5140: WIP: %kernels magic
• #4987: Widget lifecycle problems
• #5129: UCS package break latex export on non-ascii
• #4986: Cell horizontal scrollbar is missing in FF but not in Chrome
• #4685: nbconvert ignores image size metadata
• #5155: Notebook logout button does not work (source typo)
• #2678: Ctrl-m keyboard shortcut clash on Chrome OS
• #5113: ButtonWidget without caption wrong height.
• #4778: add APIs for installing notebook extensions
• #5046: python setup.py failed vs git submodule update worked
• #4925: Notebook manager api fixes
• #5073: Cannot align widgets horizontally in the notebook
• #4996: require print_method to be a bound method
• #4990: _repr_html_ exception reporting corner case when using type(foo)
• #5099: Notebook: Changing base_project_url results in failed WebSockets call
• #5096: Client.map is not fault tolerant
• #4997: Inconsistent %matplotlib qt behavior
• #5041: Remove more .html(. . . ) calls.
• #5078: Updating JS tests README.md
• #4977: ensure scp destination directories exist (with mkdir -p)
• #3411: ipython parallel: scp failure.
• #5064: Errors during interact display at the terminal, not anywhere in the notebook
• #4921: Add PDF formatter and handling
• #4920: Adding PDFFormatter and kernel side handling of PDF display data
• #5048: Add edit/command mode indicator
• #4889: Add UI element for indicating command/edit modes
• #5052: Add q to toggle the pager.

102 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #5000: Closing pager with keyboard in modal UI


• #5069: Box model changes broke the Keyboard Shortcuts help modal
• #4960: Interact/Interactive for widget
• #4883: Implement interact/interactive for widgets
• #5038: Fix multiple press keyboard events
• #5054: UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xc6 in position 1: ordinal not in range(128)
• #5031: Bug during integration of IPython console in Qt application
• #5057: iopubwatcher.py example is broken.
• #4747: Add event for output_area adding an output
• #5001: Add directory navigation to dashboard
• #5016: Help menu external-link icons break layout in FF
• #4885: Modal UI behavior changes
• #5009: notebook signatures don’t work
• #4975: setup.py changes for 2.0
• #4774: emit event on appended element on dom
• #5020: Python Lists translated to javascript objects in widgets
• #5003: Fix pretty reprs of super() objects
• #5012: Make SelectionWidget.values a dict
• #4961: Bug when constructing a selection widget with both values and labels
• #4283: A < in a markdown cell strips cell content when converting to latex
• #4006: iptest IPython broken
• #4251: & escaped to &amp; in tex ?
• #5027: pin lessc to 1.4
• #4323: Take 2: citation2latex filter (using HTMLParser)
• #4196: Printing notebook from browser gives 1-page truncated output
• #4842: more subtle kernel indicator
• #4057: No path to notebook examples from Help menu
• #5015: don’t write cell.trusted to disk
• #4617: Changed url link in Help dropdown menu.
• #4976: Container widget layout broken on Firefox
• #4981: Vertical slider layout broken
• #4793: Message spec changes related to clear_output
• #4982: Live readout for slider widgets
• #4813: make help menu a template
• #4989: Filename tab completion completely broken
• #1380: Tab should insert 4 spaces in # comment lines

2.14. Issues closed in the 2.x development cycle 103


IPython Documentation, Release 7.1.0.dev

• #2888: spaces vs tabs


• #1193: Allow resizing figures in notebook
• #4504: Allow input transformers to raise SyntaxError
• #4697: Problems with height after toggling header and toolbar. . .
• #4951: TextWidget to code cell command mode bug.
• #4809: Arbitrary scrolling (jumping) in clicks in modal UI for notebook
• #4971: Fixing issues with js tests
• #4972: Work around problem in doctest discovery in Python 3.4 with PyQt
• #4892: IPython.qt test failure with python3.4
• #4863: BUG: cannot create an OBJECT array from memory buffer
• #4704: Subcommand profile ignores –ipython-dir
• #4845: Add Origin Checking.
• #4870: ipython_directive, report except/warn in block and add :okexcept: :okwarning: options to suppress
• #4956: Shift-Enter does not move to next cell
• #4662: Menu cleanup
• #4824: sign notebooks
• #4848: avoid import of nearby temporary with %edit
• #4731: %edit files mistakenly import modules in /tmp
• #4950: Two fixes for file upload related bugs
• #4871: Notebook upload fails after Delete
• #4825: File Upload URL set incorrectly
• #3867: display.FileLinks should work in the exported html verion of a notebook
• #4948: reveal: ipython css overrides reveal themes
• #4947: reveal: slides that are too big?
• #4051: Test failures with Python 3 and enabled warnings
• #3633: outstanding issues over in ipython/nbconvert repo
• #4087: Sympy printing in the example notebook
• #4627: Document various QtConsole embedding approaches.
• #4849: Various unicode fixes (mostly on Windows)
• #3653: autocompletion in “from package import <tab>”
• #4583: overwrite? prompt gets EOFError in 2 process
• #4807: Correct handling of ansi colour codes when nbconverting to latex
• #4611: Document how to compile .less files in dev docs.
• #4618: “Editor Shortcuts” link is broken in help menu dropdown notebook
• #4522: DeprecationWarning: the sets module is deprecated
• #4368: No symlink from ipython to ipython3 when inside a python3 virtualenv

104 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #4234: Math without $$ doesn’t show up when converted to slides


• #4194: config.TerminalIPythonApp.nosep does not work
• #1491: prefilter not called for multi-line notebook cells
• #4001: Windows IPython executable /scripts/ipython not working
• #3959: think more carefully about text wrapping in nbconvert
• #4907: Test for traceback depth fails on Windows
• #4906: Test for IPython.embed() fails on Windows
• #4912: Skip some Windows io failures
• #3700: stdout/stderr should be flushed printing exception output. . .
• #1181: greedy completer bug in terminal console
• #2032: check for a few places we should be using DEFAULT_ENCODING
• #4882: Too many files open when starting and stopping kernel repeatedly
• #4880: set profile name from profile_dir
• #4238: parallel.Client() not using profile that notebook was run with?
• #4853: fix setting image height/width from metadata
• #4786: Reduce spacing of heading cells
• #4680: Minimal pandoc version warning
• #3707: nbconvert: Remove IPython magic commands from –format=”python” output
• #4130: PDF figures as links from png or svg figures
• #3919: Allow –profile to be passed a dir.
• #2136: Handle hard newlines in pretty printer
• #4790: Notebook modal UI: “merge cell below” key binding, shift+=, does not work with some keyboard
layouts
• #4884: Keyboard shortcut changes
• #1184: slow handling of keyboard input
• #4913: Mathjax, Markdown, tex, env* and italic
• #3972: nbconvert: Template output testing
• #4903: use https for all embeds
• #4874: –debug does not work if you set .kernel_cmd
• #4679: JPG compression for inline pylab
• #4708: Fix indent and center
• #4789: fix IPython.embed
• #4759: Application._load_config_files log parameter default fails
• #3153: docs / file menu: explain how to exit the notebook
• #4791: Did updates to ipython_directive bork support for cython magic snippets?
• #4385: “Part 4 - Markdown Cells.ipynb” nbviewer example seems not well referenced in current online docu-
mentation page https://ipython.org/ipython-doc/stable/interactive/notebook.htm

2.14. Issues closed in the 2.x development cycle 105


IPython Documentation, Release 7.1.0.dev

• #4655: prefer marked to pandoc for markdown2html


• #3441: Fix focus related problems in the notebook
• #3402: Feature Request: Save As (latex, html,..etc) as a menu option in Notebook rather than explicit need to
invoke nbconvert
• #3224: Revisit layout of notebook area
• #2746: rerunning a cell with long output (exception) scrolls to much (html notebook)
• #2667: can’t save opened notebook if accidentally delete the notebook in the dashboard
• #3026: Reporting errors from _repr_<type>_ methods
• #1844: Notebook does not exist and permalinks
• #2450: [closed PR] Prevent jumping of window to input when output is clicked.
• #3166: IPEP 16: Notebook multi directory dashboard and URL mapping
• #3691: Slight misalignment of Notebook menu bar with focus box
• #4875: Empty tooltip with object_found = false still being shown
• #4432: The SSL cert for the MathJax CDN is invalid and URL is not protocol agnostic
• #2633: Help text should leave current cell active
• #3976: DOC: Pandas link on the notebook help menu?
• #4082: /new handler redirect cached by browser
• #4298: Slow ipython –pylab and ipython notebook startup
• #4545: %store magic not working
• #4610: toolbar UI enhancements
• #4782: New modal UI
• #4732: Accents in notebook names and in command-line (nbconvert)
• #4752: link broken in docs/examples
• #4835: running ipython on python files adds an extra traceback frame
• #4792: repr_html exception warning on qtconsole with pandas #4745
• #4834: function tooltip issues
• #4808: Docstrings in Notebook not displayed properly and introspection
• #4846: Remove some leftover traces of irunner
• #4810: ipcluster bug in clean_logs flag
• #4812: update CodeMirror for the notebook
• #671: add migration guide for old IPython config
• #4783: ipython 2dev under windows / (win)python 3.3 experiment
• #4772: Notebook server info files
• #4765: missing build script for highlight.js
• #4787: non-python kernels run python code with qtconsole
• #4703: Math macro in jinja templates.

106 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #4595: ipython notebook XSS vulnerable


• #4776: Manually document py3compat module.
• #4686: For-in loop on an array in cell.js
• #3605: Modal UI
• #4769: Ipython 2.0 will not startup on py27 on windows
• #4482: reveal.js converter not including CDN by default?
• #4761: ipv6 address triggers cookie exception
• #4580: rename or remove %profile magic
• #4643: Docstring does not open properly
• #4714: Static URLs are not auto-versioned
• #2573: document code mirror keyboard shortcuts
• #4717: hang in parallel.Client when using SSHAgent
• #4544: Clarify the requirement for pyreadline on Windows
• #3451: revisit REST /new handler to avoid systematic crawling.
• #2922: File => Save as ‘.py’ saves magic as code
• #4728: Copy/Paste stripping broken in version > 0.13.x in QTConsole
• #4539: Nbconvert: Latex to PDF conversion fails on notebooks with accented letters
• #4721: purge_results with jobid crashing - looking for insight
• #4620: Notebook with ? in title defies autosave, renaming and deletion.
• #4574: Hash character in notebook name breaks a lot of things
• #4709: input_prefilter hook not called
• #1680: qtconsole should support –no-banner and custom banner
• #4689: IOStream IP address configurable
• #4698: Missing “if __name__ == ‘__main__’:” check in /usr/bin/ipython
• #4191: NBConvert: markdown inline and locally referenced files have incorrect file location for latex
• #2865: %%!? does not display the shell execute docstring
• #1551: Notebook should be saved before printing
• #4612: remove Configurable.created ?
• #4629: Lots of tests fail due to space in sys.executable
• #4644: Fixed URLs for notebooks
• #4621: IPython 1.1.0 Qtconsole syntax highlighting highlights python 2 only built-ins when using python 3
• #2923: Move Delete Button Away from Save Button in the HTML notebook toolbar
• #4615: UnicodeDecodeError
• #4431: ipython slow in os x mavericks?
• #4538: DOC: document how to change ipcontroller-engine.json in case controller was started with –ip=”*”
• #4551: Serialize methods and closures

2.14. Issues closed in the 2.x development cycle 107


IPython Documentation, Release 7.1.0.dev

• #4081: [Nbconvert][reveal] link to font awesome ?


• #4602: “ipcluster stop” fails after “ipcluster start –daemonize” using python3.3
• #4578: NBconvert fails with unicode errors when --stdout and file redirection is specified and HTML entities
are present
• #4600: Renaming new notebook to an exist name silently deletes the old one
• #4598: Qtconsole docstring pop-up fails on method containing defaulted enum argument
• #951: Remove Tornado monkeypatch
• #4564: Notebook save failure
• #4562: nbconvert: Default encoding problem on OS X
• #1675: add file_to_run=file.ipynb capability to the notebook
• #4516: ipython console doesn’t send a shutdown_request
• #3043: can’t restart pdb session in ipython
• #4524: Fix bug with non ascii passwords in notebook login
• #1866: problems rendering an SVG?
• #4520: unicode error when trying Audio(‘data/Bach Cello Suite #3.wav’)
• #4493: Qtconsole cannot print an ISO8601 date at nanosecond precision
• #4502: intermittent parallel test failure test_purge_everything
• #4495: firefox 25.0: notebooks report “Notebook save failed”, .py script save fails, but .ipynb save succeeds
• #4245: nbconvert latex: code highlighting causes error
• #4486: Test for whether inside virtualenv does not work if directory is symlinked
• #4485: Incorrect info in “Messaging in IPython” documentation.
• #4447: Ipcontroller broken in current HEAD on windows
• #4241: Audio display object
• #4463: Error on empty c.Session.key
• #4454: UnicodeDecodeError when starting Ipython notebook on a directory containing a file with a non-ascii
character
• #3801: Autocompletion: Fix issue #3723 – ordering of completions for magic commands and variables with
same name
• #3723: Code completion: ‘matplotlib’ and ‘%matplotlib’
• #4396: Always checkpoint al least once ?
• #2524: [Notebook] Clear kernel queue
• #2292: Client side tests for the notebook
• #4424: Dealing with images in multidirectory environment
• #4388: Make writing configurable magics easier
• #852: Notebook should be saved before downloading
• #3708: ipython profile locate should also work
• #1349: ? may generate hundreds of cell

108 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #4381: Using hasattr for trait_names instead of just looking for it directly/using __dir__?
• #4361: Crash Ultratraceback/ session history
• #3044: IPython notebook autocomplete for filename string converts multiple spaces to a single space
• #3346: Up arrow history search shows duplicates in Qtconsole
• #3496: Fix import errors when running tests from the source directory
• #4114: If default profile doesn’t exist, can’t install mathjax to any location
• #4335: TestPylabSwitch.test_qt fails
• #4291: serve like option for nbconvert –to latex
• #1824: Exception before prompting for password during ssh connection
• #4309: Error in nbconvert - closing </code> tag is not inserted in HTML under some circumstances
• #4351: /parallel/apps/launcher.py error
• #3603: Upcoming issues with nbconvert
• #4296: sync_imports() fails in python 3.3
• #4339: local mathjax install doesn’t work
• #4334: NotebookApp.webapp_settings static_url_prefix causes crash
• #4308: Error when use “ipython notebook” in win7 64 with python2.7.3 64.
• #4317: Relative imports broken in the notebook (Windows)
• #3658: Saving Notebook clears “Kernel Busy” status from the page and titlebar
• #4312: Link broken on ipython-doc stable
• #1093: Add boundary options to %load
• #3619: Multi-dir webservice design
• #4299: Nbconvert, default_preprocessors to list of dotted name not list of obj
• #3210: IPython.parallel tests seem to hang on ShiningPanda
• #4280: MathJax Automatic Line Breaking
• #4039: Celltoolbar example issue
• #4247: nbconvert –to latex: error when converting greek letter
• #4273: %%capture not capturing rich objects like plots (IPython 1.1.0)
• #3866: Vertical offsets in LaTeX output for nbconvert
• #3631: xkcd mode for the IPython notebook
• #4243: Test exclusions not working on Windows
• #4256: IPython no longer handles unicode file names
• #3656: Audio displayobject
• #4223: Double output on Ctrl-enter-enter
• #4184: nbconvert: use r pygmentize backend when highlighting “%%R” cells
• #3851: Adds an explicit newline for pretty-printing.
• #3622: Drop fakemodule

2.14. Issues closed in the 2.x development cycle 109


IPython Documentation, Release 7.1.0.dev

• #4122: Nbconvert [windows]: Inconsistent line endings in markdown cells exported to latex
• #3819: nbconvert add extra blank line to code block on Windows.
• #4203: remove spurious print statement from parallel annoted functions
• #4200: Notebook: merging a heading cell and markdown cell cannot be undone
• #3747: ipynb -> ipynb transformer
• #4024: nbconvert markdown issues
• #3903: on Windows, ‘ipython3 nbconvert “C:/blabla/first_try.ipynb” –to slides’ gives an unexpected result, and
‘–post serve’ fails
• #4095: Catch js error in append html in stream/pyerr
• #1880: Add parallelism to test_pr
• #4085: nbconvert: Fix sphinx preprocessor date format string for Windows
• #4156: Specifying –gui=tk at the command line
• #4146: Having to prepend ‘files/’ to markdown image paths is confusing
• #3818: nbconvert can’t handle Heading with Chinese characters on Japanese Windows OS.
• #4134: multi-line parser fails on ‘” in comment, qtconsole and notebook.
• #3998: sample custom.js needs to be updated
• #4078: StoreMagic.autorestore not working in 1.0.0
• #3990: Buitlin input doesn’t work over zmq
• #4015: nbconvert fails to convert all the content of a notebook
• #4059: Issues with Ellipsis literal in Python 3
• #2310: “ZMQError: Interrupted system call” from RichIPythonWidget
• #3807: qtconsole ipython 0.13.2 - html/xhtml export fails
• #4103: Wrong default argument of DirectView.clear
• #4100: parallel.client.client references undefined error.EngineError
• #484: Drop nosepatch
• #3350: Added longlist support in ipdb.
• #1591: Keying ‘q’ doesn’t quit the interactive help in Wins7
• #40: The tests in test_process fail under Windows
• #3744: capture rich output as well as stdout/err in capture_output
• #3742: %%capture to grab rich display outputs
• #3863: Added working speaker notes for slides.
• #4013: Iptest fails in dual python installation
• #4005: IPython.start_kernel doesn’t work.
• #4020: IPython parallel map fails on numpy arrays
• #3914: nbconvert: Transformer tests
• #3923: nbconvert: Writer tests

110 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #3945: nbconvert: commandline tests fail Win7x64 Py3.3


• #3937: make tab visible in codemirror and light red background
• #3935: No feedback for mixed tabs and spaces
• #3933: nbconvert: Post-processor tests
• #3977: unable to complete remote connections for two-process
• #3939: minor checkpoint cleanup
• #3955: complete on % for magic in notebook
• #3954: all magics should be listed when completing on %
• #3980: nbconvert rst output lacks needed blank lines
• #3968: TypeError: super() argument 1 must be type, not classobj (Python 2.6.6)
• #3880: nbconvert: R&D remaining tests
• #2440: IPEP 4: Python 3 Compatibility

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.15 1.0 Series

2.15.1 Release 1.0.0: An Afternoon Hack

IPython 1.0 requires Python 2.6.5 or 3.2.1. It does not support Python 3.0, 3.1, or 2.5.
This is a big release. The principal milestone is the addition of IPython.nbconvert, but there has been a great
deal of work improving all parts of IPython as well.
The previous version (0.13) was released on June 30, 2012, and in this development cycle we had:
• ~12 months of work.
• ~700 pull requests merged.
• ~600 issues closed (non-pull requests).
• contributions from ~150 authors.
• ~4000 commits.
The amount of work included in this release is so large that we can only cover here the main highlights; please see our
detailed release statistics for links to every issue and pull request closed on GitHub as well as a full list of individual
contributors. It includes

2.15. 1.0 Series 111


IPython Documentation, Release 7.1.0.dev

Reorganization

There have been two major reorganizations in IPython 1.0:


• Added IPython.kernel for all kernel-related code. This means that IPython.zmq has been removed,
and much of it is now in IPython.kernel.zmq, some of it being in the top-level IPython.kernel.
• We have removed the frontend subpackage, as it caused unnecessary depth. So what was IPython.
frontend.qt is now IPython.qt, and so on. The one difference is that the notebook has been further
flattened, so that IPython.frontend.html.notebook is now just IPython.html. There is a shim
module, so IPython.frontend is still importable in 1.0, but there will be a warning.
• The IPython sphinx directives are now installed in IPython.sphinx, so they can be imported by other
projects.

Public APIs

For the first time since 0.10 (sorry, everyone), there is an official public API for starting IPython:

from IPython import start_ipython


start_ipython()

This is what packages should use that start their own IPython session, but don’t actually want embedded IPython
(most cases). IPython.embed() is used for embedding IPython into the calling namespace, similar to calling
Pdb.set_trace(), whereas start_ipython() will start a plain IPython session, loading config and startup
files as normal.
We also have added:

from IPython import get_ipython

Which is a library function for getting the current IPython instance, and will return None if no IPython instance is
running. This is the official way to check whether your code is called from inside an IPython session. If you want to
check for IPython without unnecessarily importing IPython, use this function:

def get_ipython():
"""return IPython instance if there is one, None otherwise"""
import sys
if "IPython" in sys.modules:
import IPython
return IPython.get_ipython()

Core

• The input transformation framework has been reworked. This fixes some corner cases, and adds more flexibility
for projects which use IPython, like SymPy & SAGE. For more details, see Custom input transformation.
• Exception types can now be displayed with a custom traceback, by defining a _render_traceback_()
method which returns a list of strings, each containing one line of the traceback.
• A new command, ipython history trim can be used to delete everything but the last 1000 entries in the
history database.
• __file__ is defined in both config files at load time, and .ipy files executed with %run.
• %logstart and %logappend are no longer broken.
• Add glob expansion for %run, e.g. %run -g script.py *.txt.

112 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Expand variables ($foo) in Cell Magic argument line.


• By default, iptest will exclude various slow tests. All tests can be run with iptest --all.
• SQLite history can be disabled in the various cases that it does not behave well.
• %edit works on interactively defined variables.
• editor hooks have been restored from quarantine, enabling TextMate as editor, etc.
• The env variable PYTHONSTARTUP is respected by IPython.
• The %matplotlib magic was added, which is like the old %pylab magic, but it does not import anything to
the interactive namespace. It is recommended that users switch to %matplotlib and explicit imports.
• The --matplotlib command line flag was also added. It invokes the new %matplotlib magic and can
be used in the same way as the old --pylab flag. You can either use it by itself as a flag (--matplotlib),
or you can also pass a backend explicitly (--matplotlib qt or --matplotlib=wx, etc).

Backwards incompatible changes

• Calling InteractiveShell.prefilter() will no longer perform static transformations - the processing


of escaped commands such as %magic and !system, and stripping input prompts from code blocks. This
functionality was duplicated in IPython.core.inputsplitter, and the latter version was already what
IPython relied on. A new API to transform input will be ready before release.
• Functions from IPython.lib.inputhook to control integration with GUI event loops are no longer ex-
posed in the top level of IPython.lib. Code calling these should make sure to import them from IPython.
lib.inputhook.
• For all kernel managers, the sub_channel attribute has been renamed to iopub_channel.
• Users on Python versions before 2.6.6, 2.7.1 or 3.2 will now need to call IPython.utils.
doctestreload.doctest_reload() to make doctests run correctly inside IPython. Python releases
since those versions are unaffected. For details, see PR #3068 and Python issue 8048.
• The InteractiveShell.cache_main_mod() method has been removed, and new_main_mod() has
a different signature, expecting a filename where earlier versions expected a namespace. See PR #3555 for
details.
• The short-lived plugin system has been removed. Extensions are the way to go.

NbConvert

The major milestone for IPython 1.0 is the addition of IPython.nbconvert - tools for converting IPython note-
books to various other formats.

Warning: nbconvert is 𝛼-level preview code in 1.0

To use nbconvert to convert various file formats:

ipython nbconvert --to html *.ipynb

See ipython nbconvert --help for more information. nbconvert depends on pandoc for many of the transla-
tions to and from various formats.

2.15. 1.0 Series 113


IPython Documentation, Release 7.1.0.dev

Notebook

Major changes to the IPython Notebook in 1.0:


• The notebook is now autosaved, by default at an interval of two minutes. When you press ‘save’ or Ctrl-S, a
checkpoint is made, in a hidden folder. This checkpoint can be restored, so that the autosave model is strictly
safer than traditional save. If you change nothing about your save habits, you will always have a checkpoint that
you have written, and an autosaved file that is kept up to date.
• The notebook supports raw_input() / input(), and thus also %debug, and many other Python calls that
expect user input.
• You can load custom javascript and CSS in the notebook by editing the files $(ipython locate
profile)/static/custom/custom.js,css.
• Add %%html, %%svg, %%javascript, and %%latex cell magics for writing raw output in notebook cells.
• add a redirect handler and anchors on heading cells, so you can link across notebooks, directly to heading cells
in other notebooks.
• Images support width and height metadata, and thereby 2x scaling (retina support).
• _repr_foo_ methods can return a tuple of (data, metadata), where metadata is a dict containing metadata
about the displayed object. This is used to set size, etc. for retina graphics. To enable retina matplotlib figures,
simply set InlineBackend.figure_format = 'retina' for 2x PNG figures, in your IPython config
file or via the %config magic.
• Add display.FileLink and FileLinks for quickly displaying HTML links to local files.
• Cells have metadata, which can be edited via cell toolbars. This metadata can be used by external code (e.g.
reveal.js or exporters), when examining the notebook.
• Fix an issue parsing LaTeX in markdown cells, which required users to type \\\, instead of \\.
• Notebook templates are rendered with Jinja instead of Tornado.
• %%file has been renamed %%writefile (%%file is deprecated).
• ANSI (and VT100) color parsing has been improved in both performance and supported values.
• The static files path can be found as IPython.html.DEFAULT_STATIC_FILES_PATH, which may be
changed by package managers.
• IPython’s CSS is installed in static/css/style.min.css (all style, including bootstrap), and static/
css/ipython.min.css, which only has IPython’s own CSS. The latter file should be useful for embedding
IPython notebooks in other pages, blogs, etc.
• The Print View has been removed. Users are encouraged to test ipython nbconvert to generate a static view.

Javascript Components

The javascript components used in the notebook have been updated significantly.
• updates to jQuery (2.0) and jQueryUI (1.10)
• Update CodeMirror to 3.14
• Twitter Bootstrap (2.3) for layout
• Font-Awesome (3.1) for icons
• highlight.js (7.3) for syntax highlighting
• marked (0.2.8) for markdown rendering

114 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• require.js (2.1) for loading javascript


Some relevant changes that are results of this:
• Markdown cells now support GitHub-flavored Markdown (GFM), which includes ```python code blocks
and tables.
• Notebook UI behaves better on more screen sizes.
• Various code cell input issues have been fixed.

Kernel

The kernel code has been substantially reorganized.


New features in the kernel:
• Kernels support ZeroMQ IPC transport, not just TCP
• The message protocol has added a top-level metadata field, used for information about messages.
• Add a data_pub message that functions much like display_pub, but publishes raw (usually pickled) data,
rather than representations.
• Ensure that sys.stdout.encoding is defined in Kernels.
• Stdout from forked subprocesses should be forwarded to frontends (instead of crashing).

IPEP 13

The KernelManager has been split into a KernelManager and a KernelClient. The Manager owns a kernel
and starts / signals / restarts it. There is always zero or one KernelManager per Kernel. Clients communicate with
Kernels via zmq channels, and there can be zero-to-many Clients connected to a Kernel at any given time.
The KernelManager now automatically restarts the kernel when it dies, rather than requiring user input at the notebook
or QtConsole UI (which may or may not exist at restart time).

In-process kernels

The Python-language frontends, particularly the Qt console, may now communicate with in-process kernels, in ad-
dition to the traditional out-of-process kernels. An in-process kernel permits direct access to the kernel namespace,
which is necessary in some applications. It should be understood, however, that the in-process kernel is not robust to
bad user input and will block the main (GUI) thread while executing. Developers must decide on a case-by-case basis
whether this tradeoff is appropriate for their application.

Parallel

IPython.parallel has had some refactoring as well. There are many improvements and fixes, but these are the major
changes:
• Connections have been simplified. All ports and the serialization in use are written to the connection file, rather
than the initial two-stage system.
• Serialization has been rewritten, fixing many bugs and dramatically improving performance serializing large
containers.
• Load-balancing scheduler performance with large numbers of tasks has been dramatically improved.

2.15. 1.0 Series 115


IPython Documentation, Release 7.1.0.dev

• There should be fewer (hopefully zero) false-positives for engine failures.


• Increased compatibility with various use cases that produced serialization / argument errors with map, etc.
• The controller can attempt to resume operation if it has crashed, by passing ipcontroller --restore.
• Engines can monitor the Hub heartbeat, and shutdown if the Hub disappears for too long.
• add HTCondor support in launchers

QtConsole

Various fixes, including improved performance with lots of text output, and better drag and drop support. The initial
window size of the qtconsole is now configurable via IPythonWidget.width and IPythonWidget.height.

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.16 Issues closed in the 1.0 development cycle

2.16.1 Issues closed in 1.2

GitHub stats for 2013/09/09 - 2014/02/21


These lists are automatically generated, and may be incomplete or contain duplicates.
The following 13 authors contributed 84 commits.
• Benjamin Ragan-Kelley
• Daryl Herzmann
• Doug Blank
• Fernando Perez
• James Porter
• Juergen Hasch
• Julian Taylor
• Kyle Kelley
• Lawrence Fu
• Matthias Bussonnier
• Paul Ivanov
• Pascal Schetelat

116 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Puneeth Chaganti
• Takeshi Kanmae
• Thomas Kluyver
We closed a total of 55 issues, 38 pull requests and 17 regular issues; this is the full list (generated with the script
tools/github_stats.py):
Pull Requests (38):
1.2.1:
• PR #4372: Don’t assume that SyntaxTB is always called with a SyntaxError
• PR #5166: remove mktemp usage
• PR #5163: Simplify implementation of TemporaryWorkingDirectory.
• PR #5105: add index to format to support py2.6
1.2.0:
• PR #4972: Work around problem in doctest discovery in Python 3.4 with PyQt
• PR #4934: ipython profile create respects --ipython-dir
• PR #4845: Add Origin Checking.
• PR #4928: use importlib.machinery when available
• PR #4849: Various unicode fixes (mostly on Windows)
• PR #4880: set profile name from profile_dir
• PR #4908: detect builtin docstrings in oinspect
• PR #4909: sort dictionary keys before comparison, ordering is not guaranteed
• PR #4903: use https for all embeds
• PR #4868: Static path fixes
• PR #4820: fix regex for cleaning old logs with ipcluster
• PR #4840: Error in Session.send_raw()
• PR #4762: whitelist alphanumeric characters for cookie_name
• PR #4748: fix race condition in profiledir creation.
• PR #4720: never use ssh multiplexer in tunnels
• PR #4738: don’t inject help into user_ns
• PR #4722: allow purging local results as long as they are not outstanding
• PR #4668: Make non-ASCII docstring unicode
• PR #4639: Minor import fix to get qtconsole with –pylab=qt working
• PR #4453: Play nice with App Nap
• PR #4609: Fix bytes regex for Python 3.
• PR #4488: fix typo in message spec doc
• PR #4346: getpass() on Windows & Python 2 needs bytes prompt
• PR #4230: Switch correctly to the user’s default matplotlib backend after inline.

2.16. Issues closed in the 1.0 development cycle 117


IPython Documentation, Release 7.1.0.dev

• PR #4214: engine ID metadata should be unicode, not bytes


• PR #4232: no highlight if no language specified
• PR #4218: Fix display of SyntaxError when .py file is modified
• PR #4217: avoid importing numpy at the module level
• PR #4213: fixed dead link in examples/notebooks readme to Part 3
• PR #4183: ESC should be handled by CM if tooltip is not on
• PR #4193: Update for #3549: Append Firefox overflow-x fix
• PR #4205: use TextIOWrapper when communicating with pandoc subprocess
• PR #4204: remove some extraneous print statements from IPython.parallel
• PR #4201: HeadingCells cannot be split or merged
1.2.1:
• #5101: IPython 1.2.0: notebook fail with “500 Internal Server Error”
1.2.0:
• #4892: IPython.qt test failure with python3.4
• #4810: ipcluster bug in clean_logs flag
• #4765: missing build script for highlight.js
• #4761: ipv6 address triggers cookie exception
• #4721: purge_results with jobid crashing - looking for insight
• #4602: “ipcluster stop” fails after “ipcluster start –daemonize” using python3.3
• #3386: Magic %paste not working in Python 3.3.2. TypeError: Type str doesn’t support the buffer API
• #4485: Incorrect info in “Messaging in IPython” documentation.
• #4351: /parallel/apps/launcher.py error
• #4334: NotebookApp.webapp_settings static_url_prefix causes crash
• #4039: Celltoolbar example issue
• #4256: IPython no longer handles unicode file names
• #4122: Nbconvert [windows]: Inconsistent line endings in markdown cells exported to latex
• #3819: nbconvert add extra blank line to code block on Windows.
• #4203: remove spurious print statement from parallel annoted functions
• #4200: Notebook: merging a heading cell and markdown cell cannot be undone

2.16.2 Issues closed in 1.1

GitHub stats for 2013/08/08 - 2013/09/09 (since 1.0)


These lists are automatically generated, and may be incomplete or contain duplicates.
The following 25 authors contributed 337 commits.
• Benjamin Ragan-Kelley
• Bing Xia

118 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Bradley M. Froehle
• Brian E. Granger
• Damián Avila
• dhirschfeld
• Dražen Lučanin
• gmbecker
• Jake Vanderplas
• Jason Grout
• Jonathan Frederic
• Kevin Burke
• Kyle Kelley
• Matt Henderson
• Matthew Brett
• Matthias Bussonnier
• Pankaj Pandey
• Paul Ivanov
• rossant
• Samuel Ainsworth
• Stephan Rave
• stonebig
• Thomas Kluyver
• Yaroslav Halchenko
• Zachary Sailer
We closed a total of 76 issues, 58 pull requests and 18 regular issues; this is the full list (generated with the script
tools/github_stats.py):
Pull Requests (58):
• PR #4188: Allow user_ns trait to be None
• PR #4189: always fire LOCAL_IPS.extend(PUBLIC_IPS)
• PR #4174: various issues in markdown and rst templates
• PR #4178: add missing data_javascript
• PR #4181: nbconvert: Fix, sphinx template not removing new lines from headers
• PR #4043: don’t ‘restore_bytes’ in from_JSON
• PR #4163: Fix for incorrect default encoding on Windows.
• PR #4136: catch javascript errors in any output
• PR #4171: add nbconvert config file when creating profiles
• PR #4125: Basic exercise of ipython [subcommand] -h and help-all

2.16. Issues closed in the 1.0 development cycle 119


IPython Documentation, Release 7.1.0.dev

• PR #4085: nbconvert: Fix sphinx preprocessor date format string for Windows
• PR #4159: don’t split .cell and div.cell CSS
• PR #4158: generate choices for --gui configurable from real mapping
• PR #4065: do not include specific css in embedable one
• PR #4092: nbconvert: Fix for unicode html headers, Windows + Python 2.x
• PR #4074: close Client sockets if connection fails
• PR #4064: Store default codemirror mode in only 1 place
• PR #4104: Add way to install MathJax to a particular profile
• PR #4144: help_end transformer shouldn’t pick up ? in multiline string
• PR #4143: update example custom.js
• PR #4142: DOC: unwrap openssl line in public_server doc
• PR #4141: add files with a separate add call in backport_pr
• PR #4137: Restore autorestore option for storemagic
• PR #4098: pass profile-dir instead of profile name to Kernel
• PR #4120: support input in Python 2 kernels
• PR #4088: nbconvert: Fix coalescestreams line with incorrect nesting causing strange behavior
• PR #4060: only strip continuation prompts if regular prompts seen first
• PR #4132: Fixed name error bug in function safe_unicode in module py3compat.
• PR #4121: move test_kernel from IPython.zmq to IPython.kernel
• PR #4118: ZMQ heartbeat channel: catch EINTR exceptions and continue.
• PR #4054: use unicode for HTML export
• PR #4106: fix a couple of default block values
• PR #4115: Update docs on declaring a magic function
• PR #4101: restore accidentally removed EngineError
• PR #4096: minor docs changes
• PR #4056: respect pylab_import_all when --pylab specified at the command-line
• PR #4091: Make Qt console banner configurable
• PR #4086: fix missing errno import
• PR #4030: exclude .git in MANIFEST.in
• PR #4047: Use istype() when checking if canned object is a dict
• PR #4031: don’t close_fds on Windows
• PR #4029: bson.Binary moved
• PR #4035: Fixed custom jinja2 templates being ignored when setting template_path
• PR #4026: small doc fix in nbconvert
• PR #4016: Fix IPython.start_* functions
• PR #4021: Fix parallel.client.View map() on numpy arrays

120 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #4022: DOC: fix links to matplotlib, notebook docs


• PR #4018: Fix warning when running IPython.kernel tests
• PR #4019: Test skipping without unicode paths
• PR #4008: Transform code before %prun/%%prun runs
• PR #4014: Fix typo in ipapp
• PR #3987: get files list in backport_pr
• PR #3974: nbconvert: Fix app tests on Window7 w/ Python 3.3
• PR #3978: fix --existing with non-localhost IP
• PR #3939: minor checkpoint cleanup
• PR #3981: BF: fix nbconvert rst input prompt spacing
• PR #3960: Don’t make sphinx a dependency for importing nbconvert
• PR #3973: logging.Formatter is not new-style in 2.6
Issues (18):
• #4024: nbconvert markdown issues
• #4095: Catch js error in append html in stream/pyerr
• #4156: Specifying –gui=tk at the command line
• #3818: nbconvert can’t handle Heading with Chinese characters on Japanese Windows OS.
• #4134: multi-line parser fails on ‘” in comment, qtconsole and notebook.
• #3998: sample custom.js needs to be updated
• #4078: StoreMagic.autorestore not working in 1.0.0
• #3990: Buitlin input doesn’t work over zmq
• #4015: nbconvert fails to convert all the content of a notebook
• #4059: Issues with Ellipsis literal in Python 3
• #4103: Wrong default argument of DirectView.clear
• #4100: parallel.client.client references undefined error.EngineError
• #4005: IPython.start_kernel doesn’t work.
• #4020: IPython parallel map fails on numpy arrays
• #3945: nbconvert: commandline tests fail Win7x64 Py3.3
• #3977: unable to complete remote connections for two-process
• #3980: nbconvert rst output lacks needed blank lines
• #3968: TypeError: super() argument 1 must be type, not classobj (Python 2.6.6)

2.16.3 Issues closed in 1.0

GitHub stats for 2012/06/30 - 2013/08/08 (since 0.13)


These lists are automatically generated, and may be incomplete or contain duplicates.
The following 155 authors contributed 4258 commits.

2.16. Issues closed in the 1.0 development cycle 121


IPython Documentation, Release 7.1.0.dev

• Aaron Meurer
• Adam Davis
• Ahmet Bakan
• Alberto Valverde
• Allen Riddell
• Anders Hovmöller
• Andrea Bedini
• Andrew Spiers
• Andrew Vandever
• Anthony Scopatz
• Anton Akhmerov
• Anton I. Sipos
• Antony Lee
• Aron Ahmadia
• Benedikt Sauer
• Benjamin Jones
• Benjamin Ragan-Kelley
• Benjie Chen
• Boris de Laage
• Brad Reisfeld
• Bradley M. Froehle
• Brian E. Granger
• Cameron Bates
• Cavendish McKay
• chapmanb
• Chris Beaumont
• Chris Laumann
• Christoph Gohlke
• codebraker
• codespaced
• Corran Webster
• DamianHeard
• Damián Avila
• Dan Kilman
• Dan McDougall
• Danny Staple

122 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• David Hirschfeld
• David P. Sanders
• David Warde-Farley
• David Wolever
• David Wyde
• debjan
• Diane Trout
• dkua
• Dominik Dabrowski
• Donald Curtis
• Dražen Lučanin
• drevicko
• Eric O. LEBIGOT
• Erik M. Bray
• Erik Tollerud
• Eugene Van den Bulke
• Evan Patterson
• Fernando Perez
• Francesco Montesano
• Frank Murphy
• Greg Caporaso
• Guy Haskin Fernald
• guziy
• Hans Meine
• Harry Moreno
• henryiii
• Ivan Djokic
• Jack Feser
• Jake Vanderplas
• jakobgager
• James Booth
• Jan Schulz
• Jason Grout
• Jeff Knisley
• Jens Hedegaard Nielsen
• jeremiahbuddha

2.16. Issues closed in the 1.0 development cycle 123


IPython Documentation, Release 7.1.0.dev

• Jerry Fowler
• Jessica B. Hamrick
• Jez Ng
• John Zwinck
• Jonathan Frederic
• Jonathan Taylor
• Joon Ro
• Joseph Lansdowne
• Juergen Hasch
• Julian Taylor
• Jussi Sainio
• Jörgen Stenarson
• kevin
• klonuo
• Konrad Hinsen
• Kyle Kelley
• Lars Solberg
• Lessandro Mariano
• Mark Sienkiewicz at STScI
• Martijn Vermaat
• Martin Spacek
• Matthias Bussonnier
• Maxim Grechkin
• Maximilian Albert
• MercuryRising
• Michael Droettboom
• Michael Shuffett
• Michał Górny
• Mikhail Korobov
• mr.Shu
• Nathan Goldbaum
• ocefpaf
• Ohad Ravid
• Olivier Grisel
• Olivier Verdier
• Owen Healy

124 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Pankaj Pandey
• Paul Ivanov
• Pawel Jasinski
• Pietro Berkes
• Piti Ongmongkolkul
• Puneeth Chaganti
• Rich Wareham
• Richard Everson
• Rick Lupton
• Rob Young
• Robert Kern
• Robert Marchman
• Robert McGibbon
• Rui Pereira
• Rustam Safin
• Ryan May
• s8weber
• Samuel Ainsworth
• Sean Vig
• Siyu Zhang
• Skylar Saveland
• slojo404
• smithj1
• Stefan Karpinski
• Stefan van der Walt
• Steven Silvester
• Takafumi Arakaki
• Takeshi Kanmae
• tcmulcahy
• teegaar
• Thomas Kluyver
• Thomas Robitaille
• Thomas Spura
• Thomas Weißschuh
• Timothy O’Donnell
• Tom Dimiduk

2.16. Issues closed in the 1.0 development cycle 125


IPython Documentation, Release 7.1.0.dev

• ugurthemaster
• urielshaolin
• v923z
• Valentin Haenel
• Victor Zverovich
• W. Trevor King
• y-p
• Yoav Ram
• Zbigniew J˛edrzejewski-Szmek
• Zoltán Vörös
We closed a total of 1484 issues, 793 pull requests and 691 regular issues; this is the full list (generated with the script
tools/github_stats.py):
Pull Requests (793):
• PR #3958: doc update
• PR #3965: Fix ansi color code for background yellow
• PR #3964: Fix casing of message.
• PR #3942: Pass on install docs
• PR #3962: exclude IPython.lib.kernel in iptest
• PR #3961: Longpath test fix
• PR #3905: Remove references to 0.11 and 0.12 from config/overview.rst
• PR #3951: nbconvert: fixed latex characters not escaped properly in nbconvert
• PR #3949: log fatal error when PDF conversion fails
• PR #3947: nbconvert: Make writer & post-processor aliases case insensitive.
• PR #3938: Recompile css.
• PR #3948: sphinx and PDF tweaks
• PR #3943: nbconvert: Serve post-processor Windows fix
• PR #3934: nbconvert: fix logic of verbose flag in PDF post processor
• PR #3929: swallow enter event in rename dialog
• PR #3924: nbconvert: Backport fixes
• PR #3925: Replace –pylab flag with –matplotlib in usage
• PR #3910: Added explicit error message for missing configuration arguments.
• PR #3913: grffile to support spaces in notebook names
• PR #3918: added check_for_tornado, closes #3916
• PR #3917: change docs/examples refs to be just examples
• PR #3908: what’s new tweaks
• PR #3896: two column quickhelp dialog, closes #3895

126 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #3911: explicitly load python mode before IPython mode


• PR #3901: don’t force . relative path, fix #3897
• PR #3891: fix #3889
• PR #3892: Fix documentation of Kernel.stop_channels
• PR #3888: posixify paths for Windows latex
• PR #3882: quick fix for #3881
• PR #3877: don’t use shell=True in PDF export
• PR #3878: minor template loading cleanup
• PR #3855: nbconvert: Filter tests
• PR #3879: finish 3870
• PR #3870: Fix for converting notebooks that contain unicode characters.
• PR #3876: Update parallel_winhpc.rst
• PR #3872: removing vim-ipython, since it has it’s own repo
• PR #3871: updating docs
• PR #3873: remove old examples
• PR #3868: update CodeMirror component to 3.15
• PR #3865: Escape filename for pdflatex in nbconvert
• PR #3861: remove old external.js
• PR #3864: add keyboard shortcut to docs
• PR #3834: This PR fixes a few issues with nbconvert tests
• PR #3840: prevent profile_dir from being undefined
• PR #3859: Add “An Afternoon Hack” to docs
• PR #3854: Catch errors filling readline history on startup
• PR #3857: Delete extra auto
• PR #3845: nbconvert: Serve from original build directory
• PR #3846: Add basic logging to nbconvert
• PR #3850: add missing store_history key to Notebook execute_requests
• PR #3844: update payload source
• PR #3830: mention metadata / display_data similarity in pyout spec
• PR #3848: fix incorrect empty-docstring
• PR #3836: Parse markdown correctly when mathjax is disabled
• PR #3849: skip a failing test on windows
• PR #3828: signature_scheme lives in Session
• PR #3831: update nbconvert doc with new CLI
• PR #3822: add output flag to nbconvert
• PR #3780: Added serving the output directory if html-based format are selected.

2.16. Issues closed in the 1.0 development cycle 127


IPython Documentation, Release 7.1.0.dev

• PR #3764: Cleanup nbconvert templates


• PR #3829: remove now-duplicate ‘this is dev’ note
• PR #3814: add ConsoleWidget.execute_on_complete_input flag
• PR #3826: try rtfd
• PR #3821: add sphinx prolog
• PR #3817: relax timeouts in terminal console and tests
• PR #3825: fix more tests that fail when pandoc is missing
• PR #3824: don’t set target on internal markdown links
• PR #3816: s/pylab/matplotlib in docs
• PR #3812: Describe differences between start_ipython and embed
• PR #3805: Print View has been removed
• PR #3820: Make it clear that 1.0 is not released yet
• PR #3784: nbconvert: Export flavors & PDF writer (ipy dev meeting)
• PR #3800: semantic-versionify version number for non-releases
• PR #3802: Documentation .txt to .rst
• PR #3765: cleanup terminal console iopub handling
• PR #3720: Fix for #3719
• PR #3787: re-raise KeyboardInterrupt in raw_input
• PR #3770: Organizing reveal’s templates.
• PR #3751: Use link(2) when possible in nbconvert
• PR #3792: skip tests that require pandoc
• PR #3782: add Importing Notebooks example
• PR #3752: nbconvert: Add cwd to sys.path
• PR #3789: fix raw_input in qtconsole
• PR #3756: document the wire protocol
• PR #3749: convert IPython syntax to Python syntax in nbconvert python template
• PR #3793: Closes #3788
• PR #3794: Change logo link to ipython.org
• PR #3746: Raise a named exception when pandoc is missing
• PR #3781: comply with the message spec in the notebook
• PR #3779: remove bad if logged_in preventing new-notebook without login
• PR #3743: remove notebook read-only view
• PR #3732: add delay to autosave in beforeunload
• PR #3761: Added rm_math_space to markdown cells in the basichtml.tpl to be rendered ok by mathjax after the
nbconvertion.
• PR #3758: nbconvert: Filter names cleanup

128 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #3769: Add configurability to tabcompletion timeout


• PR #3771: Update px pylab test to match new output of pylab
• PR #3741: better message when notebook format is not supported
• PR #3753: document Ctrl-C not working in ipython kernel
• PR #3766: handle empty metadata in pyout messages more gracefully.
• PR #3736: my attempt to fix #3735
• PR #3759: nbconvert: Provide a more useful error for invalid use case.
• PR #3760: nbconvert: Allow notebook filenames without their extensions
• PR #3750: nbconvert: Add cwd to default templates search path.
• PR #3748: Update nbconvert docs
• PR #3734: Nbconvert: Export extracted files into nbname_files subdirectory
• PR #3733: Nicer message when pandoc is missing, closes #3730
• PR #3722: fix two failing test in IPython.lib
• PR #3704: Start what’s new for 1.0
• PR #3705: Complete rewrite of IPython Notebook documentation: docs/source/interactive/htmlnotebook.txt
• PR #3709: Docs cleanup
• PR #3716: raw_input fixes for kernel restarts
• PR #3683: use %matplotlib in example notebooks
• PR #3686: remove quarantine
• PR #3699: svg2pdf unicode fix
• PR #3695: fix SVG2PDF
• PR #3685: fix Pager.detach
• PR #3675: document new dependencies
• PR #3690: Fixing some css minors in full_html and reveal.
• PR #3671: nbconvert tests
• PR #3692: Fix rename notebook - show error with invalid name
• PR #3409: Prevent qtconsole frontend freeze on lots of output.
• PR #3660: refocus active cell on dialog close
• PR #3598: Statelessify mathjaxutils
• PR #3673: enable comment/uncomment selection
• PR #3677: remove special-case in get_home_dir for frozen dists
• PR #3674: add CONTRIBUTING.md
• PR #3670: use Popen command list for ipexec
• PR #3568: pylab import adjustments
• PR #3559: add create.Cell and delete.Cell js events
• PR #3606: push cell magic to the head of the transformer line

2.16. Issues closed in the 1.0 development cycle 129


IPython Documentation, Release 7.1.0.dev

• PR #3607: NbConvert: Writers, No YAML, and stuff. . .


• PR #3665: Pywin32 skips
• PR #3669: set default client_class for QtKernelManager
• PR #3662: add strip_encoding_cookie transformer
• PR #3641: increase patience for slow kernel startup in tests
• PR #3651: remove a bunch of unused default_config_file assignments
• PR #3630: CSS adjustments
• PR #3645: Don’t require HistoryManager to have a shell
• PR #3643: don’t assume tested ipython is on the PATH
• PR #3654: fix single-result AsyncResults
• PR #3601: Markdown in heading cells (take 2)
• PR #3652: Remove old docs/examples
• PR #3621: catch any exception appending output
• PR #3585: don’t blacklist builtin names
• PR #3647: Fix frontend deprecation warnings in several examples
• PR #3649: fix AsyncResult.get_dict for single result
• PR #3648: Fix store magic test
• PR #3650: Fix, config_file_name was ignored
• PR #3640: Gcf.get_active() can return None
• PR #3571: Added shorcuts to split cell, merge cell above and merge cell below.
• PR #3635: Added missing slash to print-pdf call.
• PR #3487: Drop patch for compatibility with pyreadline 1.5
• PR #3338: Allow filename with extension in find_cmd in Windows.
• PR #3628: Fix test for Python 3 on Windows.
• PR #3642: Fix typo in docs
• PR #3627: use DEFAULT_STATIC_FILES_PATH in a test instead of package dir
• PR #3624: fix some unicode in zmqhandlers
• PR #3460: Set calling program to UNKNOWN, when argv not in sys
• PR #3632: Set calling program to UNKNOWN, when argv not in sys (take #2)
• PR #3629: Use new entry point for python -m IPython
• PR #3626: passing cell to showInPager, closes #3625
• PR #3618: expand terminal color support
• PR #3623: raise UsageError for unsupported GUI backends
• PR #3071: Add magic function %drun to run code in debugger
• PR #3608: a nicer error message when using %pylab magic
• PR #3592: add extra_config_file

130 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #3612: updated .mailmap


• PR #3616: Add examples for interactive use of MPI.
• PR #3615: fix regular expression for ANSI escapes
• PR #3586: Corrected a typo in the format string for strftime the sphinx.py transformer of nbconvert
• PR #3611: check for markdown no longer needed, closes #3610
• PR #3555: Simplify caching of modules with %run
• PR #3583: notebook small things
• PR #3594: Fix duplicate completion in notebook
• PR #3600: parallel: Improved logging for errors during BatchSystemLauncher.stop
• PR #3595: Revert “allow markdown in heading cells”
• PR #3538: add IPython.start_ipython
• PR #3562: Allow custom nbconvert template loaders
• PR #3582: pandoc adjustments
• PR #3560: Remove max_msg_size
• PR #3591: Refer to Setuptools instead of Distribute
• PR #3590: IPython.sphinxext needs an __init__.py
• PR #3581: Added the possibility to read a custom.css file for tweaking the final html in full_html and reveal
templates.
• PR #3576: Added support for markdown in heading cells when they are nbconverted.
• PR #3575: tweak run -d message to ‘continue execution’
• PR #3569: add PYTHONSTARTUP to startup files
• PR #3567: Trigger a single event on js app initialized
• PR #3565: style.min.css should always exist. . .
• PR #3531: allow markdown in heading cells
• PR #3577: Simplify codemirror ipython-mode
• PR #3495: Simplified regexp, and suggestions for clearer regexps.
• PR #3578: Use adjustbox to specify figure size in nbconvert -> latex
• PR #3572: Skip import irunner test on Windows.
• PR #3574: correct static path for CM modes autoload
• PR #3558: Add IPython.sphinxext
• PR #3561: mention double-control-C to stop notebook server
• PR #3566: fix event names
• PR #3564: Remove trivial nbconvert example
• PR #3540: allow cython cache dir to be deleted
• PR #3527: cleanup stale, unused exceptions in parallel.error
• PR #3529: ensure raw_input returns str in zmq shell

2.16. Issues closed in the 1.0 development cycle 131


IPython Documentation, Release 7.1.0.dev

• PR #3541: respect image size metadata in qtconsole


• PR #3550: Fixing issue preventing the correct read of images by full_html and reveal exporters.
• PR #3557: open markdown links in new tabs
• PR #3556: remove mention of nonexistent _margv in macro
• PR #3552: set overflow-x: hidden on Firefox only
• PR #3554: Fix missing import os in latex exporter.
• PR #3546: Don’t hardcode latex posix paths in nbconvert
• PR #3551: fix path prefix in nbconvert
• PR #3533: Use a CDN to get reveal.js library.
• PR #3498: When a notebook is written to file, name the metadata name u’‘.
• PR #3548: Change to standard save icon in Notebook toolbar
• PR #3539: Don’t hardcode posix paths in nbconvert
• PR #3508: notebook supports raw_input and %debug now
• PR #3526: ensure ‘default’ is first in cluster profile list
• PR #3525: basic timezone info
• PR #3532: include nbconvert templates in installation
• PR #3515: update CodeMirror component to 3.14
• PR #3513: add ‘No Checkpoints’ to Revert menu
• PR #3536: format positions are required in Python 2.6.x
• PR #3521: Nbconvert fix, silent fail if template doesn’t exist
• PR #3530: update %store magic docstring
• PR #3528: fix local mathjax with custom base_project_url
• PR #3518: Clear up unused imports
• PR #3506: %store -r restores saved aliases and directory history, as well as variables
• PR #3516: make css highlight style configurable
• PR #3523: Exclude frontend shim from docs build
• PR #3514: use bootstrap disabled instead of ui-state-disabled
• PR #3520: Added relative import of RevealExporter to __init__.py inside exporters module
• PR #3507: fix HTML capitalization in nbconvert exporter classes
• PR #3512: fix nbconvert filter validation
• PR #3511: Get Tracer working after ipapi.get replaced with get_ipython
• PR #3510: use window.onbeforeunload= for nav-away warning
• PR #3504: don’t use parent=self in handlers
• PR #3500: Merge nbconvert into IPython
• PR #3478: restore “unsaved changes” warning on unload
• PR #3493: add a dialog when the kernel is auto-restarted

132 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #3488: Add test suite for autoreload extension


• PR #3484: Catch some pathological cases inside oinspect
• PR #3481: Display R errors without Python traceback
• PR #3468: fix %magic output
• PR #3430: add parent to Configurable
• PR #3491: Remove unexpected keyword parameter to remove_kernel
• PR #3485: SymPy has changed its recommended way to initialize printing
• PR #3486: Add test for non-ascii characters in docstrings
• PR #3483: Inputtransformer: Allow classic prompts without space
• PR #3482: Use an absolute path to iptest, because the tests are not always run from $IPYTHONDIR.
• PR #3381: enable 2x (retina) display
• PR #3450: Flatten IPython.frontend
• PR #3477: pass config to subapps
• PR #3466: Kernel fails to start when username has non-ascii characters
• PR #3465: Add HTCondor bindings to IPython.parallel
• PR #3463: fix typo, closes #3462
• PR #3456: Notice for users who disable javascript
• PR #3453: fix cell execution in firefox, closes #3447
• PR #3393: [WIP] bootstrapify
• PR #3440: Fix installing mathjax from downloaded file via command line
• PR #3431: Provide means for starting the Qt console maximized and with the menu bar hidden
• PR #3425: base IPClusterApp inherits from BaseIPythonApp
• PR #3433: Update IPythonexternalpath__init__.py
• PR #3298: Some fixes in IPython Sphinx directive
• PR #3428: process escapes in mathjax
• PR #3420: thansk -> thanks
• PR #3416: Fix doc: “principle” not “principal”
• PR #3413: more unique filename for test
• PR #3364: Inject requirejs in notebook and start using it.
• PR #3390: Fix %paste with blank lines
• PR #3403: fix creating config objects from dicts
• PR #3401: rollback #3358
• PR #3373: make cookie_secret configurable
• PR #3307: switch default ws_url logic to js side
• PR #3392: Restore anchor link on h2-h6
• PR #3369: Use different threshold for (auto)scroll in output

2.16. Issues closed in the 1.0 development cycle 133


IPython Documentation, Release 7.1.0.dev

• PR #3370: normalize unicode notebook filenames


• PR #3372: base default cookie name on request host+port
• PR #3378: disable CodeMirror drag/drop on Safari
• PR #3358: workaround spurious CodeMirror scrollbars
• PR #3371: make setting the notebook dirty flag an event
• PR #3366: remove long-dead zmq frontend.py and completer.py
• PR #3382: cull Session digest history
• PR #3330: Fix get_ipython_dir when $HOME is /
• PR #3319: IPEP 13: user-expressions and user-variables
• PR #3384: comments in tools/gitwash_dumper.py changed (‘” to “”“)
• PR #3387: Make submodule checks work under Python 3.
• PR #3357: move anchor-link off of heading text
• PR #3351: start basic tests of ipcluster Launchers
• PR #3377: allow class.__module__ to be None
• PR #3340: skip submodule check in package managers
• PR #3328: decode subprocess output in launchers
• PR #3368: Reenable bracket matching
• PR #3356: Mpr fixes
• PR #3336: Use new input transformation API in %time magic
• PR #3325: Organize the JS and less files by component.
• PR #3342: fix test_find_cmd_python
• PR #3354: catch socket.error in utils.localinterfaces
• PR #3341: fix default cluster count
• PR #3286: don’t use get_ipython from builtins in library code
• PR #3333: notebookapp: add missing whitespace to warnings
• PR #3323: Strip prompts even if the prompt isn’t present on the first line.
• PR #3321: Reorganize the python/server side of the notebook
• PR #3320: define __file__ in config files
• PR #3317: rename %%file to %%writefile
• PR #3304: set unlimited HWM for all relay devices
• PR #3315: Update Sympy_printing extension load
• PR #3310: further clarify Image docstring
• PR #3285: load extensions in builtin trap
• PR #3308: Speed up AsyncResult._wait_for_outputs(0)
• PR #3294: fix callbacks as optional in js kernel.execute
• PR #3276: Fix: “python ABS/PATH/TO/ipython.py” fails

134 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #3301: allow python3 tests without python installed


• PR #3282: allow view.map to work with a few more things
• PR #3284: remove ipython.py entry point
• PR #3281: fix ignored IOPub messages with no parent
• PR #3275: improve submodule messages / git hooks
• PR #3239: Allow “x” icon and esc key to close pager in notebook
• PR #3290: Improved heartbeat controller to engine monitoring for long running tasks
• PR #3142: Better error message when CWD doesn’t exist on startup
• PR #3066: Add support for relative import to %run -m (fixes #2727)
• PR #3269: protect highlight.js against unknown languages
• PR #3267: add missing return
• PR #3101: use marked / highlight.js instead of pagedown and prettify
• PR #3264: use https url for submodule
• PR #3263: fix set_last_checkpoint when no checkpoint
• PR #3258: Fix submodule location in setup.py
• PR #3254: fix a few URLs from previous PR
• PR #3240: remove js components from the repo
• PR #3158: IPEP 15: autosave the notebook
• PR #3252: move images out of _static folder into _images
• PR #3251: Fix for cell magics in Qt console
• PR #3250: Added a simple __html__() method to the HTML class
• PR #3249: remove copy of sphinx inheritance_diagram.py
• PR #3235: Remove the unused print notebook view
• PR #3238: Improve the design of the tab completion UI
• PR #3242: Make changes of Application.log_format effective
• PR #3219: Workaround so only one CTRL-C is required for a new prompt in –gui=qt
• PR #3190: allow formatters to specify metadata
• PR #3231: improve discovery of public IPs
• PR #3233: check prefixes for swallowing kernel args
• PR #3234: Removing old autogrow JS code.
• PR #3232: Update to CodeMirror 3 and start to ship our components
• PR #3229: The HTML output type accidentally got removed from the OutputArea.
• PR #3228: Typo in IPython.Parallel documentation
• PR #3226: Text in rename dialog was way too big - making it <p>.
• PR #3225: Removing old restuctured text handler and web service.
• PR #3222: make BlockingKernelClient the default Client

2.16. Issues closed in the 1.0 development cycle 135


IPython Documentation, Release 7.1.0.dev

• PR #3223: add missing mathjax_url to new settings dict


• PR #3089: add stdin to the notebook
• PR #3221: Remove references to HTMLCell (dead code)
• PR #3205: add ignored *args to HasTraits constructor
• PR #3088: cleanup IPython handler settings
• PR #3201: use much faster regexp for ansi coloring
• PR #3220: avoid race condition in profile creation
• PR #3011: IPEP 12: add KernelClient
• PR #3217: informative error when trying to load directories
• PR #3174: Simple class
• PR #2979: CM configurable Take 2
• PR #3215: Updates storemagic extension to allow for specifying variable name to load
• PR #3181: backport If-Modified-Since fix from tornado
• PR #3200: IFrame (VimeoVideo, ScribdDocument, . . . )
• PR #3186: Fix small inconsistency in nbconvert: etype -> ename
• PR #3212: Fix issue #2563, “core.profiledir.check_startup_dir() doesn’t work inside py2exe’d installation”
• PR #3211: Fix inheritance_diagram Sphinx extension for Sphinx 1.2
• PR #3208: Update link to extensions index
• PR #3203: Separate InputSplitter for transforming whole cells
• PR #3189: Improve completer
• PR #3194: finish up PR #3116
• PR #3188: Add new keycodes
• PR #2695: Key the root modules cache by sys.path entries.
• PR #3182: clarify %%file docstring
• PR #3163: BUG: Fix the set and frozenset pretty printer to handle the empty case correctly
• PR #3180: better UsageError for cell magic with no body
• PR #3184: Cython cache
• PR #3175: Added missing s
• PR #3173: Little bits of documentation cleanup
• PR #2635: Improve Windows start menu shortcuts (#2)
• PR #3172: Add missing import in IPython parallel magics example
• PR #3170: default application logger shouldn’t propagate
• PR #3159: Autocompletion for zsh
• PR #3105: move DEFAULT_STATIC_FILES_PATH to IPython.html
• PR #3144: minor bower tweaks
• PR #3141: Default color output for ls on OSX

136 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #3137: fix dot syntax error in inheritance diagram


• PR #3072: raise UnsupportedOperation on iostream.fileno()
• PR #3147: Notebook support for a reverse proxy which handles SSL
• PR #3152: make qtconsole size at startup configurable
• PR #3162: adding stream kwarg to current.new_output
• PR #2981: IPEP 10: kernel side filtering of display formats
• PR #3058: add redirect handler for notebooks by name
• PR #3041: support non-modules in @require
• PR #2447: Stateful line transformers
• PR #3108: fix some O(N) and O(N^2) operations in parallel.map
• PR #2791: forward stdout from forked processes
• PR #3157: use Python 3-style for pretty-printed sets
• PR #3148: closes #3045, #3123 for tornado < version 3.0
• PR #3143: minor heading-link tweaks
• PR #3136: Strip useless ANSI escape codes in notebook
• PR #3126: Prevent errors when pressing arrow keys in an empty notebook
• PR #3135: quick dev installation instructions
• PR #2889: Push pandas dataframes to R magic
• PR #3068: Don’t monkeypatch doctest during IPython startup.
• PR #3133: fix argparse version check
• PR #3102: set spellcheck=false in CodeCell inputarea
• PR #3064: add anchors to heading cells
• PR #3097: PyQt 4.10: use self._document = self.document()
• PR #3117: propagate automagic change to shell
• PR #3118: don’t give up on weird os names
• PR #3115: Fix example
• PR #2640: fix quarantine/ipy_editors.py
• PR #3070: Add info make target that was missing in old Sphinx
• PR #3082: A few small patches to image handling
• PR #3078: fix regular expression for detecting links in stdout
• PR #3054: restore default behavior for automatic cluster size
• PR #3073: fix ipython usage text
• PR #3083: fix DisplayMagics.html docstring
• PR #3080: noted sub_channel being renamed to iopub_channel
• PR #3079: actually use IPKernelApp.kernel_class
• PR #3076: Improve notebook.js documentation

2.16. Issues closed in the 1.0 development cycle 137


IPython Documentation, Release 7.1.0.dev

• PR #3063: add missing %%html magic


• PR #3075: check for SIGUSR1 before using it, closes #3074
• PR #3051: add width:100% to vbox for webkit / FF consistency
• PR #2999: increase registration timeout
• PR #2997: fix DictDB default size limit
• PR #3033: on resume, print server info again
• PR #3062: test double pyximport
• PR #3046: cast kernel cwd to bytes on Python 2 on Windows
• PR #3038: remove xml from notebook magic docstrings
• PR #3032: fix time format to international time format
• PR #3022: Fix test for Windows
• PR #3024: changed instances of ‘outout’ to ‘output’ in alt texts
• PR #3013: py3 workaround for reload in cythonmagic
• PR #2961: time magic: shorten unnecessary output on windows
• PR #2987: fix local files examples in markdown
• PR #2998: fix css in .output_area pre
• PR #3003: add $include /etc/inputrc to suggested ~/.inputrc
• PR #2957: Refactor qt import logic. Fixes #2955
• PR #2994: expanduser on %%file targets
• PR #2983: fix run-all (that-> this)
• PR #2964: fix count when testing composite error output
• PR #2967: shows entire session history when only startsess is given
• PR #2942: Move CM IPython theme out of codemirror folder
• PR #2929: Cleanup cell insertion
• PR #2933: Minordocupdate
• PR #2968: fix notebook deletion.
• PR #2966: Added assert msg to extract_hist_ranges()
• PR #2959: Add command to trim the history database.
• PR #2681: Don’t enable pylab mode, when matplotlib is not importable
• PR #2901: Fix inputhook_wx on osx
• PR #2871: truncate potentially long CompositeErrors
• PR #2951: use istype on lists/tuples
• PR #2946: fix qtconsole history logic for end-of-line
• PR #2954: fix logic for append_javascript
• PR #2941: fix baseUrl
• PR #2903: Specify toggle value on cell line number

138 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #2911: display order in output area configurable


• PR #2897: Don’t rely on BaseProjectUrl data in body tag
• PR #2894: Cm configurable
• PR #2927: next release will be 1.0
• PR #2932: Simplify using notebook static files from external code
• PR #2915: added small config section to notebook docs page
• PR #2924: safe_run_module: Silence SystemExit codes 0 and None.
• PR #2906: Unpatch/Monkey patch CM
• PR #2921: add menu item for undo delete cell
• PR #2917: Don’t add logging handler if one already exists.
• PR #2910: Respect DB_IP and DB_PORT in mongodb tests
• PR #2926: Don’t die if stderr/stdout do not support set_parent() #2925
• PR #2885: get monospace pager back
• PR #2876: fix celltoolbar layout on FF
• PR #2904: Skip remaining IPC test on Windows
• PR #2908: fix last remaining KernelApp reference
• PR #2905: fix a few remaining KernelApp/IPKernelApp changes
• PR #2900: Don’t assume test case for %time will finish in 0 time
• PR #2893: exclude fabfile from tests
• PR #2884: Correct import for kernelmanager on Windows
• PR #2882: Utils cleanup
• PR #2883: Don’t call ast.fix_missing_locations unless the AST could have been modified
• PR #2855: time(it) magic: Implement minutes/hour formatting and “%%time” cell magic
• PR #2874: Empty cell warnings
• PR #2819: tweak history prefix search (up/^p) in qtconsole
• PR #2868: Import performance
• PR #2877: minor css fixes
• PR #2880: update examples docs with kernel move
• PR #2878: Pass host environment on to kernel
• PR #2599: func_kw_complete for builtin and cython with embededsignature=True using docstring
• PR #2792: Add key “unique” to history_request protocol
• PR #2872: fix payload keys
• PR #2869: Fixing styling of toolbar selects on FF.
• PR #2708: Less css
• PR #2854: Move kernel code into IPython.kernel
• PR #2864: Fix %run -t -N<N> TypeError

2.16. Issues closed in the 1.0 development cycle 139


IPython Documentation, Release 7.1.0.dev

• PR #2852: future pyzmq compatibility


• PR #2863: whatsnew/version0.9.txt: Fix ‘~./ipython’ -> ‘~/.ipython’ typo
• PR #2861: add missing KernelManager to ConsoleApp class list
• PR #2850: Consolidate host IP detection in utils.localinterfaces
• PR #2859: Correct docstring of ipython.py
• PR #2831: avoid string version comparisons in external.qt
• PR #2844: this should address the failure in #2732
• PR #2849: utils/data: Use list comprehension for uniq_stable()
• PR #2839: add jinja to install docs / setup.py
• PR #2841: Miscellaneous docs fixes
• PR #2811: Still more KernelManager cleanup
• PR #2820: add ‘=’ to greedy completer delims
• PR #2818: log user tracebacks in the kernel (INFO-level)
• PR #2828: Clean up notebook Javascript
• PR #2829: avoid comparison error in dictdb hub history
• PR #2830: BUG: Opening parenthesis after non-callable raises ValueError
• PR #2718: try to fallback to pysqlite2.dbapi2 as sqlite3 in core.history
• PR #2816: in %edit, don’t save “last_call” unless last call succeeded
• PR #2817: change ol format order
• PR #2537: Organize example notebooks
• PR #2815: update release/authors
• PR #2808: improve patience for slow Hub in client tests
• PR #2812: remove nonfunctional -la short arg in cython magic
• PR #2810: remove dead utils.upgradedir
• PR #1671: __future__ environments
• PR #2804: skip ipc tests on Windows
• PR #2789: Fixing styling issues with CellToolbar.
• PR #2805: fix KeyError creating ZMQStreams in notebook
• PR #2775: General cleanup of kernel manager code.
• PR #2340: Initial Code to reduce parallel.Client caching
• PR #2799: Exit code
• PR #2800: use type(obj) is cls as switch when canning
• PR #2801: Fix a breakpoint bug
• PR #2795: Remove outdated code from extensions.autoreload
• PR #2796: P3K: fix cookie parsing under Python 3.x (+ duplicate import is removed)
• PR #2724: In-process kernel support (take 3)

140 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #2687: [WIP] Metaui slideshow


• PR #2788: Chrome frame awareness
• PR #2649: Add version_request/reply messaging protocol
• PR #2753: add %%px --local for local execution
• PR #2783: Prefilter shouldn’t touch execution_count
• PR #2333: UI For Metadata
• PR #2396: create a ipynbv3 json schema and a validator
• PR #2757: check for complete pyside presence before trying to import
• PR #2782: Allow the %run magic with ‘-b’ to specify a file.
• PR #2778: P3K: fix DeprecationWarning under Python 3.x
• PR #2776: remove non-functional View.kill method
• PR #2755: can interactively defined classes
• PR #2774: Removing unused code in the notebook MappingKernelManager.
• PR #2773: Fixed minor typo causing AttributeError to be thrown.
• PR #2609: Add ‘unique’ option to history_request messaging protocol
• PR #2769: Allow shutdown when no engines are registered
• PR #2766: Define __file__ when we %edit a real file.
• PR #2476: allow %edit <variable> to work when interactively defined
• PR #2763: Reset readline delimiters after loading rmagic.
• PR #2460: Better handling of __file__ when running scripts.
• PR #2617: Fix for units argument. Adds a res argument.
• PR #2738: Unicode content crashes the pager (console)
• PR #2749: Tell Travis CI to test on Python 3.3 as well
• PR #2744: Don’t show ‘try %paste’ message while using magics
• PR #2728: shift tab for tooltip
• PR #2741: Add note to %cython Black-Scholes example warning of missing erf.
• PR #2743: BUG: Octavemagic inline plots not working on Windows: Fixed
• PR #2740: Following #2737 this error is now a name error
• PR #2737: Rmagic: error message when moving an non-existant variable from python to R
• PR #2723: diverse fixes for project url
• PR #2731: %Rpush: Look for variables in the local scope first.
• PR #2544: Infinite loop when multiple debuggers have been attached.
• PR #2726: Add qthelp docs creation
• PR #2730: added blockquote CSS
• PR #2729: Fix Read the doc build, Again
• PR #2446: [alternate 2267] Offline mathjax

2.16. Issues closed in the 1.0 development cycle 141


IPython Documentation, Release 7.1.0.dev

• PR #2716: remove unexisting headings level


• PR #2717: One liner to fix debugger printing stack traces when lines of context are larger than source.
• PR #2713: Doc bugfix: user_ns is not an attribute of Magic objects.
• PR #2690: Fix ‘import ‘. . . completion for py3 & egg files.
• PR #2691: Document OpenMP in %%cython magic
• PR #2699: fix jinja2 rendering for password protected notebooks
• PR #2700: Skip notebook testing if jinja2 is not available.
• PR #2692: Add %%cython magics to generated documentation.
• PR #2685: Fix pretty print of types when __module__ is not available.
• PR #2686: Fix tox.ini
• PR #2604: Backslashes are misinterpreted as escape-sequences by the R-interpreter.
• PR #2689: fix error in doc (arg->kwarg) and pep-8
• PR #2683: for downloads, replaced window.open with window.location.assign
• PR #2659: small bugs in js are fixed
• PR #2363: Refactor notebook templates to use Jinja2
• PR #2662: qtconsole: wrap argument list in tooltip to match width of text body
• PR #2328: addition of classes to generate a link or list of links from files local to the IPython HTML notebook
• PR #2668: pylab_not_importable: Catch all exceptions, not just RuntimeErrors.
• PR #2663: Fix issue #2660: parsing of help and version arguments
• PR #2656: Fix irunner tests when $PYTHONSTARTUP is set
• PR #2312: Add bracket matching to code cells in notebook
• PR #2571: Start to document Javascript
• PR #2641: undefinied that -> this
• PR #2638: Fix %paste in Python 3 on Mac
• PR #2301: Ast transfomers
• PR #2616: Revamp API docs
• PR #2572: Make ‘Paste Above’ the default paste behavior.
• PR #2574: Fix #2244
• PR #2582: Fix displaying history when output cache is disabled.
• PR #2591: Fix for Issue #2584
• PR #2526: Don’t kill paramiko tunnels when receiving ^C
• PR #2559: Add psource, pfile, pinfo2 commands to ipdb.
• PR #2546: use 4 Pythons to build 4 Windows installers
• PR #2561: Fix display of plain text containing multiple carriage returns before line feed
• PR #2549: Add a simple ‘undo’ for cell deletion.
• PR #2525: Add event to kernel execution/shell reply.

142 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #2554: Avoid stopping in ipdb until we reach the main script.


• PR #2404: Option to limit search result in history magic command
• PR #2294: inputhook_qt4: Use QEventLoop instead of starting up the QCoreApplication
• PR #2233: Refactored Drag and Drop Support in Qt Console
• PR #1747: switch between hsplit and vsplit paging (request for feedback)
• PR #2530: Adding time offsets to the video
• PR #2542: Allow starting IPython as python -m IPython.
• PR #2534: Do not unescape backslashes in Windows (shellglob)
• PR #2517: Improved MathJax, bug fixes
• PR #2511: trigger default remote_profile_dir when profile_dir is set
• PR #2491: color is supported in ironpython
• PR #2462: Track which extensions are loaded
• PR #2464: Locate URLs in text output and convert them to hyperlinks.
• PR #2490: add ZMQInteractiveShell to IPEngineApp class list
• PR #2498: Don’t catch tab press when something selected
• PR #2527: Run All Above and Run All Below
• PR #2513: add GitHub uploads to release script
• PR #2529: Windows aware tests for shellglob
• PR #2478: Fix doctest_run_option_parser for Windows
• PR #2519: clear In[ ] prompt numbers again
• PR #2467: Clickable links
• PR #2500: Add encoding attribute to OutStream class.
• PR #2349: ENH: added StackExchange-style MathJax filtering
• PR #2503: Fix traceback handling of SyntaxErrors without line numbers.
• PR #2492: add missing ‘qtconsole’ extras_require
• PR #2480: Add deprecation warnings for sympyprinting
• PR #2334: Make the ipengine monitor the ipcontroller heartbeat and die if the ipcontroller goes down
• PR #2479: use new _winapi instead of removed _subprocess
• PR #2474: fix bootstrap name conflicts
• PR #2469: Treat __init__.pyc same as __init__.py in module_list
• PR #2165: Add -g option to %run to glob expand arguments
• PR #2468: Tell git to ignore __pycache__ directories.
• PR #2421: Some notebook tweaks.
• PR #2291: Remove old plugin system
• PR #2127: Ability to build toolbar in JS
• PR #2445: changes for ironpython

2.16. Issues closed in the 1.0 development cycle 143


IPython Documentation, Release 7.1.0.dev

• PR #2420: Pass ipython_dir to __init__() method of TerminalInteractiveShell’s superclass.


• PR #2432: Revert #1831, the __file__ injection in safe_execfile / safe_execfile_ipy.
• PR #2216: Autochange highlight with cell magics
• PR #1946: Add image message handler in ZMQTerminalInteractiveShell
• PR #2424: skip find_cmd when setting up script magics
• PR #2389: Catch sqlite DatabaseErrors in more places when reading the history database
• PR #2395: Don’t catch ImportError when trying to unpack module functions
• PR #1868: enable IPC transport for kernels
• PR #2437: don’t let log cleanup prevent engine start
• PR #2441: sys.maxsize is the maximum length of a container.
• PR #2442: allow iptest to be interrupted
• PR #2240: fix message built for engine dying during task
• PR #2369: Block until kernel termination after sending a kill signal
• PR #2439: Py3k: Octal (0777 -> 0o777)
• PR #2326: Detachable pager in notebook.
• PR #2377: Fix installation of man pages in Python 3
• PR #2407: add IPython version to message headers
• PR #2408: Fix Issue #2366
• PR #2405: clarify TaskScheduler.hwm doc
• PR #2399: IndentationError display
• PR #2400: Add scroll_to_cell(cell_number) to the notebook
• PR #2401: unmock read-the-docs modules
• PR #2311: always perform requested trait assignments
• PR #2393: New option n to limit history search hits
• PR #2386: Adapt inline backend to changes in matplotlib
• PR #2392: Remove suspicious double quote
• PR #2387: Added -L library search path to cythonmagic cell magic
• PR #2370: qtconsole: Create a prompt newline by inserting a new block (w/o formatting)
• PR #1715: Fix for #1688, traceback-unicode issue
• PR #2378: use Singleton.instance() for embed() instead of manual global
• PR #2373: fix missing imports in core.interactiveshell
• PR #2368: remove notification widget leftover
• PR #2327: Parallel: Support get/set of nested objects in view (e.g. dv[‘a.b’])
• PR #2362: Clean up ProgressBar class in example notebook
• PR #2346: Extra xterm identification in set_term_title
• PR #2352: Notebook: Store the username in a cookie whose name is unique.

144 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #2358: add backport_pr to tools


• PR #2365: fix names of notebooks for download/save
• PR #2364: make clients use ‘location’ properly (fixes #2361)
• PR #2354: Refactor notebook templates to use Jinja2
• PR #2339: add bash completion example
• PR #2345: Remove references to ‘version’ no longer in argparse. Github issue #2343.
• PR #2347: adjust division error message checking to account for Python 3
• PR #2305: RemoteError._render_traceback_ calls self.render_traceback
• PR #2338: Normalize line endings for ipexec_validate, fix for #2315.
• PR #2192: Introduce Notification Area
• PR #2329: Better error messages for common magic commands.
• PR #2337: ENH: added StackExchange-style MathJax filtering
• PR #2331: update css for qtconsole in doc
• PR #2317: adding cluster_id to parallel.Client.__init__
• PR #2130: Add -l option to %R magic to allow passing in of local namespace
• PR #2196: Fix for bad command line argument to latex
• PR #2300: bug fix: was crashing when sqlite3 is not installed
• PR #2184: Expose store_history to execute_request messages.
• PR #2308: Add welcome_message option to enable_pylab
• PR #2302: Fix variable expansion on ‘self’
• PR #2299: Remove code from prefilter that duplicates functionality in inputsplitter
• PR #2295: allow pip install from github repository directly
• PR #2280: fix SSH passwordless check for OpenSSH
• PR #2290: nbmanager
• PR #2288: s/assertEquals/assertEqual (again)
• PR #2287: Removed outdated dev docs.
• PR #2218: Use redirect for new notebooks
• PR #2277: nb: up/down arrow keys move to begin/end of line at top/bottom of cell
• PR #2045: Refactoring notebook managers and adding Azure backed storage.
• PR #2271: use display instead of send_figure in inline backend hooks
• PR #2278: allow disabling SQLite history
• PR #2225: Add “–annotate” option to %%cython magic.
• PR #2246: serialize individual args/kwargs rather than the containers
• PR #2274: CLN: Use name to id mapping of notebooks instead of searching.
• PR #2270: SSHLauncher tweaks
• PR #2269: add missing location when disambiguating controller IP

2.16. Issues closed in the 1.0 development cycle 145


IPython Documentation, Release 7.1.0.dev

• PR #2263: Allow docs to build on http://readthedocs.io/


• PR #2256: Adding data publication example notebook.
• PR #2255: better flush iopub with AsyncResults
• PR #2261: Fix: longest_substr([]) -> ‘’
• PR #2260: fix mpr again
• PR #2242: Document globbing in %history -g <pattern>.
• PR #2250: fix html in notebook example
• PR #2245: Fix regression in embed() from pull-request #2096.
• PR #2248: track sha of master in test_pr messages
• PR #2238: Fast tests
• PR #2211: add data publication message
• PR #2236: minor test_pr tweaks
• PR #2231: Improve Image format validation and add html width,height
• PR #2232: Reapply monkeypatch to inspect.findsource()
• PR #2235: remove spurious print statement from setupbase.py
• PR #2222: adjust how canning deals with import strings
• PR #2224: fix css typo
• PR #2223: Custom tracebacks
• PR #2214: use KernelApp.exec_lines/files in IPEngineApp
• PR #2199: Wrap JS published by %%javascript in try/catch
• PR #2212: catch errors in markdown javascript
• PR #2190: Update code mirror 2.22 to 2.32
• PR #2200: documentation build broken in bb429da5b
• PR #2194: clean nan/inf in json_clean
• PR #2198: fix mpr for earlier git version
• PR #2175: add FileFindHandler for Notebook static files
• PR #1990: can func_defaults
• PR #2069: start improving serialization in parallel code
• PR #2202: Create a unique & temporary IPYTHONDIR for each testing group.
• PR #2204: Work around lack of os.kill in win32.
• PR #2148: win32 iptest: Use subprocess.Popen() instead of os.system().
• PR #2179: Pylab switch
• PR #2124: Add an API for registering magic aliases.
• PR #2169: ipdb: pdef, pdoc, pinfo magics all broken
• PR #2174: Ensure consistent indentation in %magic.
• PR #1930: add size-limiting to the DictDB backend

146 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #2189: Fix IPython.lib.latextools for Python 3


• PR #2186: removed references to h5py dependence in octave magic documentation
• PR #2183: Include the kernel object in the event object passed to kernel events
• PR #2185: added test for %store, fixed storemagic
• PR #2138: Use breqn.sty in dvipng backend if possible
• PR #2182: handle undefined param in notebooklist
• PR #1831: fix #1814 set __file__ when running .ipy files
• PR #2051: Add a metadata attribute to messages
• PR #1471: simplify IPython.parallel connections and enable Controller Resume
• PR #2181: add %%javascript, %%svg, and %%latex display magics
• PR #2116: different images in 00_notebook-tour
• PR #2092: %prun: Restore stats.stream after running print_stream.
• PR #2159: show message on notebook list if server is unreachable
• PR #2176: fix git mpr
• PR #2152: [qtconsole] Namespace not empty at startup
• PR #2177: remove numpy install from travis/tox scripts
• PR #2090: New keybinding for code cell execution + cell insertion
• PR #2160: Updating the parallel options pricing example
• PR #2168: expand line in cell magics
• PR #2170: Fix tab completion with IPython.embed_kernel().
• PR #2096: embed(): Default to the future compiler flags of the calling frame.
• PR #2163: fix ‘remote_profie_dir’ typo in SSH launchers
• PR #2158: [2to3 compat ] Tuple params in func defs
• PR #2089: Fix unittest DeprecationWarnings
• PR #2142: Refactor test_pr.py
• PR #2140: 2to3: Apply has_key fixer.
• PR #2131: Add option append (-a) to %save
• PR #2117: use explicit url in notebook example
• PR #2133: Tell git that *.py files contain Python code, for use in word-diffs.
• PR #2134: Apply 2to3 next fix.
• PR #2126: ipcluster broken with any batch launcher (PBS/LSF/SGE)
• PR #2104: Windows make file for Sphinx documentation
• PR #2074: Make BG color of inline plot configurable
• PR #2123: BUG: Look up the _repr_pretty_ method on the class within the MRO rath. . .
• PR #2100: [in progress] python 2 and 3 compatibility without 2to3, second try
• PR #2128: open notebook copy in different tabs

2.16. Issues closed in the 1.0 development cycle 147


IPython Documentation, Release 7.1.0.dev

• PR #2073: allows password and prefix for notebook


• PR #1993: Print View
• PR #2086: re-aliad %ed to %edit in qtconsole
• PR #2110: Fixes and improvements to the input splitter
• PR #2101: fix completer deletting newline
• PR #2102: Fix logging on interactive shell.
• PR #2088: Fix (some) Python 3.2 ResourceWarnings
• PR #2064: conform to pep 3110
• PR #2076: Skip notebook ‘static’ dir in test suite.
• PR #2063: Remove umlauts so py3 installations on LANG=C systems succeed.
• PR #2068: record sysinfo in sdist
• PR #2067: update tools/release_windows.py
• PR #2065: Fix parentheses typo
• PR #2062: Remove duplicates and auto-generated files from repo.
• PR #2061: use explicit tuple in exception
• PR #2060: change minus to - or (hy in manpages
Issues (691):
• #3940: Install process documentation overhaul
• #3946: The PDF option for --post should work with lowercase
• #3957: Notebook help page broken in Firefox
• #3894: nbconvert test failure
• #3887: 1.0.0a1 shows blank screen in both firefox and chrome (windows 7)
• #3703: nbconvert: Output options – names and documentation
• #3931: Tab completion not working during debugging in the notebook
• #3936: Ipcluster plugin is not working with Ipython 1.0dev
• #3941: IPython Notebook kernel crash on Win7x64
• #3926: Ending Notebook renaming dialog with return creates new-line
• #3932: Incorrect empty docstring
• #3928: Passing variables to script from the workspace
• #3774: Notebooks with spaces in their names breaks nbconvert latex graphics
• #3916: tornado needs its own check
• #3915: Link to Parallel examples “found on GitHub” broken in docs
• #3895: Keyboard shortcuts box in notebook doesn’t fit the screen
• #3912: IPython.utils fails automated test for RC1 1.0.0
• #3636: Code cell missing highlight on load

148 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #3897: under Windows, “ipython3 nbconvert “C:/blabla/first_try.ipynb” –to latex –post PDF” POST processing
action fails because of a bad parameter
• #3900: python3 install syntax errors (OS X 10.8.4)
• #3899: nbconvert to latex fails on notebooks with spaces in file name
• #3881: Temporary Working Directory Test Fails
• #2750: A way to freeze code cells in the notebook
• #3893: Resize Local Image Files in Notebook doesn’t work
• #3823: nbconvert on windows: tex and paths
• #3885: under Windows, “ipython3 nbconvert “C:/blabla/first_try.ipynb” –to latex” write “” instead of “/” to
reference file path in the .tex file
• #3889: test_qt fails due to assertion error ‘qt4’ != ‘qt’
• #3890: double post, disregard this issue
• #3689: nbconvert, remaining tests
• #3874: Up/Down keys don’t work to “Search previous command history” (besides Ctrl-p/Ctrl-n)
• #3853: CodeMirror locks up in the notebook
• #3862: can only connect to an ipcluster started with v1.0.0-dev (master branch) using an older ipython (v0.13.2),
but cannot connect using ipython (v1.0.0-dev)
• #3869: custom css not working.
• #2960: Keyboard shortcuts
• #3795: ipcontroller process goes to 100% CPU, ignores connection requests
• #3553: Ipython and pylab crashes in windows and canopy
• #3837: Cannot set custom mathjax url, crash notebook server.
• #3808: “Naming” releases ?
• #2431: TypeError: must be string without null bytes, not str
• #3856: ? at end of comment causes line to execute
• #3731: nbconvert: add logging for the different steps of nbconvert
• #3835: Markdown cells do not render correctly when mathjax is disabled
• #3843: nbconvert to rst: leftover “In[ ]”
• #3799: nbconvert: Ability to specify name of output file
• #3726: Document when IPython.start_ipython() should be used versus IPython.embed()
• #3778: Add no more readonly view in what’s new
• #3754: No Print View in Notebook in 1.0dev
• #3798: IPython 0.12.1 Crashes on autocompleting sqlalchemy.func.row_number properties
• #3811: Opening notebook directly from the command line with multi-directory support installed
• #3775: Annoying behavior when clicking on cell after execution (Ctrl+Enter)
• #3809: Possible to add some bpython features?
• #3810: Printing the contents of an image file messes up shell text

2.16. Issues closed in the 1.0 development cycle 149


IPython Documentation, Release 7.1.0.dev

• #3702: nbconvert: Default help message should be that of –help


• #3735: Nbconvert 1.0.0a1 does not take into account the pdf extensions in graphs
• #3719: Bad strftime format, for windows, in nbconvert exporter
• #3786: Zmq errors appearing with Ctrl-C in console/qtconsole
• #3019: disappearing scrollbar on tooltip in Chrome 24 on Ubuntu 12.04
• #3785: ipdb completely broken in Qt console
• #3796: Document the meaning of milestone/issues-tags for users.
• #3788: Do not auto show tooltip if docstring empty.
• #1366: [Web page] No link to front page from documentation
• #3739: nbconvert (to slideshow) misses some of the math in markdown cells
• #3768: increase and make timeout configurable in console completion.
• #3724: ipcluster only running on one cpu
• #1592: better message for unsupported nbformat
• #2049: Can not stop “ipython kernel” on windows
• #3757: Need direct entry point to given notebook
• #3745: ImportError: cannot import name check_linecache_ipython
• #3701: nbconvert: Final output file should be in same directory as input file
• #3738: history -o works but history with -n produces identical results
• #3740: error when attempting to run ‘make’ in docs directory
• #3737: ipython nbconvert crashes with ValueError: Invalid format string.
• #3730: nbconvert: unhelpful error when pandoc isn’t installed
• #3718: markdown cell cursor misaligned in notebook
• #3710: multiple input fields for %debug in the notebook after resetting the kernel
• #3713: PyCharm has problems with IPython working inside PyPy created by virtualenv
• #3712: Code completion: Complete on dictionary keys
• #3680: –pylab and –matplotlib flag
• #3698: nbconvert: Unicode error with minus sign
• #3693: nbconvert does not process SVGs into PDFs
• #3688: nbconvert, figures not extracting with Python 3.x
• #3542: note new dependencies in docs / setup.py
• #2556: [pagedown] do not target_blank anchor link
• #3684: bad message when %pylab fails due import other than matplotlib
• #3682: ipython notebook pylab inline import_all=False
• #3596: MathjaxUtils race condition?
• #1540: Comment/uncomment selection in notebook
• #2702: frozen setup: permission denied for default ipython_dir

150 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #3672: allow_none on Number-like traits.


• #2411: add CONTRIBUTING.md
• #481: IPython terminal issue with Qt4Agg on XP SP3
• #2664: How to preserve user variables from import clashing?
• #3436: enable_pylab(import_all=False) still imports np
• #2630: lib.pylabtools.figsize : NameError when using Qt4Agg backend and %pylab magic.
• #3154: Notebook: no event triggered when a Cell is created
• #3579: Nbconvert: SVG are not transformed to PDF anymore
• #3604: MathJax rendering problem in %%latex cell
• #3668: AttributeError: ‘BlockingKernelClient’ object has no attribute ‘started_channels’
• #3245: SyntaxError: encoding declaration in Unicode string
• #3639: %pylab inline in IPYTHON notebook throws “RuntimeError: Cannot activate multiple GUI eventloops”
• #3663: frontend deprecation warnings
• #3661: run -m not behaving like python -m
• #3597: re-do PR #3531 - allow markdown in Header cell
• #3053: Markdown in header cells is not rendered
• #3655: IPython finding its way into pasted strings.
• #3620: uncaught errors in HTML output
• #3646: get_dict() error
• #3004: %load_ext rmagic fails when legacy ipy_user_conf.py is installed (in ipython 0.13.1 / OSX 10.8)
• #3638: setp() issue in ipython notebook with figure references
• #3634: nbconvert reveal to pdf conversion ignores styling, prints only a single page.
• #1307: Remove pyreadline workarounds, we now require pyreadline >= 1.7.1
• #3316: find_cmd test failure on Windows
• #3494: input() in notebook doesn’t work in Python 3
• #3427: Deprecate $ as mathjax delimiter
• #3625: Pager does not open from button
• #3149: Miscellaneous small nbconvert feedback
• #3617: 256 color escapes support
• #3609: %pylab inline blows up for single process ipython
• #2934: Publish the Interactive MPI Demo Notebook
• #3614: ansi escapes broken in master (ls –color)
• #3610: If you don’t have markdown, python setup.py install says no pygments
• #3547: %run modules clobber each other
• #3602: import_item fails when one tries to use DottedObjectName instead of a string
• #3563: Duplicate tab completions in the notebook

2.16. Issues closed in the 1.0 development cycle 151


IPython Documentation, Release 7.1.0.dev

• #3599: Problems trying to run IPython on python3 without installing. . .


• #2937: too long completion in notebook
• #3479: Write empty name for the notebooks
• #3505: nbconvert: Failure in specifying user filter
• #1537: think a bit about namespaces
• #3124: Long multiline strings in Notebook
• #3464: run -d message unclear
• #2706: IPython 0.13.1 ignoring $PYTHONSTARTUP
• #3587: LaTeX escaping bug in nbconvert when exporting to HTML
• #3213: Long running notebook died with a coredump
• #3580: Running ipython with pypy on windows
• #3573: custom.js not working
• #3544: IPython.lib test failure on Windows
• #3352: Install Sphinx extensions
• #2971: [notebook]user needs to press ctrl-c twice to stop notebook server should be put into terminal window
• #2413: ipython3 qtconsole fails to install: ipython 0.13 has no such extra feature ‘qtconsole’
• #2618: documentation is incorrect for install process
• #2595: mac 10.8 qtconsole export history
• #2586: cannot store aliases
• #2714: ipython qtconsole print unittest messages in console instead his own window.
• #2669: cython magic failing to work with openmp.
• #3256: Vagrant pandas instance of IPython Notebook does not respect additional plotting arguments
• #3010: cython magic fail if cache dir is deleted while in session
• #2044: prune unused names from parallel.error
• #1145: Online help utility broken in QtConsole
• #3439: Markdown links no longer open in new window (with change from pagedown to marked)
• #3476: _margv for macros seems to be missing
• #3499: Add reveal.js library (version 2.4.0) inside IPython
• #2771: Wiki Migration to GitHub
• #2887: ipcontroller purging some engines during connect
• #626: Enable Resuming Controller
• #2824: Kernel restarting after message “Kernel XXXX failed to respond to heartbeat”
• #2823: %%cython magic gives ImportError: dlopen(long_file_name.so, 2): image not found
• #2891: In IPython for Python 3, system site-packages comes before user site-packages
• #2928: Add magic “watch” function (example)
• #2931: Problem rendering pandas dataframe in Firefox for Windows

152 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #2939: [notebook] Figure legend not shown in inline backend if ouside the box of the axes
• #2972: [notebook] in Markdown mode, press Enter key at the end of <some http link>, the next line is indented
unexpectly
• #3069: Instructions for installing IPython notebook on Windows
• #3444: Encoding problem: cannot use if user’s name is not ascii?
• #3335: Reenable bracket matching
• #3386: Magic %paste not working in Python 3.3.2. TypeError: Type str doesn’t support the buffer API
• #3543: Exception shutting down kernel from notebook dashboard (0.13.1)
• #3549: Codecell size changes with selection
• #3445: Adding newlines in %%latex cell
• #3237: [notebook] Can’t close a notebook without errors
• #2916: colon invokes auto(un)indent in markdown cells
• #2167: Indent and dedent in htmlnotebook
• #3545: Notebook save button icon not clear
• #3534: nbconvert incompatible with Windows?
• #3489: Update example notebook that raw_input is allowed
• #3396: Notebook checkpoint time is displayed an hour out
• #3261: Empty revert to checkpoint menu if no checkpoint. . .
• #2984: “print” magic does not work in Python 3
• #3524: Issues with pyzmq and ipython on EPD update
• #2434: %store magic not auto-restoring
• #2720: base_url and static path
• #2234: Update various low resolution graphics for retina displays
• #2842: Remember passwords for pw-protected notebooks
• #3244: qtconsole: ValueError(‘close_fds is not supported on Windows platforms if you redirect
stdin/stdout/stderr’,)
• #2215: AsyncResult.wait(0) can hang waiting for the client to get results?
• #2268: provide mean to retrieve static data path
• #1905: Expose UI for worksheets within each notebook
• #2380: Qt inputhook prevents modal dialog boxes from displaying
• #3185: prettify on double //
• #2821: Test failure: IPython.parallel.tests.test_client.test_resubmit_header
• #2475: [Notebook] Line is deindented when typing eg a colon in markdown mode
• #2470: Do not destroy valid notebooks
• #860: Allow the standalone export of a notebook to HTML
• #2652: notebook with qt backend crashes at save image location popup
• #1587: Improve kernel restarting in the notebook

2.16. Issues closed in the 1.0 development cycle 153


IPython Documentation, Release 7.1.0.dev

• #2710: Saving a plot in Mac OS X backend crashes IPython


• #2596: notebook “Last saved:” is misleading on file opening.
• #2671: TypeError :NoneType when executed “ipython qtconsole” in windows console
• #2703: Notebook scrolling breaks after pager is shown
• #2803: KernelManager and KernelClient should be two separate objects
• #2693: TerminalIPythonApp configuration fails without ipython_config.py
• #2531: IPython 0.13.1 python 2 32-bit installer includes 64-bit ipython*.exe launchers in the scripts folder
• #2520: Control-C kills port forwarding
• #2279: Setting __file__ to None breaks Mayavi import
• #2161: When logged into notebook, long titles are incorrectly positioned
• #1292: Notebook, Print view should not be editable. . .
• #1731: test parallel launchers
• #3227: Improve documentation of ipcontroller and possible BUG
• #2896: IPController very unstable
• #3517: documentation build broken in head
• #3522: UnicodeDecodeError: ‘ascii’ codec can’t decode byte on Pycharm on Windows
• #3448: Please include MathJax fonts with IPython Notebook
• #3519: IPython Parallel map mysteriously turns pandas Series into numpy ndarray
• #3345: IPython embedded shells ask if I want to exit, but I set confirm_exit = False
• #3509: IPython won’t close without asking “Are you sure?” in Firefox
• #3471: Notebook jinja2/markupsafe dependencies in manual
• #3502: Notebook broken in master
• #3302: autoreload does not work in ipython 0.13.x, python 3.3
• #3475: no warning when leaving/closing notebook on master without saved changes
• #3490: No obvious feedback when kernel crashes
• #1912: Move all autoreload tests to their own group
• #2577: sh.py and ipython for python 3.3
• #3467: %magic doesn’t work
• #3501: Editing markdown cells that wrap has off-by-one errors in cursor positioning
• #3492: IPython for Python3
• #3474: unexpected keyword argument to remove_kernel
• #2283: TypeError when using ‘?’ after a string in a %logstart session
• #2787: rmagic and pandas DataFrame
• #2605: Ellipsis literal triggers AttributeError
• #1179: Test unicode source in pinfo
• #2055: drop Python 3.1 support

154 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #2293: IPEP 2: Input transformations


• #2790: %paste and %cpaste not removing “. . . ” lines
• #3480: Testing fails because iptest.py cannot be found
• #2580: will not run within PIL build directory
• #2797: RMagic, Dataframe Conversion Problem
• #2838: Empty lines disappear from triple-quoted literals.
• #3050: Broken link on IPython.core.display page
• #3473: Config not passed down to subcommands
• #3462: Setting log_format in config file results in error (and no format changes)
• #3311: Notebook (occasionally) not working on windows (Sophos AV)
• #3461: Cursor positioning off by a character in auto-wrapped lines
• #3454: _repr_html_ error
• #3457: Space in long Paragraph Markdown cell with Chinese or Japanese
• #3447: Run Cell Does not Work
• #1373: Last lines in long cells are hidden
• #1504: Revisit serialization in IPython.parallel
• #1459: Can’t connect to 2 HTTPS notebook servers on the same host
• #678: Input prompt stripping broken with multiline data structures
• #3001: IPython.notebook.dirty flag is not set when a cell has unsaved changes
• #3077: Multiprocessing semantics in parallel.view.map
• #3056: links across notebooks
• #3120: Tornado 3.0
• #3156: update pretty to use Python 3 style for sets
• #3197: Can’t escape multiple dollar signs in a markdown cell
• #3309: Image() signature/doc improvements
• #3415: Bug in IPython/external/path/__init__.py
• #3446: Feature suggestion: Download matplotlib figure to client browser
• #3295: autoexported notebooks: only export explicitly marked cells
• #3442: Notebook: Summary table extracted from markdown headers
• #3438: Zooming notebook in chrome is broken in master
• #1378: Implement autosave in notebook
• #3437: Highlighting matching parentheses
• #3435: module search segfault
• #3424: ipcluster –version
• #3434: 0.13.2 Ipython/genutils.py doesn’t exist
• #3426: Feature request: Save by cell and not by line #: IPython %save magic

2.16. Issues closed in the 1.0 development cycle 155


IPython Documentation, Release 7.1.0.dev

• #3412: Non Responsive Kernel: Running a Django development server from an IPython Notebook
• #3408: Save cell toolbar and slide type metadata in notebooks
• #3246: %paste regression with blank lines
• #3404: Weird error with $variable and grep in command line magic (!command)
• #3405: Key auto-completion in dictionaries?
• #3259: Codemirror linenumber css broken
• #3397: Vertical text misalignment in Markdown cells
• #3391: Revert #3358 once fix integrated into CM
• #3360: Error 500 while saving IPython notebook
• #3375: Frequent Safari/Webkit crashes
• #3365: zmq frontend
• #2654: User_expression issues
• #3389: Store history as plain text
• #3388: Ipython parallel: open TCP connection created for each result returned from engine
• #3385: setup.py failure on Python 3
• #3376: Setting __module__ to None breaks pretty printing
• #3374: ipython qtconsole does not display the prompt on OSX
• #3380: simple call to kernel
• #3379: TaskRecord key ‘started’ not set
• #3241: notebook connection time out
• #3334: magic interpreter interprets non magic commands?
• #3326: python3.3: Type error when launching SGE cluster in IPython notebook
• #3349: pip3 doesn’t run 2to3?
• #3347: Longlist support in ipdb
• #3343: Make pip install / easy_install faster
• #3337: git submodules broke nightly PPA builds
• #3206: Copy/Paste Regression in QtConsole
• #3329: Buggy linewrap in Mac OSX Terminal (Mountain Lion)
• #3327: Qt version check broken
• #3303: parallel tasks never finish under heavy load
• #1381: ‘’ for equation continuations require an extra ‘’ in markdown cells
• #3314: Error launching IPython
• #3306: Test failure when running on a Vagrant VM
• #3280: IPython.utils.process.getoutput returns stderr
• #3299: variables named _ or __ exhibit incorrect behavior
• #3196: add an “x” or similar to htmlnotebook pager

156 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #3293: Several 404 errors for js files Firefox


• #3292: syntax highlighting in chrome on OSX 10.8.3
• #3288: Latest dev version hangs on page load
• #3283: ipython dev retains directory information after directory change
• #3279: custom.css is not overridden in the dev IPython (1.0)
• #2727: %run -m doesn’t support relative imports
• #3268: GFM triple backquote and unknown language
• #3273: Suppressing all plot related outputs
• #3272: Backspace while completing load previous page
• #3260: Js error in savewidget
• #3247: scrollbar in notebook when not needed?
• #3243: notebook: option to view json source from browser
• #3265: 404 errors when running IPython 1.0dev
• #3257: setup.py not finding submodules
• #3253: Incorrect Qt and PySide version comparison
• #3248: Cell magics broken in Qt console
• #3012: Problems with the less based style.min.css
• #2390: Image width/height don’t work in embedded images
• #3236: cannot set TerminalIPythonApp.log_format
• #3214: notebook kernel dies if started with invalid parameter
• #2980: Remove HTMLCell ?
• #3128: qtconsole hangs on importing pylab (using X forwarding)
• #3198: Hitting recursive depth causing all notebook pages to hang
• #3218: race conditions in profile directory creation
• #3177: OverflowError execption in handlers.py
• #2563: core.profiledir.check_startup_dir() doesn’t work inside py2exe’d installation
• #3207: [Feature] folders for ipython notebook dashboard
• #3178: cell magics do not work with empty lines after #2447
• #3204: Default plot() colors unsuitable for red-green colorblind users
• #1789: :\n/*foo turns into :\n*(foo) in triple-quoted strings.
• #3202: File cell magic fails with blank lines
• #3199: %%cython -a stopped working?
• #2688: obsolete imports in import autocompletion
• #3192: Python2, Unhandled exception, __builtin__.True = False
• #3179: script magic error message loop
• #3009: use XDG_CACHE_HOME for cython objects

2.16. Issues closed in the 1.0 development cycle 157


IPython Documentation, Release 7.1.0.dev

• #3059: Bugs in 00_notebook_tour example.


• #3104: Integrate a javascript file manager into the notebook front end
• #3176: Particular equation not rendering (notebook)
• #1133: [notebook] readonly and upload files/UI
• #2975: [notebook] python file and cell toolbar
• #3017: SciPy.weave broken in IPython notebook/ qtconsole
• #3161: paste macro not reading spaces correctly
• #2835: %paste not working on WinXpSP3/ipython-0.13.1.py2-win32-PROPER.exe/python27
• #2628: Make transformers work for lines following decorators
• #2612: Multiline String containing “:n?foon” confuses interpreter to replace ?foo with
get_ipython().magic(u’pinfo foo’)
• #2539: Request: Enable cell magics inside of .ipy scripts
• #2507: Multiline string does not work (includes ...) with doctest type input in IPython notebook
• #2164: Request: Line breaks in line magic command
• #3106: poor parallel performance with many jobs
• #2438: print inside multiprocessing crashes Ipython kernel
• #3155: Bad md5 hash for package 0.13.2
• #3045: [Notebook] Ipython Kernel does not start if disconnected from internet(/network?)
• #3146: Using celery in python 3.3
• #3145: The notebook viewer is down
• #2385: grep –color not working well with notebook
• #3131: Quickly install from source in a clean virtualenv?
• #3139: Rolling log for ipython
• #3127: notebook with pylab=inline appears to call figure.draw twice
• #3129: Walking up and down the call stack
• #3123: Notebook crashed if unplugged ethernet cable
• #3121: NB should use normalize.css? was #3049
• #3087: Disable spellchecking in notebook
• #3084: ipython pyqt 4.10 incompatibilty, QTextBlockUserData
• #3113: Fails to install under Jython 2.7 beta
• #3110: Render of h4 headers is not correct in notebook (error in renderedhtml.css)
• #3109: BUG: read_csv: dtype={‘id’ : np.str}: Datatype not understood
• #3107: Autocompletion of object attributes in arrays
• #3103: Reset locale setting in qtconsole
• #3090: python3.3 Entry Point not found
• #3081: UnicodeDecodeError when using Image(data=”some.jpeg”)

158 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #2834: url regexp only finds one link


• #3091: qtconsole breaks doctest.testmod() in Python 3.3
• #3074: SIGUSR1 not available on Windows
• #2996: registration::purging stalled registration high occurrence in small clusters
• #3065: diff-ability of notebooks
• #3067: Crash with pygit2
• #3061: Bug handling Ellipsis
• #3049: NB css inconsistent behavior between ff and webkit
• #3039: unicode errors when opening a new notebook
• #3048: Installning ipython qtConsole should be easyer att Windows
• #3042: Profile creation fails on 0.13.2 branch
• #3035: docstring typo/inconsistency: mention of an xml notebook format?
• #3031: HDF5 library segfault (possibly due to mismatching headers?)
• #2991: In notebook importing sympy closes ipython kernel
• #3027: f.__globals__ causes an error in Python 3.3
• #3020: Failing test test_interactiveshell.TestAstTransform on Windows
• #3023: alt text for “click to expand output” has typo in alt text
• #2963: %history to print all input history of a previous session when line range is omitted
• #3018: IPython installed within virtualenv. WARNING “Please install IPython inside the virtualtenv”
• #2484: Completion in Emacs Python buffer causes prompt to be increased.
• #3014: Ctrl-C finishes notebook immediately
• #3007: cython_pyximport reload broken in python3
• #2955: Incompatible Qt imports when running inprocess_qtconsole
• #3006: [IPython 0.13.1] The check of PyQt version is wrong
• #3005: Renaming a notebook to an existing notebook name overwrites the other file
• #2940: Abort trap in IPython Notebook after installing matplotlib
• #3000: issue #3000
• #2995: ipython_directive.py fails on multiline when prompt number < 100
• #2993: File magic (%%file) does not work with paths beginning with tilde (e.g., ~/anaconda/stuff.txt)
• #2992: Cell-based input for console and qt frontends?
• #2425: Liaise with Spyder devs to integrate newer IPython
• #2986: requesting help in a loop can damage a notebook
• #2978: v1.0-dev build errors on Arch with Python 3.
• #2557: [refactor] Insert_cell_at_index()
• #2969: ipython command does not work in terminal
• #2762: OSX wxPython (osx_cocoa, 64bit) command “%gui wx” blocks the interpreter

2.16. Issues closed in the 1.0 development cycle 159


IPython Documentation, Release 7.1.0.dev

• #2956: Silent importing of submodules differs from standard Python3.2 interpreter’s behavior
• #2943: Up arrow key history search gets stuck in QTConsole
• #2953: using ‘nonlocal’ declaration in global scope causes ipython3 crash
• #2952: qtconsole ignores exec_lines
• #2949: ipython crashes due to atexit()
• #2947: From rmagic to an R console
• #2938: docstring pane not showing in notebook
• #2936: Tornado assumes invalid signature for parse_qs on Python 3.1
• #2935: unable to find python after easy_install / pip install
• #2920: Add undo-cell deletion menu
• #2914: BUG:saving a modified .py file after loading a module kills the kernel
• #2925: BUG: kernel dies if user sets sys.stderr or sys.stdout to a file object
• #2909: LaTeX sometimes fails to render in markdown cells with some curly bracket + underscore combinations
• #2898: Skip ipc tests on Windows
• #2902: ActiveState attempt to build ipython 0.12.1 for python 3.2.2 for Mac OS failed
• #2899: Test failure in IPython.core.tests.test_magic.test_time
• #2890: Test failure when fabric not installed
• #2892: IPython tab completion bug for paths
• #1340: Allow input cells to be collapsed
• #2881: ? command in notebook does not show help in Safari
• #2751: %%timeit should use minutes to format running time in long running cells
• #2879: When importing a module with a wrong name, ipython crashes
• #2862: %%timeit should warn of empty contents
• #2485: History navigation breaks in qtconsole
• #2785: gevent input hook
• #2843: Sliently running code in clipboard (with paste, cpaste and variants)
• #2784: %run -t -N<N> error
• #2732: Test failure with FileLinks class on Windows
• #2860: ipython help notebook -> KeyError: ‘KernelManager’
• #2858: Where is the installed ipython script?
• #2856: Edit code entered from ipython in external editor
• #2722: IPC transport option not taking effect ?
• #2473: Better error messages in ipengine/ipcontroller
• #2836: Cannot send builtin module definitions to IP engines
• #2833: Any reason not to use super() ?
• #2781: Cannot interrupt infinite loops in the notebook

160 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #2150: clippath_demo.py in matplotlib example does not work with inline backend
• #2634: Numbered list in notebook markdown cell renders with Roman numerals instead of numbers
• #2230: IPython crashing during startup with “AttributeError: ‘NoneType’ object has no attribute ‘rstrip’”
• #2483: nbviewer bug? with multi-file gists
• #2466: mistyping ed -p breaks ed -p
• #2477: Glob expansion tests fail on Windows
• #2622: doc issue: notebooks that ship with Ipython .13 are written for python 2.x
• #2626: Add “Cell -> Run All Keep Going” for notebooks
• #1223: Show last modification date of each notebook
• #2621: user request: put link to example notebooks in Dashboard
• #2564: grid blanks plots in ipython pylab inline mode (interactive)
• #2532: Django shell (IPython) gives NameError on dict comprehensions
• #2188: ipython crashes on ctrl-c
• #2391: Request: nbformat API to load/save without changing version
• #2355: Restart kernel message even though kernel is perfectly alive
• #2306: Garbled input text after reverse search on Mac OS X
• #2297: ipdb with separate kernel/client pushing stdout to kernel process only
• #2180: Have [kernel busy] overridden only by [kernel idle]
• #1188: Pylab with OSX backend keyboard focus issue and hang
• #2107: test_octavemagic.py[everything] fails
• #1212: Better understand/document browser compatibility
• #1585: Refactor notebook templates to use Jinja2 and make each page a separate directory
• #1443: xticks scaling factor partially obscured with qtconsole and inline plotting
• #1209: can’t make %result work as in doc.
• #1200: IPython 0.12 Windows install fails on Vista
• #1127: Interactive test scripts for Qt/nb issues
• #959: Matplotlib figures hide
• #2071: win32 installer issue on Windows XP
• #2610: ZMQInteractiveShell.colors being ignored
• #2505: Markdown Cell incorrectly highlighting after “<”
• #165: Installer fails to create Start Menu entries on Windows
• #2356: failing traceback in terminal ipython for first exception
• #2145: Have dashboad show when server disconect
• #2098: Do not crash on kernel shutdow if json file is missing
• #2813: Offline MathJax is broken on 0.14dev
• #2807: Test failure: IPython.parallel.tests.test_client.TestClient.test_purge_everything

2.16. Issues closed in the 1.0 development cycle 161


IPython Documentation, Release 7.1.0.dev

• #2486: Readline’s history search in ipython console does not clear properly after cancellation with Ctrl+C
• #2709: Cython -la doesn’t work
• #2767: What is IPython.utils.upgradedir ?
• #2210: Placing matplotlib legend outside axis bounds causes inline display to clip it
• #2553: IPython Notebooks not robust against client failures
• #2536: ImageDraw in Ipython notebook not drawing lines
• #2264: Feature request: Versioning messaging protocol
• #2589: Creation of ~300+ MPI-spawned engines causes instability in ipcluster
• #2672: notebook: inline option without pylab
• #2673: Indefinite Articles & Traitlets
• #2705: Notebook crashes Safari with select and drag
• #2721: dreload kills ipython when it hits zmq
• #2806: ipython.parallel doesn’t discover globals under Python 3.3
• #2794: _exit_code behaves differently in terminal vs ZMQ frontends
• #2793: IPython.parallel issue with pushing pandas TimeSeries
• #1085: In process kernel for Qt frontend
• #2760: IndexError: list index out of range with Python 3.2
• #2780: Save and load notebooks from github
• #2772: AttributeError: ‘Client’ object has no attribute ‘kill’
• #2754: Fail to send class definitions from interactive session to engines namespaces
• #2764: TypeError while using ‘cd’
• #2765: name ‘__file__’ is not defined
• #2540: Wrap tooltip if line exceeds threshold?
• #2394: Startup error on ipython qtconsole (version 0.13 and 0.14-dev
• #2440: IPEP 4: Python 3 Compatibility
• #1814: __file__ is not defined when file end with .ipy
• #2759: R magic extension interferes with tab completion
• #2615: Small change needed to rmagic extension.
• #2748: collapse parts of a html notebook
• #1661: %paste still bugs about IndentationError and says to use %paste
• #2742: Octavemagic fails to deliver inline images in IPython (on Windows)
• #2739: wiki.ipython.org contaminated with prescription drug spam
• #2588: Link error while executing code from cython example notebook
• #2550: Rpush magic doesn’t find local variables and doesn’t support comma separated lists of variables
• #2675: Markdown/html blockquote need css.
• #2419: TerminalInteractiveShell.__init__() ignores value of ipython_dir argument

162 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #1523: Better LaTeX printing in the qtconsole with the sympy profile
• #2719: ipython fails with pkg_resources.DistributionNotFound: ipython==0.13
• #2715: url crashes nbviewer.ipython.org
• #2555: “import” module completion on MacOSX
• #2707: Problem installing the new version of IPython in Windows
• #2696: SymPy magic bug in IPython Notebook
• #2684: pretty print broken for types created with PyType_FromSpec
• #2533: rmagic breaks on Windows
• #2661: Qtconsole tooltip is too wide when the function has many arguments
• #2679: ipython3 qtconsole via Homebrew on Mac OS X 10.8 - pyqt/pyside import error
• #2646: pylab_not_importable
• #2587: cython magic pops 2 CLI windows upon execution on Windows
• #2660: Certain arguments (-h, –help, –version) never passed to scripts run with ipython
• #2665: Missing docs for rmagic and some other extensions
• #2611: Travis wants to drop 3.1 support
• #2658: Incorrect parsing of raw multiline strings
• #2655: Test fails if from __future__ import print_function in .pythonrc.py
• #2651: nonlocal with no existing variable produces too many errors
• #2645: python3 is a pain (minor unicode bug)
• #2637: %paste in Python 3 on Mac doesn’t work
• #2624: Error on launching IPython on Win 7 and Python 2.7.3
• #2608: disk IO activity on cursor press
• #1275: Markdown parses LaTeX math symbols as its formatting syntax in notebook
• #2613: display(Math(. . . )) doesn’t render tau correctly
• #925: Tab-completion in Qt console needn’t use pager
• #2607: %load_ext sympy.interactive.ipythonprinting dammaging output
• #2593: Toolbar button to open qtconsole from notebook
• #2602: IPython html documentation for downloading
• #2598: ipython notebook –pylab=inline replaces built-in any()
• #2244: small issue: wrong printout
• #2590: add easier way to execute scripts in the current directory
• #2581: %hist does not work when InteractiveShell.cache_size = 0
• #2584: No file COPYING
• #2578: AttributeError: ‘module’ object has no attribute ‘TestCase’
• #2576: One of my notebooks won’t load any more – is there a maximum notebook size?
• #2560: Notebook output is invisible when printing strings with rrn line endings

2.16. Issues closed in the 1.0 development cycle 163


IPython Documentation, Release 7.1.0.dev

• #2566: if pyside partially present ipython qtconsole fails to load even if pyqt4 present
• #1308: ipython qtconsole –ssh=server –existing . . . hangs
• #1679: List command doesn’t work in ipdb debugger the first time
• #2545: pypi win32 installer creates 64bit executibles
• #2080: Event loop issues with IPython 0.12 and PyQt4 (QDialog.exec_ and more)
• #2541: Allow python -m IPython
• #2508: subplots_adjust() does not work correctly in ipython notebook
• #2289: Incorrect mathjax rendering of certain arrays of equations
• #2487: Selecting and indenting
• #2521: more fine-grained ‘run’ controls, such as ‘run from here’ and ‘run until here’
• #2535: Funny bounding box when plot with text
• #2523: History not working
• #2514: Issue with zooming in qtconsole
• #2220: No sys.stdout.encoding in kernel based IPython
• #2512: ERROR: Internal Python error in the inspect module.
• #2496: Function passwd does not work in QtConsole
• #1453: make engines reconnect/die when controller was restarted
• #2481: ipython notebook – clicking in a code cell’s output moves the screen to the top of the code cell
• #2488: Undesired plot outputs in Notebook inline mode
• #2482: ipython notebook – download may not get the latest notebook
• #2471: _subprocess module removed in Python 3.3
• #2374: Issues with man pages
• #2316: parallel.Client.__init__ should take cluster_id kwarg
• #2457: Can a R library wrapper be created with Rmagic?
• #1575: Fallback frontend for console when connecting pylab=inlnie -enabled kernel?
• #2097: Do not crash if history db is corrupted
• #2435: ipengines fail if clean_logs enabled
• #2429: Using warnings.warn() results in TypeError
• #2422: Multiprocessing in ipython notebook kernel crash
• #2426: ipython crashes with the following message. I do not what went wrong. Can you help me identify the
problem?
• #2423: Docs typo?
• #2257: pip install -e fails
• #2418: rmagic can’t run R’s read.csv on data files with NA data
• #2417: HTML notebook: Backspace sometimes deletes multiple characters
• #2275: notebook: “Down_Arrow” on last line of cell should move to end of line

164 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #2414: 0.13.1 does not work with current EPD 7.3-2


• #2409: there is a redundant None
• #2410: Use /usr/bin/python3 instead of /usr/bin/python
• #2366: Notebook Dashboard –notebook-dir and fullpath
• #2406: Inability to get docstring in debugger
• #2398: Show line number for IndentationErrors
• #2314: HTML lists seem to interfere with the QtConsole display
• #1688: unicode exception when using %run with failing script
• #1884: IPython.embed changes color on error
• #2381: %time doesn’t work for multiline statements
• #1435: Add size keywords in Image class
• #2372: interactiveshell.py misses urllib and io_open imports
• #2371: IPython not working
• #2367: Tab expansion moves to next cell in notebook
• #2359: nbviever alters the order of print and display() output
• #2227: print name for IPython Notebooks has become uninformative
• #2361: client doesn’t use connection file’s ‘location’ in disambiguating ‘interface’
• #2357: failing traceback in terminal ipython for first exception
• #2343: Installing in a python 3.3b2 or python 3.3rc1 virtual environment.
• #2315: Failure in test: “Test we’re not loading modules on startup that we shouldn’t.”
• #2351: Multiple Notebook Apps: cookies not port specific, clash with each other
• #2350: running unittest from qtconsole prints output to terminal
• #2303: remote tracebacks broken since 952d0d6 (PR #2223)
• #2330: qtconsole does not highlight tab-completion suggestion with custom stylesheet
• #2325: Parsing Tex formula fails in Notebook
• #2324: Parsing Tex formula fails
• #1474: Add argument to run -n for custom namespace
• #2318: C-m n/p don’t work in Markdown cells in the notebook
• #2309: time.time() in ipython notebook producing impossible results
• #2307: schedule tasks on newly arrived engines
• #2313: Allow Notebook HTML/JS to send messages to Python code
• #2304: ipengine throws KeyError: url
• #1878: shell access using ! will not fill class or function scope vars
• #2253: %paste does not retrieve clipboard contents under screen/tmux on OS X
• #1510: Add-on (or Monkey-patch) infrastructure for HTML notebook
• #2273: triple quote and %s at beginning of line with %paste

2.16. Issues closed in the 1.0 development cycle 165


IPython Documentation, Release 7.1.0.dev

• #2243: Regression in .embed()


• #2266: SSH passwordless check with OpenSSH checks for the wrong thing
• #2217: Change NewNotebook handler to use 30x redirect
• #2276: config option for disabling history store
• #2239: can’t use parallel.Reference in view.map
• #2272: Sympy piecewise messed up rendering
• #2252: %paste throws an exception with empty clipboard
• #2259: git-mpr is currently broken
• #2247: Variable expansion in shell commands should work in substrings
• #2026: Run ‘fast’ tests only
• #2241: read a list of notebooks on server and bring into browser only notebook
• #2237: please put python and text editor in the web only ipython
• #2053: Improvements to the IPython.display.Image object
• #1456: ERROR: Internal Python error in the inspect module.
• #2221: Avoid importing from IPython.parallel in core
• #2213: Can’t trigger startup code in Engines
• #1464: Strange behavior for backspace with lines ending with more than 4 spaces in notebook
• #2187: NaN in object_info_reply JSON causes parse error
• #214: system command requiring administrative privileges
• #2195: Unknown option no-edit in git-mpr
• #2201: Add documentation build to tools/test_pr.py
• #2205: Command-line option for default Notebook output collapsing behavior
• #1927: toggle between inline and floating figures
• #2171: Can’t start StarCluster after upgrading to IPython 0.13
• #2173: oct2py v >= 0.3.1 doesn’t need h5py anymore
• #2099: storemagic needs to use self.shell
• #2166: DirectView map_sync() with Lambdas Using Generators
• #2091: Unable to use print_stats after %prun -r in notebook
• #2132: Add fail-over for pastebin
• #2156: Make it possible to install ipython without nasty gui dependencies
• #2154: Scrolled long output should be off in print view by default
• #2162: Tab completion does not work with IPython.embed_kernel()
• #2157: IPython 0.13 / github-master cannot create logfile from scratch
• #2151: missing newline when a magic is called from the qtconsole menu
• #2139: 00_notebook_tour Image example broken on master
• #2143: Add a %%cython_annotate magic

166 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #2135: Running IPython from terminal


• #2093: Makefile for building Sphinx documentation on Windows
• #2122: Bug in pretty printing
• #2120: Notebook “Make a Copy. . . ” keeps opening duplicates in the same tab
• #1997: password cannot be used with url prefix
• #2129: help/doc displayed multiple times if requested in loop
• #2121: ipdb does not support input history in qtconsole
• #2114: %logstart doesn’t log
• #2085: %ed magic fails in qtconsole
• #2119: IPython fails to run on MacOS Lion
• #2052: %pylab inline magic does not work on windows
• #2111: Ipython won’t start on W7
• #2112: Strange internal traceback
• #2108: Backslash () at the end of the line behavior different from default Python
• #1425: Ampersands can’t be typed sometimes in notebook cells
• #1513: Add expand/collapse support for long output elements like stdout and tracebacks
• #2087: error when starting ipython
• #2103: Ability to run notebook file from commandline
• #2082: Qt Console output spacing
• #2083: Test failures with Python 3.2 and PYTHONWARNINGS=”d”
• #2094: about inline
• #2077: Starting IPython3 on the terminal
• #1760: easy_install ipython fails on py3.2-win32
• #2075: Local Mathjax install causes iptest3 error under python3
• #2057: setup fails for python3 with LANG=C
• #2070: shebang on Windows
• #2054: sys_info missing git hash in sdists
• #2059: duplicate and modified files in documentation
• #2056: except-shadows-builtin osm.py:687
• #2058: hyphen-used-as-minus-sign in manpages

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.

2.16. Issues closed in the 1.0 development cycle 167


IPython Documentation, Release 7.1.0.dev

If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.17 0.13 Series

2.17.1 Release 0.13

IPython 0.13 contains several major new features, as well as a large amount of bug and regression fixes. The previous
version (0.12) was released on December 19 2011, and in this development cycle we had:
• ~6 months of work.
• 373 pull requests merged.
• 742 issues closed (non-pull requests).
• contributions from 62 authors.
• 1760 commits.
• a diff of 114226 lines.
The amount of work included in this release is so large, that we can only cover here the main highlights; please see our
detailed release statistics for links to every issue and pull request closed on GitHub as well as a full list of individual
contributors.

Major Notebook improvements: new user interface and more

The IPython Notebook, which has proven since its release to be wildly popular, has seen a massive amount of work in
this release cycle, leading to a significantly improved user experience as well as many new features.
The first user-visible change is a reorganization of the user interface; the left panel has been re-
moved and was replaced by a real menu system and a toolbar with icons. Both the tool-
bar and the header above the menu can be collapsed to leave an unobstructed working area:

168 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

The notebook handles


very long outputs much better than before (this was a serious usability issue when running processes that generated
massive amounts of output). Now, in the presence of outputs longer than ~100 lines, the notebook will automatically
collapse to a scrollable area and the entire left part of this area controls the display: one click in this area will expand
the output region completely, and a double-click will hide it completely. This figure shows both the scrolled and

hidden modes:

Note: The auto-folding of long outputs is disabled in Firefox due to bugs in its scrolling behavior. See PR #2047 for
details.

Uploading notebooks to the dashboard is now easier: in addition to drag and drop (which can be finicky sometimes),
you can now click on the upload text and use a regular file dialog box to select notebooks to upload. Furthermore, the
notebook dashboard now auto-refreshes its contents and offers buttons to shut down any running kernels (PR #1739):

2.17. 0.13 Series 169


IPython Documentation, Release 7.1.0.dev

Cluster management

The notebook dashboard can now also start and stop clusters, thanks to a new tab in the dashboard user interface:

This interface allows, for each


profile you have configured, to start and stop a cluster (and optionally override the default number of engines cor-
responding to that configuration). While this hides all error reporting, once you have a configuration that you know
works smoothly, it is a very convenient interface for controlling your parallel resources.

New notebook format

The notebooks saved now use version 3 of our format, which supports heading levels as well as the concept of ‘raw’
text cells that are not rendered as Markdown. These will be useful with converters we are developing, to pass raw
markup (say LaTeX). That conversion code is still under heavy development and not quite ready for prime time, but
we welcome help on this front so that we can merge it for full production use as soon as possible.

Note: v3 notebooks can not be read by older versions of IPython, but we provide a simple script that you can use in
case you need to export a v3 notebook to share with a v2 user.

JavaScript refactoring

All the client-side JavaScript has been decoupled to ease reuse of parts of the machinery without having to build a
full-blown notebook. This will make it much easier to communicate with an IPython kernel from existing web pages
and to integrate single cells into other sites, without loading the full notebook document-like UI. PR #1711.
This refactoring also enables the possibility of writing dynamic javascript widgets that are returned from Python code
and that present an interactive view to the user, with callbacks in Javascript executing calls to the Kernel. This will
enable many interactive elements to be added by users in notebooks.
An example of this capability has been provided as a proof of concept in examples/widgets that lets you directly
communicate with one or more parallel engines, acting as a mini-console for parallel debugging and introspection.

170 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

Improved tooltips

The object tooltips have gained some new functionality. By pressing tab several times, you can expand them to see
more of a docstring, keep them visible as you fill in a function’s parameters, or transfer the information to the pager at
the bottom of the screen. For the details, look at the example notebook 01_notebook_introduction.ipynb.

Fig. 1: The new notebook tooltips.

Other improvements to the Notebook

These are some other notable small improvements to the notebook, in addition to many bug fixes and minor changes
to add polish and robustness throughout:
• The notebook pager (the area at the bottom) is now Resizable by dragging its divider handle, a feature that had
been requested many times by just about anyone who had used the notebook system. PR #1705.
• It is now possible to open notebooks directly from the command line; for example: ipython notebook
path/ will automatically set path/ as the notebook directory, and ipython notebook path/foo.
ipynb will further start with the foo.ipynb notebook opened. PR #1686.

2.17. 0.13 Series 171


IPython Documentation, Release 7.1.0.dev

• If a notebook directory is specified with --notebook-dir (or with the corresponding configuration flag
NotebookManager.notebook_dir), all kernels start in this directory.
• Fix codemirror clearing of cells with Ctrl-Z; PR #1965.
• Text (markdown) cells now line wrap correctly in the notebook, making them much easier to edit PR #1330.
• PNG and JPEG figures returned from plots can be interactively resized in the notebook, by dragging them from
their lower left corner. PR #1832.
• Clear In [] prompt numbers on “Clear All Output”. For more version-control-friendly .ipynb files, we
now strip all prompt numbers when doing a “Clear all output”. This reduces the amount of noise in commit-to-
commit diffs that would otherwise show the (highly variable) prompt number changes. PR #1621.
• The notebook server now requires two consecutive Ctrl-C within 5 seconds (or an interactive confirmation)
to terminate operation. This makes it less likely that you will accidentally kill a long-running server by typing
Ctrl-C in the wrong terminal. PR #1609.
• Using Ctrl-S (or Cmd-S on a Mac) actually saves the notebook rather than providing the fairly useless
browser html save dialog. PR #1334.
• Allow accessing local files from the notebook (in urls), by serving any local file as the url files/
<relativepath>. This makes it possible to, for example, embed local images in a notebook. PR #1211.

Cell magics

We have completely refactored the magic system, finally moving the magic objects to standalone, independent objects
instead of being the mixin class we’d had since the beginning of IPython (PR #1732). Now, a separate base class is
provided in IPython.core.magic.Magics that users can subclass to create their own magics. Decorators are
also provided to create magics from simple functions without the need for object orientation. Please see the Magic
command system docs for further details.
All builtin magics now exist in a few subclasses that group together related functionality, and the new IPython.
core.magics package has been created to organize this into smaller files.
This cleanup was the last major piece of deep refactoring needed from the original 2001 codebase.
We have also introduced a new type of magic function, prefixed with %% instead of %, which operates at the whole-cell
level. A cell magic receives two arguments: the line it is called on (like a line magic) and the body of the cell below it.
Cell magics are most natural in the notebook, but they also work in the terminal and qt console, with the usual approach
of using a blank line to signal cell termination.
For example, to time the execution of several statements:

%%timeit x = 0 # setup
for i in range(100000):
x += i**2

This is particularly useful to integrate code in another language, and cell magics already exist for shell scripts, Cython,
R and Octave. Using %%script /usr/bin/foo, you can run a cell in any interpreter that accepts code via stdin.
Another handy cell magic makes it easy to write short text files: %%file ~/save/to/here.txt.
The following cell magics are now included by default; all those that use special interpreters (Perl, Ruby, bash, etc.)
assume you have the requisite interpreter installed:
• %%!: run cell body with the underlying OS shell; this is similar to prefixing every line in the cell with !.
• %%bash: run cell body under bash.

172 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• %%capture: capture the output of the code in the cell (and stderr as well). Useful to run codes that produce
too much output that you don’t even want scrolled.
• %%file: save cell body as a file.
• %%perl: run cell body using Perl.
• %%prun: run cell body with profiler (cell extension of %prun).
• %%python3: run cell body using Python 3.
• %%ruby: run cell body using Ruby.
• %%script: run cell body with the script specified in the first line.
• %%sh: run cell body using sh.
• %%sx: run cell with system shell and capture process output (cell extension of %sx).
• %%system: run cell with system shell (%%! is an alias to this).
• %%timeit: time the execution of the cell (extension of %timeit).

This is what some of the script-related magics look like in action:


In addition, we have also a number of extensions that provide specialized magics. These typically require additional
software to run and must be manually loaded via %load_ext <extension name>, but are extremely useful.
The following extensions are provided:
Cython magics (extension cythonmagic) This extension provides magics to automatically build and compile
Python extension modules using the Cython language. You must install Cython separately, as well as a C
compiler, for this to work. The examples directory in the source distribution ships with a full notebook demon-
strating these capabilities:

2.17. 0.13 Series 173


IPython Documentation, Release 7.1.0.dev

Octave magics (extension octavemagic) This extension provides several magics that support calling code written
in the Octave language for numerical computing. You can execute single-lines or whole blocks of Octave code,
capture both output and figures inline (just like matplotlib plots), and have variables automatically converted
between the two languages. To use this extension, you must have Octave installed as well as the oct2py package.
The examples directory in the source distribution ships with a full notebook demonstrating these capabilities:

174 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

R magics (extension rmagic) This extension provides several magics that support calling code written in the R
language for statistical data analysis. You can execute single-lines or whole blocks of R code, capture both
output and figures inline (just like matplotlib plots), and have variables automatically converted between the two
languages. To use this extension, you must have R installed as well as the rpy2 package that bridges Python and
R. The examples directory in the source distribution ships with a full notebook demonstrating these capabilities:

2.17. 0.13 Series 175


IPython Documentation, Release 7.1.0.dev

Tab completer improvements

Useful tab-completion based on live inspection of objects is one of the most popular features of IPython. To make this
process even more user-friendly, the completers of both the Qt console and the Notebook have been reworked.
The Qt console comes with a new ncurses-like tab completer, activated by default, which lets you cycle through the
available completions by pressing tab, or select a completion with the arrow keys (PR #1851).
In the notebook, completions are now sourced both from object introspection and analysis of surrounding code, so
limited completions can be offered for variables defined in the current cell, or while the kernel is busy (PR #1711).
We have implemented a new configurable flag to control tab completion on modules that provide the __all__
attribute:

176 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

Fig. 2: The new improved Qt console’s ncurses-like completer allows to easily navigate thought long list of comple-
tions.

IPCompleter.limit_to__all__= Boolean

This instructs the completer to honor __all__ for the completion. Specifically, when completing on object.
<tab>, if True: only those names in obj.__all__ will be included. When False [default]: the __all__ attribute
is ignored. PR #1529.

Improvements to the Qt console

The Qt console continues to receive improvements and refinements, despite the fact that it is by now a fairly mature
and robust component. Lots of small polish has gone into it, here are a few highlights:
• A number of changes were made to the underlying code for easier integration into other projects such as Spyder
(PR #2007, PR #2024).
• Improved menus with a new Magic menu that is organized by magic groups (this was made possible by the
reorganization of the magic system internals). PR #1782.
• Allow for restarting kernels without clearing the qtconsole, while leaving a visible indication that the kernel has
restarted. PR #1681.
• Allow the native display of jpeg images in the qtconsole. PR #1643.

Parallel

The parallel tools have been improved and fine-tuned on multiple fronts. Now, the creation of an IPython.
parallel.Client object automatically activates a line and cell magic function px that sends its code to all the
engines. Further magics can be easily created with the Client.activate() method, to conveniently execute code
on any subset of engines. PR #1893.
The %%px cell magic can also be given an optional targets argument, as well as a --out argument for storing its
output.
A new magic has also been added, %pxconfig, that lets you configure various defaults of the parallel magics. As
usual, type %pxconfig? for details.
The exception reporting in parallel contexts has been improved to be easier to read. Now,
IPython directly reports the remote exceptions without showing any of the internal execution parts:

2.17. 0.13 Series 177


IPython Documentation, Release 7.1.0.dev

The parallel tools now


default to using NoDB as the storage backend for intermediate results. This means that the default usage case will
have a significantly reduced memory footprint, though certain advanced features are not available with this backend.
The parallel magics now display all output, so you can do parallel plotting or other actions with complex display. The
px magic has now both line and cell modes, and in cell mode finer control has been added about how to collate output
from multiple engines. PR #1768.
There have also been incremental improvements to the SSH launchers:
• add to_send/fetch steps for moving connection files around.
• add SSHProxyEngineSetLauncher, for invoking to ipcluster engines on a remote host. This can be used
to start a set of engines via PBS/SGE/MPI remotely.
This makes the SSHLauncher usable on machines without shared filesystems.
A number of ‘sugar’ methods/properties were added to AsyncResult that are quite useful (PR #1548) for everday work:
• ar.wall_time = received - submitted
• ar.serial_time = sum of serial computation time
• ar.elapsed = time since submission (wall_time if done)
• ar.progress = (int) number of sub-tasks that have completed
• len(ar) = # of tasks
• ar.wait_interactive(): prints progress
Added Client.spin_thread() / stop_spin_thread() for running spin in a background thread, to keep
zmq queue clear. This can be used to ensure that timing information is as accurate as possible (at the cost of having a
background thread active).
Set TaskScheduler.hwm default to 1 instead of 0. 1 has more predictable/intuitive behavior, if often slower, and thus a
more logical default. Users whose workloads require maximum throughput and are largely homogeneous in time per
task can make the optimization themselves, but now the behavior will be less surprising to new users. PR #1294.

Kernel/Engine unification

This is mostly work ‘under the hood’, but it is actually a major achievement for the project that has deep implications
in the long term: at last, we have unified the main object that executes as the user’s interactive shell (which we refer to
as the IPython kernel) with the objects that run in all the worker nodes of the parallel computing facilities (the IPython
engines). Ever since the first implementation of IPython’s parallel code back in 2006, we had wanted to have these
two roles be played by the same machinery, but a number of technical reasons had prevented that from being true.

178 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

In this release we have now merged them, and this has a number of important consequences:
• It is now possible to connect any of our clients (qtconsole or terminal console) to any individual parallel engine,
with the exact behavior of working at a ‘regular’ IPython console/qtconsole. This makes debugging, plotting,
etc. in parallel scenarios vastly easier.
• Parallel engines can always execute arbitrary ‘IPython code’, that is, code that has magics, shell extensions, etc.
In combination with the %%px magics, it is thus extremely natural for example to send to all engines a block of
Cython or R code to be executed via the new Cython and R magics. For example, this snippet would send the R
block to all active engines in a cluster:
%%px
%%R
... R code goes here

• It is possible to embed not only an interactive shell with the IPython.embed() call as always, but now you
can also embed a kernel with IPython.embed_kernel(). Embedding an IPython kernel in an application
is useful when you want to use IPython.embed() but don’t have a terminal attached on stdin and stdout.
• The new IPython.parallel.bind_kernel() allows you to promote Engines to listening Kernels, and
connect QtConsoles to an Engine and debug it directly.
In addition, having a single core object through our entire architecture also makes the project conceptually cleaner,
easier to maintain and more robust. This took a lot of work to get in place, but we are thrilled to have this major piece
of architecture finally where we’d always wanted it to be.

Official Public API

We have begun organizing our API for easier public use, with an eye towards an official IPython 1.0 release which
will firmly maintain this API compatible for its entire lifecycle. There is now an IPython.display module that
aggregates all display routines, and the traitlets.config namespace has all public configuration tools. We will
continue improving our public API layout so that users only need to import names one level deeper than the main
IPython package to access all public namespaces.

IPython notebook file icons

The directory docs/resources in the source distribution contains SVG and PNG versions of our file icons, as well
as an Info.plist.example file with instructions to install them on Mac OSX. This is a first draft of our icons,
and we encourage contributions from users with graphic talent to improve them in the future.

New top-level locate command

Add locate entry points; these would be useful for quickly locating IPython directories and profiles from other
(non-Python) applications. PR #1762.
Examples:
$> ipython locate
/Users/me/.ipython

$> ipython locate profile foo


/Users/me/.ipython/profile_foo

$> ipython locate profile


/Users/me/.ipython/profile_default
(continues on next page)

2.17. 0.13 Series 179


IPython Documentation, Release 7.1.0.dev

(continued from previous page)

$> ipython locate profile dne


[ProfileLocate] Profile u'dne' not found.

Other new features and improvements

• %install_ext: A new magic function to install an IPython extension from a URL. E.g. %install_ext
https://bitbucket.org/birkenfeld/ipython-physics/raw/default/physics.py.
• The %loadpy magic is no longer restricted to Python files, and has been renamed %load. The old name
remains as an alias.
• New command line arguments will help external programs find IPython folders: ipython locate finds the
user’s IPython directory, and ipython locate profile foo finds the folder for the ‘foo’ profile (if it
exists).
• The IPYTHON_DIR environment variable, introduced in the Great Reorganization of 0.11 and existing only in
versions 0.11-0.13, has been deprecated. As described in PR #1167, the complexity and confusion of migrating
to this variable is not worth the aesthetic improvement. Please use the historical IPYTHONDIR environment
variable instead.
• The default value of interactivity passed from run_cell() to run_ast_nodes() is now configurable.
• New %alias_magic function to conveniently create aliases of existing magics, if you prefer to have shorter
names for personal use.
• We ship unminified versions of the JavaScript libraries we use, to better comply with Debian’s packaging poli-
cies.
• Simplify the information presented by obj?/obj?? to eliminate a few redundant fields when possible. PR
#2038.
• Improved continuous integration for IPython. We now have automated test runs on Shining Panda and Travis-CI,
as well as Tox support.
• The vim-ipython functionality (externally developed) has been updated to the latest version.
• The %save magic now has a -f flag to force overwriting, which makes it much more usable in the notebook
where it is not possible to reply to interactive questions from the kernel. PR #1937.
• Use dvipng to format sympy.Matrix, enabling display of matrices in the Qt console with the sympy printing
extension. PR #1861.
• Our messaging protocol now has a reasonable test suite, helping ensure that we don’t accidentally deviate
from the spec and possibly break third-party applications that may have been using it. We encourage users to
contribute more stringent tests to this part of the test suite. PR #1627.
• Use LaTeX to display, on output, various built-in types with the SymPy printing extension. PR #1399.
• Add Gtk3 event loop integration and example. PR #1588.
• clear_output improvements, which allow things like progress bars and other simple animations to work
well in the notebook (PR #1563):
– clear_output() clears the line, even in terminal IPython, the QtConsole and plain Python as well, by
printing r to streams.
– clear_output() avoids the flicker in the notebook by adding a delay, and firing immediately upon the
next actual display message.

180 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

– display_javascript hides its output_area element, so using display to run a bunch of javascript
doesn’t result in ever-growing vertical space.
• Add simple support for running inside a virtualenv. While this doesn’t supplant proper installation (as users
should do), it helps ad-hoc calling of IPython from inside a virtualenv. PR #1388.

Major Bugs fixed

In this cycle, we have closed over 740 issues, but a few major ones merit special mention:
• The %pastebin magic has been updated to point to gist.github.com, since unfortunately http://paste.pocoo.org
has closed down. We also added a -d flag for the user to provide a gist description string. PR #1670.
• Fix %paste that would reject certain valid inputs. PR #1258.
• Fix sending and receiving of Numpy structured arrays (those with composite dtypes, often used as recarrays).
PR #2034.
• Reconnect when the websocket connection closes unexpectedly. PR #1577.
• Fix truncated representation of objects in the debugger by showing at least 80 characters’ worth of information.
PR #1793.
• Fix logger to be Unicode-aware: logging could crash ipython if there was unicode in the input. PR #1792.
• Fix images missing from XML/SVG export in the Qt console. PR #1449.
• Fix deepreload on Python 3. PR #1625, as well as having a much cleaner and more robust implementation of
deepreload in general. PR #1457.

Backwards incompatible changes

• The exception IPython.core.error.TryNext previously accepted arguments and keyword arguments


to be passed to the next implementation of the hook. This feature was removed as it made error message
propagation difficult and violated the principle of loose coupling.

Warning: This documentation covers a development version of IPython. The development version may differ
significantly from the latest stable release.

Important: This documentation covers IPython versions 6.0 and higher. Beginning with version 6.0, IPython stopped
supporting compatibility with Python versions lower than 3.3 including all versions of Python 2.7.
If you are looking for an IPython version compatible with Python 2.7, please use the IPython 5.x LTS release and refer
to its documentation (LTS is the long term support release).

2.18 Issues closed in the 0.13 development cycle

2.18.1 Issues closed in 0.13

GitHub stats since IPython 0.12 (2011/12/19 - 2012/06/30)


These lists are automatically generated, and may be incomplete or contain duplicates.

2.18. Issues closed in the 0.13 development cycle 181


IPython Documentation, Release 7.1.0.dev

The following 62 authors contributed 1760 commits.


• Aaron Culich
• Aaron Meurer
• Alex Kramer
• Andrew Giessel
• Andrew Straw
• André Matos
• Aron Ahmadia
• Ben Edwards
• Benjamin Ragan-Kelley
• Bradley M. Froehle
• Brandon Parsons
• Brian E. Granger
• Carlos Cordoba
• David Hirschfeld
• David Zderic
• Ernie French
• Fernando Perez
• Ian Murray
• Jason Grout
• Jens H Nielsen
• Jez Ng
• Jonathan March
• Jonathan Taylor
• Julian Taylor
• Jörgen Stenarson
• Kent Inverarity
• Marc Abramowitz
• Mark Wiebe
• Matthew Brett
• Matthias BUSSONNIER
• Michael Droettboom
• Mike Hansen
• Nathan Rice
• Pankaj Pandey
• Paul

182 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• Paul Ivanov
• Piotr Zolnierczuk
• Piti Ongmongkolkul
• Puneeth Chaganti
• Robert Kern
• Ross Jones
• Roy Hyunjin Han
• Scott Tsai
• Skipper Seabold
• Stefan van der Walt
• Steven Johnson
• Takafumi Arakaki
• Ted Wright
• Thomas Hisch
• Thomas Kluyver
• Thomas Spura
• Thomi Richards
• Tim Couper
• Timo Paulssen
• Toby Gilham
• Tony S Yu
• W. Trevor King
• Walter Doerwald
• anatoly techtonik
• fawce
• mcelrath
• wilsaj
We closed a total of 1115 issues, 373 pull requests and 742 regular issues; this is the full list (generated with the script
tools/github_stats.py):
Pull Requests (373):
• PR #1943: add screenshot and link into releasenotes
• PR #1954: update some example notebooks
• PR #2048: move _encode_binary to jsonutil.encode_images
• PR #2050: only add quotes around xunit-file on Windows
• PR #2047: disable auto-scroll on mozilla
• PR #2015: Fixes for %paste with special transformations

2.18. Issues closed in the 0.13 development cycle 183


IPython Documentation, Release 7.1.0.dev

• PR #2046: Iptest unicode


• PR #1939: Namespaces
• PR #2042: increase auto-scroll threshold to 100 lines
• PR #2043: move RemoteError import to top-level
• PR #2036: %alias_magic
• PR #1968: Proposal of icons for .ipynb files
• PR #2037: remove ipython-qtconsole gui-script
• PR #2038: add extra clear warning to shell doc
• PR #2029: Ship unminified js
• PR #2007: Add custom_control and custom_page_control variables to override the Qt widgets used by qtconsole
• PR #2034: fix&test push/pull recarrays
• PR #2028: Reduce unhelpful information shown by pinfo
• PR #2030: check wxPython version in inputhook
• PR #2024: Make interactive_usage a bit more rst friendly
• PR #2031: disable ^C^C confirmation on Windows
• PR #2027: match stdin encoding in frontend readline test
• PR #2025: Fix parallel test on WinXP - wait for resource cleanup.
• PR #2016: BUG: test runner fails in Windows if filenames contain spaces.
• PR #2020: Fix home path expansion test in Windows.
• PR #2021: Fix Windows pathname issue in ‘odd encoding’ test.
• PR #2022: don’t check writability in test for get_home_dir when HOME is undefined
• PR #1996: frontend test tweaks
• PR #2014: relax profile regex in notebook
• PR #2012: Mono cursor offset
• PR #2004: Clarify generic message spec vs. Python message API in docs
• PR #2010: notebook: Print a warning (but do not abort) if no webbrowser can be found.
• PR #2002: Refactor %magic into a lsmagic_docs API function.
• PR #1999: %magic help: display line and cell magics in alphabetical order.
• PR #1981: Clean BG processes created by %%script on kernel exit
• PR #1994: Fix RST misformatting.
• PR #1951: minor notebook startup/notebook-dir adjustments
• PR #1974: Allow path completion on notebook.
• PR #1964: allow multiple instances of a Magic
• PR #1991: fix _ofind attr in %page
• PR #1988: check for active frontend in update_restart_checkbox
• PR #1979: Add support for tox (https://tox.readthedocs.io/) and Travis CI (http://travis-ci.org/)

184 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #1970: dblclick to restore size of images


• PR #1978: Notebook names truncating at the first period
• PR #1825: second attempt at scrolled long output
• PR #1934: Cell/Worksheet metadata
• PR #1746: Confirm restart (configuration option, and checkbox UI)
• PR #1944: [qtconsole] take %,%% prefix into account for completion
• PR #1973: fix another FreeBSD $HOME symlink issue
• PR #1967: Fix psums example description in docs
• PR #1965: fix for #1678, undo no longer clears cells
• PR #1952: avoid duplicate “Websockets closed” dialog on ws close
• PR #1962: Support unicode prompts
• PR #1955: update to latest version of vim-ipython
• PR #1945: Add –proc option to %%script
• PR #1956: move import RemoteError after get_exc_info
• PR #1950: Fix for copy action (Ctrl+C) when there is no pager defined in qtconsole
• PR #1948: Fix help string for InteractiveShell.ast_node_interactivity
• PR #1942: swallow stderr of which in utils.process.find_cmd
• PR #1940: fix completer css on some Chrome versions
• PR #1938: remove remaining references to deprecated XREP/XREQ names
• PR #1925: Fix styling of superscripts and subscripts. Closes #1924.
• PR #1936: increase duration of save messages
• PR #1937: add %save -f
• PR #1935: add version checking to pyreadline import test
• PR #1849: Octave magics
• PR #1759: github, merge PR(s) just by number(s)
• PR #1931: Win py3fixes
• PR #1933: oinspect.find_file: Additional safety if file cannot be found.
• PR #1932: Fix adding functions to CommandChainDispatcher with equal priority on Py 3
• PR #1928: Select NoDB by default
• PR #1923: Add IPython syntax support to the %timeit magic, in line and cell mode
• PR #1926: Make completer recognize escaped quotes in strings.
• PR #1893: Update Parallel Magics and Exception Display
• PR #1921: magic_arguments: dedent but otherwise preserve indentation.
• PR #1919: Use oinspect in CodeMagics._find_edit_target
• PR #1918: don’t warn in iptest if deathrow/quarantine are missing
• PR #1917: Fix for %pdef on Python 3

2.18. Issues closed in the 0.13 development cycle 185


IPython Documentation, Release 7.1.0.dev

• PR #1913: Fix for #1428


• PR #1911: temporarily skip autoreload tests
• PR #1909: Fix for #1908, use os.path.normcase for safe filename comparisons
• PR #1907: py3compat fixes for %%script and tests
• PR #1906: ofind finds non-unique cell magics
• PR #1845: Fixes to inspection machinery for magics
• PR #1902: Workaround fix for gh-1632; minimal revert of gh-1424
• PR #1900: Cython libs
• PR #1899: add ScriptMagics to class list for generated config
• PR #1898: minimize manpages
• PR #1897: use glob for bad exclusion warning
• PR #1855: %%script and %%file magics
• PR #1870: add %%capture for capturing stdout/err
• PR #1861: Use dvipng to format sympy.Matrix
• PR #1867: Fix 1px margin bouncing of selected menu item.
• PR #1889: Reconnect when the websocket connection closes unexpectedly
• PR #1886: Fix a bug in renaming notebook
• PR #1895: Fix error in test suite with ip.system()
• PR #1762: add locate entry points
• PR #1883: Fix vertical offset due to bold/italics, and bad browser fonts.
• PR #1875: re-write columnize, with intermediate step.
• PR #1851: new completer for qtconsole.
• PR #1892: Remove suspicious quotes in interactiveshell.py
• PR #1864: Rmagic exceptions
• PR #1829: [notebook] don’t care about leading prct in completion
• PR #1832: Make svg, jpeg and png images resizable in notebook.
• PR #1674: HTML Notebook carriage-return handling, take 2
• PR #1882: Remove importlib dependency which not available in Python 2.6.
• PR #1879: Correct stack depth for variable expansion in !system commands
• PR #1841: [notebook] deduplicate completion results
• PR #1850: Remove args/kwargs handling in TryNext, fix %paste error messages.
• PR #1663: Keep line-endings in ipynb
• PR #1815: Make : invalid in filenames in the Notebook JS code.
• PR #1819: doc: cleanup the parallel psums example a little
• PR #1839: External cleanup
• PR #1782: fix Magic menu in qtconsole, split in groups

186 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #1862: Minor bind_kernel improvements


• PR #1857: Prevent jumping of window to input when output is clicked.
• PR #1856: Fix 1px jumping of cells and menus in Notebook.
• PR #1852: fix chained resubmissions
• PR #1780: Rmagic extension
• PR #1847: add InlineBackend to ConsoleApp class list
• PR #1836: preserve header for resubmitted tasks
• PR #1828: change default extension to .ipy for %save -r
• PR #1800: Reintroduce recall
• PR #1830: lsmagic lists magics in alphabetical order
• PR #1773: Update SymPy profile: SymPy’s latex() can now print set and frozenset
• PR #1761: Edited documentation to use IPYTHONDIR in place of ~/.ipython
• PR #1822: aesthetics pass on AsyncResult.display_outputs
• PR #1821: ENTER submits the rename notebook dialog.
• PR #1820: NotebookApp: Make the number of ports to retry user configurable.
• PR #1816: Always use filename as the notebook name.
• PR #1813: Add assert_in method to nose for Python 2.6
• PR #1711: New Tooltip, New Completer and JS Refactor
• PR #1798: a few simple fixes for docs/parallel
• PR #1812: Ensure AsyncResult.display_outputs doesn’t display empty streams
• PR #1811: warn on nonexistent exclusions in iptest
• PR #1810: fix for #1809, failing tests in IPython.zmq
• PR #1808: Reposition alternate upload for firefox [need cross browser/OS/language test]
• PR #1742: Check for custom_exceptions only once
• PR #1807: add missing cython exclusion in iptest
• PR #1805: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with m. . .
• PR #1739: Dashboard improvement (necessary merge of #1658 and #1676 + fix #1492)
• PR #1770: Cython related magic functions
• PR #1707: Accept –gui=<. . . > switch in IPython qtconsole.
• PR #1797: Fix comment which breaks Emacs syntax highlighting.
• PR #1795: fix %gui magic
• PR #1793: Raise repr limit for strings to 80 characters (from 30).
• PR #1794: don’t use XDG path on OS X
• PR #1792: Unicode-aware logger
• PR #1791: update zmqshell magics
• PR #1787: DOC: Remove regression from qt-console docs.

2.18. Issues closed in the 0.13 development cycle 187


IPython Documentation, Release 7.1.0.dev

• PR #1758: test_pr, fallback on http if git protocol fail, and SSL errors. . .
• PR #1748: Fix some tests for Python 3.3
• PR #1755: test for pygments before running qt tests
• PR #1771: Make default value of interactivity passed to run_ast_nodes configurable
• PR #1784: restore loadpy to load
• PR #1768: Update parallel magics
• PR #1779: Tidy up error raising in magic decorators.
• PR #1769: Allow cell mode timeit without setup code.
• PR #1716: Fix for fake filenames in verbose traceback
• PR #1763: [qtconsole] fix append_plain_html -> append_html
• PR #1732: Refactoring of the magics system and implementation of cell magics
• PR #1630: Merge divergent Kernel implementations
• PR #1705: [notebook] Make pager resizable, and remember size. . .
• PR #1606: Share code for %pycat and %loadpy, make %pycat aware of URLs
• PR #1757: Open IPython notebook hyperlinks in a new window using target=_blank
• PR #1754: Fix typo enconters->encounters
• PR #1753: Clear window title when kernel is restarted
• PR #1449: Fix for bug #735 : Images missing from XML/SVG export
• PR #1743: Tooltip completer js refactor
• PR #1681: add qt config option to clear_on_kernel_restart
• PR #1733: Tooltip completer js refactor
• PR #1727: terminate kernel after embed_kernel tests
• PR #1737: add HistoryManager to ipapp class list
• PR #1686: ENH: Open a notebook from the command line
• PR #1709: fixes #1708, failing test in arg_split on windows
• PR #1718: Use CRegExp trait for regular expressions.
• PR #1729: Catch failure in repr() for %whos
• PR #1726: use eval for command-line args instead of exec
• PR #1724: fix scatter/gather with targets=’all’
• PR #1725: add –no-ff to git pull in test_pr
• PR #1721: Tooltip completer js refactor
• PR #1657: Add wait optional argument to hooks.editor
• PR #1717: Define generic sys.ps{1,2,3}, for use by scripts.
• PR #1691: Finish PR #1446
• PR #1710: update MathJax CDN url for https
• PR #1713: Make autocall regexp’s configurable.

188 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #1703: Allow TryNext to have an error message without it affecting the command chain
• PR #1714: minor adjustments to test_pr
• PR #1704: ensure all needed qt parts can be imported before settling for one
• PR #1706: Mark test_push_numpy_nocopy as a known failure for Python 3
• PR #1698: fix tooltip on token with number
• PR #1245: pythonw py3k fixes for issue #1226
• PR #1685: Add script to test pull request
• PR #1693: deprecate IPYTHON_DIR in favor of IPYTHONDIR
• PR #1695: Avoid deprecated warnings from ipython-qtconsole.desktop.
• PR #1694: Add quote to notebook to allow it to load
• PR #1689: Fix sys.path missing ‘’ as first entry in ipython kernel.
• PR #1687: import Binary from bson instead of pymongo
• PR #1616: Make IPython.core.display.Image less notebook-centric
• PR #1684: CLN: Remove redundant function definition.
• PR #1670: Point %pastebin to gist
• PR #1669: handle pyout messages in test_message_spec
• PR #1295: add binary-tree engine interconnect example
• PR #1642: Cherry-picked commits from 0.12.1 release
• PR #1659: Handle carriage return characters (“r”) in HTML notebook output.
• PR #1656: ensure kernels are cleaned up in embed_kernel tests
• PR #1664: InteractiveShell.run_code: Update docstring.
• PR #1662: Delay flushing softspace until after cell finishes
• PR #1643: handle jpg/jpeg in the qtconsole
• PR #1652: add patch_pyzmq() for backporting a few changes from newer pyzmq
• PR #1650: DOC: moving files with SSH launchers
• PR #1357: add IPython.embed_kernel()
• PR #1640: Finish up embed_kernel
• PR #1651: Remove bundled Itpl module
• PR #1634: incremental improvements to SSH launchers
• PR #1649: move examples/test_embed into examples/tests/embed
• PR #1633: Fix installing extension from local file on Windows
• PR #1645: Exclude UserDict when deep reloading NumPy.
• PR #1637: Removed a ‘:’ which shouldn’t have been there
• PR #1631: TST: QApplication doesn’t quit early enough with PySide.
• PR #1629: evaluate a few dangling validate_message generators
• PR #1621: clear In[] prompt numbers on “Clear All Output”

2.18. Issues closed in the 0.13 development cycle 189


IPython Documentation, Release 7.1.0.dev

• PR #1627: Test the Message Spec


• PR #1624: Fixes for byte-compilation on Python 3
• PR #1615: Add show() method to figure objects.
• PR #1625: Fix deepreload on Python 3
• PR #1620: pyin message now have execution_count
• PR #1457: Update deepreload to use a rewritten knee.py. Fixes dreload(numpy).
• PR #1613: allow map / parallel function for single-engine views
• PR #1609: exit notebook cleanly on SIGINT, SIGTERM
• PR #1607: cleanup sqlitedb temporary db file after tests
• PR #1608: don’t rely on timedelta.total_seconds in AsyncResult
• PR #1599: Fix for %run -d on Python 3
• PR #1602: Fix %env magic on Python 3.
• PR #1603: Remove python3 profile
• PR #1604: Exclude IPython.quarantine from installation
• PR #1600: Specify encoding for io.open in notebook_reformat tests
• PR #1605: Small fixes for Animation and Progress notebook
• PR #1529: __all__ feature, improvement to dir2, and tests for both
• PR #1548: add sugar methods/properties to AsyncResult
• PR #1535: Fix pretty printing dispatch
• PR #1399: Use LaTeX to print various built-in types with the SymPy printing extension
• PR #1597: re-enter kernel.eventloop after catching SIGINT
• PR #1490: rename plaintext cell -> raw cell
• PR #1480: Fix %notebook magic, etc. nbformat unicode tests and fixes
• PR #1588: Gtk3 integration with ipython works.
• PR #1595: Examples syntax (avoid errors installing on Python 3)
• PR #1526: Find encoding for Python files
• PR #1594: Fix writing git commit ID to a file on build with Python 3
• PR #1556: shallow-copy DictDB query results
• PR #1502: small changes in response to pyflakes pass
• PR #1445: Don’t build sphinx docs for sdists
• PR #1538: store git commit hash in utils._sysinfo instead of hidden data file
• PR #1546: attempt to suppress exceptions in channel threads at shutdown
• PR #1559: update tools/github_stats.py to use GitHub API v3
• PR #1563: clear_output improvements
• PR #1560: remove obsolete discussion of Twisted/trial from testing docs
• PR #1569: BUG: qtconsole – non-standard handling of a and b. [Fixes #1561]

190 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #1573: BUG: Ctrl+C crashes wx pylab kernel in qtconsole.


• PR #1568: fix PR #1567
• PR #1567: Fix: openssh_tunnel did not parse port in server
• PR #1565: fix AsyncResult.abort
• PR #1552: use os.getcwdu in NotebookManager
• PR #1541: display_pub flushes stdout/err
• PR #1544: make MultiKernelManager.kernel_manager_class configurable
• PR #1517: Fix indentation bug in IPython/lib/pretty.py
• PR #1519: BUG: Include the name of the exception type in its pretty format.
• PR #1489: Fix zero-copy push
• PR #1477: fix dangling buffer in IPython.parallel.util
• PR #1514: DOC: Fix references to IPython.lib.pretty instead of the old location
• PR #1481: BUG: Improve placement of CallTipWidget
• PR #1496: BUG: LBYL when clearing the output history on shutdown.
• PR #1508: fix sorting profiles in clustermanager
• PR #1495: BUG: Fix pretty-printing for overzealous objects
• PR #1472: more general fix for #662
• PR #1483: updated magic_history docstring
• PR #1383: First version of cluster web service.
• PR #1398: fix %tb after SyntaxError
• PR #1440: Fix for failing testsuite when using –with-xml-coverage on windows.
• PR #1419: Add %install_ext magic function.
• PR #1424: Win32 shell interactivity
• PR #1468: Simplify structure of a Job in the TaskScheduler
• PR #1447: 1107 - Tab autocompletion can suggest invalid syntax
• PR #1469: Fix typo in comment (insert space)
• PR #1463: Fix completion when importing modules in the cwd.
• PR #1466: Fix for issue #1437, unfriendly windows qtconsole error handling
• PR #1432: Fix ipython directive
• PR #1465: allow ipython help subcommand syntax
• PR #1416: Conditional import of ctypes in inputhook
• PR #1462: expedite parallel tests
• PR #1410: Add javascript library and css stylesheet loading to JS class.
• PR #1448: Fix for #875 Never build unicode error messages
• PR #1458: use eval to uncan References
• PR #1450: load mathjax from CDN via https

2.18. Issues closed in the 0.13 development cycle 191


IPython Documentation, Release 7.1.0.dev

• PR #1451: include heading level in JSON


• PR #1444: Fix pyhton -> python typos
• PR #1414: ignore errors in shell.var_expand
• PR #1430: Fix for tornado check for tornado < 1.1.0
• PR #1413: get_home_dir expands symlinks, adjust test accordingly
• PR #1385: updated and prettified magic doc strings
• PR #1406: Browser selection
• PR #1377: Saving non-ascii history
• PR #1402: fix symlinked /home issue for FreeBSD
• PR #1405: Only monkeypatch xunit when the tests are run using it.
• PR #1395: Xunit & KnownFailure
• PR #1396: Fix for %tb magic.
• PR #1386: Jsd3
• PR #1388: Add simple support for running inside a virtualenv
• PR #1391: Improve Hub/Scheduler when no engines are registered
• PR #1369: load header with engine id when engine dies in TaskScheduler
• PR #1353: Save notebook as script using unicode file handle.
• PR #1352: Add ‘-m mod : run library module as a script’ option.
• PR #1363: Fix some minor color/style config issues in the qtconsole
• PR #1371: Adds a quiet keyword to sync_imports
• PR #1387: Fixing Cell menu to update cell type select box.
• PR #1296: Wx gui example: fixes the broken example for %gui wx.
• PR #1372: ipcontroller cleans up connection files unless reuse=True
• PR #1374: remove calls to meaningless ZMQStream.on_err
• PR #1370: allow draft76 websockets (Safari)
• PR #1368: Ensure handler patterns are str, not unicode
• PR #1361: Notebook bug fix branch
• PR #1364: avoid jsonlib returning Decimal
• PR #1362: Don’t log complete contents of history replies, even in debug
• PR #1347: fix weird magic completion in notebook
• PR #1346: fixups for alternate URL prefix stuff
• PR #1336: crack at making notebook.html use the layout.html template
• PR #1331: RST and heading cells
• PR #1247: fixes a bug causing extra newlines after comments.
• PR #1332: notebook - allow prefixes in URL path.
• PR #1341: Don’t attempt to tokenize binary files for tracebacks

192 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• PR #1334: added key handler for control-s to notebook, seems to work pretty well
• PR #1338: Fix see also in docstrings so API docs build
• PR #1335: Notebook toolbar UI
• PR #1299: made notebook.html extend layout.html
• PR #1318: make Ctrl-D in qtconsole act same as in terminal (ready to merge)
• PR #1328: Coverage
• PR #1206: don’t preserve fixConsole output in json
• PR #1330: Add linewrapping to text cells (new feature in CodeMirror).
• PR #1309: Inoculate clearcmd extension into %reset functionality
• PR #1327: Updatecm2
• PR #1326: Removing Ace edit capability.
• PR #1325: forgotten selected_cell -> get_selected_cell
• PR #1316: Pass subprocess test runners a suitable location for xunit output
• PR #1303: Updatecm
• PR #1312: minor heartbeat tweaks
• PR #1306: Fix %prun input parsing for escaped characters (closes #1302)
• PR #1301: New “Fix for issue #1202” based on current master.
• PR #1289: Make autoreload extension work on Python 3.
• PR #1288: Don’t ask for confirmation when stdin isn’t available
• PR #1294: TaskScheduler.hwm default to 1 instead of 0
• PR #1283: HeartMonitor.period should be an Integer
• PR #1264: Aceify
• PR #1284: a fix for GH 1269
• PR #1213: BUG: Minor typo in history_console_widget.py
• PR #1267: add NoDB for non-recording Hub
• PR #1222: allow Reference as callable in map/apply
• PR #1257: use self.kernel_manager_class in qtconsoleapp
• PR #1253: set auto_create flag for notebook apps
• PR #1262: Heartbeat no longer shares the app’s Context
• PR #1229: Fix display of SyntaxError in Python 3
• PR #1256: Dewijmoize
• PR #1246: Skip tests that require X, when importing pylab results in RuntimeError.
• PR #1211: serve local files in notebook-dir
• PR #1224: edit text cells on double-click instead of single-click
• PR #1187: misc notebook: connection file cleanup, first heartbeat, startup flush
• PR #1207: fix loadpy duplicating newlines

2.18. Issues closed in the 0.13 development cycle 193


IPython Documentation, Release 7.1.0.dev

• PR #1129: Unified setup.py


• PR #1199: Reduce IPython.external.*
• PR #1218: Added -q option to %prun for suppression of the output, along with editing the dochelp string.
• PR #1217: Added -q option to %prun for suppression of the output, along with editing the dochelp string
• PR #1175: core.completer: Clean up excessive and unused code.
• PR #1196: docs: looks like a file path might have been accidentally pasted in the middle of a word
• PR #1190: Fix link to Chris Fonnesbeck blog post about 0.11 highlights.
Issues (742):
• #1943: add screenshot and link into releasenotes
• #1570: [notebook] remove ‘left panel’ references from example.
• #1954: update some example notebooks
• #2048: move _encode_binary to jsonutil.encode_images
• #2050: only add quotes around xunit-file on Windows
• #2047: disable auto-scroll on mozilla
• #1258: Magic %paste error
• #2015: Fixes for %paste with special transformations
• #760: Windows: test runner fails if repo path contains spaces
• #2046: Iptest unicode
• #1939: Namespaces
• #2042: increase auto-scroll threshold to 100 lines
• #2043: move RemoteError import to top-level
• #641: In %magic help, remove duplicate aliases
• #2036: %alias_magic
• #1968: Proposal of icons for .ipynb files
• #825: keyboardinterrupt crashes gtk gui when gtk.set_interactive is not available
• #1971: Remove duplicate magics docs
• #2040: Namespaces for cleaner public APIs
• #2039: ipython parallel import exception
• #2035: Getdefaultencoding test error with sympy 0.7.1_git
• #2037: remove ipython-qtconsole gui-script
• #1516: ipython-qtconsole script isn’t installed for Python 2.x
• #1297: “ipython -p sh” is in documentation but doesn’t work
• #2038: add extra clear warning to shell doc
• #1265: please ship unminified js and css sources
• #2029: Ship unminified js
• #1920: Provide an easy way to override the Qt widget used by qtconsole

194 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #2007: Add custom_control and custom_page_control variables to override the Qt widgets used by qtconsole
• #2009: In %magic help, remove duplicate aliases
• #2033: ipython parallel pushing and pulling recarrays
• #2034: fix&test push/pull recarrays
• #2028: Reduce unhelpful information shown by pinfo
• #1992: Tab completion fails with many spaces in filename
• #1885: handle too old wx
• #2030: check wxPython version in inputhook
• #2024: Make interactive_usage a bit more rst friendly
• #2031: disable ^C^C confirmation on Windows
• #2023: Unicode test failure on OS X
• #2027: match stdin encoding in frontend readline test
• #1901: Windows: parallel test fails assert, leaves 14 python processes alive
• #2025: Fix parallel test on WinXP - wait for resource cleanup.
• #1986: Line magic function %R not found. (Rmagic)
• #1712: test failure in ubuntu package daily build
• #1183: 0.12 testsuite failures
• #2016: BUG: test runner fails in Windows if filenames contain spaces.
• #1806: Alternate upload methods in firefox
• #2019: Windows: home directory expansion test fails
• #2020: Fix home path expansion test in Windows.
• #2017: Windows core test error - filename quoting
• #2021: Fix Windows pathname issue in ‘odd encoding’ test.
• #1998: call to nt.assert_true(path._writable_dir(home)) returns false in test_path.py
• #2022: don’t check writability in test for get_home_dir when HOME is undefined
• #1589: Test failures and docs don’t build on Mac OS X Lion
• #1996: frontend test tweaks
• #2011: Notebook server can’t start cluster with hyphen-containing profile name
• #2014: relax profile regex in notebook
• #2013: brew install pyqt
• #2005: Strange output artifacts in footer of notebook
• #2012: Mono cursor offset
• #2004: Clarify generic message spec vs. Python message API in docs
• #2006: Don’t crash when starting notebook server if runnable browser not found
• #2010: notebook: Print a warning (but do not abort) if no webbrowser can be found.
• #2008: pip install virtualenv

2.18. Issues closed in the 0.13 development cycle 195


IPython Documentation, Release 7.1.0.dev

• #2003: Wrong case of rmagic in docs


• #2002: Refactor %magic into a lsmagic_docs API function.
• #2000: kernel.js consistency with generic IPython message format.
• #1999: %magic help: display line and cell magics in alphabetical order.
• #1635: test_prun_quotes fails on Windows
• #1984: Cannot restart Notebook when using %%script --bg
• #1981: Clean BG processes created by %%script on kernel exit
• #1994: Fix RST misformatting.
• #1949: Introduce Notebook Magics
• #1985: Kernels should start in notebook dir when manually specified
• #1980: Notebook should check that –notebook-dir exists
• #1951: minor notebook startup/notebook-dir adjustments
• #1969: tab completion in notebook for paths not triggered
• #1974: Allow path completion on notebook.
• #1964: allow multiple instances of a Magic
• #1960: %page not working
• #1991: fix _ofind attr in %page
• #1982: Shutdown qtconsole problem?
• #1988: check for active frontend in update_restart_checkbox
• #1979: Add support for tox (https://tox.readthedocs.io/) and Travis CI (http://travis-ci.org/)
• #1989: Parallel: output of %px and %px${suffix} is inconsistent
• #1966: ValueError: packer could not serialize a simple message
• #1987: Notebook: MathJax offline install not recognized
• #1970: dblclick to restore size of images
• #1983: Notebook does not save heading level
• #1978: Notebook names truncating at the first period
• #1553: Limited size of output cells and provide scroll bars for such output cells
• #1825: second attempt at scrolled long output
• #1915: add cell-level metadata
• #1934: Cell/Worksheet metadata
• #1746: Confirm restart (configuration option, and checkbox UI)
• #1790: Commenting function.
• #1767: Tab completion problems with cell magics
• #1944: [qtconsole] take %,%% prefix into account for completion
• #1973: fix another FreeBSD $HOME symlink issue
• #1972: Fix completion of ‘%tim’ in the Qt console

196 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #1887: Make it easy to resize jpeg/png images back to original size.


• #1967: Fix psums example description in docs
• #1678: ctrl-z clears cell output in notebook when pressed enough times
• #1965: fix for #1678, undo no longer clears cells
• #1952: avoid duplicate “Websockets closed” dialog on ws close
• #1961: UnicodeDecodeError on directory with unicode chars in prompt
• #1963: styling prompt, {color.Normal} excepts
• #1962: Support unicode prompts
• #1959: %page not working on qtconsole for Windows XP 32-bit
• #1955: update to latest version of vim-ipython
• #1945: Add –proc option to %%script
• #1957: fix indentation in kernel.js
• #1956: move import RemoteError after get_exc_info
• #1950: Fix for copy action (Ctrl+C) when there is no pager defined in qtconsole
• #1948: Fix help string for InteractiveShell.ast_node_interactivity
• #1941: script magics cause terminal spam
• #1942: swallow stderr of which in utils.process.find_cmd
• #1833: completer draws slightly too small on Chrome
• #1940: fix completer css on some Chrome versions
• #1938: remove remaining references to deprecated XREP/XREQ names
• #1924: HTML superscripts not shown raised in the notebook
• #1925: Fix styling of superscripts and subscripts. Closes #1924.
• #1461: User notification if notebook saving fails
• #1936: increase duration of save messages
• #1542: %save magic fails in clients without stdin if file already exists
• #1937: add %save -f
• #1572: pyreadline version dependency not correctly checked
• #1935: add version checking to pyreadline import test
• #1849: Octave magics
• #1759: github, merge PR(s) just by number(s)
• #1931: Win py3fixes
• #1646: Meaning of restart parameter in client.shutdown() unclear
• #1933: oinspect.find_file: Additional safety if file cannot be found.
• #1916: %paste doesn’t work on py3
• #1932: Fix adding functions to CommandChainDispatcher with equal priority on Py 3
• #1928: Select NoDB by default

2.18. Issues closed in the 0.13 development cycle 197


IPython Documentation, Release 7.1.0.dev

• #1923: Add IPython syntax support to the %timeit magic, in line and cell mode
• #1926: Make completer recognize escaped quotes in strings.
• #1929: Ipython-qtconsole (0.12.1) hangs with Python 2.7.3, Windows 7 64 bit
• #1409: [qtconsole] forward delete bring completion into current line
• #1922: py3k compatibility for setupegg.py
• #1598: document that sync_imports() can’t handle “import foo as bar”
• #1893: Update Parallel Magics and Exception Display
• #1890: Docstrings for magics that use @magic_arguments are rendered wrong
• #1921: magic_arguments: dedent but otherwise preserve indentation.
• #1919: Use oinspect in CodeMagics._find_edit_target
• #1918: don’t warn in iptest if deathrow/quarantine are missing
• #1914: %pdef failing on python3
• #1917: Fix for %pdef on Python 3
• #1428: Failing test that prun does not clobber string escapes
• #1913: Fix for #1428
• #1911: temporarily skip autoreload tests
• #1549: autoreload extension crashes ipython
• #1908: find_file errors on windows
• #1909: Fix for #1908, use os.path.normcase for safe filename comparisons
• #1907: py3compat fixes for %%script and tests
• #1904: %%px? doesn’t work, shows info for %px, general cell magic problem
• #1906: ofind finds non-unique cell magics
• #1894: Win64 binary install fails
• #1799: Source file not found for magics
• #1845: Fixes to inspection machinery for magics
• #1774: Some magics seems broken
• #1586: Clean up tight coupling between Notebook, CodeCell and Kernel Javascript objects
• #1632: Win32 shell interactivity apparently broke qtconsole “cd” magic
• #1902: Workaround fix for gh-1632; minimal revert of gh-1424
• #1900: Cython libs
• #1503: Cursor is offset in notebook in Chrome 17 on Linux
• #1426: Qt console doesn’t handle the --gui flag correctly.
• #1180: Can’t start IPython kernel in Spyder
• #581: test IPython.zmq
• #1593: Name embedded in notebook overrides filename
• #1899: add ScriptMagics to class list for generated config

198 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #1618: generate or minimize manpages


• #1898: minimize manpages
• #1896: Windows: apparently spurious warning ‘Excluding nonexistent file’ . . . test_exampleip
• #1897: use glob for bad exclusion warning
• #1215: updated %quickref to show short-hand for %sc and %sx
• #1855: %%script and %%file magics
• #1863: Ability to silence a cell in the notebook
• #1870: add %%capture for capturing stdout/err
• #1861: Use dvipng to format sympy.Matrix
• #1867: Fix 1px margin bouncing of selected menu item.
• #1889: Reconnect when the websocket connection closes unexpectedly
• #1577: If a notebook loses its network connection WebSockets won’t reconnect
• #1886: Fix a bug in renaming notebook
• #1895: Fix error in test suite with ip.system()
• #1762: add locate entry points
• #1883: Fix vertical offset due to bold/italics, and bad browser fonts.
• #1875: re-write columnize, with intermediate step.
• #1860: IPython.utils.columnize sometime wrong. . .
• #1851: new completer for qtconsole.
• #1892: Remove suspicious quotes in interactiveshell.py
• #1854: Class %hierarchy and graphiz %%dot magics
• #1827: Sending tracebacks over ZMQ should protect against unicode failure
• #1864: Rmagic exceptions
• #1829: [notebook] don’t care about leading prct in completion
• #1832: Make svg, jpeg and png images resizable in notebook.
• #1674: HTML Notebook carriage-return handling, take 2
• #1874: cython_magic uses importlib, which doesn’t ship with py2.6
• #1882: Remove importlib dependency which not available in Python 2.6.
• #1878: shell access using ! will not fill class or function scope vars
• #1879: Correct stack depth for variable expansion in !system commands
• #1840: New JS completer should merge completions before display
• #1841: [notebook] deduplicate completion results
• #1736: no good error message on missing tkinter and %paste
• #1741: Display message from TryNext error in magic_paste
• #1850: Remove args/kwargs handling in TryNext, fix %paste error messages.
• #1663: Keep line-endings in ipynb

2.18. Issues closed in the 0.13 development cycle 199


IPython Documentation, Release 7.1.0.dev

• #1872: Matplotlib window freezes using intreractive plot in qtconsole


• #1869: Improve CodeMagics._find_edit_target
• #1781: Colons in notebook name causes notebook deletion without warning
• #1815: Make : invalid in filenames in the Notebook JS code.
• #1819: doc: cleanup the parallel psums example a little
• #1838: externals cleanup
• #1839: External cleanup
• #1782: fix Magic menu in qtconsole, split in groups
• #1862: Minor bind_kernel improvements
• #1859: kernmagic during console startup
• #1857: Prevent jumping of window to input when output is clicked.
• #1856: Fix 1px jumping of cells and menus in Notebook.
• #1848: task fails with “AssertionError: not enough buffers!” after second resubmit
• #1852: fix chained resubmissions
• #1780: Rmagic extension
• #1853: Fix jumpy notebook behavior
• #1842: task with UnmetDependency error still owned by engine
• #1847: add InlineBackend to ConsoleApp class list
• #1846: Exceptions within multiprocessing crash Ipython notebook kernel
• #1843: Notebook does not exist and permalinks
• #1837: edit magic broken in head
• #1834: resubmitted tasks doesn’t have same session name
• #1836: preserve header for resubmitted tasks
• #1776: fix magic menu in qtconsole
• #1828: change default extension to .ipy for %save -r
• #1800: Reintroduce recall
• #1671: __future__ environments
• #1830: lsmagic lists magics in alphabetical order
• #1835: Use Python import in ipython profile config
• #1773: Update SymPy profile: SymPy’s latex() can now print set and frozenset
• #1761: Edited documentation to use IPYTHONDIR in place of ~/.ipython
• #1772: notebook autocomplete fail when typing number
• #1822: aesthetics pass on AsyncResult.display_outputs
• #1460: Redirect http to https for notebook
• #1287: Refactor the notebook tab completion/tooltip
• #1596: In rename dialog, <return> should submit

200 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #1821: ENTER submits the rename notebook dialog.


• #1750: Let the user disable random port selection
• #1820: NotebookApp: Make the number of ports to retry user configurable.
• #1816: Always use filename as the notebook name.
• #1775: assert_in not present on Python 2.6
• #1813: Add assert_in method to nose for Python 2.6
• #1498: Add tooltip keyboard shortcuts
• #1711: New Tooltip, New Completer and JS Refactor
• #1798: a few simple fixes for docs/parallel
• #1818: possible bug with latex / markdown
• #1647: Aborted parallel tasks can’t be resubmitted
• #1817: Change behavior of ipython notebook –port=. . .
• #1738: IPython.embed_kernel issues
• #1610: Basic bold and italic in HTML output cells
• #1576: Start and stop kernels from the notebook dashboard
• #1515: impossible to shutdown notebook kernels
• #1812: Ensure AsyncResult.display_outputs doesn’t display empty streams
• #1811: warn on nonexistent exclusions in iptest
• #1809: test suite error in IPython.zmq on windows
• #1810: fix for #1809, failing tests in IPython.zmq
• #1808: Reposition alternate upload for firefox [need cross browser/OS/language test]
• #1742: Check for custom_exceptions only once
• #1802: cythonmagic tests should be skipped if Cython not available
• #1062: warning message in IPython.extensions test
• #1807: add missing cython exclusion in iptest
• #1805: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with m. . .
• #1803: MPI parallel %px bug
• #1804: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with mingw.
• #1492: Drag target very small if IPython Dashboard has no notebooks
• #1562: Offer a method other than drag-n-drop to upload notebooks
• #1739: Dashboard improvement (necessary merge of #1658 and #1676 + fix #1492)
• #1770: Cython related magic functions
• #1532: qtconsole does not accept –gui switch
• #1707: Accept –gui=<. . . > switch in IPython qtconsole.
• #1797: Fix comment which breaks Emacs syntax highlighting.
• #1796: %gui magic broken

2.18. Issues closed in the 0.13 development cycle 201


IPython Documentation, Release 7.1.0.dev

• #1795: fix %gui magic


• #1788: extreme truncating of return values
• #1793: Raise repr limit for strings to 80 characters (from 30).
• #1794: don’t use XDG path on OS X
• #1777: ipython crash on wrong encoding
• #1792: Unicode-aware logger
• #1791: update zmqshell magics
• #1787: DOC: Remove regression from qt-console docs.
• #1785: IPython.utils.tests.test_process.SubProcessTestCase
• #1758: test_pr, fallback on http if git protocol fail, and SSL errors. . .
• #1786: Make notebook save failures more salient
• #1748: Fix some tests for Python 3.3
• #1755: test for pygments before running qt tests
• #1771: Make default value of interactivity passed to run_ast_nodes configurable
• #1783: part of PR #1606 (loadpy -> load) erased by magic refactoring.
• #1784: restore loadpy to load
• #1768: Update parallel magics
• #1778: string exception in IPython/core/magic.py:232
• #1779: Tidy up error raising in magic decorators.
• #1769: Allow cell mode timeit without setup code.
• #1716: Fix for fake filenames in verbose traceback
• #1763: [qtconsole] fix append_plain_html -> append_html
• #1766: Test failure in IPython.parallel
• #1611: IPEP1: Cell magics and general cleanup of the Magic system
• #1732: Refactoring of the magics system and implementation of cell magics
• #1765: test_pr should clearn PYTHONPATH for the subprocesses
• #1630: Merge divergent Kernel implementations
• #1705: [notebook] Make pager resizable, and remember size. . .
• #1606: Share code for %pycat and %loadpy, make %pycat aware of URLs
• #1720: Adding interactive inline plotting to notebooks with flot
• #1701: [notebook] Open HTML links in a new window by default
• #1757: Open IPython notebook hyperlinks in a new window using target=_blank
• #1735: Open IPython notebook hyperlinks in a new window using target=_blank
• #1754: Fix typo enconters->encounters
• #1753: Clear window title when kernel is restarted
• #735: Images missing from XML/SVG export (for me)

202 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #1449: Fix for bug #735 : Images missing from XML/SVG export
• #1752: Reconnect Websocket when it closes unexpectedly
• #1751: Reconnect Websocket when it closes unexpectedly
• #1749: Load MathJax.js using HTTPS when IPython notebook server is HTTPS
• #1743: Tooltip completer js refactor
• #1700: A module for sending custom user messages from the kernel.
• #1745: htmlnotebook: Cursor is off
• #1728: ipython crash with matplotlib during picking
• #1681: add qt config option to clear_on_kernel_restart
• #1733: Tooltip completer js refactor
• #1676: Kernel status/shutdown from dashboard
• #1658: Alternate notebook upload methods
• #1727: terminate kernel after embed_kernel tests
• #1737: add HistoryManager to ipapp class list
• #945: Open a notebook from the command line
• #1686: ENH: Open a notebook from the command line
• #1709: fixes #1708, failing test in arg_split on windows
• #1718: Use CRegExp trait for regular expressions.
• #1729: Catch failure in repr() for %whos
• #1726: use eval for command-line args instead of exec
• #1723: scatter/gather fail with targets=’all’
• #1724: fix scatter/gather with targets=’all’
• #1725: add –no-ff to git pull in test_pr
• #1722: unicode exception when evaluating expression with non-ascii characters
• #1721: Tooltip completer js refactor
• #1657: Add wait optional argument to hooks.editor
• #123: Define sys.ps{1,2}
• #1717: Define generic sys.ps{1,2,3}, for use by scripts.
• #1442: cache-size issue in qtconsole
• #1691: Finish PR #1446
• #1446: Fixing Issue #1442
• #1710: update MathJax CDN url for https
• #81: Autocall fails if first function argument begins with “-” or “+
• #1713: Make autocall regexp’s configurable.
• #211: paste command not working
• #1703: Allow TryNext to have an error message without it affecting the command chain

2.18. Issues closed in the 0.13 development cycle 203


IPython Documentation, Release 7.1.0.dev

• #1714: minor adjustments to test_pr


• #1509: New tooltip for notebook
• #1697: Major refactoring of the Notebook, Kernel and CodeCell JavaScript.
• #788: Progress indicator in the notebook (and perhaps the Qt console)
• #1034: Single process Qt console
• #1557: magic function conflict while using –pylab
• #1476: Pylab figure objects not properly updating
• #1704: ensure all needed qt parts can be imported before settling for one
• #1708: test failure in arg_split on windows
• #1706: Mark test_push_numpy_nocopy as a known failure for Python 3
• #1696: notebook tooltip fail on function with number
• #1698: fix tooltip on token with number
• #1226: Windows GUI only (pythonw) bug for IPython on Python 3.x
• #1245: pythonw py3k fixes for issue #1226
• #1417: Notebook Completer Class
• #1690: [Bogus] Deliberately make a test fail
• #1685: Add script to test pull request
• #1167: Settle on a choice for $IPYTHONDIR
• #1693: deprecate IPYTHON_DIR in favor of IPYTHONDIR
• #1672: ipython-qtconsole.desktop is using a deprecated format
• #1695: Avoid deprecated warnings from ipython-qtconsole.desktop.
• #1694: Add quote to notebook to allow it to load
• #1240: sys.path missing '' as first entry when kernel launched without interface
• #1689: Fix sys.path missing ‘’ as first entry in ipython kernel.
• #1683: Parallel controller failing with Pymongo 2.2
• #1687: import Binary from bson instead of pymongo
• #1614: Display Image in Qtconsole
• #1616: Make IPython.core.display.Image less notebook-centric
• #1684: CLN: Remove redundant function definition.
• #1655: Add %open magic command to open editor in non-blocking manner
• #1677: middle-click paste broken in notebook
• #1670: Point %pastebin to gist
• #1667: Test failure in test_message_spec
• #1668: Test failure in IPython.zmq.tests.test_message_spec.test_complete “‘pyout’ != ‘status’”
• #1669: handle pyout messages in test_message_spec
• #1295: add binary-tree engine interconnect example

204 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #1642: Cherry-picked commits from 0.12.1 release


• #1659: Handle carriage return characters (“r”) in HTML notebook output.
• #1313: Figure out MathJax 2 support
• #1653: Test failure in IPython.zmq
• #1656: ensure kernels are cleaned up in embed_kernel tests
• #1666: pip install ipython==dev installs version 0.8 from an old svn repo
• #1664: InteractiveShell.run_code: Update docstring.
• #1512: print stuff, should avoid newline
• #1662: Delay flushing softspace until after cell finishes
• #1643: handle jpg/jpeg in the qtconsole
• #966: dreload fails on Windows XP with IPython 0.11 “Unexpected Error”
• #1500: dreload doesn’t seem to exclude numpy
• #1520: kernel crash when showing tooltip (?)
• #1652: add patch_pyzmq() for backporting a few changes from newer pyzmq
• #1650: DOC: moving files with SSH launchers
• #1357: add IPython.embed_kernel()
• #1640: Finish up embed_kernel
• #1651: Remove bundled Itpl module
• #1634: incremental improvements to SSH launchers
• #1649: move examples/test_embed into examples/tests/embed
• #1171: Recognise virtualenvs
• #1479: test_extension failing in Windows
• #1633: Fix installing extension from local file on Windows
• #1644: Update copyright date to 2012
• #1636: Test_deepreload breaks pylab irunner tests
• #1645: Exclude UserDict when deep reloading NumPy.
• #1454: make it possible to start engine in ‘disabled’ mode and ‘enable’ later
• #1641: Escape code for the current time in PromptManager
• #1638: ipython console clobbers custom sys.path
• #1637: Removed a ‘:’ which shouldn’t have been there
• #1536: ipython 0.12 embed shell won’t run startup scripts
• #1628: error: QApplication already exists in TestKillRing
• #1631: TST: QApplication doesn’t quit early enough with PySide.
• #1629: evaluate a few dangling validate_message generators
• #1621: clear In[] prompt numbers on “Clear All Output”
• #1627: Test the Message Spec

2.18. Issues closed in the 0.13 development cycle 205


IPython Documentation, Release 7.1.0.dev

• #1470: SyntaxError on setup.py install with Python 3


• #1624: Fixes for byte-compilation on Python 3
• #1612: pylab=inline fig.show() non-existent in notebook
• #1615: Add show() method to figure objects.
• #1622: deepreload fails on Python 3
• #1625: Fix deepreload on Python 3
• #1626: Failure in new dreload tests under Python 3.2
• #1623: IPython / matplotlib Memory error with imshow
• #1619: pyin messages should have execution_count
• #1620: pyin message now have execution_count
• #32: dreload produces spurious traceback when numpy is involved
• #1457: Update deepreload to use a rewritten knee.py. Fixes dreload(numpy).
• #1613: allow map / parallel function for single-engine views
• #1609: exit notebook cleanly on SIGINT, SIGTERM
• #1531: Function keyword completion fails if cursor is in the middle of the complete parentheses
• #1607: cleanup sqlitedb temporary db file after tests
• #1608: don’t rely on timedelta.total_seconds in AsyncResult
• #1421: ipython32 %run -d breaks with NameError name ‘execfile’ is not defined
• #1599: Fix for %run -d on Python 3
• #1201: %env magic fails with Python 3.2
• #1602: Fix %env magic on Python 3.
• #1603: Remove python3 profile
• #1604: Exclude IPython.quarantine from installation
• #1601: Security file is not removed after shutdown by Ctrl+C or kill -INT
• #1600: Specify encoding for io.open in notebook_reformat tests
• #1605: Small fixes for Animation and Progress notebook
• #1452: Bug fix for approval
• #13: Improve robustness and debuggability of test suite
• #70: IPython should prioritize __all__ during tab completion
• #1529: __all__ feature, improvement to dir2, and tests for both
• #1475: Custom namespace for %run
• #1564: calling .abort on AsyncMapResult results in traceback
• #1548: add sugar methods/properties to AsyncResult
• #1535: Fix pretty printing dispatch
• #1522: Discussion: some potential Qt console refactoring
• #1399: Use LaTeX to print various built-in types with the SymPy printing extension

206 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #1597: re-enter kernel.eventloop after catching SIGINT


• #1490: rename plaintext cell -> raw cell
• #1487: %notebook fails in qtconsole
• #1545: trailing newline not preserved in splitline ipynb
• #1480: Fix %notebook magic, etc. nbformat unicode tests and fixes
• #1588: Gtk3 integration with ipython works.
• #1595: Examples syntax (avoid errors installing on Python 3)
• #1526: Find encoding for Python files
• #1594: Fix writing git commit ID to a file on build with Python 3
• #1556: shallow-copy DictDB query results
• #1499: various pyflakes issues
• #1502: small changes in response to pyflakes pass
• #1445: Don’t build sphinx docs for sdists
• #1484: unhide .git_commit_info.ini
• #1538: store git commit hash in utils._sysinfo instead of hidden data file
• #1546: attempt to suppress exceptions in channel threads at shutdown
• #1524: unhide git_commit_info.ini
• #1559: update tools/github_stats.py to use GitHub API v3
• #1563: clear_output improvements
• #1558: Ipython testing documentation still mentions twisted and trial
• #1560: remove obsolete discussion of Twisted/trial from testing docs
• #1561: Qtconsole - nonstandard a and b
• #1569: BUG: qtconsole – non-standard handling of a and b. [Fixes #1561]
• #1574: BUG: Ctrl+C crashes wx pylab kernel in qtconsole
• #1573: BUG: Ctrl+C crashes wx pylab kernel in qtconsole.
• #1590: ‘IPython3 qtconsole’ doesn’t work in Windows 7
• #602: User test the html notebook
• #613: Implement Namespace panel section
• #879: How to handle Javascript output in the notebook
• #1255: figure.show() raises an error with the inline backend
• #1467: Document or bundle a git-integrated facility for stripping VCS-unfriendly binary data
• #1237: Kernel status and logout button overlap
• #1319: Running a cell with ctrl+Enter selects text in cell
• #1571: module member autocomplete should respect __all__
• #1566: ipython3 doesn’t run in Win7 with Python 3.2
• #1568: fix PR #1567

2.18. Issues closed in the 0.13 development cycle 207


IPython Documentation, Release 7.1.0.dev

• #1567: Fix: openssh_tunnel did not parse port in server


• #1565: fix AsyncResult.abort
• #1550: Crash when starting notebook in a non-ascii path
• #1552: use os.getcwdu in NotebookManager
• #1554: wrong behavior of the all function on iterators
• #1541: display_pub flushes stdout/err
• #1539: Asynchrous issue when using clear_display and print x,y,z
• #1544: make MultiKernelManager.kernel_manager_class configurable
• #1494: Untrusted Secure Websocket broken on latest chrome dev
• #1521: only install ipython-qtconsole gui script on Windows
• #1528: Tab completion optionally respects __all__ (+ dir2() cleanup)
• #1527: Making a progress bar work in IPython Notebook
• #1497: __all__ functionality added to dir2(obj)
• #1518: Pretty printing exceptions is broken
• #811: Fixes for ipython unhandeled OSError exception on failure of os.getcwdu()
• #1517: Fix indentation bug in IPython/lib/pretty.py
• #1519: BUG: Include the name of the exception type in its pretty format.
• #1525: A hack for auto-complete numpy recarray
• #1489: Fix zero-copy push
• #1401: numpy arrays cannot be used with View.apply() in Python 3
• #1477: fix dangling buffer in IPython.parallel.util
• #1514: DOC: Fix references to IPython.lib.pretty instead of the old location
• #1511: Version comparison error ( ‘2.1.11’ < ‘2.1.4’ ==> True)
• #1506: “Fixing” the Notebook scroll to help in visually comparing outputs
• #1481: BUG: Improve placement of CallTipWidget
• #1241: When our debugger class is used standalone _oh key errors are thrown
• #676: IPython.embed() from ipython crashes twice on exit
• #1496: BUG: LBYL when clearing the output history on shutdown.
• #1507: python3 notebook: TypeError: unorderable types
• #1508: fix sorting profiles in clustermanager
• #1495: BUG: Fix pretty-printing for overzealous objects
• #1505: SQLite objects created in a thread can only be used in that same thread
• #1482: %history documentation out of date?
• #1501: dreload doesn’t seem to exclude numpy
• #1472: more general fix for #662
• #1486: save state of qtconsole

208 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #1485: add history search to qtconsole


• #1483: updated magic_history docstring
• #1383: First version of cluster web service.
• #482: test_run.test_tclass fails on Windows
• #1398: fix %tb after SyntaxError
• #1478: key function or lambda in sorted function doesn’t find global variables
• #1415: handle exit/quit/exit()/quit() variants in zmqconsole
• #1440: Fix for failing testsuite when using –with-xml-coverage on windows.
• #1419: Add %install_ext magic function.
• #1424: Win32 shell interactivity
• #1434: Controller should schedule tasks of multiple clients at the same time
• #1268: notebook %reset magic fails with StdinNotImplementedError
• #1438: from cherrypy import expose fails when running script form parent directory
• #1468: Simplify structure of a Job in the TaskScheduler
• #875: never build unicode error messages
• #1107: Tab autocompletion can suggest invalid syntax
• #1447: 1107 - Tab autocompletion can suggest invalid syntax
• #1469: Fix typo in comment (insert space)
• #1463: Fix completion when importing modules in the cwd.
• #1437: unfriendly error handling with pythonw and ipython-qtconsole
• #1466: Fix for issue #1437, unfriendly windows qtconsole error handling
• #1432: Fix ipython directive
• #1465: allow ipython help subcommand syntax
• #1394: Wishlist: Remove hard dependency on ctypes
• #1416: Conditional import of ctypes in inputhook
• #1462: expedite parallel tests
• #1418: Strict mode in javascript
• #1410: Add javascript library and css stylesheet loading to JS class.
• #1427: #922 again
• #1448: Fix for #875 Never build unicode error messages
• #1458: use eval to uncan References
• #1455: Python3 install fails
• #1450: load mathjax from CDN via https
• #1182: Qtconsole, multiwindow
• #1439: Notebook not storing heading celltype information
• #1451: include heading level in JSON

2.18. Issues closed in the 0.13 development cycle 209


IPython Documentation, Release 7.1.0.dev

• #1444: Fix pyhton -> python typos


• #1412: Input parsing issue with %prun
• #1414: ignore errors in shell.var_expand
• #1441: (1) Enable IPython.notebook.kernel.execute to publish display_* even it is not called with a code cell
and (2) remove empty html element when execute “display_*”
• #1431: Beginner Error: ipython qtconsole
• #1436: “ipython-qtconsole –gui qt” hangs on 64-bit win7
• #1433: websocket connection fails on Chrome
• #1430: Fix for tornado check for tornado < 1.1.0
• #1408: test_get_home_dir_3 failed on Mac OS X
• #1413: get_home_dir expands symlinks, adjust test accordingly
• #1420: fixes #922
• #823: KnownFailure tests appearing as errors
• #1385: updated and prettified magic doc strings
• #1406: Browser selection
• #1411: ipcluster starts 8 engines “successfully” but Client only finds two
• #1375: %history -g -f file encoding issue
• #1377: Saving non-ascii history
• #797: Source introspection needs to be smarter in python 3.2
• #846: Autoreload extension doesn’t work with Python 3.2
• #1360: IPython notebook not starting on winXP
• #1407: Qtconsole segfaults on OSX when displaying some pop-up function tooltips
• #1402: fix symlinked /home issue for FreeBSD
• #1403: pyreadline cyclic dependency with pdb++/pdbpp module
• #1405: Only monkeypatch xunit when the tests are run using it.
• #1404: Feature Request: List/Dictionary tab completion
• #1395: Xunit & KnownFailure
• #1396: Fix for %tb magic.
• #1397: Stay or leave message not working, Safari session lost.
• #1389: pylab=inline inoperant through ssh tunnelling?
• #1386: Jsd3
• #1388: Add simple support for running inside a virtualenv
• #826: Add support for creation of parallel task when no engine is running
• #1391: Improve Hub/Scheduler when no engines are registered
• #1369: load header with engine id when engine dies in TaskScheduler
• #1345: notebook can’t save unicode as script

210 Chapter 2. What’s new in IPython


IPython Documentation, Release 7.1.0.dev

• #1353: Save notebook as script using unicode file handle.


• #1352: Add ‘-m mod : run library module as a script’ option.
• #1363: Fix some minor color/style config issues in the qtconsole
• #1371: Adds a quiet keyword to sync_imports
• #1390: Blank screen for notebooks on Safari
• #1387: Fixing Cell menu to update cell type select box.
• #645: Standalone WX GUI support is broken
• #1296: Wx gui example: fixes the broken example for %gui wx.
• #1254: typo in notebooklist.js breaks links
• #781: Users should be able to clone a notebook
• #1372: ipcontroller cleans up connection files unless reuse=True
• #1374: remove calls to meaningless ZMQStream.on_err
• #1382: Update RO for Notebook
• #1370: allow draft76 websockets (Safari)
• #1368: Ensure handler patterns are str, not unicode
• #1379: Sage link on website homepage broken
• #1376: FWIW does not work with Chrome 16.0.912.77 Ubuntu 10.10
• #1358: Cannot install ipython on Windows 7 64-bit
• #1367: Ctrl - m t does not toggle output in chrome
• #1359: [sympyprinting] MathJax can’t render root{m}{n}
• #1337: Tab in the notebook after ( should not indent, only give a tooltip
• #1339: Notebook printing broken
• #1344: Ctrl + M + L does not toggle line numbering in htmlnotebook
• #1348: Ctrl + M + M does not switch to markdown cell
• #1361: Notebook bug fix branch
• #1364: avoid jsonlib returning Decimal
• #1362: Don’t log complete contents of history replies, even in debug
• #888: ReST support in notebooks
• #1205: notebook stores HTML escaped text in the file
• #1351: add IPython.embed_kernel()
• #1243: magic commands without % are not completed properly in htmlnotebook
• #1347: fix weird magic completion in notebook
• #1355: notebook.html extends layout.html now
• #1354: min and max in the notebook
• #1346: fixups for alternate URL prefix stuff
• #1336: crack at making notebook.html use the layout.html template

2.18. Issues closed in the 0.13 development cycle 211


IPython Documentation, Release 7.1.0.dev

• #1331: RST and heading cells


• #1350: Add ‘-m mod : run library module as a script’ option
• #1247: fixes a bug causing extra newlines after comments.
• #1329: add base_url to notebook configuration options
• #1332: notebook - allow prefixes in URL path.
• #1317: Very slow traceback construction from Cython extension
• #1341: Don’t attempt to tokenize binary files for tracebacks
• #1300: Cell Input collapse
• #1334: added key handler for control-s to notebook, seems to work pretty well
• #1338: Fix see also in docstrings so API docs build
• #1335: Notebook toolbar UI
• #1299: made notebook.html extend layout.html
• #1318: make Ctrl-D