##// END OF EJS Templates
Fix some broken links in the docs
Thomas Kluyver -
Show More
@@ -1,611 +1,612 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 Pdb debugger class.
3 Pdb debugger class.
4
4
5 Modified from the standard pdb.Pdb class to avoid including readline, so that
5 Modified from the standard pdb.Pdb class to avoid including readline, so that
6 the command line completion of other programs which include this isn't
6 the command line completion of other programs which include this isn't
7 damaged.
7 damaged.
8
8
9 In the future, this class will be expanded with improvements over the standard
9 In the future, this class will be expanded with improvements over the standard
10 pdb.
10 pdb.
11
11
12 The code in this file is mainly lifted out of cmd.py in Python 2.2, with minor
12 The code in this file is mainly lifted out of cmd.py in Python 2.2, with minor
13 changes. Licensing should therefore be under the standard Python terms. For
13 changes. Licensing should therefore be under the standard Python terms. For
14 details on the PSF (Python Software Foundation) standard license, see:
14 details on the PSF (Python Software Foundation) standard license, see:
15
15
16 http://www.python.org/2.2.3/license.html"""
16 https://docs.python.org/2/license.html
17 """
17
18
18 #*****************************************************************************
19 #*****************************************************************************
19 #
20 #
20 # This file is licensed under the PSF license.
21 # This file is licensed under the PSF license.
21 #
22 #
22 # Copyright (C) 2001 Python Software Foundation, www.python.org
23 # Copyright (C) 2001 Python Software Foundation, www.python.org
23 # Copyright (C) 2005-2006 Fernando Perez. <fperez@colorado.edu>
24 # Copyright (C) 2005-2006 Fernando Perez. <fperez@colorado.edu>
24 #
25 #
25 #
26 #
26 #*****************************************************************************
27 #*****************************************************************************
27
28
28 import bdb
29 import bdb
29 import functools
30 import functools
30 import inspect
31 import inspect
31 import linecache
32 import linecache
32 import sys
33 import sys
33 import warnings
34 import warnings
34
35
35 from IPython import get_ipython
36 from IPython import get_ipython
36 from IPython.utils import PyColorize
37 from IPython.utils import PyColorize
37 from IPython.utils import coloransi, py3compat
38 from IPython.utils import coloransi, py3compat
38 from IPython.core.excolors import exception_colors
39 from IPython.core.excolors import exception_colors
39 from IPython.testing.skipdoctest import skip_doctest
40 from IPython.testing.skipdoctest import skip_doctest
40
41
41
42
42 prompt = 'ipdb> '
43 prompt = 'ipdb> '
43
44
44 #We have to check this directly from sys.argv, config struct not yet available
45 #We have to check this directly from sys.argv, config struct not yet available
45 from pdb import Pdb as OldPdb
46 from pdb import Pdb as OldPdb
46
47
47 # Allow the set_trace code to operate outside of an ipython instance, even if
48 # Allow the set_trace code to operate outside of an ipython instance, even if
48 # it does so with some limitations. The rest of this support is implemented in
49 # it does so with some limitations. The rest of this support is implemented in
49 # the Tracer constructor.
50 # the Tracer constructor.
50
51
51 def make_arrow(pad):
52 def make_arrow(pad):
52 """generate the leading arrow in front of traceback or debugger"""
53 """generate the leading arrow in front of traceback or debugger"""
53 if pad >= 2:
54 if pad >= 2:
54 return '-'*(pad-2) + '> '
55 return '-'*(pad-2) + '> '
55 elif pad == 1:
56 elif pad == 1:
56 return '>'
57 return '>'
57 return ''
58 return ''
58
59
59
60
60 def BdbQuit_excepthook(et, ev, tb, excepthook=None):
61 def BdbQuit_excepthook(et, ev, tb, excepthook=None):
61 """Exception hook which handles `BdbQuit` exceptions.
62 """Exception hook which handles `BdbQuit` exceptions.
62
63
63 All other exceptions are processed using the `excepthook`
64 All other exceptions are processed using the `excepthook`
64 parameter.
65 parameter.
65 """
66 """
66 warnings.warn("`BdbQuit_excepthook` is deprecated since version 5.1",
67 warnings.warn("`BdbQuit_excepthook` is deprecated since version 5.1",
67 DeprecationWarning, stacklevel=2)
68 DeprecationWarning, stacklevel=2)
68 if et==bdb.BdbQuit:
69 if et==bdb.BdbQuit:
69 print('Exiting Debugger.')
70 print('Exiting Debugger.')
70 elif excepthook is not None:
71 elif excepthook is not None:
71 excepthook(et, ev, tb)
72 excepthook(et, ev, tb)
72 else:
73 else:
73 # Backwards compatibility. Raise deprecation warning?
74 # Backwards compatibility. Raise deprecation warning?
74 BdbQuit_excepthook.excepthook_ori(et,ev,tb)
75 BdbQuit_excepthook.excepthook_ori(et,ev,tb)
75
76
76
77
77 def BdbQuit_IPython_excepthook(self,et,ev,tb,tb_offset=None):
78 def BdbQuit_IPython_excepthook(self,et,ev,tb,tb_offset=None):
78 warnings.warn(
79 warnings.warn(
79 "`BdbQuit_IPython_excepthook` is deprecated since version 5.1",
80 "`BdbQuit_IPython_excepthook` is deprecated since version 5.1",
80 DeprecationWarning, stacklevel=2)
81 DeprecationWarning, stacklevel=2)
81 print('Exiting Debugger.')
82 print('Exiting Debugger.')
82
83
83
84
84 class Tracer(object):
85 class Tracer(object):
85 """
86 """
86 DEPRECATED
87 DEPRECATED
87
88
88 Class for local debugging, similar to pdb.set_trace.
89 Class for local debugging, similar to pdb.set_trace.
89
90
90 Instances of this class, when called, behave like pdb.set_trace, but
91 Instances of this class, when called, behave like pdb.set_trace, but
91 providing IPython's enhanced capabilities.
92 providing IPython's enhanced capabilities.
92
93
93 This is implemented as a class which must be initialized in your own code
94 This is implemented as a class which must be initialized in your own code
94 and not as a standalone function because we need to detect at runtime
95 and not as a standalone function because we need to detect at runtime
95 whether IPython is already active or not. That detection is done in the
96 whether IPython is already active or not. That detection is done in the
96 constructor, ensuring that this code plays nicely with a running IPython,
97 constructor, ensuring that this code plays nicely with a running IPython,
97 while functioning acceptably (though with limitations) if outside of it.
98 while functioning acceptably (though with limitations) if outside of it.
98 """
99 """
99
100
100 @skip_doctest
101 @skip_doctest
101 def __init__(self, colors=None):
102 def __init__(self, colors=None):
102 """
103 """
103 DEPRECATED
104 DEPRECATED
104
105
105 Create a local debugger instance.
106 Create a local debugger instance.
106
107
107 Parameters
108 Parameters
108 ----------
109 ----------
109
110
110 colors : str, optional
111 colors : str, optional
111 The name of the color scheme to use, it must be one of IPython's
112 The name of the color scheme to use, it must be one of IPython's
112 valid color schemes. If not given, the function will default to
113 valid color schemes. If not given, the function will default to
113 the current IPython scheme when running inside IPython, and to
114 the current IPython scheme when running inside IPython, and to
114 'NoColor' otherwise.
115 'NoColor' otherwise.
115
116
116 Examples
117 Examples
117 --------
118 --------
118 ::
119 ::
119
120
120 from IPython.core.debugger import Tracer; debug_here = Tracer()
121 from IPython.core.debugger import Tracer; debug_here = Tracer()
121
122
122 Later in your code::
123 Later in your code::
123
124
124 debug_here() # -> will open up the debugger at that point.
125 debug_here() # -> will open up the debugger at that point.
125
126
126 Once the debugger activates, you can use all of its regular commands to
127 Once the debugger activates, you can use all of its regular commands to
127 step through code, set breakpoints, etc. See the pdb documentation
128 step through code, set breakpoints, etc. See the pdb documentation
128 from the Python standard library for usage details.
129 from the Python standard library for usage details.
129 """
130 """
130 warnings.warn("`Tracer` is deprecated since version 5.1, directly use "
131 warnings.warn("`Tracer` is deprecated since version 5.1, directly use "
131 "`IPython.core.debugger.Pdb.set_trace()`",
132 "`IPython.core.debugger.Pdb.set_trace()`",
132 DeprecationWarning, stacklevel=2)
133 DeprecationWarning, stacklevel=2)
133
134
134 ip = get_ipython()
135 ip = get_ipython()
135 if ip is None:
136 if ip is None:
136 # Outside of ipython, we set our own exception hook manually
137 # Outside of ipython, we set our own exception hook manually
137 sys.excepthook = functools.partial(BdbQuit_excepthook,
138 sys.excepthook = functools.partial(BdbQuit_excepthook,
138 excepthook=sys.excepthook)
139 excepthook=sys.excepthook)
139 def_colors = 'NoColor'
140 def_colors = 'NoColor'
140 else:
141 else:
141 # In ipython, we use its custom exception handler mechanism
142 # In ipython, we use its custom exception handler mechanism
142 def_colors = ip.colors
143 def_colors = ip.colors
143 ip.set_custom_exc((bdb.BdbQuit,), BdbQuit_IPython_excepthook)
144 ip.set_custom_exc((bdb.BdbQuit,), BdbQuit_IPython_excepthook)
144
145
145 if colors is None:
146 if colors is None:
146 colors = def_colors
147 colors = def_colors
147
148
148 # The stdlib debugger internally uses a modified repr from the `repr`
149 # The stdlib debugger internally uses a modified repr from the `repr`
149 # module, that limits the length of printed strings to a hardcoded
150 # module, that limits the length of printed strings to a hardcoded
150 # limit of 30 characters. That much trimming is too aggressive, let's
151 # limit of 30 characters. That much trimming is too aggressive, let's
151 # at least raise that limit to 80 chars, which should be enough for
152 # at least raise that limit to 80 chars, which should be enough for
152 # most interactive uses.
153 # most interactive uses.
153 try:
154 try:
154 try:
155 try:
155 from reprlib import aRepr # Py 3
156 from reprlib import aRepr # Py 3
156 except ImportError:
157 except ImportError:
157 from repr import aRepr # Py 2
158 from repr import aRepr # Py 2
158 aRepr.maxstring = 80
159 aRepr.maxstring = 80
159 except:
160 except:
160 # This is only a user-facing convenience, so any error we encounter
161 # This is only a user-facing convenience, so any error we encounter
161 # here can be warned about but can be otherwise ignored. These
162 # here can be warned about but can be otherwise ignored. These
162 # printouts will tell us about problems if this API changes
163 # printouts will tell us about problems if this API changes
163 import traceback
164 import traceback
164 traceback.print_exc()
165 traceback.print_exc()
165
166
166 self.debugger = Pdb(colors)
167 self.debugger = Pdb(colors)
167
168
168 def __call__(self):
169 def __call__(self):
169 """Starts an interactive debugger at the point where called.
170 """Starts an interactive debugger at the point where called.
170
171
171 This is similar to the pdb.set_trace() function from the std lib, but
172 This is similar to the pdb.set_trace() function from the std lib, but
172 using IPython's enhanced debugger."""
173 using IPython's enhanced debugger."""
173
174
174 self.debugger.set_trace(sys._getframe().f_back)
175 self.debugger.set_trace(sys._getframe().f_back)
175
176
176
177
177 def decorate_fn_with_doc(new_fn, old_fn, additional_text=""):
178 def decorate_fn_with_doc(new_fn, old_fn, additional_text=""):
178 """Make new_fn have old_fn's doc string. This is particularly useful
179 """Make new_fn have old_fn's doc string. This is particularly useful
179 for the ``do_...`` commands that hook into the help system.
180 for the ``do_...`` commands that hook into the help system.
180 Adapted from from a comp.lang.python posting
181 Adapted from from a comp.lang.python posting
181 by Duncan Booth."""
182 by Duncan Booth."""
182 def wrapper(*args, **kw):
183 def wrapper(*args, **kw):
183 return new_fn(*args, **kw)
184 return new_fn(*args, **kw)
184 if old_fn.__doc__:
185 if old_fn.__doc__:
185 wrapper.__doc__ = old_fn.__doc__ + additional_text
186 wrapper.__doc__ = old_fn.__doc__ + additional_text
186 return wrapper
187 return wrapper
187
188
188
189
189 def _file_lines(fname):
190 def _file_lines(fname):
190 """Return the contents of a named file as a list of lines.
191 """Return the contents of a named file as a list of lines.
191
192
192 This function never raises an IOError exception: if the file can't be
193 This function never raises an IOError exception: if the file can't be
193 read, it simply returns an empty list."""
194 read, it simply returns an empty list."""
194
195
195 try:
196 try:
196 outfile = open(fname)
197 outfile = open(fname)
197 except IOError:
198 except IOError:
198 return []
199 return []
199 else:
200 else:
200 out = outfile.readlines()
201 out = outfile.readlines()
201 outfile.close()
202 outfile.close()
202 return out
203 return out
203
204
204
205
205 class Pdb(OldPdb):
206 class Pdb(OldPdb):
206 """Modified Pdb class, does not load readline.
207 """Modified Pdb class, does not load readline.
207
208
208 for a standalone version that uses prompt_toolkit, see
209 for a standalone version that uses prompt_toolkit, see
209 `IPython.terminal.debugger.TerminalPdb` and
210 `IPython.terminal.debugger.TerminalPdb` and
210 `IPython.terminal.debugger.set_trace()`
211 `IPython.terminal.debugger.set_trace()`
211 """
212 """
212
213
213 def __init__(self, color_scheme=None, completekey=None,
214 def __init__(self, color_scheme=None, completekey=None,
214 stdin=None, stdout=None, context=5):
215 stdin=None, stdout=None, context=5):
215
216
216 # Parent constructor:
217 # Parent constructor:
217 try:
218 try:
218 self.context = int(context)
219 self.context = int(context)
219 if self.context <= 0:
220 if self.context <= 0:
220 raise ValueError("Context must be a positive integer")
221 raise ValueError("Context must be a positive integer")
221 except (TypeError, ValueError):
222 except (TypeError, ValueError):
222 raise ValueError("Context must be a positive integer")
223 raise ValueError("Context must be a positive integer")
223
224
224 OldPdb.__init__(self, completekey, stdin, stdout)
225 OldPdb.__init__(self, completekey, stdin, stdout)
225
226
226 # IPython changes...
227 # IPython changes...
227 self.shell = get_ipython()
228 self.shell = get_ipython()
228
229
229 if self.shell is None:
230 if self.shell is None:
230 save_main = sys.modules['__main__']
231 save_main = sys.modules['__main__']
231 # No IPython instance running, we must create one
232 # No IPython instance running, we must create one
232 from IPython.terminal.interactiveshell import \
233 from IPython.terminal.interactiveshell import \
233 TerminalInteractiveShell
234 TerminalInteractiveShell
234 self.shell = TerminalInteractiveShell.instance()
235 self.shell = TerminalInteractiveShell.instance()
235 # needed by any code which calls __import__("__main__") after
236 # needed by any code which calls __import__("__main__") after
236 # the debugger was entered. See also #9941.
237 # the debugger was entered. See also #9941.
237 sys.modules['__main__'] = save_main
238 sys.modules['__main__'] = save_main
238
239
239 if color_scheme is not None:
240 if color_scheme is not None:
240 warnings.warn(
241 warnings.warn(
241 "The `color_scheme` argument is deprecated since version 5.1",
242 "The `color_scheme` argument is deprecated since version 5.1",
242 DeprecationWarning, stacklevel=2)
243 DeprecationWarning, stacklevel=2)
243 else:
244 else:
244 color_scheme = self.shell.colors
245 color_scheme = self.shell.colors
245
246
246 self.aliases = {}
247 self.aliases = {}
247
248
248 # Create color table: we copy the default one from the traceback
249 # Create color table: we copy the default one from the traceback
249 # module and add a few attributes needed for debugging
250 # module and add a few attributes needed for debugging
250 self.color_scheme_table = exception_colors()
251 self.color_scheme_table = exception_colors()
251
252
252 # shorthands
253 # shorthands
253 C = coloransi.TermColors
254 C = coloransi.TermColors
254 cst = self.color_scheme_table
255 cst = self.color_scheme_table
255
256
256 cst['NoColor'].colors.prompt = C.NoColor
257 cst['NoColor'].colors.prompt = C.NoColor
257 cst['NoColor'].colors.breakpoint_enabled = C.NoColor
258 cst['NoColor'].colors.breakpoint_enabled = C.NoColor
258 cst['NoColor'].colors.breakpoint_disabled = C.NoColor
259 cst['NoColor'].colors.breakpoint_disabled = C.NoColor
259
260
260 cst['Linux'].colors.prompt = C.Green
261 cst['Linux'].colors.prompt = C.Green
261 cst['Linux'].colors.breakpoint_enabled = C.LightRed
262 cst['Linux'].colors.breakpoint_enabled = C.LightRed
262 cst['Linux'].colors.breakpoint_disabled = C.Red
263 cst['Linux'].colors.breakpoint_disabled = C.Red
263
264
264 cst['LightBG'].colors.prompt = C.Blue
265 cst['LightBG'].colors.prompt = C.Blue
265 cst['LightBG'].colors.breakpoint_enabled = C.LightRed
266 cst['LightBG'].colors.breakpoint_enabled = C.LightRed
266 cst['LightBG'].colors.breakpoint_disabled = C.Red
267 cst['LightBG'].colors.breakpoint_disabled = C.Red
267
268
268 cst['Neutral'].colors.prompt = C.Blue
269 cst['Neutral'].colors.prompt = C.Blue
269 cst['Neutral'].colors.breakpoint_enabled = C.LightRed
270 cst['Neutral'].colors.breakpoint_enabled = C.LightRed
270 cst['Neutral'].colors.breakpoint_disabled = C.Red
271 cst['Neutral'].colors.breakpoint_disabled = C.Red
271
272
272
273
273 # Add a python parser so we can syntax highlight source while
274 # Add a python parser so we can syntax highlight source while
274 # debugging.
275 # debugging.
275 self.parser = PyColorize.Parser(style=color_scheme)
276 self.parser = PyColorize.Parser(style=color_scheme)
276 self.set_colors(color_scheme)
277 self.set_colors(color_scheme)
277
278
278 # Set the prompt - the default prompt is '(Pdb)'
279 # Set the prompt - the default prompt is '(Pdb)'
279 self.prompt = prompt
280 self.prompt = prompt
280
281
281 def set_colors(self, scheme):
282 def set_colors(self, scheme):
282 """Shorthand access to the color table scheme selector method."""
283 """Shorthand access to the color table scheme selector method."""
283 self.color_scheme_table.set_active_scheme(scheme)
284 self.color_scheme_table.set_active_scheme(scheme)
284 self.parser.style = scheme
285 self.parser.style = scheme
285
286
286 def interaction(self, frame, traceback):
287 def interaction(self, frame, traceback):
287 try:
288 try:
288 OldPdb.interaction(self, frame, traceback)
289 OldPdb.interaction(self, frame, traceback)
289 except KeyboardInterrupt:
290 except KeyboardInterrupt:
290 sys.stdout.write('\n' + self.shell.get_exception_only())
291 sys.stdout.write('\n' + self.shell.get_exception_only())
291
292
292 def new_do_up(self, arg):
293 def new_do_up(self, arg):
293 OldPdb.do_up(self, arg)
294 OldPdb.do_up(self, arg)
294 do_u = do_up = decorate_fn_with_doc(new_do_up, OldPdb.do_up)
295 do_u = do_up = decorate_fn_with_doc(new_do_up, OldPdb.do_up)
295
296
296 def new_do_down(self, arg):
297 def new_do_down(self, arg):
297 OldPdb.do_down(self, arg)
298 OldPdb.do_down(self, arg)
298
299
299 do_d = do_down = decorate_fn_with_doc(new_do_down, OldPdb.do_down)
300 do_d = do_down = decorate_fn_with_doc(new_do_down, OldPdb.do_down)
300
301
301 def new_do_frame(self, arg):
302 def new_do_frame(self, arg):
302 OldPdb.do_frame(self, arg)
303 OldPdb.do_frame(self, arg)
303
304
304 def new_do_quit(self, arg):
305 def new_do_quit(self, arg):
305
306
306 if hasattr(self, 'old_all_completions'):
307 if hasattr(self, 'old_all_completions'):
307 self.shell.Completer.all_completions=self.old_all_completions
308 self.shell.Completer.all_completions=self.old_all_completions
308
309
309 return OldPdb.do_quit(self, arg)
310 return OldPdb.do_quit(self, arg)
310
311
311 do_q = do_quit = decorate_fn_with_doc(new_do_quit, OldPdb.do_quit)
312 do_q = do_quit = decorate_fn_with_doc(new_do_quit, OldPdb.do_quit)
312
313
313 def new_do_restart(self, arg):
314 def new_do_restart(self, arg):
314 """Restart command. In the context of ipython this is exactly the same
315 """Restart command. In the context of ipython this is exactly the same
315 thing as 'quit'."""
316 thing as 'quit'."""
316 self.msg("Restart doesn't make sense here. Using 'quit' instead.")
317 self.msg("Restart doesn't make sense here. Using 'quit' instead.")
317 return self.do_quit(arg)
318 return self.do_quit(arg)
318
319
319 def print_stack_trace(self, context=None):
320 def print_stack_trace(self, context=None):
320 if context is None:
321 if context is None:
321 context = self.context
322 context = self.context
322 try:
323 try:
323 context=int(context)
324 context=int(context)
324 if context <= 0:
325 if context <= 0:
325 raise ValueError("Context must be a positive integer")
326 raise ValueError("Context must be a positive integer")
326 except (TypeError, ValueError):
327 except (TypeError, ValueError):
327 raise ValueError("Context must be a positive integer")
328 raise ValueError("Context must be a positive integer")
328 try:
329 try:
329 for frame_lineno in self.stack:
330 for frame_lineno in self.stack:
330 self.print_stack_entry(frame_lineno, context=context)
331 self.print_stack_entry(frame_lineno, context=context)
331 except KeyboardInterrupt:
332 except KeyboardInterrupt:
332 pass
333 pass
333
334
334 def print_stack_entry(self,frame_lineno, prompt_prefix='\n-> ',
335 def print_stack_entry(self,frame_lineno, prompt_prefix='\n-> ',
335 context=None):
336 context=None):
336 if context is None:
337 if context is None:
337 context = self.context
338 context = self.context
338 try:
339 try:
339 context=int(context)
340 context=int(context)
340 if context <= 0:
341 if context <= 0:
341 raise ValueError("Context must be a positive integer")
342 raise ValueError("Context must be a positive integer")
342 except (TypeError, ValueError):
343 except (TypeError, ValueError):
343 raise ValueError("Context must be a positive integer")
344 raise ValueError("Context must be a positive integer")
344 print(self.format_stack_entry(frame_lineno, '', context))
345 print(self.format_stack_entry(frame_lineno, '', context))
345
346
346 # vds: >>
347 # vds: >>
347 frame, lineno = frame_lineno
348 frame, lineno = frame_lineno
348 filename = frame.f_code.co_filename
349 filename = frame.f_code.co_filename
349 self.shell.hooks.synchronize_with_editor(filename, lineno, 0)
350 self.shell.hooks.synchronize_with_editor(filename, lineno, 0)
350 # vds: <<
351 # vds: <<
351
352
352 def format_stack_entry(self, frame_lineno, lprefix=': ', context=None):
353 def format_stack_entry(self, frame_lineno, lprefix=': ', context=None):
353 if context is None:
354 if context is None:
354 context = self.context
355 context = self.context
355 try:
356 try:
356 context=int(context)
357 context=int(context)
357 if context <= 0:
358 if context <= 0:
358 print("Context must be a positive integer")
359 print("Context must be a positive integer")
359 except (TypeError, ValueError):
360 except (TypeError, ValueError):
360 print("Context must be a positive integer")
361 print("Context must be a positive integer")
361 try:
362 try:
362 import reprlib # Py 3
363 import reprlib # Py 3
363 except ImportError:
364 except ImportError:
364 import repr as reprlib # Py 2
365 import repr as reprlib # Py 2
365
366
366 ret = []
367 ret = []
367
368
368 Colors = self.color_scheme_table.active_colors
369 Colors = self.color_scheme_table.active_colors
369 ColorsNormal = Colors.Normal
370 ColorsNormal = Colors.Normal
370 tpl_link = u'%s%%s%s' % (Colors.filenameEm, ColorsNormal)
371 tpl_link = u'%s%%s%s' % (Colors.filenameEm, ColorsNormal)
371 tpl_call = u'%s%%s%s%%s%s' % (Colors.vName, Colors.valEm, ColorsNormal)
372 tpl_call = u'%s%%s%s%%s%s' % (Colors.vName, Colors.valEm, ColorsNormal)
372 tpl_line = u'%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
373 tpl_line = u'%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
373 tpl_line_em = u'%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line,
374 tpl_line_em = u'%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line,
374 ColorsNormal)
375 ColorsNormal)
375
376
376 frame, lineno = frame_lineno
377 frame, lineno = frame_lineno
377
378
378 return_value = ''
379 return_value = ''
379 if '__return__' in frame.f_locals:
380 if '__return__' in frame.f_locals:
380 rv = frame.f_locals['__return__']
381 rv = frame.f_locals['__return__']
381 #return_value += '->'
382 #return_value += '->'
382 return_value += reprlib.repr(rv) + '\n'
383 return_value += reprlib.repr(rv) + '\n'
383 ret.append(return_value)
384 ret.append(return_value)
384
385
385 #s = filename + '(' + `lineno` + ')'
386 #s = filename + '(' + `lineno` + ')'
386 filename = self.canonic(frame.f_code.co_filename)
387 filename = self.canonic(frame.f_code.co_filename)
387 link = tpl_link % py3compat.cast_unicode(filename)
388 link = tpl_link % py3compat.cast_unicode(filename)
388
389
389 if frame.f_code.co_name:
390 if frame.f_code.co_name:
390 func = frame.f_code.co_name
391 func = frame.f_code.co_name
391 else:
392 else:
392 func = "<lambda>"
393 func = "<lambda>"
393
394
394 call = ''
395 call = ''
395 if func != '?':
396 if func != '?':
396 if '__args__' in frame.f_locals:
397 if '__args__' in frame.f_locals:
397 args = reprlib.repr(frame.f_locals['__args__'])
398 args = reprlib.repr(frame.f_locals['__args__'])
398 else:
399 else:
399 args = '()'
400 args = '()'
400 call = tpl_call % (func, args)
401 call = tpl_call % (func, args)
401
402
402 # The level info should be generated in the same format pdb uses, to
403 # The level info should be generated in the same format pdb uses, to
403 # avoid breaking the pdbtrack functionality of python-mode in *emacs.
404 # avoid breaking the pdbtrack functionality of python-mode in *emacs.
404 if frame is self.curframe:
405 if frame is self.curframe:
405 ret.append('> ')
406 ret.append('> ')
406 else:
407 else:
407 ret.append(' ')
408 ret.append(' ')
408 ret.append(u'%s(%s)%s\n' % (link,lineno,call))
409 ret.append(u'%s(%s)%s\n' % (link,lineno,call))
409
410
410 start = lineno - 1 - context//2
411 start = lineno - 1 - context//2
411 lines = linecache.getlines(filename)
412 lines = linecache.getlines(filename)
412 start = min(start, len(lines) - context)
413 start = min(start, len(lines) - context)
413 start = max(start, 0)
414 start = max(start, 0)
414 lines = lines[start : start + context]
415 lines = lines[start : start + context]
415
416
416 for i,line in enumerate(lines):
417 for i,line in enumerate(lines):
417 show_arrow = (start + 1 + i == lineno)
418 show_arrow = (start + 1 + i == lineno)
418 linetpl = (frame is self.curframe or show_arrow) \
419 linetpl = (frame is self.curframe or show_arrow) \
419 and tpl_line_em \
420 and tpl_line_em \
420 or tpl_line
421 or tpl_line
421 ret.append(self.__format_line(linetpl, filename,
422 ret.append(self.__format_line(linetpl, filename,
422 start + 1 + i, line,
423 start + 1 + i, line,
423 arrow = show_arrow) )
424 arrow = show_arrow) )
424 return ''.join(ret)
425 return ''.join(ret)
425
426
426 def __format_line(self, tpl_line, filename, lineno, line, arrow = False):
427 def __format_line(self, tpl_line, filename, lineno, line, arrow = False):
427 bp_mark = ""
428 bp_mark = ""
428 bp_mark_color = ""
429 bp_mark_color = ""
429
430
430 new_line, err = self.parser.format2(line, 'str')
431 new_line, err = self.parser.format2(line, 'str')
431 if not err:
432 if not err:
432 line = new_line
433 line = new_line
433
434
434 bp = None
435 bp = None
435 if lineno in self.get_file_breaks(filename):
436 if lineno in self.get_file_breaks(filename):
436 bps = self.get_breaks(filename, lineno)
437 bps = self.get_breaks(filename, lineno)
437 bp = bps[-1]
438 bp = bps[-1]
438
439
439 if bp:
440 if bp:
440 Colors = self.color_scheme_table.active_colors
441 Colors = self.color_scheme_table.active_colors
441 bp_mark = str(bp.number)
442 bp_mark = str(bp.number)
442 bp_mark_color = Colors.breakpoint_enabled
443 bp_mark_color = Colors.breakpoint_enabled
443 if not bp.enabled:
444 if not bp.enabled:
444 bp_mark_color = Colors.breakpoint_disabled
445 bp_mark_color = Colors.breakpoint_disabled
445
446
446 numbers_width = 7
447 numbers_width = 7
447 if arrow:
448 if arrow:
448 # This is the line with the error
449 # This is the line with the error
449 pad = numbers_width - len(str(lineno)) - len(bp_mark)
450 pad = numbers_width - len(str(lineno)) - len(bp_mark)
450 num = '%s%s' % (make_arrow(pad), str(lineno))
451 num = '%s%s' % (make_arrow(pad), str(lineno))
451 else:
452 else:
452 num = '%*s' % (numbers_width - len(bp_mark), str(lineno))
453 num = '%*s' % (numbers_width - len(bp_mark), str(lineno))
453
454
454 return tpl_line % (bp_mark_color + bp_mark, num, line)
455 return tpl_line % (bp_mark_color + bp_mark, num, line)
455
456
456
457
457 def print_list_lines(self, filename, first, last):
458 def print_list_lines(self, filename, first, last):
458 """The printing (as opposed to the parsing part of a 'list'
459 """The printing (as opposed to the parsing part of a 'list'
459 command."""
460 command."""
460 try:
461 try:
461 Colors = self.color_scheme_table.active_colors
462 Colors = self.color_scheme_table.active_colors
462 ColorsNormal = Colors.Normal
463 ColorsNormal = Colors.Normal
463 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
464 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
464 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, ColorsNormal)
465 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, ColorsNormal)
465 src = []
466 src = []
466 if filename == "<string>" and hasattr(self, "_exec_filename"):
467 if filename == "<string>" and hasattr(self, "_exec_filename"):
467 filename = self._exec_filename
468 filename = self._exec_filename
468
469
469 for lineno in range(first, last+1):
470 for lineno in range(first, last+1):
470 line = linecache.getline(filename, lineno)
471 line = linecache.getline(filename, lineno)
471 if not line:
472 if not line:
472 break
473 break
473
474
474 if lineno == self.curframe.f_lineno:
475 if lineno == self.curframe.f_lineno:
475 line = self.__format_line(tpl_line_em, filename, lineno, line, arrow = True)
476 line = self.__format_line(tpl_line_em, filename, lineno, line, arrow = True)
476 else:
477 else:
477 line = self.__format_line(tpl_line, filename, lineno, line, arrow = False)
478 line = self.__format_line(tpl_line, filename, lineno, line, arrow = False)
478
479
479 src.append(line)
480 src.append(line)
480 self.lineno = lineno
481 self.lineno = lineno
481
482
482 print(''.join(src))
483 print(''.join(src))
483
484
484 except KeyboardInterrupt:
485 except KeyboardInterrupt:
485 pass
486 pass
486
487
487 def do_list(self, arg):
488 def do_list(self, arg):
488 self.lastcmd = 'list'
489 self.lastcmd = 'list'
489 last = None
490 last = None
490 if arg:
491 if arg:
491 try:
492 try:
492 x = eval(arg, {}, {})
493 x = eval(arg, {}, {})
493 if type(x) == type(()):
494 if type(x) == type(()):
494 first, last = x
495 first, last = x
495 first = int(first)
496 first = int(first)
496 last = int(last)
497 last = int(last)
497 if last < first:
498 if last < first:
498 # Assume it's a count
499 # Assume it's a count
499 last = first + last
500 last = first + last
500 else:
501 else:
501 first = max(1, int(x) - 5)
502 first = max(1, int(x) - 5)
502 except:
503 except:
503 print('*** Error in argument:', repr(arg))
504 print('*** Error in argument:', repr(arg))
504 return
505 return
505 elif self.lineno is None:
506 elif self.lineno is None:
506 first = max(1, self.curframe.f_lineno - 5)
507 first = max(1, self.curframe.f_lineno - 5)
507 else:
508 else:
508 first = self.lineno + 1
509 first = self.lineno + 1
509 if last is None:
510 if last is None:
510 last = first + 10
511 last = first + 10
511 self.print_list_lines(self.curframe.f_code.co_filename, first, last)
512 self.print_list_lines(self.curframe.f_code.co_filename, first, last)
512
513
513 # vds: >>
514 # vds: >>
514 lineno = first
515 lineno = first
515 filename = self.curframe.f_code.co_filename
516 filename = self.curframe.f_code.co_filename
516 self.shell.hooks.synchronize_with_editor(filename, lineno, 0)
517 self.shell.hooks.synchronize_with_editor(filename, lineno, 0)
517 # vds: <<
518 # vds: <<
518
519
519 do_l = do_list
520 do_l = do_list
520
521
521 def getsourcelines(self, obj):
522 def getsourcelines(self, obj):
522 lines, lineno = inspect.findsource(obj)
523 lines, lineno = inspect.findsource(obj)
523 if inspect.isframe(obj) and obj.f_globals is obj.f_locals:
524 if inspect.isframe(obj) and obj.f_globals is obj.f_locals:
524 # must be a module frame: do not try to cut a block out of it
525 # must be a module frame: do not try to cut a block out of it
525 return lines, 1
526 return lines, 1
526 elif inspect.ismodule(obj):
527 elif inspect.ismodule(obj):
527 return lines, 1
528 return lines, 1
528 return inspect.getblock(lines[lineno:]), lineno+1
529 return inspect.getblock(lines[lineno:]), lineno+1
529
530
530 def do_longlist(self, arg):
531 def do_longlist(self, arg):
531 self.lastcmd = 'longlist'
532 self.lastcmd = 'longlist'
532 try:
533 try:
533 lines, lineno = self.getsourcelines(self.curframe)
534 lines, lineno = self.getsourcelines(self.curframe)
534 except OSError as err:
535 except OSError as err:
535 self.error(err)
536 self.error(err)
536 return
537 return
537 last = lineno + len(lines)
538 last = lineno + len(lines)
538 self.print_list_lines(self.curframe.f_code.co_filename, lineno, last)
539 self.print_list_lines(self.curframe.f_code.co_filename, lineno, last)
539 do_ll = do_longlist
540 do_ll = do_longlist
540
541
541 def do_pdef(self, arg):
542 def do_pdef(self, arg):
542 """Print the call signature for any callable object.
543 """Print the call signature for any callable object.
543
544
544 The debugger interface to %pdef"""
545 The debugger interface to %pdef"""
545 namespaces = [('Locals', self.curframe.f_locals),
546 namespaces = [('Locals', self.curframe.f_locals),
546 ('Globals', self.curframe.f_globals)]
547 ('Globals', self.curframe.f_globals)]
547 self.shell.find_line_magic('pdef')(arg, namespaces=namespaces)
548 self.shell.find_line_magic('pdef')(arg, namespaces=namespaces)
548
549
549 def do_pdoc(self, arg):
550 def do_pdoc(self, arg):
550 """Print the docstring for an object.
551 """Print the docstring for an object.
551
552
552 The debugger interface to %pdoc."""
553 The debugger interface to %pdoc."""
553 namespaces = [('Locals', self.curframe.f_locals),
554 namespaces = [('Locals', self.curframe.f_locals),
554 ('Globals', self.curframe.f_globals)]
555 ('Globals', self.curframe.f_globals)]
555 self.shell.find_line_magic('pdoc')(arg, namespaces=namespaces)
556 self.shell.find_line_magic('pdoc')(arg, namespaces=namespaces)
556
557
557 def do_pfile(self, arg):
558 def do_pfile(self, arg):
558 """Print (or run through pager) the file where an object is defined.
559 """Print (or run through pager) the file where an object is defined.
559
560
560 The debugger interface to %pfile.
561 The debugger interface to %pfile.
561 """
562 """
562 namespaces = [('Locals', self.curframe.f_locals),
563 namespaces = [('Locals', self.curframe.f_locals),
563 ('Globals', self.curframe.f_globals)]
564 ('Globals', self.curframe.f_globals)]
564 self.shell.find_line_magic('pfile')(arg, namespaces=namespaces)
565 self.shell.find_line_magic('pfile')(arg, namespaces=namespaces)
565
566
566 def do_pinfo(self, arg):
567 def do_pinfo(self, arg):
567 """Provide detailed information about an object.
568 """Provide detailed information about an object.
568
569
569 The debugger interface to %pinfo, i.e., obj?."""
570 The debugger interface to %pinfo, i.e., obj?."""
570 namespaces = [('Locals', self.curframe.f_locals),
571 namespaces = [('Locals', self.curframe.f_locals),
571 ('Globals', self.curframe.f_globals)]
572 ('Globals', self.curframe.f_globals)]
572 self.shell.find_line_magic('pinfo')(arg, namespaces=namespaces)
573 self.shell.find_line_magic('pinfo')(arg, namespaces=namespaces)
573
574
574 def do_pinfo2(self, arg):
575 def do_pinfo2(self, arg):
575 """Provide extra detailed information about an object.
576 """Provide extra detailed information about an object.
576
577
577 The debugger interface to %pinfo2, i.e., obj??."""
578 The debugger interface to %pinfo2, i.e., obj??."""
578 namespaces = [('Locals', self.curframe.f_locals),
579 namespaces = [('Locals', self.curframe.f_locals),
579 ('Globals', self.curframe.f_globals)]
580 ('Globals', self.curframe.f_globals)]
580 self.shell.find_line_magic('pinfo2')(arg, namespaces=namespaces)
581 self.shell.find_line_magic('pinfo2')(arg, namespaces=namespaces)
581
582
582 def do_psource(self, arg):
583 def do_psource(self, arg):
583 """Print (or run through pager) the source code for an object."""
584 """Print (or run through pager) the source code for an object."""
584 namespaces = [('Locals', self.curframe.f_locals),
585 namespaces = [('Locals', self.curframe.f_locals),
585 ('Globals', self.curframe.f_globals)]
586 ('Globals', self.curframe.f_globals)]
586 self.shell.find_line_magic('psource')(arg, namespaces=namespaces)
587 self.shell.find_line_magic('psource')(arg, namespaces=namespaces)
587
588
588 def do_where(self, arg):
589 def do_where(self, arg):
589 """w(here)
590 """w(here)
590 Print a stack trace, with the most recent frame at the bottom.
591 Print a stack trace, with the most recent frame at the bottom.
591 An arrow indicates the "current frame", which determines the
592 An arrow indicates the "current frame", which determines the
592 context of most commands. 'bt' is an alias for this command.
593 context of most commands. 'bt' is an alias for this command.
593
594
594 Take a number as argument as an (optional) number of context line to
595 Take a number as argument as an (optional) number of context line to
595 print"""
596 print"""
596 if arg:
597 if arg:
597 context = int(arg)
598 context = int(arg)
598 self.print_stack_trace(context)
599 self.print_stack_trace(context)
599 else:
600 else:
600 self.print_stack_trace()
601 self.print_stack_trace()
601
602
602 do_w = do_where
603 do_w = do_where
603
604
604
605
605 def set_trace(frame=None):
606 def set_trace(frame=None):
606 """
607 """
607 Start debugging from `frame`.
608 Start debugging from `frame`.
608
609
609 If frame is not specified, debugging starts from caller's frame.
610 If frame is not specified, debugging starts from caller's frame.
610 """
611 """
611 Pdb().set_trace(frame or sys._getframe().f_back)
612 Pdb().set_trace(frame or sys._getframe().f_back)
@@ -1,557 +1,557 b''
1 """Various display related classes.
1 """Various display related classes.
2
2
3 Authors : MinRK, gregcaporaso, dannystaple
3 Authors : MinRK, gregcaporaso, dannystaple
4 """
4 """
5 from os.path import exists, isfile, splitext, abspath, join, isdir
5 from os.path import exists, isfile, splitext, abspath, join, isdir
6 from os import walk, sep
6 from os import walk, sep
7
7
8 from IPython.core.display import DisplayObject
8 from IPython.core.display import DisplayObject
9
9
10 __all__ = ['Audio', 'IFrame', 'YouTubeVideo', 'VimeoVideo', 'ScribdDocument',
10 __all__ = ['Audio', 'IFrame', 'YouTubeVideo', 'VimeoVideo', 'ScribdDocument',
11 'FileLink', 'FileLinks']
11 'FileLink', 'FileLinks']
12
12
13
13
14 class Audio(DisplayObject):
14 class Audio(DisplayObject):
15 """Create an audio object.
15 """Create an audio object.
16
16
17 When this object is returned by an input cell or passed to the
17 When this object is returned by an input cell or passed to the
18 display function, it will result in Audio controls being displayed
18 display function, it will result in Audio controls being displayed
19 in the frontend (only works in the notebook).
19 in the frontend (only works in the notebook).
20
20
21 Parameters
21 Parameters
22 ----------
22 ----------
23 data : numpy array, list, unicode, str or bytes
23 data : numpy array, list, unicode, str or bytes
24 Can be one of
24 Can be one of
25
25
26 * Numpy 1d array containing the desired waveform (mono)
26 * Numpy 1d array containing the desired waveform (mono)
27 * Numpy 2d array containing waveforms for each channel.
27 * Numpy 2d array containing waveforms for each channel.
28 Shape=(NCHAN, NSAMPLES). For the standard channel order, see
28 Shape=(NCHAN, NSAMPLES). For the standard channel order, see
29 http://msdn.microsoft.com/en-us/library/windows/hardware/dn653308(v=vs.85).aspx
29 http://msdn.microsoft.com/en-us/library/windows/hardware/dn653308(v=vs.85).aspx
30 * List of float or integer representing the waveform (mono)
30 * List of float or integer representing the waveform (mono)
31 * String containing the filename
31 * String containing the filename
32 * Bytestring containing raw PCM data or
32 * Bytestring containing raw PCM data or
33 * URL pointing to a file on the web.
33 * URL pointing to a file on the web.
34
34
35 If the array option is used the waveform will be normalized.
35 If the array option is used the waveform will be normalized.
36
36
37 If a filename or url is used the format support will be browser
37 If a filename or url is used the format support will be browser
38 dependent.
38 dependent.
39 url : unicode
39 url : unicode
40 A URL to download the data from.
40 A URL to download the data from.
41 filename : unicode
41 filename : unicode
42 Path to a local file to load the data from.
42 Path to a local file to load the data from.
43 embed : boolean
43 embed : boolean
44 Should the audio data be embedded using a data URI (True) or should
44 Should the audio data be embedded using a data URI (True) or should
45 the original source be referenced. Set this to True if you want the
45 the original source be referenced. Set this to True if you want the
46 audio to playable later with no internet connection in the notebook.
46 audio to playable later with no internet connection in the notebook.
47
47
48 Default is `True`, unless the keyword argument `url` is set, then
48 Default is `True`, unless the keyword argument `url` is set, then
49 default value is `False`.
49 default value is `False`.
50 rate : integer
50 rate : integer
51 The sampling rate of the raw data.
51 The sampling rate of the raw data.
52 Only required when data parameter is being used as an array
52 Only required when data parameter is being used as an array
53 autoplay : bool
53 autoplay : bool
54 Set to True if the audio should immediately start playing.
54 Set to True if the audio should immediately start playing.
55 Default is `False`.
55 Default is `False`.
56
56
57 Examples
57 Examples
58 --------
58 --------
59 ::
59 ::
60
60
61 # Generate a sound
61 # Generate a sound
62 import numpy as np
62 import numpy as np
63 framerate = 44100
63 framerate = 44100
64 t = np.linspace(0,5,framerate*5)
64 t = np.linspace(0,5,framerate*5)
65 data = np.sin(2*np.pi*220*t) + np.sin(2*np.pi*224*t))
65 data = np.sin(2*np.pi*220*t) + np.sin(2*np.pi*224*t))
66 Audio(data,rate=framerate)
66 Audio(data,rate=framerate)
67
67
68 # Can also do stereo or more channels
68 # Can also do stereo or more channels
69 dataleft = np.sin(2*np.pi*220*t)
69 dataleft = np.sin(2*np.pi*220*t)
70 dataright = np.sin(2*np.pi*224*t)
70 dataright = np.sin(2*np.pi*224*t)
71 Audio([dataleft, dataright],rate=framerate)
71 Audio([dataleft, dataright],rate=framerate)
72
72
73 Audio("http://www.nch.com.au/acm/8k16bitpcm.wav") # From URL
73 Audio("http://www.nch.com.au/acm/8k16bitpcm.wav") # From URL
74 Audio(url="http://www.w3schools.com/html/horse.ogg")
74 Audio(url="http://www.w3schools.com/html/horse.ogg")
75
75
76 Audio('/path/to/sound.wav') # From file
76 Audio('/path/to/sound.wav') # From file
77 Audio(filename='/path/to/sound.ogg')
77 Audio(filename='/path/to/sound.ogg')
78
78
79 Audio(b'RAW_WAV_DATA..) # From bytes
79 Audio(b'RAW_WAV_DATA..) # From bytes
80 Audio(data=b'RAW_WAV_DATA..)
80 Audio(data=b'RAW_WAV_DATA..)
81
81
82 """
82 """
83 _read_flags = 'rb'
83 _read_flags = 'rb'
84
84
85 def __init__(self, data=None, filename=None, url=None, embed=None, rate=None, autoplay=False):
85 def __init__(self, data=None, filename=None, url=None, embed=None, rate=None, autoplay=False):
86 if filename is None and url is None and data is None:
86 if filename is None and url is None and data is None:
87 raise ValueError("No image data found. Expecting filename, url, or data.")
87 raise ValueError("No image data found. Expecting filename, url, or data.")
88 if embed is False and url is None:
88 if embed is False and url is None:
89 raise ValueError("No url found. Expecting url when embed=False")
89 raise ValueError("No url found. Expecting url when embed=False")
90
90
91 if url is not None and embed is not True:
91 if url is not None and embed is not True:
92 self.embed = False
92 self.embed = False
93 else:
93 else:
94 self.embed = True
94 self.embed = True
95 self.autoplay = autoplay
95 self.autoplay = autoplay
96 super(Audio, self).__init__(data=data, url=url, filename=filename)
96 super(Audio, self).__init__(data=data, url=url, filename=filename)
97
97
98 if self.data is not None and not isinstance(self.data, bytes):
98 if self.data is not None and not isinstance(self.data, bytes):
99 self.data = self._make_wav(data,rate)
99 self.data = self._make_wav(data,rate)
100
100
101 def reload(self):
101 def reload(self):
102 """Reload the raw data from file or URL."""
102 """Reload the raw data from file or URL."""
103 import mimetypes
103 import mimetypes
104 if self.embed:
104 if self.embed:
105 super(Audio, self).reload()
105 super(Audio, self).reload()
106
106
107 if self.filename is not None:
107 if self.filename is not None:
108 self.mimetype = mimetypes.guess_type(self.filename)[0]
108 self.mimetype = mimetypes.guess_type(self.filename)[0]
109 elif self.url is not None:
109 elif self.url is not None:
110 self.mimetype = mimetypes.guess_type(self.url)[0]
110 self.mimetype = mimetypes.guess_type(self.url)[0]
111 else:
111 else:
112 self.mimetype = "audio/wav"
112 self.mimetype = "audio/wav"
113
113
114 def _make_wav(self, data, rate):
114 def _make_wav(self, data, rate):
115 """ Transform a numpy array to a PCM bytestring """
115 """ Transform a numpy array to a PCM bytestring """
116 import struct
116 import struct
117 from io import BytesIO
117 from io import BytesIO
118 import wave
118 import wave
119
119
120 try:
120 try:
121 import numpy as np
121 import numpy as np
122
122
123 data = np.array(data, dtype=float)
123 data = np.array(data, dtype=float)
124 if len(data.shape) == 1:
124 if len(data.shape) == 1:
125 nchan = 1
125 nchan = 1
126 elif len(data.shape) == 2:
126 elif len(data.shape) == 2:
127 # In wave files,channels are interleaved. E.g.,
127 # In wave files,channels are interleaved. E.g.,
128 # "L1R1L2R2..." for stereo. See
128 # "L1R1L2R2..." for stereo. See
129 # http://msdn.microsoft.com/en-us/library/windows/hardware/dn653308(v=vs.85).aspx
129 # http://msdn.microsoft.com/en-us/library/windows/hardware/dn653308(v=vs.85).aspx
130 # for channel ordering
130 # for channel ordering
131 nchan = data.shape[0]
131 nchan = data.shape[0]
132 data = data.T.ravel()
132 data = data.T.ravel()
133 else:
133 else:
134 raise ValueError('Array audio input must be a 1D or 2D array')
134 raise ValueError('Array audio input must be a 1D or 2D array')
135 scaled = np.int16(data/np.max(np.abs(data))*32767).tolist()
135 scaled = np.int16(data/np.max(np.abs(data))*32767).tolist()
136 except ImportError:
136 except ImportError:
137 # check that it is a "1D" list
137 # check that it is a "1D" list
138 idata = iter(data) # fails if not an iterable
138 idata = iter(data) # fails if not an iterable
139 try:
139 try:
140 iter(idata.next())
140 iter(idata.next())
141 raise TypeError('Only lists of mono audio are '
141 raise TypeError('Only lists of mono audio are '
142 'supported if numpy is not installed')
142 'supported if numpy is not installed')
143 except TypeError:
143 except TypeError:
144 # this means it's not a nested list, which is what we want
144 # this means it's not a nested list, which is what we want
145 pass
145 pass
146 maxabsvalue = float(max([abs(x) for x in data]))
146 maxabsvalue = float(max([abs(x) for x in data]))
147 scaled = [int(x/maxabsvalue*32767) for x in data]
147 scaled = [int(x/maxabsvalue*32767) for x in data]
148 nchan = 1
148 nchan = 1
149
149
150 fp = BytesIO()
150 fp = BytesIO()
151 waveobj = wave.open(fp,mode='wb')
151 waveobj = wave.open(fp,mode='wb')
152 waveobj.setnchannels(nchan)
152 waveobj.setnchannels(nchan)
153 waveobj.setframerate(rate)
153 waveobj.setframerate(rate)
154 waveobj.setsampwidth(2)
154 waveobj.setsampwidth(2)
155 waveobj.setcomptype('NONE','NONE')
155 waveobj.setcomptype('NONE','NONE')
156 waveobj.writeframes(b''.join([struct.pack('<h',x) for x in scaled]))
156 waveobj.writeframes(b''.join([struct.pack('<h',x) for x in scaled]))
157 val = fp.getvalue()
157 val = fp.getvalue()
158 waveobj.close()
158 waveobj.close()
159
159
160 return val
160 return val
161
161
162 def _data_and_metadata(self):
162 def _data_and_metadata(self):
163 """shortcut for returning metadata with url information, if defined"""
163 """shortcut for returning metadata with url information, if defined"""
164 md = {}
164 md = {}
165 if self.url:
165 if self.url:
166 md['url'] = self.url
166 md['url'] = self.url
167 if md:
167 if md:
168 return self.data, md
168 return self.data, md
169 else:
169 else:
170 return self.data
170 return self.data
171
171
172 def _repr_html_(self):
172 def _repr_html_(self):
173 src = """
173 src = """
174 <audio controls="controls" {autoplay}>
174 <audio controls="controls" {autoplay}>
175 <source src="{src}" type="{type}" />
175 <source src="{src}" type="{type}" />
176 Your browser does not support the audio element.
176 Your browser does not support the audio element.
177 </audio>
177 </audio>
178 """
178 """
179 return src.format(src=self.src_attr(),type=self.mimetype, autoplay=self.autoplay_attr())
179 return src.format(src=self.src_attr(),type=self.mimetype, autoplay=self.autoplay_attr())
180
180
181 def src_attr(self):
181 def src_attr(self):
182 import base64
182 import base64
183 if self.embed and (self.data is not None):
183 if self.embed and (self.data is not None):
184 data = base64=base64.b64encode(self.data).decode('ascii')
184 data = base64=base64.b64encode(self.data).decode('ascii')
185 return """data:{type};base64,{base64}""".format(type=self.mimetype,
185 return """data:{type};base64,{base64}""".format(type=self.mimetype,
186 base64=data)
186 base64=data)
187 elif self.url is not None:
187 elif self.url is not None:
188 return self.url
188 return self.url
189 else:
189 else:
190 return ""
190 return ""
191
191
192 def autoplay_attr(self):
192 def autoplay_attr(self):
193 if(self.autoplay):
193 if(self.autoplay):
194 return 'autoplay="autoplay"'
194 return 'autoplay="autoplay"'
195 else:
195 else:
196 return ''
196 return ''
197
197
198 class IFrame(object):
198 class IFrame(object):
199 """
199 """
200 Generic class to embed an iframe in an IPython notebook
200 Generic class to embed an iframe in an IPython notebook
201 """
201 """
202
202
203 iframe = """
203 iframe = """
204 <iframe
204 <iframe
205 width="{width}"
205 width="{width}"
206 height="{height}"
206 height="{height}"
207 src="{src}{params}"
207 src="{src}{params}"
208 frameborder="0"
208 frameborder="0"
209 allowfullscreen
209 allowfullscreen
210 ></iframe>
210 ></iframe>
211 """
211 """
212
212
213 def __init__(self, src, width, height, **kwargs):
213 def __init__(self, src, width, height, **kwargs):
214 self.src = src
214 self.src = src
215 self.width = width
215 self.width = width
216 self.height = height
216 self.height = height
217 self.params = kwargs
217 self.params = kwargs
218
218
219 def _repr_html_(self):
219 def _repr_html_(self):
220 """return the embed iframe"""
220 """return the embed iframe"""
221 if self.params:
221 if self.params:
222 try:
222 try:
223 from urllib.parse import urlencode # Py 3
223 from urllib.parse import urlencode # Py 3
224 except ImportError:
224 except ImportError:
225 from urllib import urlencode
225 from urllib import urlencode
226 params = "?" + urlencode(self.params)
226 params = "?" + urlencode(self.params)
227 else:
227 else:
228 params = ""
228 params = ""
229 return self.iframe.format(src=self.src,
229 return self.iframe.format(src=self.src,
230 width=self.width,
230 width=self.width,
231 height=self.height,
231 height=self.height,
232 params=params)
232 params=params)
233
233
234 class YouTubeVideo(IFrame):
234 class YouTubeVideo(IFrame):
235 """Class for embedding a YouTube Video in an IPython session, based on its video id.
235 """Class for embedding a YouTube Video in an IPython session, based on its video id.
236
236
237 e.g. to embed the video from https://www.youtube.com/watch?v=foo , you would
237 e.g. to embed the video from https://www.youtube.com/watch?v=foo , you would
238 do::
238 do::
239
239
240 vid = YouTubeVideo("foo")
240 vid = YouTubeVideo("foo")
241 display(vid)
241 display(vid)
242
242
243 To start from 30 seconds::
243 To start from 30 seconds::
244
244
245 vid = YouTubeVideo("abc", start=30)
245 vid = YouTubeVideo("abc", start=30)
246 display(vid)
246 display(vid)
247
247
248 To calculate seconds from time as hours, minutes, seconds use
248 To calculate seconds from time as hours, minutes, seconds use
249 :class:`datetime.timedelta`::
249 :class:`datetime.timedelta`::
250
250
251 start=int(timedelta(hours=1, minutes=46, seconds=40).total_seconds())
251 start=int(timedelta(hours=1, minutes=46, seconds=40).total_seconds())
252
252
253 Other parameters can be provided as documented at
253 Other parameters can be provided as documented at
254 https://developers.google.com/youtube/player_parameters#parameter-subheader
254 https://developers.google.com/youtube/player_parameters#Parameters
255
255
256 When converting the notebook using nbconvert, a jpeg representation of the video
256 When converting the notebook using nbconvert, a jpeg representation of the video
257 will be inserted in the document.
257 will be inserted in the document.
258 """
258 """
259
259
260 def __init__(self, id, width=400, height=300, **kwargs):
260 def __init__(self, id, width=400, height=300, **kwargs):
261 self.id=id
261 self.id=id
262 src = "https://www.youtube.com/embed/{0}".format(id)
262 src = "https://www.youtube.com/embed/{0}".format(id)
263 super(YouTubeVideo, self).__init__(src, width, height, **kwargs)
263 super(YouTubeVideo, self).__init__(src, width, height, **kwargs)
264
264
265 def _repr_jpeg_(self):
265 def _repr_jpeg_(self):
266 # Deferred import
266 # Deferred import
267 from urllib.request import urlopen
267 from urllib.request import urlopen
268
268
269 try:
269 try:
270 return urlopen("https://img.youtube.com/vi/{id}/hqdefault.jpg".format(id=self.id)).read()
270 return urlopen("https://img.youtube.com/vi/{id}/hqdefault.jpg".format(id=self.id)).read()
271 except IOError:
271 except IOError:
272 return None
272 return None
273
273
274 class VimeoVideo(IFrame):
274 class VimeoVideo(IFrame):
275 """
275 """
276 Class for embedding a Vimeo video in an IPython session, based on its video id.
276 Class for embedding a Vimeo video in an IPython session, based on its video id.
277 """
277 """
278
278
279 def __init__(self, id, width=400, height=300, **kwargs):
279 def __init__(self, id, width=400, height=300, **kwargs):
280 src="https://player.vimeo.com/video/{0}".format(id)
280 src="https://player.vimeo.com/video/{0}".format(id)
281 super(VimeoVideo, self).__init__(src, width, height, **kwargs)
281 super(VimeoVideo, self).__init__(src, width, height, **kwargs)
282
282
283 class ScribdDocument(IFrame):
283 class ScribdDocument(IFrame):
284 """
284 """
285 Class for embedding a Scribd document in an IPython session
285 Class for embedding a Scribd document in an IPython session
286
286
287 Use the start_page params to specify a starting point in the document
287 Use the start_page params to specify a starting point in the document
288 Use the view_mode params to specify display type one off scroll | slideshow | book
288 Use the view_mode params to specify display type one off scroll | slideshow | book
289
289
290 e.g to Display Wes' foundational paper about PANDAS in book mode from page 3
290 e.g to Display Wes' foundational paper about PANDAS in book mode from page 3
291
291
292 ScribdDocument(71048089, width=800, height=400, start_page=3, view_mode="book")
292 ScribdDocument(71048089, width=800, height=400, start_page=3, view_mode="book")
293 """
293 """
294
294
295 def __init__(self, id, width=400, height=300, **kwargs):
295 def __init__(self, id, width=400, height=300, **kwargs):
296 src="https://www.scribd.com/embeds/{0}/content".format(id)
296 src="https://www.scribd.com/embeds/{0}/content".format(id)
297 super(ScribdDocument, self).__init__(src, width, height, **kwargs)
297 super(ScribdDocument, self).__init__(src, width, height, **kwargs)
298
298
299 class FileLink(object):
299 class FileLink(object):
300 """Class for embedding a local file link in an IPython session, based on path
300 """Class for embedding a local file link in an IPython session, based on path
301
301
302 e.g. to embed a link that was generated in the IPython notebook as my/data.txt
302 e.g. to embed a link that was generated in the IPython notebook as my/data.txt
303
303
304 you would do::
304 you would do::
305
305
306 local_file = FileLink("my/data.txt")
306 local_file = FileLink("my/data.txt")
307 display(local_file)
307 display(local_file)
308
308
309 or in the HTML notebook, just::
309 or in the HTML notebook, just::
310
310
311 FileLink("my/data.txt")
311 FileLink("my/data.txt")
312 """
312 """
313
313
314 html_link_str = "<a href='%s' target='_blank'>%s</a>"
314 html_link_str = "<a href='%s' target='_blank'>%s</a>"
315
315
316 def __init__(self,
316 def __init__(self,
317 path,
317 path,
318 url_prefix='',
318 url_prefix='',
319 result_html_prefix='',
319 result_html_prefix='',
320 result_html_suffix='<br>'):
320 result_html_suffix='<br>'):
321 """
321 """
322 Parameters
322 Parameters
323 ----------
323 ----------
324 path : str
324 path : str
325 path to the file or directory that should be formatted
325 path to the file or directory that should be formatted
326 directory_prefix : str
326 directory_prefix : str
327 prefix to be prepended to all files to form a working link [default:
327 prefix to be prepended to all files to form a working link [default:
328 'files']
328 'files']
329 result_html_prefix : str
329 result_html_prefix : str
330 text to append to beginning to link [default: none]
330 text to append to beginning to link [default: none]
331 result_html_suffix : str
331 result_html_suffix : str
332 text to append at the end of link [default: '<br>']
332 text to append at the end of link [default: '<br>']
333 """
333 """
334 if isdir(path):
334 if isdir(path):
335 raise ValueError("Cannot display a directory using FileLink. "
335 raise ValueError("Cannot display a directory using FileLink. "
336 "Use FileLinks to display '%s'." % path)
336 "Use FileLinks to display '%s'." % path)
337 self.path = path
337 self.path = path
338 self.url_prefix = url_prefix
338 self.url_prefix = url_prefix
339 self.result_html_prefix = result_html_prefix
339 self.result_html_prefix = result_html_prefix
340 self.result_html_suffix = result_html_suffix
340 self.result_html_suffix = result_html_suffix
341
341
342 def _format_path(self):
342 def _format_path(self):
343 fp = ''.join([self.url_prefix,self.path])
343 fp = ''.join([self.url_prefix,self.path])
344 return ''.join([self.result_html_prefix,
344 return ''.join([self.result_html_prefix,
345 self.html_link_str % (fp, self.path),
345 self.html_link_str % (fp, self.path),
346 self.result_html_suffix])
346 self.result_html_suffix])
347
347
348 def _repr_html_(self):
348 def _repr_html_(self):
349 """return html link to file
349 """return html link to file
350 """
350 """
351 if not exists(self.path):
351 if not exists(self.path):
352 return ("Path (<tt>%s</tt>) doesn't exist. "
352 return ("Path (<tt>%s</tt>) doesn't exist. "
353 "It may still be in the process of "
353 "It may still be in the process of "
354 "being generated, or you may have the "
354 "being generated, or you may have the "
355 "incorrect path." % self.path)
355 "incorrect path." % self.path)
356
356
357 return self._format_path()
357 return self._format_path()
358
358
359 def __repr__(self):
359 def __repr__(self):
360 """return absolute path to file
360 """return absolute path to file
361 """
361 """
362 return abspath(self.path)
362 return abspath(self.path)
363
363
364 class FileLinks(FileLink):
364 class FileLinks(FileLink):
365 """Class for embedding local file links in an IPython session, based on path
365 """Class for embedding local file links in an IPython session, based on path
366
366
367 e.g. to embed links to files that were generated in the IPython notebook
367 e.g. to embed links to files that were generated in the IPython notebook
368 under ``my/data``, you would do::
368 under ``my/data``, you would do::
369
369
370 local_files = FileLinks("my/data")
370 local_files = FileLinks("my/data")
371 display(local_files)
371 display(local_files)
372
372
373 or in the HTML notebook, just::
373 or in the HTML notebook, just::
374
374
375 FileLinks("my/data")
375 FileLinks("my/data")
376 """
376 """
377 def __init__(self,
377 def __init__(self,
378 path,
378 path,
379 url_prefix='',
379 url_prefix='',
380 included_suffixes=None,
380 included_suffixes=None,
381 result_html_prefix='',
381 result_html_prefix='',
382 result_html_suffix='<br>',
382 result_html_suffix='<br>',
383 notebook_display_formatter=None,
383 notebook_display_formatter=None,
384 terminal_display_formatter=None,
384 terminal_display_formatter=None,
385 recursive=True):
385 recursive=True):
386 """
386 """
387 See :class:`FileLink` for the ``path``, ``url_prefix``,
387 See :class:`FileLink` for the ``path``, ``url_prefix``,
388 ``result_html_prefix`` and ``result_html_suffix`` parameters.
388 ``result_html_prefix`` and ``result_html_suffix`` parameters.
389
389
390 included_suffixes : list
390 included_suffixes : list
391 Filename suffixes to include when formatting output [default: include
391 Filename suffixes to include when formatting output [default: include
392 all files]
392 all files]
393
393
394 notebook_display_formatter : function
394 notebook_display_formatter : function
395 Used to format links for display in the notebook. See discussion of
395 Used to format links for display in the notebook. See discussion of
396 formatter functions below.
396 formatter functions below.
397
397
398 terminal_display_formatter : function
398 terminal_display_formatter : function
399 Used to format links for display in the terminal. See discussion of
399 Used to format links for display in the terminal. See discussion of
400 formatter functions below.
400 formatter functions below.
401
401
402 Formatter functions must be of the form::
402 Formatter functions must be of the form::
403
403
404 f(dirname, fnames, included_suffixes)
404 f(dirname, fnames, included_suffixes)
405
405
406 dirname : str
406 dirname : str
407 The name of a directory
407 The name of a directory
408 fnames : list
408 fnames : list
409 The files in that directory
409 The files in that directory
410 included_suffixes : list
410 included_suffixes : list
411 The file suffixes that should be included in the output (passing None
411 The file suffixes that should be included in the output (passing None
412 meansto include all suffixes in the output in the built-in formatters)
412 meansto include all suffixes in the output in the built-in formatters)
413 recursive : boolean
413 recursive : boolean
414 Whether to recurse into subdirectories. Default is True.
414 Whether to recurse into subdirectories. Default is True.
415
415
416 The function should return a list of lines that will be printed in the
416 The function should return a list of lines that will be printed in the
417 notebook (if passing notebook_display_formatter) or the terminal (if
417 notebook (if passing notebook_display_formatter) or the terminal (if
418 passing terminal_display_formatter). This function is iterated over for
418 passing terminal_display_formatter). This function is iterated over for
419 each directory in self.path. Default formatters are in place, can be
419 each directory in self.path. Default formatters are in place, can be
420 passed here to support alternative formatting.
420 passed here to support alternative formatting.
421
421
422 """
422 """
423 if isfile(path):
423 if isfile(path):
424 raise ValueError("Cannot display a file using FileLinks. "
424 raise ValueError("Cannot display a file using FileLinks. "
425 "Use FileLink to display '%s'." % path)
425 "Use FileLink to display '%s'." % path)
426 self.included_suffixes = included_suffixes
426 self.included_suffixes = included_suffixes
427 # remove trailing slashs for more consistent output formatting
427 # remove trailing slashs for more consistent output formatting
428 path = path.rstrip('/')
428 path = path.rstrip('/')
429
429
430 self.path = path
430 self.path = path
431 self.url_prefix = url_prefix
431 self.url_prefix = url_prefix
432 self.result_html_prefix = result_html_prefix
432 self.result_html_prefix = result_html_prefix
433 self.result_html_suffix = result_html_suffix
433 self.result_html_suffix = result_html_suffix
434
434
435 self.notebook_display_formatter = \
435 self.notebook_display_formatter = \
436 notebook_display_formatter or self._get_notebook_display_formatter()
436 notebook_display_formatter or self._get_notebook_display_formatter()
437 self.terminal_display_formatter = \
437 self.terminal_display_formatter = \
438 terminal_display_formatter or self._get_terminal_display_formatter()
438 terminal_display_formatter or self._get_terminal_display_formatter()
439
439
440 self.recursive = recursive
440 self.recursive = recursive
441
441
442 def _get_display_formatter(self,
442 def _get_display_formatter(self,
443 dirname_output_format,
443 dirname_output_format,
444 fname_output_format,
444 fname_output_format,
445 fp_format,
445 fp_format,
446 fp_cleaner=None):
446 fp_cleaner=None):
447 """ generate built-in formatter function
447 """ generate built-in formatter function
448
448
449 this is used to define both the notebook and terminal built-in
449 this is used to define both the notebook and terminal built-in
450 formatters as they only differ by some wrapper text for each entry
450 formatters as they only differ by some wrapper text for each entry
451
451
452 dirname_output_format: string to use for formatting directory
452 dirname_output_format: string to use for formatting directory
453 names, dirname will be substituted for a single "%s" which
453 names, dirname will be substituted for a single "%s" which
454 must appear in this string
454 must appear in this string
455 fname_output_format: string to use for formatting file names,
455 fname_output_format: string to use for formatting file names,
456 if a single "%s" appears in the string, fname will be substituted
456 if a single "%s" appears in the string, fname will be substituted
457 if two "%s" appear in the string, the path to fname will be
457 if two "%s" appear in the string, the path to fname will be
458 substituted for the first and fname will be substituted for the
458 substituted for the first and fname will be substituted for the
459 second
459 second
460 fp_format: string to use for formatting filepaths, must contain
460 fp_format: string to use for formatting filepaths, must contain
461 exactly two "%s" and the dirname will be subsituted for the first
461 exactly two "%s" and the dirname will be subsituted for the first
462 and fname will be substituted for the second
462 and fname will be substituted for the second
463 """
463 """
464 def f(dirname, fnames, included_suffixes=None):
464 def f(dirname, fnames, included_suffixes=None):
465 result = []
465 result = []
466 # begin by figuring out which filenames, if any,
466 # begin by figuring out which filenames, if any,
467 # are going to be displayed
467 # are going to be displayed
468 display_fnames = []
468 display_fnames = []
469 for fname in fnames:
469 for fname in fnames:
470 if (isfile(join(dirname,fname)) and
470 if (isfile(join(dirname,fname)) and
471 (included_suffixes is None or
471 (included_suffixes is None or
472 splitext(fname)[1] in included_suffixes)):
472 splitext(fname)[1] in included_suffixes)):
473 display_fnames.append(fname)
473 display_fnames.append(fname)
474
474
475 if len(display_fnames) == 0:
475 if len(display_fnames) == 0:
476 # if there are no filenames to display, don't print anything
476 # if there are no filenames to display, don't print anything
477 # (not even the directory name)
477 # (not even the directory name)
478 pass
478 pass
479 else:
479 else:
480 # otherwise print the formatted directory name followed by
480 # otherwise print the formatted directory name followed by
481 # the formatted filenames
481 # the formatted filenames
482 dirname_output_line = dirname_output_format % dirname
482 dirname_output_line = dirname_output_format % dirname
483 result.append(dirname_output_line)
483 result.append(dirname_output_line)
484 for fname in display_fnames:
484 for fname in display_fnames:
485 fp = fp_format % (dirname,fname)
485 fp = fp_format % (dirname,fname)
486 if fp_cleaner is not None:
486 if fp_cleaner is not None:
487 fp = fp_cleaner(fp)
487 fp = fp_cleaner(fp)
488 try:
488 try:
489 # output can include both a filepath and a filename...
489 # output can include both a filepath and a filename...
490 fname_output_line = fname_output_format % (fp, fname)
490 fname_output_line = fname_output_format % (fp, fname)
491 except TypeError:
491 except TypeError:
492 # ... or just a single filepath
492 # ... or just a single filepath
493 fname_output_line = fname_output_format % fname
493 fname_output_line = fname_output_format % fname
494 result.append(fname_output_line)
494 result.append(fname_output_line)
495 return result
495 return result
496 return f
496 return f
497
497
498 def _get_notebook_display_formatter(self,
498 def _get_notebook_display_formatter(self,
499 spacer="&nbsp;&nbsp;"):
499 spacer="&nbsp;&nbsp;"):
500 """ generate function to use for notebook formatting
500 """ generate function to use for notebook formatting
501 """
501 """
502 dirname_output_format = \
502 dirname_output_format = \
503 self.result_html_prefix + "%s/" + self.result_html_suffix
503 self.result_html_prefix + "%s/" + self.result_html_suffix
504 fname_output_format = \
504 fname_output_format = \
505 self.result_html_prefix + spacer + self.html_link_str + self.result_html_suffix
505 self.result_html_prefix + spacer + self.html_link_str + self.result_html_suffix
506 fp_format = self.url_prefix + '%s/%s'
506 fp_format = self.url_prefix + '%s/%s'
507 if sep == "\\":
507 if sep == "\\":
508 # Working on a platform where the path separator is "\", so
508 # Working on a platform where the path separator is "\", so
509 # must convert these to "/" for generating a URI
509 # must convert these to "/" for generating a URI
510 def fp_cleaner(fp):
510 def fp_cleaner(fp):
511 # Replace all occurences of backslash ("\") with a forward
511 # Replace all occurences of backslash ("\") with a forward
512 # slash ("/") - this is necessary on windows when a path is
512 # slash ("/") - this is necessary on windows when a path is
513 # provided as input, but we must link to a URI
513 # provided as input, but we must link to a URI
514 return fp.replace('\\','/')
514 return fp.replace('\\','/')
515 else:
515 else:
516 fp_cleaner = None
516 fp_cleaner = None
517
517
518 return self._get_display_formatter(dirname_output_format,
518 return self._get_display_formatter(dirname_output_format,
519 fname_output_format,
519 fname_output_format,
520 fp_format,
520 fp_format,
521 fp_cleaner)
521 fp_cleaner)
522
522
523 def _get_terminal_display_formatter(self,
523 def _get_terminal_display_formatter(self,
524 spacer=" "):
524 spacer=" "):
525 """ generate function to use for terminal formatting
525 """ generate function to use for terminal formatting
526 """
526 """
527 dirname_output_format = "%s/"
527 dirname_output_format = "%s/"
528 fname_output_format = spacer + "%s"
528 fname_output_format = spacer + "%s"
529 fp_format = '%s/%s'
529 fp_format = '%s/%s'
530
530
531 return self._get_display_formatter(dirname_output_format,
531 return self._get_display_formatter(dirname_output_format,
532 fname_output_format,
532 fname_output_format,
533 fp_format)
533 fp_format)
534
534
535 def _format_path(self):
535 def _format_path(self):
536 result_lines = []
536 result_lines = []
537 if self.recursive:
537 if self.recursive:
538 walked_dir = list(walk(self.path))
538 walked_dir = list(walk(self.path))
539 else:
539 else:
540 walked_dir = [next(walk(self.path))]
540 walked_dir = [next(walk(self.path))]
541 walked_dir.sort()
541 walked_dir.sort()
542 for dirname, subdirs, fnames in walked_dir:
542 for dirname, subdirs, fnames in walked_dir:
543 result_lines += self.notebook_display_formatter(dirname, fnames, self.included_suffixes)
543 result_lines += self.notebook_display_formatter(dirname, fnames, self.included_suffixes)
544 return '\n'.join(result_lines)
544 return '\n'.join(result_lines)
545
545
546 def __repr__(self):
546 def __repr__(self):
547 """return newline-separated absolute paths
547 """return newline-separated absolute paths
548 """
548 """
549 result_lines = []
549 result_lines = []
550 if self.recursive:
550 if self.recursive:
551 walked_dir = list(walk(self.path))
551 walked_dir = list(walk(self.path))
552 else:
552 else:
553 walked_dir = [next(walk(self.path))]
553 walked_dir = [next(walk(self.path))]
554 walked_dir.sort()
554 walked_dir.sort()
555 for dirname, subdirs, fnames in walked_dir:
555 for dirname, subdirs, fnames in walked_dir:
556 result_lines += self.terminal_display_formatter(dirname, fnames, self.included_suffixes)
556 result_lines += self.terminal_display_formatter(dirname, fnames, self.included_suffixes)
557 return '\n'.join(result_lines)
557 return '\n'.join(result_lines)
@@ -1,103 +1,103 b''
1 .. _extensions_overview:
1 .. _extensions_overview:
2
2
3 ==================
3 ==================
4 IPython extensions
4 IPython extensions
5 ==================
5 ==================
6
6
7 A level above configuration are IPython extensions, Python modules which modify
7 A level above configuration are IPython extensions, Python modules which modify
8 the behaviour of the shell. They are referred to by an importable module name,
8 the behaviour of the shell. They are referred to by an importable module name,
9 and can be placed anywhere you'd normally import from, or in
9 and can be placed anywhere you'd normally import from, or in
10 ``.ipython/extensions/``.
10 ``.ipython/extensions/``.
11
11
12 Getting extensions
12 Getting extensions
13 ==================
13 ==================
14
14
15 A few important extensions are :ref:`bundled with IPython <bundled_extensions>`.
15 A few important extensions are :ref:`bundled with IPython <bundled_extensions>`.
16 Others can be found on the `extensions index
16 Others can be found on the `extensions index
17 <https://github.com/ipython/ipython/wiki/Extensions-Index>`_ on the wiki, and
17 <https://github.com/ipython/ipython/wiki/Extensions-Index>`_ on the wiki, and
18 the `Framework :: IPython tag <https://pypi.python.org/pypi?:action=browse&c=586>`_
18 the `Framework :: IPython tag <https://pypi.python.org/pypi?:action=browse&c=586>`_
19 on PyPI.
19 on PyPI.
20
20
21 Extensions on PyPI can be installed using ``pip``, like any other Python package.
21 Extensions on PyPI can be installed using ``pip``, like any other Python package.
22
22
23 Using extensions
23 Using extensions
24 ================
24 ================
25
25
26 To load an extension while IPython is running, use the ``%load_ext`` magic:
26 To load an extension while IPython is running, use the ``%load_ext`` magic:
27
27
28 .. sourcecode:: ipython
28 .. sourcecode:: ipython
29
29
30 In [1]: %load_ext myextension
30 In [1]: %load_ext myextension
31
31
32 To load it each time IPython starts, list it in your configuration file::
32 To load it each time IPython starts, list it in your configuration file::
33
33
34 c.InteractiveShellApp.extensions = [
34 c.InteractiveShellApp.extensions = [
35 'myextension'
35 'myextension'
36 ]
36 ]
37
37
38 Writing extensions
38 Writing extensions
39 ==================
39 ==================
40
40
41 An IPython extension is an importable Python module that has a couple of special
41 An IPython extension is an importable Python module that has a couple of special
42 functions to load and unload it. Here is a template::
42 functions to load and unload it. Here is a template::
43
43
44 # myextension.py
44 # myextension.py
45
45
46 def load_ipython_extension(ipython):
46 def load_ipython_extension(ipython):
47 # The `ipython` argument is the currently active `InteractiveShell`
47 # The `ipython` argument is the currently active `InteractiveShell`
48 # instance, which can be used in any way. This allows you to register
48 # instance, which can be used in any way. This allows you to register
49 # new magics or aliases, for example.
49 # new magics or aliases, for example.
50
50
51 def unload_ipython_extension(ipython):
51 def unload_ipython_extension(ipython):
52 # If you want your extension to be unloadable, put that logic here.
52 # If you want your extension to be unloadable, put that logic here.
53
53
54 This :func:`load_ipython_extension` function is called after your extension is
54 This :func:`load_ipython_extension` function is called after your extension is
55 imported, and the currently active :class:`~IPython.core.interactiveshell.InteractiveShell`
55 imported, and the currently active :class:`~IPython.core.interactiveshell.InteractiveShell`
56 instance is passed as the only argument. You can do anything you want with
56 instance is passed as the only argument. You can do anything you want with
57 IPython at that point.
57 IPython at that point.
58
58
59 :func:`load_ipython_extension` will not be called again if the user use
59 :func:`load_ipython_extension` will not be called again if the user use
60 `%load_extension`. The user have to explicitly ask the extension to be
60 `%load_extension`. The user have to explicitly ask the extension to be
61 reloaded (with `%reload_extension`). In case where the use ask the extension to
61 reloaded (with `%reload_extension`). In case where the use ask the extension to
62 be reloaded, , the extension will be unloaded (with
62 be reloaded, , the extension will be unloaded (with
63 `unload_ipython_extension`), and loaded again.
63 `unload_ipython_extension`), and loaded again.
64
64
65 Useful :class:`InteractiveShell` methods include :meth:`~IPython.core.interactiveshell.InteractiveShell.register_magic_function`,
65 Useful :class:`InteractiveShell` methods include :meth:`~IPython.core.interactiveshell.InteractiveShell.register_magic_function`,
66 :meth:`~IPython.core.interactiveshell.InteractiveShell.push` (to add variables to the user namespace) and
66 :meth:`~IPython.core.interactiveshell.InteractiveShell.push` (to add variables to the user namespace) and
67 :meth:`~IPython.core.interactiveshell.InteractiveShell.drop_by_id` (to remove variables on unloading).
67 :meth:`~IPython.core.interactiveshell.InteractiveShell.drop_by_id` (to remove variables on unloading).
68
68
69 .. seealso::
69 .. seealso::
70
70
71 :ref:`defining_magics`
71 :ref:`defining_magics`
72
72
73 You can put your extension modules anywhere you want, as long as they can be
73 You can put your extension modules anywhere you want, as long as they can be
74 imported by Python's standard import mechanism. However, to make it easy to
74 imported by Python's standard import mechanism. However, to make it easy to
75 write extensions, you can also put your extensions in :file:`extensions/`
75 write extensions, you can also put your extensions in :file:`extensions/`
76 within the :ref:`IPython directory <ipythondir>`. This directory is
76 within the :ref:`IPython directory <ipythondir>`. This directory is
77 added to :data:`sys.path` automatically.
77 added to :data:`sys.path` automatically.
78
78
79 When your extension is ready for general use, please add it to the `extensions
79 When your extension is ready for general use, please add it to the `extensions
80 index <https://github.com/ipython/ipython/wiki/Extensions-Index>`_. We also
80 index <https://github.com/ipython/ipython/wiki/Extensions-Index>`_. We also
81 encourage you to upload it to PyPI and use the ``Framework :: IPython``
81 encourage you to upload it to PyPI and use the ``Framework :: IPython``
82 classifier, so that users can install it with standard packaging tools.
82 classifier, so that users can install it with standard packaging tools.
83
83
84 .. _bundled_extensions:
84 .. _bundled_extensions:
85
85
86 Extensions bundled with IPython
86 Extensions bundled with IPython
87 ===============================
87 ===============================
88
88
89 .. toctree::
89 .. toctree::
90 :maxdepth: 1
90 :maxdepth: 1
91
91
92 autoreload
92 autoreload
93 storemagic
93 storemagic
94
94
95 * ``octavemagic`` used to be bundled, but is now part of `oct2py <http://blink1073.github.io/oct2py/docs/>`_.
95 * ``octavemagic`` used to be bundled, but is now part of `oct2py <https://blink1073.github.io/oct2py/>`_.
96 Use ``%load_ext oct2py.ipython`` to load it.
96 Use ``%load_ext oct2py.ipython`` to load it.
97 * ``rmagic`` is now part of `rpy2 <http://rpy.sourceforge.net/>`_. Use
97 * ``rmagic`` is now part of `rpy2 <http://rpy.sourceforge.net/>`_. Use
98 ``%load_ext rpy2.ipython`` to load it, and see :mod:`rpy2.ipython.rmagic` for
98 ``%load_ext rpy2.ipython`` to load it, and see :mod:`rpy2.ipython.rmagic` for
99 details of how to use it.
99 details of how to use it.
100 * ``cythonmagic`` used to be bundled, but is now part of `cython <https://github.com/cython/cython/>`_
100 * ``cythonmagic`` used to be bundled, but is now part of `cython <https://github.com/cython/cython/>`_
101 Use ``%load_ext Cython`` to load it.
101 Use ``%load_ext Cython`` to load it.
102 * ``sympyprinting`` used to be a bundled extension, but you should now use
102 * ``sympyprinting`` used to be a bundled extension, but you should now use
103 :func:`sympy.init_printing` instead.
103 :func:`sympy.init_printing` instead.
@@ -1,252 +1,252 b''
1 .. _release_process:
1 .. _release_process:
2
2
3 =======================
3 =======================
4 IPython release process
4 IPython release process
5 =======================
5 =======================
6
6
7 This document contains the process that is used to create an IPython release.
7 This document contains the process that is used to create an IPython release.
8
8
9 Conveniently, the ``release`` script in the ``tools`` directory of the ``IPython``
9 Conveniently, the ``release`` script in the ``tools`` directory of the ``IPython``
10 repository automates most of the release process. This document serves as a
10 repository automates most of the release process. This document serves as a
11 handy reminder and checklist for the release manager.
11 handy reminder and checklist for the release manager.
12
12
13 During the release process, you might need the extra following dependencies:
13 During the release process, you might need the extra following dependencies:
14
14
15 - ``keyring`` to access your GitHub authentication tokens
15 - ``keyring`` to access your GitHub authentication tokens
16 - ``graphviz`` to generate some graphs in the documentation
16 - ``graphviz`` to generate some graphs in the documentation
17
17
18 Make sure you have all the required dependencies to run the tests as well.
18 Make sure you have all the required dependencies to run the tests as well.
19
19
20
20
21 1. Set Environment variables
21 1. Set Environment variables
22 ----------------------------
22 ----------------------------
23
23
24 Set environment variables to document previous release tag, current
24 Set environment variables to document previous release tag, current
25 release milestone, current release version, and git tag.
25 release milestone, current release version, and git tag.
26
26
27 These variables may be used later to copy/paste as answers to the script
27 These variables may be used later to copy/paste as answers to the script
28 questions instead of typing the appropriate command when the time comes. These
28 questions instead of typing the appropriate command when the time comes. These
29 variables are not used by the scripts directly; therefore, there is no need to
29 variables are not used by the scripts directly; therefore, there is no need to
30 ``export`` them. The format for bash is as follows, but note that these values
30 ``export`` them. The format for bash is as follows, but note that these values
31 are just an example valid only for the 5.0 release; you'll need to update them
31 are just an example valid only for the 5.0 release; you'll need to update them
32 for the release you are actually making::
32 for the release you are actually making::
33
33
34 PREV_RELEASE=4.2.1
34 PREV_RELEASE=4.2.1
35 MILESTONE=5.0
35 MILESTONE=5.0
36 VERSION=5.0.0
36 VERSION=5.0.0
37 BRANCH=master
37 BRANCH=master
38
38
39
39
40 2. Create GitHub stats and finish release note
40 2. Create GitHub stats and finish release note
41 ----------------------------------------------
41 ----------------------------------------------
42
42
43 .. note::
43 .. note::
44
44
45 This step is optional if making a Beta or RC release.
45 This step is optional if making a Beta or RC release.
46
46
47 .. note::
47 .. note::
48
48
49 Before generating the GitHub stats, verify that all closed issues and pull
49 Before generating the GitHub stats, verify that all closed issues and pull
50 requests have `appropriate milestones
50 requests have `appropriate milestones
51 <https://github.com/ipython/ipython/wiki/Dev%3A-GitHub-workflow#milestones>`_.
51 <https://github.com/ipython/ipython/wiki/Dev:-GitHub-workflow#milestones>`_.
52 `This search
52 `This search
53 <https://github.com/ipython/ipython/issues?q=is%3Aclosed+no%3Amilestone+is%3Aissue>`_
53 <https://github.com/ipython/ipython/issues?q=is%3Aclosed+no%3Amilestone+is%3Aissue>`_
54 should return no results before creating the GitHub stats.
54 should return no results before creating the GitHub stats.
55
55
56 If a major release:
56 If a major release:
57
57
58 - merge any pull request notes into what's new::
58 - merge any pull request notes into what's new::
59
59
60 python tools/update_whatsnew.py
60 python tools/update_whatsnew.py
61
61
62 - update ``docs/source/whatsnew/development.rst``, to ensure it covers
62 - update ``docs/source/whatsnew/development.rst``, to ensure it covers
63 the major release features
63 the major release features
64
64
65 - move the contents of ``development.rst`` to ``versionX.rst`` where ``X`` is
65 - move the contents of ``development.rst`` to ``versionX.rst`` where ``X`` is
66 the numerical release version
66 the numerical release version
67
67
68 - generate summary of GitHub contributions, which can be done with::
68 - generate summary of GitHub contributions, which can be done with::
69
69
70 python tools/github_stats.py --milestone $MILESTONE > stats.rst
70 python tools/github_stats.py --milestone $MILESTONE > stats.rst
71
71
72 which may need some manual cleanup of ``stats.rst``. Add the cleaned
72 which may need some manual cleanup of ``stats.rst``. Add the cleaned
73 ``stats.rst`` results to ``docs/source/whatsnew/github-stats-X.rst``
73 ``stats.rst`` results to ``docs/source/whatsnew/github-stats-X.rst``
74 where ``X`` is the numerical release version (don't forget to add it to
74 where ``X`` is the numerical release version (don't forget to add it to
75 the git repo as well). If creating a major release, make a new
75 the git repo as well). If creating a major release, make a new
76 ``github-stats-X.rst`` file; if creating a minor release, the content
76 ``github-stats-X.rst`` file; if creating a minor release, the content
77 from ``stats.rst`` may simply be added to the top of an existing
77 from ``stats.rst`` may simply be added to the top of an existing
78 ``github-stats-X.rst`` file. Finally, edit
78 ``github-stats-X.rst`` file. Finally, edit
79 ``docs/source/whatsnew/index.rst`` to list the new ``github-stats-X``
79 ``docs/source/whatsnew/index.rst`` to list the new ``github-stats-X``
80 file you just created and remove temporarily the first entry called
80 file you just created and remove temporarily the first entry called
81 ``development`` (you'll need to add it back after release).
81 ``development`` (you'll need to add it back after release).
82
82
83 Make sure that the stats file has a header or it won't be rendered in
83 Make sure that the stats file has a header or it won't be rendered in
84 the final documentation.
84 the final documentation.
85
85
86 To find duplicates and update `.mailmap`, use::
86 To find duplicates and update `.mailmap`, use::
87
87
88 git log --format="%aN <%aE>" $PREV_RELEASE... | sort -u -f
88 git log --format="%aN <%aE>" $PREV_RELEASE... | sort -u -f
89
89
90 3. Make sure the repository is clean
90 3. Make sure the repository is clean
91 ------------------------------------
91 ------------------------------------
92
92
93 of any file that could be problematic.
93 of any file that could be problematic.
94 Remove all non-tracked files with:
94 Remove all non-tracked files with:
95
95
96 .. code::
96 .. code::
97
97
98 git clean -xfdi
98 git clean -xfdi
99
99
100 This will ask for confirmation before removing all untracked files. Make
100 This will ask for confirmation before removing all untracked files. Make
101 sure the ``dist/`` folder is clean to avoid any stale builds from
101 sure the ``dist/`` folder is clean to avoid any stale builds from
102 previous build attempts.
102 previous build attempts.
103
103
104
104
105 4. Update the release version number
105 4. Update the release version number
106 ------------------------------------
106 ------------------------------------
107
107
108 Edit ``IPython/core/release.py`` to have the current version.
108 Edit ``IPython/core/release.py`` to have the current version.
109
109
110 in particular, update version number and ``_version_extra`` content in
110 in particular, update version number and ``_version_extra`` content in
111 ``IPython/core/release.py``.
111 ``IPython/core/release.py``.
112
112
113 Step 5 will validate your changes automatically, but you might still want to
113 Step 5 will validate your changes automatically, but you might still want to
114 make sure the version number matches pep440.
114 make sure the version number matches pep440.
115
115
116 In particular, ``rc`` and ``beta`` are not separated by ``.`` or the ``sdist``
116 In particular, ``rc`` and ``beta`` are not separated by ``.`` or the ``sdist``
117 and ``bdist`` will appear as different releases. For example, a valid version
117 and ``bdist`` will appear as different releases. For example, a valid version
118 number for a release candidate (rc) release is: ``1.3rc1``. Notice that there
118 number for a release candidate (rc) release is: ``1.3rc1``. Notice that there
119 is no separator between the '3' and the 'r'. Check the environment variable
119 is no separator between the '3' and the 'r'. Check the environment variable
120 ``$VERSION`` as well.
120 ``$VERSION`` as well.
121
121
122 You will likely just have to modify/comment/uncomment one of the lines setting
122 You will likely just have to modify/comment/uncomment one of the lines setting
123 ``_version_extra``
123 ``_version_extra``
124
124
125
125
126 5. Run the `tools/build_release` script
126 5. Run the `tools/build_release` script
127 ---------------------------------------
127 ---------------------------------------
128
128
129 Running ``tools/build_release`` does all the file checking and building that
129 Running ``tools/build_release`` does all the file checking and building that
130 the real release script will do. This makes test installations, checks that
130 the real release script will do. This makes test installations, checks that
131 the build procedure runs OK, and tests other steps in the release process.
131 the build procedure runs OK, and tests other steps in the release process.
132
132
133 The ``build_release`` script will in particular verify that the version number
133 The ``build_release`` script will in particular verify that the version number
134 match PEP 440, in order to avoid surprise at the time of build upload.
134 match PEP 440, in order to avoid surprise at the time of build upload.
135
135
136 We encourage creating a test build of the docs as well.
136 We encourage creating a test build of the docs as well.
137
137
138 6. Create and push the new tag
138 6. Create and push the new tag
139 ------------------------------
139 ------------------------------
140
140
141 Commit the changes to release.py::
141 Commit the changes to release.py::
142
142
143 git commit -am "release $VERSION"
143 git commit -am "release $VERSION"
144 git push origin $BRANCH
144 git push origin $BRANCH
145
145
146 Create and push the tag::
146 Create and push the tag::
147
147
148 git tag -am "release $VERSION" "$VERSION"
148 git tag -am "release $VERSION" "$VERSION"
149 git push origin --tags
149 git push origin --tags
150
150
151 Update release.py back to ``x.y-dev`` or ``x.y-maint``, and re-add the
151 Update release.py back to ``x.y-dev`` or ``x.y-maint``, and re-add the
152 ``development`` entry in ``docs/source/whatsnew/index.rst`` and push::
152 ``development`` entry in ``docs/source/whatsnew/index.rst`` and push::
153
153
154 git commit -am "back to development"
154 git commit -am "back to development"
155 git push origin $BRANCH
155 git push origin $BRANCH
156
156
157 7. Get a fresh clone
157 7. Get a fresh clone
158 --------------------
158 --------------------
159
159
160 Get a fresh clone of the tag for building the release::
160 Get a fresh clone of the tag for building the release::
161
161
162 cd /tmp
162 cd /tmp
163 git clone --depth 1 https://github.com/ipython/ipython.git -b "$VERSION"
163 git clone --depth 1 https://github.com/ipython/ipython.git -b "$VERSION"
164 cd ipython
164 cd ipython
165
165
166 .. note::
166 .. note::
167
167
168 You can aslo cleanup the current working repository with ``git clean -xfdi``
168 You can aslo cleanup the current working repository with ``git clean -xfdi``
169
169
170 8. Run the release script
170 8. Run the release script
171 -------------------------
171 -------------------------
172
172
173 .. important::
173 .. important::
174
174
175 These steps cover instructions for creating releases of IPython 5.x LTS and
175 These steps cover instructions for creating releases of IPython 5.x LTS and
176 IPython 6.x. Ignore release steps for Python 2 when releasing IPython 6.x
176 IPython 6.x. Ignore release steps for Python 2 when releasing IPython 6.x
177 which no longer supports Python 2.
177 which no longer supports Python 2.
178
178
179 Run the ``release`` script, this step requires having a current wheel, Python
179 Run the ``release`` script, this step requires having a current wheel, Python
180 >=3.4 and Python 2.7.::
180 >=3.4 and Python 2.7.::
181
181
182 ./tools/release
182 ./tools/release
183
183
184 This makes the tarballs and wheels, and puts them under the ``dist/``
184 This makes the tarballs and wheels, and puts them under the ``dist/``
185 folder. Be sure to test the ``wheels`` and the ``sdist`` locally before
185 folder. Be sure to test the ``wheels`` and the ``sdist`` locally before
186 uploading them to PyPI. We do not use an universal wheel as each wheel
186 uploading them to PyPI. We do not use an universal wheel as each wheel
187 installs an ``ipython2`` or ``ipython3`` script, depending on the version of
187 installs an ``ipython2`` or ``ipython3`` script, depending on the version of
188 Python it is built for. Using an universal wheel would prevent this.
188 Python it is built for. Using an universal wheel would prevent this.
189
189
190 Use the following to actually upload the result of the build::
190 Use the following to actually upload the result of the build::
191
191
192 ./tools/release upload
192 ./tools/release upload
193
193
194 It should posts them to ``archive.ipython.org``.
194 It should posts them to ``archive.ipython.org``.
195
195
196 You will need to use `twine <https://github.com/pypa/twine>`_ ) manually to
196 You will need to use `twine <https://github.com/pypa/twine>`_ ) manually to
197 actually upload on PyPI. Unlike setuptools, twine is able to upload packages
197 actually upload on PyPI. Unlike setuptools, twine is able to upload packages
198 over SSL::
198 over SSL::
199
199
200 twine upload dist/*
200 twine upload dist/*
201
201
202
202
203 PyPI/Warehouse will automatically hide previous releases. If you are uploading
203 PyPI/Warehouse will automatically hide previous releases. If you are uploading
204 a non-stable version, make sure to log-in to PyPI and un-hide previous version.
204 a non-stable version, make sure to log-in to PyPI and un-hide previous version.
205
205
206
206
207 9. Draft a short release announcement
207 9. Draft a short release announcement
208 -------------------------------------
208 -------------------------------------
209
209
210 The announcement should include:
210 The announcement should include:
211
211
212 - release highlights
212 - release highlights
213 - a link to the html version of the *What's new* section of the documentation
213 - a link to the html version of the *What's new* section of the documentation
214 - a link to upgrade or installation tips (if necessary)
214 - a link to upgrade or installation tips (if necessary)
215
215
216 Post the announcement to the mailing list and or blog, and link from Twitter.
216 Post the announcement to the mailing list and or blog, and link from Twitter.
217
217
218 .. note::
218 .. note::
219
219
220 If you are doing a RC or Beta, you can likely skip the next steps.
220 If you are doing a RC or Beta, you can likely skip the next steps.
221
221
222 10. Update milestones on GitHub
222 10. Update milestones on GitHub
223 -------------------------------
223 -------------------------------
224
224
225 These steps will bring milestones up to date:
225 These steps will bring milestones up to date:
226
226
227 - close the just released milestone
227 - close the just released milestone
228 - open a new milestone for the next release (x, y+1), if the milestone doesn't
228 - open a new milestone for the next release (x, y+1), if the milestone doesn't
229 exist already
229 exist already
230
230
231 11. Update the IPython website
231 11. Update the IPython website
232 ------------------------------
232 ------------------------------
233
233
234 The IPython website should document the new release:
234 The IPython website should document the new release:
235
235
236 - add release announcement (news, announcements)
236 - add release announcement (news, announcements)
237 - update current version and download links
237 - update current version and download links
238 - update links on the documentation page (especially if a major release)
238 - update links on the documentation page (especially if a major release)
239
239
240 12. Update readthedocs
240 12. Update readthedocs
241 ----------------------
241 ----------------------
242
242
243 Make sure to update readthedocs and set the latest tag as stable, as well as
243 Make sure to update readthedocs and set the latest tag as stable, as well as
244 checking that previous release is still building under its own tag.
244 checking that previous release is still building under its own tag.
245
245
246
246
247 13. Celebrate!
247 13. Celebrate!
248 --------------
248 --------------
249
249
250 Celebrate the release and please thank the contributors for their work. Great
250 Celebrate the release and please thank the contributors for their work. Great
251 job!
251 job!
252
252
@@ -1,175 +1,175 b''
1 Making simple Python wrapper kernels
1 Making simple Python wrapper kernels
2 ====================================
2 ====================================
3
3
4 .. versionadded:: 3.0
4 .. versionadded:: 3.0
5
5
6 You can now re-use the kernel machinery in IPython to easily make new kernels.
6 You can now re-use the kernel machinery in IPython to easily make new kernels.
7 This is useful for languages that have Python bindings, such as `Octave
7 This is useful for languages that have Python bindings, such as `Octave
8 <http://www.gnu.org/software/octave/>`_ (via
8 <http://www.gnu.org/software/octave/>`_ (via
9 `Oct2Py <http://blink1073.github.io/oct2py/docs/index.html>`_), or languages
9 `Oct2Py <http://blink1073.github.io/oct2py/>`_), or languages
10 where the REPL can be controlled in a tty using `pexpect <http://pexpect.readthedocs.io/en/latest/>`_,
10 where the REPL can be controlled in a tty using `pexpect <http://pexpect.readthedocs.io/en/latest/>`_,
11 such as bash.
11 such as bash.
12
12
13 .. seealso::
13 .. seealso::
14
14
15 `bash_kernel <https://github.com/takluyver/bash_kernel>`_
15 `bash_kernel <https://github.com/takluyver/bash_kernel>`_
16 A simple kernel for bash, written using this machinery
16 A simple kernel for bash, written using this machinery
17
17
18 Required steps
18 Required steps
19 --------------
19 --------------
20
20
21 Subclass :class:`ipykernel.kernelbase.Kernel`, and implement the
21 Subclass :class:`ipykernel.kernelbase.Kernel`, and implement the
22 following methods and attributes:
22 following methods and attributes:
23
23
24 .. class:: MyKernel
24 .. class:: MyKernel
25
25
26 .. attribute:: implementation
26 .. attribute:: implementation
27 implementation_version
27 implementation_version
28 language
28 language
29 language_version
29 language_version
30 banner
30 banner
31
31
32 Information for :ref:`msging_kernel_info` replies. 'Implementation' refers
32 Information for :ref:`msging_kernel_info` replies. 'Implementation' refers
33 to the kernel (e.g. IPython), and 'language' refers to the language it
33 to the kernel (e.g. IPython), and 'language' refers to the language it
34 interprets (e.g. Python). The 'banner' is displayed to the user in console
34 interprets (e.g. Python). The 'banner' is displayed to the user in console
35 UIs before the first prompt. All of these values are strings.
35 UIs before the first prompt. All of these values are strings.
36
36
37 .. attribute:: language_info
37 .. attribute:: language_info
38
38
39 Language information for :ref:`msging_kernel_info` replies, in a dictionary.
39 Language information for :ref:`msging_kernel_info` replies, in a dictionary.
40 This should contain the key ``mimetype`` with the mimetype of code in the
40 This should contain the key ``mimetype`` with the mimetype of code in the
41 target language (e.g. ``'text/x-python'``), and ``file_extension`` (e.g.
41 target language (e.g. ``'text/x-python'``), and ``file_extension`` (e.g.
42 ``'py'``).
42 ``'py'``).
43 It may also contain keys ``codemirror_mode`` and ``pygments_lexer`` if they
43 It may also contain keys ``codemirror_mode`` and ``pygments_lexer`` if they
44 need to differ from :attr:`language`.
44 need to differ from :attr:`language`.
45
45
46 Other keys may be added to this later.
46 Other keys may be added to this later.
47
47
48 .. method:: do_execute(code, silent, store_history=True, user_expressions=None, allow_stdin=False)
48 .. method:: do_execute(code, silent, store_history=True, user_expressions=None, allow_stdin=False)
49
49
50 Execute user code.
50 Execute user code.
51
51
52 :param str code: The code to be executed.
52 :param str code: The code to be executed.
53 :param bool silent: Whether to display output.
53 :param bool silent: Whether to display output.
54 :param bool store_history: Whether to record this code in history and
54 :param bool store_history: Whether to record this code in history and
55 increase the execution count. If silent is True, this is implicitly
55 increase the execution count. If silent is True, this is implicitly
56 False.
56 False.
57 :param dict user_expressions: Mapping of names to expressions to evaluate
57 :param dict user_expressions: Mapping of names to expressions to evaluate
58 after the code has run. You can ignore this if you need to.
58 after the code has run. You can ignore this if you need to.
59 :param bool allow_stdin: Whether the frontend can provide input on request
59 :param bool allow_stdin: Whether the frontend can provide input on request
60 (e.g. for Python's :func:`raw_input`).
60 (e.g. for Python's :func:`raw_input`).
61
61
62 Your method should return a dict containing the fields described in
62 Your method should return a dict containing the fields described in
63 :ref:`execution_results`. To display output, it can send messages
63 :ref:`execution_results`. To display output, it can send messages
64 using :meth:`~ipykernel.kernelbase.Kernel.send_response`.
64 using :meth:`~ipykernel.kernelbase.Kernel.send_response`.
65 See :doc:`messaging` for details of the different message types.
65 See :doc:`messaging` for details of the different message types.
66
66
67 To launch your kernel, add this at the end of your module::
67 To launch your kernel, add this at the end of your module::
68
68
69 if __name__ == '__main__':
69 if __name__ == '__main__':
70 from ipykernel.kernelapp import IPKernelApp
70 from ipykernel.kernelapp import IPKernelApp
71 IPKernelApp.launch_instance(kernel_class=MyKernel)
71 IPKernelApp.launch_instance(kernel_class=MyKernel)
72
72
73 Example
73 Example
74 -------
74 -------
75
75
76 ``echokernel.py`` will simply echo any input it's given to stdout::
76 ``echokernel.py`` will simply echo any input it's given to stdout::
77
77
78 from ipykernel.kernelbase import Kernel
78 from ipykernel.kernelbase import Kernel
79
79
80 class EchoKernel(Kernel):
80 class EchoKernel(Kernel):
81 implementation = 'Echo'
81 implementation = 'Echo'
82 implementation_version = '1.0'
82 implementation_version = '1.0'
83 language = 'no-op'
83 language = 'no-op'
84 language_version = '0.1'
84 language_version = '0.1'
85 language_info = {'mimetype': 'text/plain'}
85 language_info = {'mimetype': 'text/plain'}
86 banner = "Echo kernel - as useful as a parrot"
86 banner = "Echo kernel - as useful as a parrot"
87
87
88 def do_execute(self, code, silent, store_history=True, user_expressions=None,
88 def do_execute(self, code, silent, store_history=True, user_expressions=None,
89 allow_stdin=False):
89 allow_stdin=False):
90 if not silent:
90 if not silent:
91 stream_content = {'name': 'stdout', 'text': code}
91 stream_content = {'name': 'stdout', 'text': code}
92 self.send_response(self.iopub_socket, 'stream', stream_content)
92 self.send_response(self.iopub_socket, 'stream', stream_content)
93
93
94 return {'status': 'ok',
94 return {'status': 'ok',
95 # The base class increments the execution count
95 # The base class increments the execution count
96 'execution_count': self.execution_count,
96 'execution_count': self.execution_count,
97 'payload': [],
97 'payload': [],
98 'user_expressions': {},
98 'user_expressions': {},
99 }
99 }
100
100
101 if __name__ == '__main__':
101 if __name__ == '__main__':
102 from ipykernel.kernelapp import IPKernelApp
102 from ipykernel.kernelapp import IPKernelApp
103 IPKernelApp.launch_instance(kernel_class=EchoKernel)
103 IPKernelApp.launch_instance(kernel_class=EchoKernel)
104
104
105 Here's the Kernel spec ``kernel.json`` file for this::
105 Here's the Kernel spec ``kernel.json`` file for this::
106
106
107 {"argv":["python","-m","echokernel", "-f", "{connection_file}"],
107 {"argv":["python","-m","echokernel", "-f", "{connection_file}"],
108 "display_name":"Echo"
108 "display_name":"Echo"
109 }
109 }
110
110
111
111
112 Optional steps
112 Optional steps
113 --------------
113 --------------
114
114
115 You can override a number of other methods to improve the functionality of your
115 You can override a number of other methods to improve the functionality of your
116 kernel. All of these methods should return a dictionary as described in the
116 kernel. All of these methods should return a dictionary as described in the
117 relevant section of the :doc:`messaging spec <messaging>`.
117 relevant section of the :doc:`messaging spec <messaging>`.
118
118
119 .. class:: MyKernel
119 .. class:: MyKernel
120
120
121 .. method:: do_complete(code, cusor_pos)
121 .. method:: do_complete(code, cusor_pos)
122
122
123 Code completion
123 Code completion
124
124
125 :param str code: The code already present
125 :param str code: The code already present
126 :param int cursor_pos: The position in the code where completion is requested
126 :param int cursor_pos: The position in the code where completion is requested
127
127
128 .. seealso::
128 .. seealso::
129
129
130 :ref:`msging_completion` messages
130 :ref:`msging_completion` messages
131
131
132 .. method:: do_inspect(code, cusor_pos, detail_level=0)
132 .. method:: do_inspect(code, cusor_pos, detail_level=0)
133
133
134 Object introspection
134 Object introspection
135
135
136 :param str code: The code
136 :param str code: The code
137 :param int cursor_pos: The position in the code where introspection is requested
137 :param int cursor_pos: The position in the code where introspection is requested
138 :param int detail_level: 0 or 1 for more or less detail. In IPython, 1 gets
138 :param int detail_level: 0 or 1 for more or less detail. In IPython, 1 gets
139 the source code.
139 the source code.
140
140
141 .. seealso::
141 .. seealso::
142
142
143 :ref:`msging_inspection` messages
143 :ref:`msging_inspection` messages
144
144
145 .. method:: do_history(hist_access_type, output, raw, session=None, start=None, stop=None, n=None, pattern=None, unique=False)
145 .. method:: do_history(hist_access_type, output, raw, session=None, start=None, stop=None, n=None, pattern=None, unique=False)
146
146
147 History access. Only the relevant parameters for the type of history
147 History access. Only the relevant parameters for the type of history
148 request concerned will be passed, so your method definition must have defaults
148 request concerned will be passed, so your method definition must have defaults
149 for all the arguments shown with defaults here.
149 for all the arguments shown with defaults here.
150
150
151 .. seealso::
151 .. seealso::
152
152
153 :ref:`msging_history` messages
153 :ref:`msging_history` messages
154
154
155 .. method:: do_is_complete(code)
155 .. method:: do_is_complete(code)
156
156
157 Is code entered in a console-like interface complete and ready to execute,
157 Is code entered in a console-like interface complete and ready to execute,
158 or should a continuation prompt be shown?
158 or should a continuation prompt be shown?
159
159
160 :param str code: The code entered so far - possibly multiple lines
160 :param str code: The code entered so far - possibly multiple lines
161
161
162 .. seealso::
162 .. seealso::
163
163
164 :ref:`msging_is_complete` messages
164 :ref:`msging_is_complete` messages
165
165
166 .. method:: do_shutdown(restart)
166 .. method:: do_shutdown(restart)
167
167
168 Shutdown the kernel. You only need to handle your own clean up - the kernel
168 Shutdown the kernel. You only need to handle your own clean up - the kernel
169 machinery will take care of cleaning up its own things before stopping.
169 machinery will take care of cleaning up its own things before stopping.
170
170
171 :param bool restart: Whether the kernel will be started again afterwards
171 :param bool restart: Whether the kernel will be started again afterwards
172
172
173 .. seealso::
173 .. seealso::
174
174
175 :ref:`msging_shutdown` messages
175 :ref:`msging_shutdown` messages
@@ -1,1203 +1,1203 b''
1 .. _issues_list_013:
1 .. _issues_list_013:
2
2
3 Issues closed in the 0.13 development cycle
3 Issues closed in the 0.13 development cycle
4 ===========================================
4 ===========================================
5
5
6 Issues closed in 0.13
6 Issues closed in 0.13
7 ---------------------
7 ---------------------
8
8
9 GitHub stats since IPython 0.12 (2011/12/19 - 2012/06/30)
9 GitHub stats since IPython 0.12 (2011/12/19 - 2012/06/30)
10
10
11 These lists are automatically generated, and may be incomplete or contain
11 These lists are automatically generated, and may be incomplete or contain
12 duplicates.
12 duplicates.
13
13
14 The following 62 authors contributed 1760 commits.
14 The following 62 authors contributed 1760 commits.
15
15
16 * Aaron Culich
16 * Aaron Culich
17 * Aaron Meurer
17 * Aaron Meurer
18 * Alex Kramer
18 * Alex Kramer
19 * Andrew Giessel
19 * Andrew Giessel
20 * Andrew Straw
20 * Andrew Straw
21 * AndrΓ© Matos
21 * AndrΓ© Matos
22 * Aron Ahmadia
22 * Aron Ahmadia
23 * Ben Edwards
23 * Ben Edwards
24 * Benjamin Ragan-Kelley
24 * Benjamin Ragan-Kelley
25 * Bradley M. Froehle
25 * Bradley M. Froehle
26 * Brandon Parsons
26 * Brandon Parsons
27 * Brian E. Granger
27 * Brian E. Granger
28 * Carlos Cordoba
28 * Carlos Cordoba
29 * David Hirschfeld
29 * David Hirschfeld
30 * David Zderic
30 * David Zderic
31 * Ernie French
31 * Ernie French
32 * Fernando Perez
32 * Fernando Perez
33 * Ian Murray
33 * Ian Murray
34 * Jason Grout
34 * Jason Grout
35 * Jens H Nielsen
35 * Jens H Nielsen
36 * Jez Ng
36 * Jez Ng
37 * Jonathan March
37 * Jonathan March
38 * Jonathan Taylor
38 * Jonathan Taylor
39 * Julian Taylor
39 * Julian Taylor
40 * JΓΆrgen Stenarson
40 * JΓΆrgen Stenarson
41 * Kent Inverarity
41 * Kent Inverarity
42 * Marc Abramowitz
42 * Marc Abramowitz
43 * Mark Wiebe
43 * Mark Wiebe
44 * Matthew Brett
44 * Matthew Brett
45 * Matthias BUSSONNIER
45 * Matthias BUSSONNIER
46 * Michael Droettboom
46 * Michael Droettboom
47 * Mike Hansen
47 * Mike Hansen
48 * Nathan Rice
48 * Nathan Rice
49 * Pankaj Pandey
49 * Pankaj Pandey
50 * Paul
50 * Paul
51 * Paul Ivanov
51 * Paul Ivanov
52 * Piotr Zolnierczuk
52 * Piotr Zolnierczuk
53 * Piti Ongmongkolkul
53 * Piti Ongmongkolkul
54 * Puneeth Chaganti
54 * Puneeth Chaganti
55 * Robert Kern
55 * Robert Kern
56 * Ross Jones
56 * Ross Jones
57 * Roy Hyunjin Han
57 * Roy Hyunjin Han
58 * Scott Tsai
58 * Scott Tsai
59 * Skipper Seabold
59 * Skipper Seabold
60 * Stefan van der Walt
60 * Stefan van der Walt
61 * Steven Johnson
61 * Steven Johnson
62 * Takafumi Arakaki
62 * Takafumi Arakaki
63 * Ted Wright
63 * Ted Wright
64 * Thomas Hisch
64 * Thomas Hisch
65 * Thomas Kluyver
65 * Thomas Kluyver
66 * Thomas Spura
66 * Thomas Spura
67 * Thomi Richards
67 * Thomi Richards
68 * Tim Couper
68 * Tim Couper
69 * Timo Paulssen
69 * Timo Paulssen
70 * Toby Gilham
70 * Toby Gilham
71 * Tony S Yu
71 * Tony S Yu
72 * W. Trevor King
72 * W. Trevor King
73 * Walter Doerwald
73 * Walter Doerwald
74 * anatoly techtonik
74 * anatoly techtonik
75 * fawce
75 * fawce
76 * mcelrath
76 * mcelrath
77 * wilsaj
77 * wilsaj
78
78
79
79
80 We closed a total of 1115 issues, 373 pull requests and 742 regular issues;
80 We closed a total of 1115 issues, 373 pull requests and 742 regular issues;
81 this is the full list (generated with the script
81 this is the full list (generated with the script
82 :file:`tools/github_stats.py`):
82 :file:`tools/github_stats.py`):
83
83
84 Pull Requests (373):
84 Pull Requests (373):
85
85
86 * :ghpull:`1943`: add screenshot and link into releasenotes
86 * :ghpull:`1943`: add screenshot and link into releasenotes
87 * :ghpull:`1954`: update some example notebooks
87 * :ghpull:`1954`: update some example notebooks
88 * :ghpull:`2048`: move _encode_binary to jsonutil.encode_images
88 * :ghpull:`2048`: move _encode_binary to jsonutil.encode_images
89 * :ghpull:`2050`: only add quotes around xunit-file on Windows
89 * :ghpull:`2050`: only add quotes around xunit-file on Windows
90 * :ghpull:`2047`: disable auto-scroll on mozilla
90 * :ghpull:`2047`: disable auto-scroll on mozilla
91 * :ghpull:`2015`: Fixes for %paste with special transformations
91 * :ghpull:`2015`: Fixes for %paste with special transformations
92 * :ghpull:`2046`: Iptest unicode
92 * :ghpull:`2046`: Iptest unicode
93 * :ghpull:`1939`: Namespaces
93 * :ghpull:`1939`: Namespaces
94 * :ghpull:`2042`: increase auto-scroll threshold to 100 lines
94 * :ghpull:`2042`: increase auto-scroll threshold to 100 lines
95 * :ghpull:`2043`: move RemoteError import to top-level
95 * :ghpull:`2043`: move RemoteError import to top-level
96 * :ghpull:`2036`: %alias_magic
96 * :ghpull:`2036`: %alias_magic
97 * :ghpull:`1968`: Proposal of icons for .ipynb files
97 * :ghpull:`1968`: Proposal of icons for .ipynb files
98 * :ghpull:`2037`: remove `ipython-qtconsole` gui-script
98 * :ghpull:`2037`: remove `ipython-qtconsole` gui-script
99 * :ghpull:`2038`: add extra clear warning to shell doc
99 * :ghpull:`2038`: add extra clear warning to shell doc
100 * :ghpull:`2029`: Ship unminified js
100 * :ghpull:`2029`: Ship unminified js
101 * :ghpull:`2007`: Add custom_control and custom_page_control variables to override the Qt widgets used by qtconsole
101 * :ghpull:`2007`: Add custom_control and custom_page_control variables to override the Qt widgets used by qtconsole
102 * :ghpull:`2034`: fix&test push/pull recarrays
102 * :ghpull:`2034`: fix&test push/pull recarrays
103 * :ghpull:`2028`: Reduce unhelpful information shown by pinfo
103 * :ghpull:`2028`: Reduce unhelpful information shown by pinfo
104 * :ghpull:`2030`: check wxPython version in inputhook
104 * :ghpull:`2030`: check wxPython version in inputhook
105 * :ghpull:`2024`: Make interactive_usage a bit more rst friendly
105 * :ghpull:`2024`: Make interactive_usage a bit more rst friendly
106 * :ghpull:`2031`: disable ^C^C confirmation on Windows
106 * :ghpull:`2031`: disable ^C^C confirmation on Windows
107 * :ghpull:`2027`: match stdin encoding in frontend readline test
107 * :ghpull:`2027`: match stdin encoding in frontend readline test
108 * :ghpull:`2025`: Fix parallel test on WinXP - wait for resource cleanup.
108 * :ghpull:`2025`: Fix parallel test on WinXP - wait for resource cleanup.
109 * :ghpull:`2016`: BUG: test runner fails in Windows if filenames contain spaces.
109 * :ghpull:`2016`: BUG: test runner fails in Windows if filenames contain spaces.
110 * :ghpull:`2020`: Fix home path expansion test in Windows.
110 * :ghpull:`2020`: Fix home path expansion test in Windows.
111 * :ghpull:`2021`: Fix Windows pathname issue in 'odd encoding' test.
111 * :ghpull:`2021`: Fix Windows pathname issue in 'odd encoding' test.
112 * :ghpull:`2022`: don't check writability in test for get_home_dir when HOME is undefined
112 * :ghpull:`2022`: don't check writability in test for get_home_dir when HOME is undefined
113 * :ghpull:`1996`: frontend test tweaks
113 * :ghpull:`1996`: frontend test tweaks
114 * :ghpull:`2014`: relax profile regex in notebook
114 * :ghpull:`2014`: relax profile regex in notebook
115 * :ghpull:`2012`: Mono cursor offset
115 * :ghpull:`2012`: Mono cursor offset
116 * :ghpull:`2004`: Clarify generic message spec vs. Python message API in docs
116 * :ghpull:`2004`: Clarify generic message spec vs. Python message API in docs
117 * :ghpull:`2010`: notebook: Print a warning (but do not abort) if no webbrowser can be found.
117 * :ghpull:`2010`: notebook: Print a warning (but do not abort) if no webbrowser can be found.
118 * :ghpull:`2002`: Refactor %magic into a lsmagic_docs API function.
118 * :ghpull:`2002`: Refactor %magic into a lsmagic_docs API function.
119 * :ghpull:`1999`: `%magic` help: display line and cell magics in alphabetical order.
119 * :ghpull:`1999`: `%magic` help: display line and cell magics in alphabetical order.
120 * :ghpull:`1981`: Clean BG processes created by %%script on kernel exit
120 * :ghpull:`1981`: Clean BG processes created by %%script on kernel exit
121 * :ghpull:`1994`: Fix RST misformatting.
121 * :ghpull:`1994`: Fix RST misformatting.
122 * :ghpull:`1951`: minor notebook startup/notebook-dir adjustments
122 * :ghpull:`1951`: minor notebook startup/notebook-dir adjustments
123 * :ghpull:`1974`: Allow path completion on notebook.
123 * :ghpull:`1974`: Allow path completion on notebook.
124 * :ghpull:`1964`: allow multiple instances of a Magic
124 * :ghpull:`1964`: allow multiple instances of a Magic
125 * :ghpull:`1991`: fix _ofind attr in %page
125 * :ghpull:`1991`: fix _ofind attr in %page
126 * :ghpull:`1988`: check for active frontend in update_restart_checkbox
126 * :ghpull:`1988`: check for active frontend in update_restart_checkbox
127 * :ghpull:`1979`: Add support for tox (http://tox.testrun.org/) and Travis CI (http://travis-ci.org/)
127 * :ghpull:`1979`: Add support for tox (https://tox.readthedocs.io/) and Travis CI (http://travis-ci.org/)
128 * :ghpull:`1970`: dblclick to restore size of images
128 * :ghpull:`1970`: dblclick to restore size of images
129 * :ghpull:`1978`: Notebook names truncating at the first period
129 * :ghpull:`1978`: Notebook names truncating at the first period
130 * :ghpull:`1825`: second attempt at scrolled long output
130 * :ghpull:`1825`: second attempt at scrolled long output
131 * :ghpull:`1934`: Cell/Worksheet metadata
131 * :ghpull:`1934`: Cell/Worksheet metadata
132 * :ghpull:`1746`: Confirm restart (configuration option, and checkbox UI)
132 * :ghpull:`1746`: Confirm restart (configuration option, and checkbox UI)
133 * :ghpull:`1944`: [qtconsole] take %,%% prefix into account for completion
133 * :ghpull:`1944`: [qtconsole] take %,%% prefix into account for completion
134 * :ghpull:`1973`: fix another FreeBSD $HOME symlink issue
134 * :ghpull:`1973`: fix another FreeBSD $HOME symlink issue
135 * :ghpull:`1967`: Fix psums example description in docs
135 * :ghpull:`1967`: Fix psums example description in docs
136 * :ghpull:`1965`: fix for #1678, undo no longer clears cells
136 * :ghpull:`1965`: fix for #1678, undo no longer clears cells
137 * :ghpull:`1952`: avoid duplicate "Websockets closed" dialog on ws close
137 * :ghpull:`1952`: avoid duplicate "Websockets closed" dialog on ws close
138 * :ghpull:`1962`: Support unicode prompts
138 * :ghpull:`1962`: Support unicode prompts
139 * :ghpull:`1955`: update to latest version of vim-ipython
139 * :ghpull:`1955`: update to latest version of vim-ipython
140 * :ghpull:`1945`: Add --proc option to %%script
140 * :ghpull:`1945`: Add --proc option to %%script
141 * :ghpull:`1956`: move import RemoteError after get_exc_info
141 * :ghpull:`1956`: move import RemoteError after get_exc_info
142 * :ghpull:`1950`: Fix for copy action (Ctrl+C) when there is no pager defined in qtconsole
142 * :ghpull:`1950`: Fix for copy action (Ctrl+C) when there is no pager defined in qtconsole
143 * :ghpull:`1948`: Fix help string for InteractiveShell.ast_node_interactivity
143 * :ghpull:`1948`: Fix help string for InteractiveShell.ast_node_interactivity
144 * :ghpull:`1942`: swallow stderr of which in utils.process.find_cmd
144 * :ghpull:`1942`: swallow stderr of which in utils.process.find_cmd
145 * :ghpull:`1940`: fix completer css on some Chrome versions
145 * :ghpull:`1940`: fix completer css on some Chrome versions
146 * :ghpull:`1938`: remove remaining references to deprecated XREP/XREQ names
146 * :ghpull:`1938`: remove remaining references to deprecated XREP/XREQ names
147 * :ghpull:`1925`: Fix styling of superscripts and subscripts. Closes #1924.
147 * :ghpull:`1925`: Fix styling of superscripts and subscripts. Closes #1924.
148 * :ghpull:`1936`: increase duration of save messages
148 * :ghpull:`1936`: increase duration of save messages
149 * :ghpull:`1937`: add %save -f
149 * :ghpull:`1937`: add %save -f
150 * :ghpull:`1935`: add version checking to pyreadline import test
150 * :ghpull:`1935`: add version checking to pyreadline import test
151 * :ghpull:`1849`: Octave magics
151 * :ghpull:`1849`: Octave magics
152 * :ghpull:`1759`: github, merge PR(s) just by number(s)
152 * :ghpull:`1759`: github, merge PR(s) just by number(s)
153 * :ghpull:`1931`: Win py3fixes
153 * :ghpull:`1931`: Win py3fixes
154 * :ghpull:`1933`: oinspect.find_file: Additional safety if file cannot be found.
154 * :ghpull:`1933`: oinspect.find_file: Additional safety if file cannot be found.
155 * :ghpull:`1932`: Fix adding functions to CommandChainDispatcher with equal priority on Py 3
155 * :ghpull:`1932`: Fix adding functions to CommandChainDispatcher with equal priority on Py 3
156 * :ghpull:`1928`: Select NoDB by default
156 * :ghpull:`1928`: Select NoDB by default
157 * :ghpull:`1923`: Add IPython syntax support to the %timeit magic, in line and cell mode
157 * :ghpull:`1923`: Add IPython syntax support to the %timeit magic, in line and cell mode
158 * :ghpull:`1926`: Make completer recognize escaped quotes in strings.
158 * :ghpull:`1926`: Make completer recognize escaped quotes in strings.
159 * :ghpull:`1893`: Update Parallel Magics and Exception Display
159 * :ghpull:`1893`: Update Parallel Magics and Exception Display
160 * :ghpull:`1921`: magic_arguments: dedent but otherwise preserve indentation.
160 * :ghpull:`1921`: magic_arguments: dedent but otherwise preserve indentation.
161 * :ghpull:`1919`: Use oinspect in CodeMagics._find_edit_target
161 * :ghpull:`1919`: Use oinspect in CodeMagics._find_edit_target
162 * :ghpull:`1918`: don't warn in iptest if deathrow/quarantine are missing
162 * :ghpull:`1918`: don't warn in iptest if deathrow/quarantine are missing
163 * :ghpull:`1917`: Fix for %pdef on Python 3
163 * :ghpull:`1917`: Fix for %pdef on Python 3
164 * :ghpull:`1913`: Fix for #1428
164 * :ghpull:`1913`: Fix for #1428
165 * :ghpull:`1911`: temporarily skip autoreload tests
165 * :ghpull:`1911`: temporarily skip autoreload tests
166 * :ghpull:`1909`: Fix for #1908, use os.path.normcase for safe filename comparisons
166 * :ghpull:`1909`: Fix for #1908, use os.path.normcase for safe filename comparisons
167 * :ghpull:`1907`: py3compat fixes for %%script and tests
167 * :ghpull:`1907`: py3compat fixes for %%script and tests
168 * :ghpull:`1906`: ofind finds non-unique cell magics
168 * :ghpull:`1906`: ofind finds non-unique cell magics
169 * :ghpull:`1845`: Fixes to inspection machinery for magics
169 * :ghpull:`1845`: Fixes to inspection machinery for magics
170 * :ghpull:`1902`: Workaround fix for gh-1632; minimal revert of gh-1424
170 * :ghpull:`1902`: Workaround fix for gh-1632; minimal revert of gh-1424
171 * :ghpull:`1900`: Cython libs
171 * :ghpull:`1900`: Cython libs
172 * :ghpull:`1899`: add ScriptMagics to class list for generated config
172 * :ghpull:`1899`: add ScriptMagics to class list for generated config
173 * :ghpull:`1898`: minimize manpages
173 * :ghpull:`1898`: minimize manpages
174 * :ghpull:`1897`: use glob for bad exclusion warning
174 * :ghpull:`1897`: use glob for bad exclusion warning
175 * :ghpull:`1855`: %%script and %%file magics
175 * :ghpull:`1855`: %%script and %%file magics
176 * :ghpull:`1870`: add %%capture for capturing stdout/err
176 * :ghpull:`1870`: add %%capture for capturing stdout/err
177 * :ghpull:`1861`: Use dvipng to format sympy.Matrix
177 * :ghpull:`1861`: Use dvipng to format sympy.Matrix
178 * :ghpull:`1867`: Fix 1px margin bouncing of selected menu item.
178 * :ghpull:`1867`: Fix 1px margin bouncing of selected menu item.
179 * :ghpull:`1889`: Reconnect when the websocket connection closes unexpectedly
179 * :ghpull:`1889`: Reconnect when the websocket connection closes unexpectedly
180 * :ghpull:`1886`: Fix a bug in renaming notebook
180 * :ghpull:`1886`: Fix a bug in renaming notebook
181 * :ghpull:`1895`: Fix error in test suite with ip.system()
181 * :ghpull:`1895`: Fix error in test suite with ip.system()
182 * :ghpull:`1762`: add `locate` entry points
182 * :ghpull:`1762`: add `locate` entry points
183 * :ghpull:`1883`: Fix vertical offset due to bold/italics, and bad browser fonts.
183 * :ghpull:`1883`: Fix vertical offset due to bold/italics, and bad browser fonts.
184 * :ghpull:`1875`: re-write columnize, with intermediate step.
184 * :ghpull:`1875`: re-write columnize, with intermediate step.
185 * :ghpull:`1851`: new completer for qtconsole.
185 * :ghpull:`1851`: new completer for qtconsole.
186 * :ghpull:`1892`: Remove suspicious quotes in interactiveshell.py
186 * :ghpull:`1892`: Remove suspicious quotes in interactiveshell.py
187 * :ghpull:`1864`: Rmagic exceptions
187 * :ghpull:`1864`: Rmagic exceptions
188 * :ghpull:`1829`: [notebook] don't care about leading prct in completion
188 * :ghpull:`1829`: [notebook] don't care about leading prct in completion
189 * :ghpull:`1832`: Make svg, jpeg and png images resizable in notebook.
189 * :ghpull:`1832`: Make svg, jpeg and png images resizable in notebook.
190 * :ghpull:`1674`: HTML Notebook carriage-return handling, take 2
190 * :ghpull:`1674`: HTML Notebook carriage-return handling, take 2
191 * :ghpull:`1882`: Remove importlib dependency which not available in Python 2.6.
191 * :ghpull:`1882`: Remove importlib dependency which not available in Python 2.6.
192 * :ghpull:`1879`: Correct stack depth for variable expansion in !system commands
192 * :ghpull:`1879`: Correct stack depth for variable expansion in !system commands
193 * :ghpull:`1841`: [notebook] deduplicate completion results
193 * :ghpull:`1841`: [notebook] deduplicate completion results
194 * :ghpull:`1850`: Remove args/kwargs handling in TryNext, fix %paste error messages.
194 * :ghpull:`1850`: Remove args/kwargs handling in TryNext, fix %paste error messages.
195 * :ghpull:`1663`: Keep line-endings in ipynb
195 * :ghpull:`1663`: Keep line-endings in ipynb
196 * :ghpull:`1815`: Make : invalid in filenames in the Notebook JS code.
196 * :ghpull:`1815`: Make : invalid in filenames in the Notebook JS code.
197 * :ghpull:`1819`: doc: cleanup the parallel psums example a little
197 * :ghpull:`1819`: doc: cleanup the parallel psums example a little
198 * :ghpull:`1839`: External cleanup
198 * :ghpull:`1839`: External cleanup
199 * :ghpull:`1782`: fix Magic menu in qtconsole, split in groups
199 * :ghpull:`1782`: fix Magic menu in qtconsole, split in groups
200 * :ghpull:`1862`: Minor bind_kernel improvements
200 * :ghpull:`1862`: Minor bind_kernel improvements
201 * :ghpull:`1857`: Prevent jumping of window to input when output is clicked.
201 * :ghpull:`1857`: Prevent jumping of window to input when output is clicked.
202 * :ghpull:`1856`: Fix 1px jumping of cells and menus in Notebook.
202 * :ghpull:`1856`: Fix 1px jumping of cells and menus in Notebook.
203 * :ghpull:`1852`: fix chained resubmissions
203 * :ghpull:`1852`: fix chained resubmissions
204 * :ghpull:`1780`: Rmagic extension
204 * :ghpull:`1780`: Rmagic extension
205 * :ghpull:`1847`: add InlineBackend to ConsoleApp class list
205 * :ghpull:`1847`: add InlineBackend to ConsoleApp class list
206 * :ghpull:`1836`: preserve header for resubmitted tasks
206 * :ghpull:`1836`: preserve header for resubmitted tasks
207 * :ghpull:`1828`: change default extension to .ipy for %save -r
207 * :ghpull:`1828`: change default extension to .ipy for %save -r
208 * :ghpull:`1800`: Reintroduce recall
208 * :ghpull:`1800`: Reintroduce recall
209 * :ghpull:`1830`: lsmagic lists magics in alphabetical order
209 * :ghpull:`1830`: lsmagic lists magics in alphabetical order
210 * :ghpull:`1773`: Update SymPy profile: SymPy's latex() can now print set and frozenset
210 * :ghpull:`1773`: Update SymPy profile: SymPy's latex() can now print set and frozenset
211 * :ghpull:`1761`: Edited documentation to use IPYTHONDIR in place of ~/.ipython
211 * :ghpull:`1761`: Edited documentation to use IPYTHONDIR in place of ~/.ipython
212 * :ghpull:`1822`: aesthetics pass on AsyncResult.display_outputs
212 * :ghpull:`1822`: aesthetics pass on AsyncResult.display_outputs
213 * :ghpull:`1821`: ENTER submits the rename notebook dialog.
213 * :ghpull:`1821`: ENTER submits the rename notebook dialog.
214 * :ghpull:`1820`: NotebookApp: Make the number of ports to retry user configurable.
214 * :ghpull:`1820`: NotebookApp: Make the number of ports to retry user configurable.
215 * :ghpull:`1816`: Always use filename as the notebook name.
215 * :ghpull:`1816`: Always use filename as the notebook name.
216 * :ghpull:`1813`: Add assert_in method to nose for Python 2.6
216 * :ghpull:`1813`: Add assert_in method to nose for Python 2.6
217 * :ghpull:`1711`: New Tooltip, New Completer and JS Refactor
217 * :ghpull:`1711`: New Tooltip, New Completer and JS Refactor
218 * :ghpull:`1798`: a few simple fixes for docs/parallel
218 * :ghpull:`1798`: a few simple fixes for docs/parallel
219 * :ghpull:`1812`: Ensure AsyncResult.display_outputs doesn't display empty streams
219 * :ghpull:`1812`: Ensure AsyncResult.display_outputs doesn't display empty streams
220 * :ghpull:`1811`: warn on nonexistent exclusions in iptest
220 * :ghpull:`1811`: warn on nonexistent exclusions in iptest
221 * :ghpull:`1810`: fix for #1809, failing tests in IPython.zmq
221 * :ghpull:`1810`: fix for #1809, failing tests in IPython.zmq
222 * :ghpull:`1808`: Reposition alternate upload for firefox [need cross browser/OS/language test]
222 * :ghpull:`1808`: Reposition alternate upload for firefox [need cross browser/OS/language test]
223 * :ghpull:`1742`: Check for custom_exceptions only once
223 * :ghpull:`1742`: Check for custom_exceptions only once
224 * :ghpull:`1807`: add missing cython exclusion in iptest
224 * :ghpull:`1807`: add missing cython exclusion in iptest
225 * :ghpull:`1805`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with m...
225 * :ghpull:`1805`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with m...
226 * :ghpull:`1739`: Dashboard improvement (necessary merge of #1658 and #1676 + fix #1492)
226 * :ghpull:`1739`: Dashboard improvement (necessary merge of #1658 and #1676 + fix #1492)
227 * :ghpull:`1770`: Cython related magic functions
227 * :ghpull:`1770`: Cython related magic functions
228 * :ghpull:`1707`: Accept --gui=<...> switch in IPython qtconsole.
228 * :ghpull:`1707`: Accept --gui=<...> switch in IPython qtconsole.
229 * :ghpull:`1797`: Fix comment which breaks Emacs syntax highlighting.
229 * :ghpull:`1797`: Fix comment which breaks Emacs syntax highlighting.
230 * :ghpull:`1795`: fix %gui magic
230 * :ghpull:`1795`: fix %gui magic
231 * :ghpull:`1793`: Raise repr limit for strings to 80 characters (from 30).
231 * :ghpull:`1793`: Raise repr limit for strings to 80 characters (from 30).
232 * :ghpull:`1794`: don't use XDG path on OS X
232 * :ghpull:`1794`: don't use XDG path on OS X
233 * :ghpull:`1792`: Unicode-aware logger
233 * :ghpull:`1792`: Unicode-aware logger
234 * :ghpull:`1791`: update zmqshell magics
234 * :ghpull:`1791`: update zmqshell magics
235 * :ghpull:`1787`: DOC: Remove regression from qt-console docs.
235 * :ghpull:`1787`: DOC: Remove regression from qt-console docs.
236 * :ghpull:`1758`: test_pr, fallback on http if git protocol fail, and SSL errors...
236 * :ghpull:`1758`: test_pr, fallback on http if git protocol fail, and SSL errors...
237 * :ghpull:`1748`: Fix some tests for Python 3.3
237 * :ghpull:`1748`: Fix some tests for Python 3.3
238 * :ghpull:`1755`: test for pygments before running qt tests
238 * :ghpull:`1755`: test for pygments before running qt tests
239 * :ghpull:`1771`: Make default value of interactivity passed to run_ast_nodes configurable
239 * :ghpull:`1771`: Make default value of interactivity passed to run_ast_nodes configurable
240 * :ghpull:`1784`: restore loadpy to load
240 * :ghpull:`1784`: restore loadpy to load
241 * :ghpull:`1768`: Update parallel magics
241 * :ghpull:`1768`: Update parallel magics
242 * :ghpull:`1779`: Tidy up error raising in magic decorators.
242 * :ghpull:`1779`: Tidy up error raising in magic decorators.
243 * :ghpull:`1769`: Allow cell mode timeit without setup code.
243 * :ghpull:`1769`: Allow cell mode timeit without setup code.
244 * :ghpull:`1716`: Fix for fake filenames in verbose traceback
244 * :ghpull:`1716`: Fix for fake filenames in verbose traceback
245 * :ghpull:`1763`: [qtconsole] fix append_plain_html -> append_html
245 * :ghpull:`1763`: [qtconsole] fix append_plain_html -> append_html
246 * :ghpull:`1732`: Refactoring of the magics system and implementation of cell magics
246 * :ghpull:`1732`: Refactoring of the magics system and implementation of cell magics
247 * :ghpull:`1630`: Merge divergent Kernel implementations
247 * :ghpull:`1630`: Merge divergent Kernel implementations
248 * :ghpull:`1705`: [notebook] Make pager resizable, and remember size...
248 * :ghpull:`1705`: [notebook] Make pager resizable, and remember size...
249 * :ghpull:`1606`: Share code for %pycat and %loadpy, make %pycat aware of URLs
249 * :ghpull:`1606`: Share code for %pycat and %loadpy, make %pycat aware of URLs
250 * :ghpull:`1757`: Open IPython notebook hyperlinks in a new window using target=_blank
250 * :ghpull:`1757`: Open IPython notebook hyperlinks in a new window using target=_blank
251 * :ghpull:`1754`: Fix typo enconters->encounters
251 * :ghpull:`1754`: Fix typo enconters->encounters
252 * :ghpull:`1753`: Clear window title when kernel is restarted
252 * :ghpull:`1753`: Clear window title when kernel is restarted
253 * :ghpull:`1449`: Fix for bug #735 : Images missing from XML/SVG export
253 * :ghpull:`1449`: Fix for bug #735 : Images missing from XML/SVG export
254 * :ghpull:`1743`: Tooltip completer js refactor
254 * :ghpull:`1743`: Tooltip completer js refactor
255 * :ghpull:`1681`: add qt config option to clear_on_kernel_restart
255 * :ghpull:`1681`: add qt config option to clear_on_kernel_restart
256 * :ghpull:`1733`: Tooltip completer js refactor
256 * :ghpull:`1733`: Tooltip completer js refactor
257 * :ghpull:`1727`: terminate kernel after embed_kernel tests
257 * :ghpull:`1727`: terminate kernel after embed_kernel tests
258 * :ghpull:`1737`: add HistoryManager to ipapp class list
258 * :ghpull:`1737`: add HistoryManager to ipapp class list
259 * :ghpull:`1686`: ENH: Open a notebook from the command line
259 * :ghpull:`1686`: ENH: Open a notebook from the command line
260 * :ghpull:`1709`: fixes #1708, failing test in arg_split on windows
260 * :ghpull:`1709`: fixes #1708, failing test in arg_split on windows
261 * :ghpull:`1718`: Use CRegExp trait for regular expressions.
261 * :ghpull:`1718`: Use CRegExp trait for regular expressions.
262 * :ghpull:`1729`: Catch failure in repr() for %whos
262 * :ghpull:`1729`: Catch failure in repr() for %whos
263 * :ghpull:`1726`: use eval for command-line args instead of exec
263 * :ghpull:`1726`: use eval for command-line args instead of exec
264 * :ghpull:`1724`: fix scatter/gather with targets='all'
264 * :ghpull:`1724`: fix scatter/gather with targets='all'
265 * :ghpull:`1725`: add --no-ff to git pull in test_pr
265 * :ghpull:`1725`: add --no-ff to git pull in test_pr
266 * :ghpull:`1721`: Tooltip completer js refactor
266 * :ghpull:`1721`: Tooltip completer js refactor
267 * :ghpull:`1657`: Add `wait` optional argument to `hooks.editor`
267 * :ghpull:`1657`: Add `wait` optional argument to `hooks.editor`
268 * :ghpull:`1717`: Define generic sys.ps{1,2,3}, for use by scripts.
268 * :ghpull:`1717`: Define generic sys.ps{1,2,3}, for use by scripts.
269 * :ghpull:`1691`: Finish PR #1446
269 * :ghpull:`1691`: Finish PR #1446
270 * :ghpull:`1710`: update MathJax CDN url for https
270 * :ghpull:`1710`: update MathJax CDN url for https
271 * :ghpull:`1713`: Make autocall regexp's configurable.
271 * :ghpull:`1713`: Make autocall regexp's configurable.
272 * :ghpull:`1703`: Allow TryNext to have an error message without it affecting the command chain
272 * :ghpull:`1703`: Allow TryNext to have an error message without it affecting the command chain
273 * :ghpull:`1714`: minor adjustments to test_pr
273 * :ghpull:`1714`: minor adjustments to test_pr
274 * :ghpull:`1704`: ensure all needed qt parts can be imported before settling for one
274 * :ghpull:`1704`: ensure all needed qt parts can be imported before settling for one
275 * :ghpull:`1706`: Mark test_push_numpy_nocopy as a known failure for Python 3
275 * :ghpull:`1706`: Mark test_push_numpy_nocopy as a known failure for Python 3
276 * :ghpull:`1698`: fix tooltip on token with number
276 * :ghpull:`1698`: fix tooltip on token with number
277 * :ghpull:`1245`: pythonw py3k fixes for issue #1226
277 * :ghpull:`1245`: pythonw py3k fixes for issue #1226
278 * :ghpull:`1685`: Add script to test pull request
278 * :ghpull:`1685`: Add script to test pull request
279 * :ghpull:`1693`: deprecate IPYTHON_DIR in favor of IPYTHONDIR
279 * :ghpull:`1693`: deprecate IPYTHON_DIR in favor of IPYTHONDIR
280 * :ghpull:`1695`: Avoid deprecated warnings from ipython-qtconsole.desktop.
280 * :ghpull:`1695`: Avoid deprecated warnings from ipython-qtconsole.desktop.
281 * :ghpull:`1694`: Add quote to notebook to allow it to load
281 * :ghpull:`1694`: Add quote to notebook to allow it to load
282 * :ghpull:`1689`: Fix sys.path missing '' as first entry in `ipython kernel`.
282 * :ghpull:`1689`: Fix sys.path missing '' as first entry in `ipython kernel`.
283 * :ghpull:`1687`: import Binary from bson instead of pymongo
283 * :ghpull:`1687`: import Binary from bson instead of pymongo
284 * :ghpull:`1616`: Make IPython.core.display.Image less notebook-centric
284 * :ghpull:`1616`: Make IPython.core.display.Image less notebook-centric
285 * :ghpull:`1684`: CLN: Remove redundant function definition.
285 * :ghpull:`1684`: CLN: Remove redundant function definition.
286 * :ghpull:`1670`: Point %pastebin to gist
286 * :ghpull:`1670`: Point %pastebin to gist
287 * :ghpull:`1669`: handle pyout messages in test_message_spec
287 * :ghpull:`1669`: handle pyout messages in test_message_spec
288 * :ghpull:`1295`: add binary-tree engine interconnect example
288 * :ghpull:`1295`: add binary-tree engine interconnect example
289 * :ghpull:`1642`: Cherry-picked commits from 0.12.1 release
289 * :ghpull:`1642`: Cherry-picked commits from 0.12.1 release
290 * :ghpull:`1659`: Handle carriage return characters ("\r") in HTML notebook output.
290 * :ghpull:`1659`: Handle carriage return characters ("\r") in HTML notebook output.
291 * :ghpull:`1656`: ensure kernels are cleaned up in embed_kernel tests
291 * :ghpull:`1656`: ensure kernels are cleaned up in embed_kernel tests
292 * :ghpull:`1664`: InteractiveShell.run_code: Update docstring.
292 * :ghpull:`1664`: InteractiveShell.run_code: Update docstring.
293 * :ghpull:`1662`: Delay flushing softspace until after cell finishes
293 * :ghpull:`1662`: Delay flushing softspace until after cell finishes
294 * :ghpull:`1643`: handle jpg/jpeg in the qtconsole
294 * :ghpull:`1643`: handle jpg/jpeg in the qtconsole
295 * :ghpull:`1652`: add patch_pyzmq() for backporting a few changes from newer pyzmq
295 * :ghpull:`1652`: add patch_pyzmq() for backporting a few changes from newer pyzmq
296 * :ghpull:`1650`: DOC: moving files with SSH launchers
296 * :ghpull:`1650`: DOC: moving files with SSH launchers
297 * :ghpull:`1357`: add IPython.embed_kernel()
297 * :ghpull:`1357`: add IPython.embed_kernel()
298 * :ghpull:`1640`: Finish up embed_kernel
298 * :ghpull:`1640`: Finish up embed_kernel
299 * :ghpull:`1651`: Remove bundled Itpl module
299 * :ghpull:`1651`: Remove bundled Itpl module
300 * :ghpull:`1634`: incremental improvements to SSH launchers
300 * :ghpull:`1634`: incremental improvements to SSH launchers
301 * :ghpull:`1649`: move examples/test_embed into examples/tests/embed
301 * :ghpull:`1649`: move examples/test_embed into examples/tests/embed
302 * :ghpull:`1633`: Fix installing extension from local file on Windows
302 * :ghpull:`1633`: Fix installing extension from local file on Windows
303 * :ghpull:`1645`: Exclude UserDict when deep reloading NumPy.
303 * :ghpull:`1645`: Exclude UserDict when deep reloading NumPy.
304 * :ghpull:`1637`: Removed a ':' which shouldn't have been there
304 * :ghpull:`1637`: Removed a ':' which shouldn't have been there
305 * :ghpull:`1631`: TST: QApplication doesn't quit early enough with PySide.
305 * :ghpull:`1631`: TST: QApplication doesn't quit early enough with PySide.
306 * :ghpull:`1629`: evaluate a few dangling validate_message generators
306 * :ghpull:`1629`: evaluate a few dangling validate_message generators
307 * :ghpull:`1621`: clear In[] prompt numbers on "Clear All Output"
307 * :ghpull:`1621`: clear In[] prompt numbers on "Clear All Output"
308 * :ghpull:`1627`: Test the Message Spec
308 * :ghpull:`1627`: Test the Message Spec
309 * :ghpull:`1624`: Fixes for byte-compilation on Python 3
309 * :ghpull:`1624`: Fixes for byte-compilation on Python 3
310 * :ghpull:`1615`: Add show() method to figure objects.
310 * :ghpull:`1615`: Add show() method to figure objects.
311 * :ghpull:`1625`: Fix deepreload on Python 3
311 * :ghpull:`1625`: Fix deepreload on Python 3
312 * :ghpull:`1620`: pyin message now have execution_count
312 * :ghpull:`1620`: pyin message now have execution_count
313 * :ghpull:`1457`: Update deepreload to use a rewritten knee.py. Fixes dreload(numpy).
313 * :ghpull:`1457`: Update deepreload to use a rewritten knee.py. Fixes dreload(numpy).
314 * :ghpull:`1613`: allow map / parallel function for single-engine views
314 * :ghpull:`1613`: allow map / parallel function for single-engine views
315 * :ghpull:`1609`: exit notebook cleanly on SIGINT, SIGTERM
315 * :ghpull:`1609`: exit notebook cleanly on SIGINT, SIGTERM
316 * :ghpull:`1607`: cleanup sqlitedb temporary db file after tests
316 * :ghpull:`1607`: cleanup sqlitedb temporary db file after tests
317 * :ghpull:`1608`: don't rely on timedelta.total_seconds in AsyncResult
317 * :ghpull:`1608`: don't rely on timedelta.total_seconds in AsyncResult
318 * :ghpull:`1599`: Fix for %run -d on Python 3
318 * :ghpull:`1599`: Fix for %run -d on Python 3
319 * :ghpull:`1602`: Fix %env magic on Python 3.
319 * :ghpull:`1602`: Fix %env magic on Python 3.
320 * :ghpull:`1603`: Remove python3 profile
320 * :ghpull:`1603`: Remove python3 profile
321 * :ghpull:`1604`: Exclude IPython.quarantine from installation
321 * :ghpull:`1604`: Exclude IPython.quarantine from installation
322 * :ghpull:`1600`: Specify encoding for io.open in notebook_reformat tests
322 * :ghpull:`1600`: Specify encoding for io.open in notebook_reformat tests
323 * :ghpull:`1605`: Small fixes for Animation and Progress notebook
323 * :ghpull:`1605`: Small fixes for Animation and Progress notebook
324 * :ghpull:`1529`: __all__ feature, improvement to dir2, and tests for both
324 * :ghpull:`1529`: __all__ feature, improvement to dir2, and tests for both
325 * :ghpull:`1548`: add sugar methods/properties to AsyncResult
325 * :ghpull:`1548`: add sugar methods/properties to AsyncResult
326 * :ghpull:`1535`: Fix pretty printing dispatch
326 * :ghpull:`1535`: Fix pretty printing dispatch
327 * :ghpull:`1399`: Use LaTeX to print various built-in types with the SymPy printing extension
327 * :ghpull:`1399`: Use LaTeX to print various built-in types with the SymPy printing extension
328 * :ghpull:`1597`: re-enter kernel.eventloop after catching SIGINT
328 * :ghpull:`1597`: re-enter kernel.eventloop after catching SIGINT
329 * :ghpull:`1490`: rename plaintext cell -> raw cell
329 * :ghpull:`1490`: rename plaintext cell -> raw cell
330 * :ghpull:`1480`: Fix %notebook magic, etc. nbformat unicode tests and fixes
330 * :ghpull:`1480`: Fix %notebook magic, etc. nbformat unicode tests and fixes
331 * :ghpull:`1588`: Gtk3 integration with ipython works.
331 * :ghpull:`1588`: Gtk3 integration with ipython works.
332 * :ghpull:`1595`: Examples syntax (avoid errors installing on Python 3)
332 * :ghpull:`1595`: Examples syntax (avoid errors installing on Python 3)
333 * :ghpull:`1526`: Find encoding for Python files
333 * :ghpull:`1526`: Find encoding for Python files
334 * :ghpull:`1594`: Fix writing git commit ID to a file on build with Python 3
334 * :ghpull:`1594`: Fix writing git commit ID to a file on build with Python 3
335 * :ghpull:`1556`: shallow-copy DictDB query results
335 * :ghpull:`1556`: shallow-copy DictDB query results
336 * :ghpull:`1502`: small changes in response to pyflakes pass
336 * :ghpull:`1502`: small changes in response to pyflakes pass
337 * :ghpull:`1445`: Don't build sphinx docs for sdists
337 * :ghpull:`1445`: Don't build sphinx docs for sdists
338 * :ghpull:`1538`: store git commit hash in utils._sysinfo instead of hidden data file
338 * :ghpull:`1538`: store git commit hash in utils._sysinfo instead of hidden data file
339 * :ghpull:`1546`: attempt to suppress exceptions in channel threads at shutdown
339 * :ghpull:`1546`: attempt to suppress exceptions in channel threads at shutdown
340 * :ghpull:`1559`: update tools/github_stats.py to use GitHub API v3
340 * :ghpull:`1559`: update tools/github_stats.py to use GitHub API v3
341 * :ghpull:`1563`: clear_output improvements
341 * :ghpull:`1563`: clear_output improvements
342 * :ghpull:`1560`: remove obsolete discussion of Twisted/trial from testing docs
342 * :ghpull:`1560`: remove obsolete discussion of Twisted/trial from testing docs
343 * :ghpull:`1569`: BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561]
343 * :ghpull:`1569`: BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561]
344 * :ghpull:`1573`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole.
344 * :ghpull:`1573`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole.
345 * :ghpull:`1568`: fix PR #1567
345 * :ghpull:`1568`: fix PR #1567
346 * :ghpull:`1567`: Fix: openssh_tunnel did not parse port in `server`
346 * :ghpull:`1567`: Fix: openssh_tunnel did not parse port in `server`
347 * :ghpull:`1565`: fix AsyncResult.abort
347 * :ghpull:`1565`: fix AsyncResult.abort
348 * :ghpull:`1552`: use os.getcwdu in NotebookManager
348 * :ghpull:`1552`: use os.getcwdu in NotebookManager
349 * :ghpull:`1541`: display_pub flushes stdout/err
349 * :ghpull:`1541`: display_pub flushes stdout/err
350 * :ghpull:`1544`: make MultiKernelManager.kernel_manager_class configurable
350 * :ghpull:`1544`: make MultiKernelManager.kernel_manager_class configurable
351 * :ghpull:`1517`: Fix indentation bug in IPython/lib/pretty.py
351 * :ghpull:`1517`: Fix indentation bug in IPython/lib/pretty.py
352 * :ghpull:`1519`: BUG: Include the name of the exception type in its pretty format.
352 * :ghpull:`1519`: BUG: Include the name of the exception type in its pretty format.
353 * :ghpull:`1489`: Fix zero-copy push
353 * :ghpull:`1489`: Fix zero-copy push
354 * :ghpull:`1477`: fix dangling `buffer` in IPython.parallel.util
354 * :ghpull:`1477`: fix dangling `buffer` in IPython.parallel.util
355 * :ghpull:`1514`: DOC: Fix references to IPython.lib.pretty instead of the old location
355 * :ghpull:`1514`: DOC: Fix references to IPython.lib.pretty instead of the old location
356 * :ghpull:`1481`: BUG: Improve placement of CallTipWidget
356 * :ghpull:`1481`: BUG: Improve placement of CallTipWidget
357 * :ghpull:`1496`: BUG: LBYL when clearing the output history on shutdown.
357 * :ghpull:`1496`: BUG: LBYL when clearing the output history on shutdown.
358 * :ghpull:`1508`: fix sorting profiles in clustermanager
358 * :ghpull:`1508`: fix sorting profiles in clustermanager
359 * :ghpull:`1495`: BUG: Fix pretty-printing for overzealous objects
359 * :ghpull:`1495`: BUG: Fix pretty-printing for overzealous objects
360 * :ghpull:`1472`: more general fix for #662
360 * :ghpull:`1472`: more general fix for #662
361 * :ghpull:`1483`: updated magic_history docstring
361 * :ghpull:`1483`: updated magic_history docstring
362 * :ghpull:`1383`: First version of cluster web service.
362 * :ghpull:`1383`: First version of cluster web service.
363 * :ghpull:`1398`: fix %tb after SyntaxError
363 * :ghpull:`1398`: fix %tb after SyntaxError
364 * :ghpull:`1440`: Fix for failing testsuite when using --with-xml-coverage on windows.
364 * :ghpull:`1440`: Fix for failing testsuite when using --with-xml-coverage on windows.
365 * :ghpull:`1419`: Add %install_ext magic function.
365 * :ghpull:`1419`: Add %install_ext magic function.
366 * :ghpull:`1424`: Win32 shell interactivity
366 * :ghpull:`1424`: Win32 shell interactivity
367 * :ghpull:`1468`: Simplify structure of a Job in the TaskScheduler
367 * :ghpull:`1468`: Simplify structure of a Job in the TaskScheduler
368 * :ghpull:`1447`: 1107 - Tab autocompletion can suggest invalid syntax
368 * :ghpull:`1447`: 1107 - Tab autocompletion can suggest invalid syntax
369 * :ghpull:`1469`: Fix typo in comment (insert space)
369 * :ghpull:`1469`: Fix typo in comment (insert space)
370 * :ghpull:`1463`: Fix completion when importing modules in the cwd.
370 * :ghpull:`1463`: Fix completion when importing modules in the cwd.
371 * :ghpull:`1466`: Fix for issue #1437, unfriendly windows qtconsole error handling
371 * :ghpull:`1466`: Fix for issue #1437, unfriendly windows qtconsole error handling
372 * :ghpull:`1432`: Fix ipython directive
372 * :ghpull:`1432`: Fix ipython directive
373 * :ghpull:`1465`: allow `ipython help subcommand` syntax
373 * :ghpull:`1465`: allow `ipython help subcommand` syntax
374 * :ghpull:`1416`: Conditional import of ctypes in inputhook
374 * :ghpull:`1416`: Conditional import of ctypes in inputhook
375 * :ghpull:`1462`: expedite parallel tests
375 * :ghpull:`1462`: expedite parallel tests
376 * :ghpull:`1410`: Add javascript library and css stylesheet loading to JS class.
376 * :ghpull:`1410`: Add javascript library and css stylesheet loading to JS class.
377 * :ghpull:`1448`: Fix for #875 Never build unicode error messages
377 * :ghpull:`1448`: Fix for #875 Never build unicode error messages
378 * :ghpull:`1458`: use eval to uncan References
378 * :ghpull:`1458`: use eval to uncan References
379 * :ghpull:`1450`: load mathjax from CDN via https
379 * :ghpull:`1450`: load mathjax from CDN via https
380 * :ghpull:`1451`: include heading level in JSON
380 * :ghpull:`1451`: include heading level in JSON
381 * :ghpull:`1444`: Fix pyhton -> python typos
381 * :ghpull:`1444`: Fix pyhton -> python typos
382 * :ghpull:`1414`: ignore errors in shell.var_expand
382 * :ghpull:`1414`: ignore errors in shell.var_expand
383 * :ghpull:`1430`: Fix for tornado check for tornado < 1.1.0
383 * :ghpull:`1430`: Fix for tornado check for tornado < 1.1.0
384 * :ghpull:`1413`: get_home_dir expands symlinks, adjust test accordingly
384 * :ghpull:`1413`: get_home_dir expands symlinks, adjust test accordingly
385 * :ghpull:`1385`: updated and prettified magic doc strings
385 * :ghpull:`1385`: updated and prettified magic doc strings
386 * :ghpull:`1406`: Browser selection
386 * :ghpull:`1406`: Browser selection
387 * :ghpull:`1377`: Saving non-ascii history
387 * :ghpull:`1377`: Saving non-ascii history
388 * :ghpull:`1402`: fix symlinked /home issue for FreeBSD
388 * :ghpull:`1402`: fix symlinked /home issue for FreeBSD
389 * :ghpull:`1405`: Only monkeypatch xunit when the tests are run using it.
389 * :ghpull:`1405`: Only monkeypatch xunit when the tests are run using it.
390 * :ghpull:`1395`: Xunit & KnownFailure
390 * :ghpull:`1395`: Xunit & KnownFailure
391 * :ghpull:`1396`: Fix for %tb magic.
391 * :ghpull:`1396`: Fix for %tb magic.
392 * :ghpull:`1386`: Jsd3
392 * :ghpull:`1386`: Jsd3
393 * :ghpull:`1388`: Add simple support for running inside a virtualenv
393 * :ghpull:`1388`: Add simple support for running inside a virtualenv
394 * :ghpull:`1391`: Improve Hub/Scheduler when no engines are registered
394 * :ghpull:`1391`: Improve Hub/Scheduler when no engines are registered
395 * :ghpull:`1369`: load header with engine id when engine dies in TaskScheduler
395 * :ghpull:`1369`: load header with engine id when engine dies in TaskScheduler
396 * :ghpull:`1353`: Save notebook as script using unicode file handle.
396 * :ghpull:`1353`: Save notebook as script using unicode file handle.
397 * :ghpull:`1352`: Add '-m mod : run library module as a script' option.
397 * :ghpull:`1352`: Add '-m mod : run library module as a script' option.
398 * :ghpull:`1363`: Fix some minor color/style config issues in the qtconsole
398 * :ghpull:`1363`: Fix some minor color/style config issues in the qtconsole
399 * :ghpull:`1371`: Adds a quiet keyword to sync_imports
399 * :ghpull:`1371`: Adds a quiet keyword to sync_imports
400 * :ghpull:`1387`: Fixing Cell menu to update cell type select box.
400 * :ghpull:`1387`: Fixing Cell menu to update cell type select box.
401 * :ghpull:`1296`: Wx gui example: fixes the broken example for `%gui wx`.
401 * :ghpull:`1296`: Wx gui example: fixes the broken example for `%gui wx`.
402 * :ghpull:`1372`: ipcontroller cleans up connection files unless reuse=True
402 * :ghpull:`1372`: ipcontroller cleans up connection files unless reuse=True
403 * :ghpull:`1374`: remove calls to meaningless ZMQStream.on_err
403 * :ghpull:`1374`: remove calls to meaningless ZMQStream.on_err
404 * :ghpull:`1370`: allow draft76 websockets (Safari)
404 * :ghpull:`1370`: allow draft76 websockets (Safari)
405 * :ghpull:`1368`: Ensure handler patterns are str, not unicode
405 * :ghpull:`1368`: Ensure handler patterns are str, not unicode
406 * :ghpull:`1361`: Notebook bug fix branch
406 * :ghpull:`1361`: Notebook bug fix branch
407 * :ghpull:`1364`: avoid jsonlib returning Decimal
407 * :ghpull:`1364`: avoid jsonlib returning Decimal
408 * :ghpull:`1362`: Don't log complete contents of history replies, even in debug
408 * :ghpull:`1362`: Don't log complete contents of history replies, even in debug
409 * :ghpull:`1347`: fix weird magic completion in notebook
409 * :ghpull:`1347`: fix weird magic completion in notebook
410 * :ghpull:`1346`: fixups for alternate URL prefix stuff
410 * :ghpull:`1346`: fixups for alternate URL prefix stuff
411 * :ghpull:`1336`: crack at making notebook.html use the layout.html template
411 * :ghpull:`1336`: crack at making notebook.html use the layout.html template
412 * :ghpull:`1331`: RST and heading cells
412 * :ghpull:`1331`: RST and heading cells
413 * :ghpull:`1247`: fixes a bug causing extra newlines after comments.
413 * :ghpull:`1247`: fixes a bug causing extra newlines after comments.
414 * :ghpull:`1332`: notebook - allow prefixes in URL path.
414 * :ghpull:`1332`: notebook - allow prefixes in URL path.
415 * :ghpull:`1341`: Don't attempt to tokenize binary files for tracebacks
415 * :ghpull:`1341`: Don't attempt to tokenize binary files for tracebacks
416 * :ghpull:`1334`: added key handler for control-s to notebook, seems to work pretty well
416 * :ghpull:`1334`: added key handler for control-s to notebook, seems to work pretty well
417 * :ghpull:`1338`: Fix see also in docstrings so API docs build
417 * :ghpull:`1338`: Fix see also in docstrings so API docs build
418 * :ghpull:`1335`: Notebook toolbar UI
418 * :ghpull:`1335`: Notebook toolbar UI
419 * :ghpull:`1299`: made notebook.html extend layout.html
419 * :ghpull:`1299`: made notebook.html extend layout.html
420 * :ghpull:`1318`: make Ctrl-D in qtconsole act same as in terminal (ready to merge)
420 * :ghpull:`1318`: make Ctrl-D in qtconsole act same as in terminal (ready to merge)
421 * :ghpull:`1328`: Coverage
421 * :ghpull:`1328`: Coverage
422 * :ghpull:`1206`: don't preserve fixConsole output in json
422 * :ghpull:`1206`: don't preserve fixConsole output in json
423 * :ghpull:`1330`: Add linewrapping to text cells (new feature in CodeMirror).
423 * :ghpull:`1330`: Add linewrapping to text cells (new feature in CodeMirror).
424 * :ghpull:`1309`: Inoculate clearcmd extension into %reset functionality
424 * :ghpull:`1309`: Inoculate clearcmd extension into %reset functionality
425 * :ghpull:`1327`: Updatecm2
425 * :ghpull:`1327`: Updatecm2
426 * :ghpull:`1326`: Removing Ace edit capability.
426 * :ghpull:`1326`: Removing Ace edit capability.
427 * :ghpull:`1325`: forgotten selected_cell -> get_selected_cell
427 * :ghpull:`1325`: forgotten selected_cell -> get_selected_cell
428 * :ghpull:`1316`: Pass subprocess test runners a suitable location for xunit output
428 * :ghpull:`1316`: Pass subprocess test runners a suitable location for xunit output
429 * :ghpull:`1303`: Updatecm
429 * :ghpull:`1303`: Updatecm
430 * :ghpull:`1312`: minor heartbeat tweaks
430 * :ghpull:`1312`: minor heartbeat tweaks
431 * :ghpull:`1306`: Fix %prun input parsing for escaped characters (closes #1302)
431 * :ghpull:`1306`: Fix %prun input parsing for escaped characters (closes #1302)
432 * :ghpull:`1301`: New "Fix for issue #1202" based on current master.
432 * :ghpull:`1301`: New "Fix for issue #1202" based on current master.
433 * :ghpull:`1289`: Make autoreload extension work on Python 3.
433 * :ghpull:`1289`: Make autoreload extension work on Python 3.
434 * :ghpull:`1288`: Don't ask for confirmation when stdin isn't available
434 * :ghpull:`1288`: Don't ask for confirmation when stdin isn't available
435 * :ghpull:`1294`: TaskScheduler.hwm default to 1 instead of 0
435 * :ghpull:`1294`: TaskScheduler.hwm default to 1 instead of 0
436 * :ghpull:`1283`: HeartMonitor.period should be an Integer
436 * :ghpull:`1283`: HeartMonitor.period should be an Integer
437 * :ghpull:`1264`: Aceify
437 * :ghpull:`1264`: Aceify
438 * :ghpull:`1284`: a fix for GH 1269
438 * :ghpull:`1284`: a fix for GH 1269
439 * :ghpull:`1213`: BUG: Minor typo in history_console_widget.py
439 * :ghpull:`1213`: BUG: Minor typo in history_console_widget.py
440 * :ghpull:`1267`: add NoDB for non-recording Hub
440 * :ghpull:`1267`: add NoDB for non-recording Hub
441 * :ghpull:`1222`: allow Reference as callable in map/apply
441 * :ghpull:`1222`: allow Reference as callable in map/apply
442 * :ghpull:`1257`: use self.kernel_manager_class in qtconsoleapp
442 * :ghpull:`1257`: use self.kernel_manager_class in qtconsoleapp
443 * :ghpull:`1253`: set auto_create flag for notebook apps
443 * :ghpull:`1253`: set auto_create flag for notebook apps
444 * :ghpull:`1262`: Heartbeat no longer shares the app's Context
444 * :ghpull:`1262`: Heartbeat no longer shares the app's Context
445 * :ghpull:`1229`: Fix display of SyntaxError in Python 3
445 * :ghpull:`1229`: Fix display of SyntaxError in Python 3
446 * :ghpull:`1256`: Dewijmoize
446 * :ghpull:`1256`: Dewijmoize
447 * :ghpull:`1246`: Skip tests that require X, when importing pylab results in RuntimeError.
447 * :ghpull:`1246`: Skip tests that require X, when importing pylab results in RuntimeError.
448 * :ghpull:`1211`: serve local files in notebook-dir
448 * :ghpull:`1211`: serve local files in notebook-dir
449 * :ghpull:`1224`: edit text cells on double-click instead of single-click
449 * :ghpull:`1224`: edit text cells on double-click instead of single-click
450 * :ghpull:`1187`: misc notebook: connection file cleanup, first heartbeat, startup flush
450 * :ghpull:`1187`: misc notebook: connection file cleanup, first heartbeat, startup flush
451 * :ghpull:`1207`: fix loadpy duplicating newlines
451 * :ghpull:`1207`: fix loadpy duplicating newlines
452 * :ghpull:`1129`: Unified setup.py
452 * :ghpull:`1129`: Unified setup.py
453 * :ghpull:`1199`: Reduce IPython.external.*
453 * :ghpull:`1199`: Reduce IPython.external.*
454 * :ghpull:`1218`: Added -q option to %prun for suppression of the output, along with editing the dochelp string.
454 * :ghpull:`1218`: Added -q option to %prun for suppression of the output, along with editing the dochelp string.
455 * :ghpull:`1217`: Added -q option to %prun for suppression of the output, along with editing the dochelp string
455 * :ghpull:`1217`: Added -q option to %prun for suppression of the output, along with editing the dochelp string
456 * :ghpull:`1175`: core.completer: Clean up excessive and unused code.
456 * :ghpull:`1175`: core.completer: Clean up excessive and unused code.
457 * :ghpull:`1196`: docs: looks like a file path might have been accidentally pasted in the middle of a word
457 * :ghpull:`1196`: docs: looks like a file path might have been accidentally pasted in the middle of a word
458 * :ghpull:`1190`: Fix link to Chris Fonnesbeck blog post about 0.11 highlights.
458 * :ghpull:`1190`: Fix link to Chris Fonnesbeck blog post about 0.11 highlights.
459
459
460 Issues (742):
460 Issues (742):
461
461
462 * :ghissue:`1943`: add screenshot and link into releasenotes
462 * :ghissue:`1943`: add screenshot and link into releasenotes
463 * :ghissue:`1570`: [notebook] remove 'left panel' references from example.
463 * :ghissue:`1570`: [notebook] remove 'left panel' references from example.
464 * :ghissue:`1954`: update some example notebooks
464 * :ghissue:`1954`: update some example notebooks
465 * :ghissue:`2048`: move _encode_binary to jsonutil.encode_images
465 * :ghissue:`2048`: move _encode_binary to jsonutil.encode_images
466 * :ghissue:`2050`: only add quotes around xunit-file on Windows
466 * :ghissue:`2050`: only add quotes around xunit-file on Windows
467 * :ghissue:`2047`: disable auto-scroll on mozilla
467 * :ghissue:`2047`: disable auto-scroll on mozilla
468 * :ghissue:`1258`: Magic %paste error
468 * :ghissue:`1258`: Magic %paste error
469 * :ghissue:`2015`: Fixes for %paste with special transformations
469 * :ghissue:`2015`: Fixes for %paste with special transformations
470 * :ghissue:`760`: Windows: test runner fails if repo path contains spaces
470 * :ghissue:`760`: Windows: test runner fails if repo path contains spaces
471 * :ghissue:`2046`: Iptest unicode
471 * :ghissue:`2046`: Iptest unicode
472 * :ghissue:`1939`: Namespaces
472 * :ghissue:`1939`: Namespaces
473 * :ghissue:`2042`: increase auto-scroll threshold to 100 lines
473 * :ghissue:`2042`: increase auto-scroll threshold to 100 lines
474 * :ghissue:`2043`: move RemoteError import to top-level
474 * :ghissue:`2043`: move RemoteError import to top-level
475 * :ghissue:`641`: In %magic help, remove duplicate aliases
475 * :ghissue:`641`: In %magic help, remove duplicate aliases
476 * :ghissue:`2036`: %alias_magic
476 * :ghissue:`2036`: %alias_magic
477 * :ghissue:`1968`: Proposal of icons for .ipynb files
477 * :ghissue:`1968`: Proposal of icons for .ipynb files
478 * :ghissue:`825`: keyboardinterrupt crashes gtk gui when gtk.set_interactive is not available
478 * :ghissue:`825`: keyboardinterrupt crashes gtk gui when gtk.set_interactive is not available
479 * :ghissue:`1971`: Remove duplicate magics docs
479 * :ghissue:`1971`: Remove duplicate magics docs
480 * :ghissue:`2040`: Namespaces for cleaner public APIs
480 * :ghissue:`2040`: Namespaces for cleaner public APIs
481 * :ghissue:`2039`: ipython parallel import exception
481 * :ghissue:`2039`: ipython parallel import exception
482 * :ghissue:`2035`: Getdefaultencoding test error with sympy 0.7.1_git
482 * :ghissue:`2035`: Getdefaultencoding test error with sympy 0.7.1_git
483 * :ghissue:`2037`: remove `ipython-qtconsole` gui-script
483 * :ghissue:`2037`: remove `ipython-qtconsole` gui-script
484 * :ghissue:`1516`: ipython-qtconsole script isn't installed for Python 2.x
484 * :ghissue:`1516`: ipython-qtconsole script isn't installed for Python 2.x
485 * :ghissue:`1297`: "ipython -p sh" is in documentation but doesn't work
485 * :ghissue:`1297`: "ipython -p sh" is in documentation but doesn't work
486 * :ghissue:`2038`: add extra clear warning to shell doc
486 * :ghissue:`2038`: add extra clear warning to shell doc
487 * :ghissue:`1265`: please ship unminified js and css sources
487 * :ghissue:`1265`: please ship unminified js and css sources
488 * :ghissue:`2029`: Ship unminified js
488 * :ghissue:`2029`: Ship unminified js
489 * :ghissue:`1920`: Provide an easy way to override the Qt widget used by qtconsole
489 * :ghissue:`1920`: Provide an easy way to override the Qt widget used by qtconsole
490 * :ghissue:`2007`: Add custom_control and custom_page_control variables to override the Qt widgets used by qtconsole
490 * :ghissue:`2007`: Add custom_control and custom_page_control variables to override the Qt widgets used by qtconsole
491 * :ghissue:`2009`: In %magic help, remove duplicate aliases
491 * :ghissue:`2009`: In %magic help, remove duplicate aliases
492 * :ghissue:`2033`: ipython parallel pushing and pulling recarrays
492 * :ghissue:`2033`: ipython parallel pushing and pulling recarrays
493 * :ghissue:`2034`: fix&test push/pull recarrays
493 * :ghissue:`2034`: fix&test push/pull recarrays
494 * :ghissue:`2028`: Reduce unhelpful information shown by pinfo
494 * :ghissue:`2028`: Reduce unhelpful information shown by pinfo
495 * :ghissue:`1992`: Tab completion fails with many spaces in filename
495 * :ghissue:`1992`: Tab completion fails with many spaces in filename
496 * :ghissue:`1885`: handle too old wx
496 * :ghissue:`1885`: handle too old wx
497 * :ghissue:`2030`: check wxPython version in inputhook
497 * :ghissue:`2030`: check wxPython version in inputhook
498 * :ghissue:`2024`: Make interactive_usage a bit more rst friendly
498 * :ghissue:`2024`: Make interactive_usage a bit more rst friendly
499 * :ghissue:`2031`: disable ^C^C confirmation on Windows
499 * :ghissue:`2031`: disable ^C^C confirmation on Windows
500 * :ghissue:`2023`: Unicode test failure on OS X
500 * :ghissue:`2023`: Unicode test failure on OS X
501 * :ghissue:`2027`: match stdin encoding in frontend readline test
501 * :ghissue:`2027`: match stdin encoding in frontend readline test
502 * :ghissue:`1901`: Windows: parallel test fails assert, leaves 14 python processes alive
502 * :ghissue:`1901`: Windows: parallel test fails assert, leaves 14 python processes alive
503 * :ghissue:`2025`: Fix parallel test on WinXP - wait for resource cleanup.
503 * :ghissue:`2025`: Fix parallel test on WinXP - wait for resource cleanup.
504 * :ghissue:`1986`: Line magic function `%R` not found. (Rmagic)
504 * :ghissue:`1986`: Line magic function `%R` not found. (Rmagic)
505 * :ghissue:`1712`: test failure in ubuntu package daily build
505 * :ghissue:`1712`: test failure in ubuntu package daily build
506 * :ghissue:`1183`: 0.12 testsuite failures
506 * :ghissue:`1183`: 0.12 testsuite failures
507 * :ghissue:`2016`: BUG: test runner fails in Windows if filenames contain spaces.
507 * :ghissue:`2016`: BUG: test runner fails in Windows if filenames contain spaces.
508 * :ghissue:`1806`: Alternate upload methods in firefox
508 * :ghissue:`1806`: Alternate upload methods in firefox
509 * :ghissue:`2019`: Windows: home directory expansion test fails
509 * :ghissue:`2019`: Windows: home directory expansion test fails
510 * :ghissue:`2020`: Fix home path expansion test in Windows.
510 * :ghissue:`2020`: Fix home path expansion test in Windows.
511 * :ghissue:`2017`: Windows core test error - filename quoting
511 * :ghissue:`2017`: Windows core test error - filename quoting
512 * :ghissue:`2021`: Fix Windows pathname issue in 'odd encoding' test.
512 * :ghissue:`2021`: Fix Windows pathname issue in 'odd encoding' test.
513 * :ghissue:`1998`: call to nt.assert_true(path._writable_dir(home)) returns false in test_path.py
513 * :ghissue:`1998`: call to nt.assert_true(path._writable_dir(home)) returns false in test_path.py
514 * :ghissue:`2022`: don't check writability in test for get_home_dir when HOME is undefined
514 * :ghissue:`2022`: don't check writability in test for get_home_dir when HOME is undefined
515 * :ghissue:`1589`: Test failures and docs don't build on Mac OS X Lion
515 * :ghissue:`1589`: Test failures and docs don't build on Mac OS X Lion
516 * :ghissue:`1996`: frontend test tweaks
516 * :ghissue:`1996`: frontend test tweaks
517 * :ghissue:`2011`: Notebook server can't start cluster with hyphen-containing profile name
517 * :ghissue:`2011`: Notebook server can't start cluster with hyphen-containing profile name
518 * :ghissue:`2014`: relax profile regex in notebook
518 * :ghissue:`2014`: relax profile regex in notebook
519 * :ghissue:`2013`: brew install pyqt
519 * :ghissue:`2013`: brew install pyqt
520 * :ghissue:`2005`: Strange output artifacts in footer of notebook
520 * :ghissue:`2005`: Strange output artifacts in footer of notebook
521 * :ghissue:`2012`: Mono cursor offset
521 * :ghissue:`2012`: Mono cursor offset
522 * :ghissue:`2004`: Clarify generic message spec vs. Python message API in docs
522 * :ghissue:`2004`: Clarify generic message spec vs. Python message API in docs
523 * :ghissue:`2006`: Don't crash when starting notebook server if runnable browser not found
523 * :ghissue:`2006`: Don't crash when starting notebook server if runnable browser not found
524 * :ghissue:`2010`: notebook: Print a warning (but do not abort) if no webbrowser can be found.
524 * :ghissue:`2010`: notebook: Print a warning (but do not abort) if no webbrowser can be found.
525 * :ghissue:`2008`: pip install virtualenv
525 * :ghissue:`2008`: pip install virtualenv
526 * :ghissue:`2003`: Wrong case of rmagic in docs
526 * :ghissue:`2003`: Wrong case of rmagic in docs
527 * :ghissue:`2002`: Refactor %magic into a lsmagic_docs API function.
527 * :ghissue:`2002`: Refactor %magic into a lsmagic_docs API function.
528 * :ghissue:`2000`: kernel.js consistency with generic IPython message format.
528 * :ghissue:`2000`: kernel.js consistency with generic IPython message format.
529 * :ghissue:`1999`: `%magic` help: display line and cell magics in alphabetical order.
529 * :ghissue:`1999`: `%magic` help: display line and cell magics in alphabetical order.
530 * :ghissue:`1635`: test_prun_quotes fails on Windows
530 * :ghissue:`1635`: test_prun_quotes fails on Windows
531 * :ghissue:`1984`: Cannot restart Notebook when using `%%script --bg`
531 * :ghissue:`1984`: Cannot restart Notebook when using `%%script --bg`
532 * :ghissue:`1981`: Clean BG processes created by %%script on kernel exit
532 * :ghissue:`1981`: Clean BG processes created by %%script on kernel exit
533 * :ghissue:`1994`: Fix RST misformatting.
533 * :ghissue:`1994`: Fix RST misformatting.
534 * :ghissue:`1949`: Introduce Notebook Magics
534 * :ghissue:`1949`: Introduce Notebook Magics
535 * :ghissue:`1985`: Kernels should start in notebook dir when manually specified
535 * :ghissue:`1985`: Kernels should start in notebook dir when manually specified
536 * :ghissue:`1980`: Notebook should check that --notebook-dir exists
536 * :ghissue:`1980`: Notebook should check that --notebook-dir exists
537 * :ghissue:`1951`: minor notebook startup/notebook-dir adjustments
537 * :ghissue:`1951`: minor notebook startup/notebook-dir adjustments
538 * :ghissue:`1969`: tab completion in notebook for paths not triggered
538 * :ghissue:`1969`: tab completion in notebook for paths not triggered
539 * :ghissue:`1974`: Allow path completion on notebook.
539 * :ghissue:`1974`: Allow path completion on notebook.
540 * :ghissue:`1964`: allow multiple instances of a Magic
540 * :ghissue:`1964`: allow multiple instances of a Magic
541 * :ghissue:`1960`: %page not working
541 * :ghissue:`1960`: %page not working
542 * :ghissue:`1991`: fix _ofind attr in %page
542 * :ghissue:`1991`: fix _ofind attr in %page
543 * :ghissue:`1982`: Shutdown qtconsole problem?
543 * :ghissue:`1982`: Shutdown qtconsole problem?
544 * :ghissue:`1988`: check for active frontend in update_restart_checkbox
544 * :ghissue:`1988`: check for active frontend in update_restart_checkbox
545 * :ghissue:`1979`: Add support for tox (http://tox.testrun.org/) and Travis CI (http://travis-ci.org/)
545 * :ghissue:`1979`: Add support for tox (https://tox.readthedocs.io/) and Travis CI (http://travis-ci.org/)
546 * :ghissue:`1989`: Parallel: output of %px and %px${suffix} is inconsistent
546 * :ghissue:`1989`: Parallel: output of %px and %px${suffix} is inconsistent
547 * :ghissue:`1966`: ValueError: packer could not serialize a simple message
547 * :ghissue:`1966`: ValueError: packer could not serialize a simple message
548 * :ghissue:`1987`: Notebook: MathJax offline install not recognized
548 * :ghissue:`1987`: Notebook: MathJax offline install not recognized
549 * :ghissue:`1970`: dblclick to restore size of images
549 * :ghissue:`1970`: dblclick to restore size of images
550 * :ghissue:`1983`: Notebook does not save heading level
550 * :ghissue:`1983`: Notebook does not save heading level
551 * :ghissue:`1978`: Notebook names truncating at the first period
551 * :ghissue:`1978`: Notebook names truncating at the first period
552 * :ghissue:`1553`: Limited size of output cells and provide scroll bars for such output cells
552 * :ghissue:`1553`: Limited size of output cells and provide scroll bars for such output cells
553 * :ghissue:`1825`: second attempt at scrolled long output
553 * :ghissue:`1825`: second attempt at scrolled long output
554 * :ghissue:`1915`: add cell-level metadata
554 * :ghissue:`1915`: add cell-level metadata
555 * :ghissue:`1934`: Cell/Worksheet metadata
555 * :ghissue:`1934`: Cell/Worksheet metadata
556 * :ghissue:`1746`: Confirm restart (configuration option, and checkbox UI)
556 * :ghissue:`1746`: Confirm restart (configuration option, and checkbox UI)
557 * :ghissue:`1790`: Commenting function.
557 * :ghissue:`1790`: Commenting function.
558 * :ghissue:`1767`: Tab completion problems with cell magics
558 * :ghissue:`1767`: Tab completion problems with cell magics
559 * :ghissue:`1944`: [qtconsole] take %,%% prefix into account for completion
559 * :ghissue:`1944`: [qtconsole] take %,%% prefix into account for completion
560 * :ghissue:`1973`: fix another FreeBSD $HOME symlink issue
560 * :ghissue:`1973`: fix another FreeBSD $HOME symlink issue
561 * :ghissue:`1972`: Fix completion of '%tim' in the Qt console
561 * :ghissue:`1972`: Fix completion of '%tim' in the Qt console
562 * :ghissue:`1887`: Make it easy to resize jpeg/png images back to original size.
562 * :ghissue:`1887`: Make it easy to resize jpeg/png images back to original size.
563 * :ghissue:`1967`: Fix psums example description in docs
563 * :ghissue:`1967`: Fix psums example description in docs
564 * :ghissue:`1678`: ctrl-z clears cell output in notebook when pressed enough times
564 * :ghissue:`1678`: ctrl-z clears cell output in notebook when pressed enough times
565 * :ghissue:`1965`: fix for #1678, undo no longer clears cells
565 * :ghissue:`1965`: fix for #1678, undo no longer clears cells
566 * :ghissue:`1952`: avoid duplicate "Websockets closed" dialog on ws close
566 * :ghissue:`1952`: avoid duplicate "Websockets closed" dialog on ws close
567 * :ghissue:`1961`: UnicodeDecodeError on directory with unicode chars in prompt
567 * :ghissue:`1961`: UnicodeDecodeError on directory with unicode chars in prompt
568 * :ghissue:`1963`: styling prompt, {color.Normal} excepts
568 * :ghissue:`1963`: styling prompt, {color.Normal} excepts
569 * :ghissue:`1962`: Support unicode prompts
569 * :ghissue:`1962`: Support unicode prompts
570 * :ghissue:`1959`: %page not working on qtconsole for Windows XP 32-bit
570 * :ghissue:`1959`: %page not working on qtconsole for Windows XP 32-bit
571 * :ghissue:`1955`: update to latest version of vim-ipython
571 * :ghissue:`1955`: update to latest version of vim-ipython
572 * :ghissue:`1945`: Add --proc option to %%script
572 * :ghissue:`1945`: Add --proc option to %%script
573 * :ghissue:`1957`: fix indentation in kernel.js
573 * :ghissue:`1957`: fix indentation in kernel.js
574 * :ghissue:`1956`: move import RemoteError after get_exc_info
574 * :ghissue:`1956`: move import RemoteError after get_exc_info
575 * :ghissue:`1950`: Fix for copy action (Ctrl+C) when there is no pager defined in qtconsole
575 * :ghissue:`1950`: Fix for copy action (Ctrl+C) when there is no pager defined in qtconsole
576 * :ghissue:`1948`: Fix help string for InteractiveShell.ast_node_interactivity
576 * :ghissue:`1948`: Fix help string for InteractiveShell.ast_node_interactivity
577 * :ghissue:`1941`: script magics cause terminal spam
577 * :ghissue:`1941`: script magics cause terminal spam
578 * :ghissue:`1942`: swallow stderr of which in utils.process.find_cmd
578 * :ghissue:`1942`: swallow stderr of which in utils.process.find_cmd
579 * :ghissue:`1833`: completer draws slightly too small on Chrome
579 * :ghissue:`1833`: completer draws slightly too small on Chrome
580 * :ghissue:`1940`: fix completer css on some Chrome versions
580 * :ghissue:`1940`: fix completer css on some Chrome versions
581 * :ghissue:`1938`: remove remaining references to deprecated XREP/XREQ names
581 * :ghissue:`1938`: remove remaining references to deprecated XREP/XREQ names
582 * :ghissue:`1924`: HTML superscripts not shown raised in the notebook
582 * :ghissue:`1924`: HTML superscripts not shown raised in the notebook
583 * :ghissue:`1925`: Fix styling of superscripts and subscripts. Closes #1924.
583 * :ghissue:`1925`: Fix styling of superscripts and subscripts. Closes #1924.
584 * :ghissue:`1461`: User notification if notebook saving fails
584 * :ghissue:`1461`: User notification if notebook saving fails
585 * :ghissue:`1936`: increase duration of save messages
585 * :ghissue:`1936`: increase duration of save messages
586 * :ghissue:`1542`: %save magic fails in clients without stdin if file already exists
586 * :ghissue:`1542`: %save magic fails in clients without stdin if file already exists
587 * :ghissue:`1937`: add %save -f
587 * :ghissue:`1937`: add %save -f
588 * :ghissue:`1572`: pyreadline version dependency not correctly checked
588 * :ghissue:`1572`: pyreadline version dependency not correctly checked
589 * :ghissue:`1935`: add version checking to pyreadline import test
589 * :ghissue:`1935`: add version checking to pyreadline import test
590 * :ghissue:`1849`: Octave magics
590 * :ghissue:`1849`: Octave magics
591 * :ghissue:`1759`: github, merge PR(s) just by number(s)
591 * :ghissue:`1759`: github, merge PR(s) just by number(s)
592 * :ghissue:`1931`: Win py3fixes
592 * :ghissue:`1931`: Win py3fixes
593 * :ghissue:`1646`: Meaning of restart parameter in client.shutdown() unclear
593 * :ghissue:`1646`: Meaning of restart parameter in client.shutdown() unclear
594 * :ghissue:`1933`: oinspect.find_file: Additional safety if file cannot be found.
594 * :ghissue:`1933`: oinspect.find_file: Additional safety if file cannot be found.
595 * :ghissue:`1916`: %paste doesn't work on py3
595 * :ghissue:`1916`: %paste doesn't work on py3
596 * :ghissue:`1932`: Fix adding functions to CommandChainDispatcher with equal priority on Py 3
596 * :ghissue:`1932`: Fix adding functions to CommandChainDispatcher with equal priority on Py 3
597 * :ghissue:`1928`: Select NoDB by default
597 * :ghissue:`1928`: Select NoDB by default
598 * :ghissue:`1923`: Add IPython syntax support to the %timeit magic, in line and cell mode
598 * :ghissue:`1923`: Add IPython syntax support to the %timeit magic, in line and cell mode
599 * :ghissue:`1926`: Make completer recognize escaped quotes in strings.
599 * :ghissue:`1926`: Make completer recognize escaped quotes in strings.
600 * :ghissue:`1929`: Ipython-qtconsole (0.12.1) hangs with Python 2.7.3, Windows 7 64 bit
600 * :ghissue:`1929`: Ipython-qtconsole (0.12.1) hangs with Python 2.7.3, Windows 7 64 bit
601 * :ghissue:`1409`: [qtconsole] forward delete bring completion into current line
601 * :ghissue:`1409`: [qtconsole] forward delete bring completion into current line
602 * :ghissue:`1922`: py3k compatibility for setupegg.py
602 * :ghissue:`1922`: py3k compatibility for setupegg.py
603 * :ghissue:`1598`: document that sync_imports() can't handle "import foo as bar"
603 * :ghissue:`1598`: document that sync_imports() can't handle "import foo as bar"
604 * :ghissue:`1893`: Update Parallel Magics and Exception Display
604 * :ghissue:`1893`: Update Parallel Magics and Exception Display
605 * :ghissue:`1890`: Docstrings for magics that use @magic_arguments are rendered wrong
605 * :ghissue:`1890`: Docstrings for magics that use @magic_arguments are rendered wrong
606 * :ghissue:`1921`: magic_arguments: dedent but otherwise preserve indentation.
606 * :ghissue:`1921`: magic_arguments: dedent but otherwise preserve indentation.
607 * :ghissue:`1919`: Use oinspect in CodeMagics._find_edit_target
607 * :ghissue:`1919`: Use oinspect in CodeMagics._find_edit_target
608 * :ghissue:`1918`: don't warn in iptest if deathrow/quarantine are missing
608 * :ghissue:`1918`: don't warn in iptest if deathrow/quarantine are missing
609 * :ghissue:`1914`: %pdef failing on python3
609 * :ghissue:`1914`: %pdef failing on python3
610 * :ghissue:`1917`: Fix for %pdef on Python 3
610 * :ghissue:`1917`: Fix for %pdef on Python 3
611 * :ghissue:`1428`: Failing test that prun does not clobber string escapes
611 * :ghissue:`1428`: Failing test that prun does not clobber string escapes
612 * :ghissue:`1913`: Fix for #1428
612 * :ghissue:`1913`: Fix for #1428
613 * :ghissue:`1911`: temporarily skip autoreload tests
613 * :ghissue:`1911`: temporarily skip autoreload tests
614 * :ghissue:`1549`: autoreload extension crashes ipython
614 * :ghissue:`1549`: autoreload extension crashes ipython
615 * :ghissue:`1908`: find_file errors on windows
615 * :ghissue:`1908`: find_file errors on windows
616 * :ghissue:`1909`: Fix for #1908, use os.path.normcase for safe filename comparisons
616 * :ghissue:`1909`: Fix for #1908, use os.path.normcase for safe filename comparisons
617 * :ghissue:`1907`: py3compat fixes for %%script and tests
617 * :ghissue:`1907`: py3compat fixes for %%script and tests
618 * :ghissue:`1904`: %%px? doesn't work, shows info for %px, general cell magic problem
618 * :ghissue:`1904`: %%px? doesn't work, shows info for %px, general cell magic problem
619 * :ghissue:`1906`: ofind finds non-unique cell magics
619 * :ghissue:`1906`: ofind finds non-unique cell magics
620 * :ghissue:`1894`: Win64 binary install fails
620 * :ghissue:`1894`: Win64 binary install fails
621 * :ghissue:`1799`: Source file not found for magics
621 * :ghissue:`1799`: Source file not found for magics
622 * :ghissue:`1845`: Fixes to inspection machinery for magics
622 * :ghissue:`1845`: Fixes to inspection machinery for magics
623 * :ghissue:`1774`: Some magics seems broken
623 * :ghissue:`1774`: Some magics seems broken
624 * :ghissue:`1586`: Clean up tight coupling between Notebook, CodeCell and Kernel Javascript objects
624 * :ghissue:`1586`: Clean up tight coupling between Notebook, CodeCell and Kernel Javascript objects
625 * :ghissue:`1632`: Win32 shell interactivity apparently broke qtconsole "cd" magic
625 * :ghissue:`1632`: Win32 shell interactivity apparently broke qtconsole "cd" magic
626 * :ghissue:`1902`: Workaround fix for gh-1632; minimal revert of gh-1424
626 * :ghissue:`1902`: Workaround fix for gh-1632; minimal revert of gh-1424
627 * :ghissue:`1900`: Cython libs
627 * :ghissue:`1900`: Cython libs
628 * :ghissue:`1503`: Cursor is offset in notebook in Chrome 17 on Linux
628 * :ghissue:`1503`: Cursor is offset in notebook in Chrome 17 on Linux
629 * :ghissue:`1426`: Qt console doesn't handle the `--gui` flag correctly.
629 * :ghissue:`1426`: Qt console doesn't handle the `--gui` flag correctly.
630 * :ghissue:`1180`: Can't start IPython kernel in Spyder
630 * :ghissue:`1180`: Can't start IPython kernel in Spyder
631 * :ghissue:`581`: test IPython.zmq
631 * :ghissue:`581`: test IPython.zmq
632 * :ghissue:`1593`: Name embedded in notebook overrides filename
632 * :ghissue:`1593`: Name embedded in notebook overrides filename
633 * :ghissue:`1899`: add ScriptMagics to class list for generated config
633 * :ghissue:`1899`: add ScriptMagics to class list for generated config
634 * :ghissue:`1618`: generate or minimize manpages
634 * :ghissue:`1618`: generate or minimize manpages
635 * :ghissue:`1898`: minimize manpages
635 * :ghissue:`1898`: minimize manpages
636 * :ghissue:`1896`: Windows: apparently spurious warning 'Excluding nonexistent file' ... test_exampleip
636 * :ghissue:`1896`: Windows: apparently spurious warning 'Excluding nonexistent file' ... test_exampleip
637 * :ghissue:`1897`: use glob for bad exclusion warning
637 * :ghissue:`1897`: use glob for bad exclusion warning
638 * :ghissue:`1215`: updated %quickref to show short-hand for %sc and %sx
638 * :ghissue:`1215`: updated %quickref to show short-hand for %sc and %sx
639 * :ghissue:`1855`: %%script and %%file magics
639 * :ghissue:`1855`: %%script and %%file magics
640 * :ghissue:`1863`: Ability to silence a cell in the notebook
640 * :ghissue:`1863`: Ability to silence a cell in the notebook
641 * :ghissue:`1870`: add %%capture for capturing stdout/err
641 * :ghissue:`1870`: add %%capture for capturing stdout/err
642 * :ghissue:`1861`: Use dvipng to format sympy.Matrix
642 * :ghissue:`1861`: Use dvipng to format sympy.Matrix
643 * :ghissue:`1867`: Fix 1px margin bouncing of selected menu item.
643 * :ghissue:`1867`: Fix 1px margin bouncing of selected menu item.
644 * :ghissue:`1889`: Reconnect when the websocket connection closes unexpectedly
644 * :ghissue:`1889`: Reconnect when the websocket connection closes unexpectedly
645 * :ghissue:`1577`: If a notebook loses its network connection WebSockets won't reconnect
645 * :ghissue:`1577`: If a notebook loses its network connection WebSockets won't reconnect
646 * :ghissue:`1886`: Fix a bug in renaming notebook
646 * :ghissue:`1886`: Fix a bug in renaming notebook
647 * :ghissue:`1895`: Fix error in test suite with ip.system()
647 * :ghissue:`1895`: Fix error in test suite with ip.system()
648 * :ghissue:`1762`: add `locate` entry points
648 * :ghissue:`1762`: add `locate` entry points
649 * :ghissue:`1883`: Fix vertical offset due to bold/italics, and bad browser fonts.
649 * :ghissue:`1883`: Fix vertical offset due to bold/italics, and bad browser fonts.
650 * :ghissue:`1875`: re-write columnize, with intermediate step.
650 * :ghissue:`1875`: re-write columnize, with intermediate step.
651 * :ghissue:`1860`: IPython.utils.columnize sometime wrong...
651 * :ghissue:`1860`: IPython.utils.columnize sometime wrong...
652 * :ghissue:`1851`: new completer for qtconsole.
652 * :ghissue:`1851`: new completer for qtconsole.
653 * :ghissue:`1892`: Remove suspicious quotes in interactiveshell.py
653 * :ghissue:`1892`: Remove suspicious quotes in interactiveshell.py
654 * :ghissue:`1854`: Class `%hierarchy` and graphiz `%%dot` magics
654 * :ghissue:`1854`: Class `%hierarchy` and graphiz `%%dot` magics
655 * :ghissue:`1827`: Sending tracebacks over ZMQ should protect against unicode failure
655 * :ghissue:`1827`: Sending tracebacks over ZMQ should protect against unicode failure
656 * :ghissue:`1864`: Rmagic exceptions
656 * :ghissue:`1864`: Rmagic exceptions
657 * :ghissue:`1829`: [notebook] don't care about leading prct in completion
657 * :ghissue:`1829`: [notebook] don't care about leading prct in completion
658 * :ghissue:`1832`: Make svg, jpeg and png images resizable in notebook.
658 * :ghissue:`1832`: Make svg, jpeg and png images resizable in notebook.
659 * :ghissue:`1674`: HTML Notebook carriage-return handling, take 2
659 * :ghissue:`1674`: HTML Notebook carriage-return handling, take 2
660 * :ghissue:`1874`: cython_magic uses importlib, which doesn't ship with py2.6
660 * :ghissue:`1874`: cython_magic uses importlib, which doesn't ship with py2.6
661 * :ghissue:`1882`: Remove importlib dependency which not available in Python 2.6.
661 * :ghissue:`1882`: Remove importlib dependency which not available in Python 2.6.
662 * :ghissue:`1878`: shell access using ! will not fill class or function scope vars
662 * :ghissue:`1878`: shell access using ! will not fill class or function scope vars
663 * :ghissue:`1879`: Correct stack depth for variable expansion in !system commands
663 * :ghissue:`1879`: Correct stack depth for variable expansion in !system commands
664 * :ghissue:`1840`: New JS completer should merge completions before display
664 * :ghissue:`1840`: New JS completer should merge completions before display
665 * :ghissue:`1841`: [notebook] deduplicate completion results
665 * :ghissue:`1841`: [notebook] deduplicate completion results
666 * :ghissue:`1736`: no good error message on missing tkinter and %paste
666 * :ghissue:`1736`: no good error message on missing tkinter and %paste
667 * :ghissue:`1741`: Display message from TryNext error in magic_paste
667 * :ghissue:`1741`: Display message from TryNext error in magic_paste
668 * :ghissue:`1850`: Remove args/kwargs handling in TryNext, fix %paste error messages.
668 * :ghissue:`1850`: Remove args/kwargs handling in TryNext, fix %paste error messages.
669 * :ghissue:`1663`: Keep line-endings in ipynb
669 * :ghissue:`1663`: Keep line-endings in ipynb
670 * :ghissue:`1872`: Matplotlib window freezes using intreractive plot in qtconsole
670 * :ghissue:`1872`: Matplotlib window freezes using intreractive plot in qtconsole
671 * :ghissue:`1869`: Improve CodeMagics._find_edit_target
671 * :ghissue:`1869`: Improve CodeMagics._find_edit_target
672 * :ghissue:`1781`: Colons in notebook name causes notebook deletion without warning
672 * :ghissue:`1781`: Colons in notebook name causes notebook deletion without warning
673 * :ghissue:`1815`: Make : invalid in filenames in the Notebook JS code.
673 * :ghissue:`1815`: Make : invalid in filenames in the Notebook JS code.
674 * :ghissue:`1819`: doc: cleanup the parallel psums example a little
674 * :ghissue:`1819`: doc: cleanup the parallel psums example a little
675 * :ghissue:`1838`: externals cleanup
675 * :ghissue:`1838`: externals cleanup
676 * :ghissue:`1839`: External cleanup
676 * :ghissue:`1839`: External cleanup
677 * :ghissue:`1782`: fix Magic menu in qtconsole, split in groups
677 * :ghissue:`1782`: fix Magic menu in qtconsole, split in groups
678 * :ghissue:`1862`: Minor bind_kernel improvements
678 * :ghissue:`1862`: Minor bind_kernel improvements
679 * :ghissue:`1859`: kernmagic during console startup
679 * :ghissue:`1859`: kernmagic during console startup
680 * :ghissue:`1857`: Prevent jumping of window to input when output is clicked.
680 * :ghissue:`1857`: Prevent jumping of window to input when output is clicked.
681 * :ghissue:`1856`: Fix 1px jumping of cells and menus in Notebook.
681 * :ghissue:`1856`: Fix 1px jumping of cells and menus in Notebook.
682 * :ghissue:`1848`: task fails with "AssertionError: not enough buffers!" after second resubmit
682 * :ghissue:`1848`: task fails with "AssertionError: not enough buffers!" after second resubmit
683 * :ghissue:`1852`: fix chained resubmissions
683 * :ghissue:`1852`: fix chained resubmissions
684 * :ghissue:`1780`: Rmagic extension
684 * :ghissue:`1780`: Rmagic extension
685 * :ghissue:`1853`: Fix jumpy notebook behavior
685 * :ghissue:`1853`: Fix jumpy notebook behavior
686 * :ghissue:`1842`: task with UnmetDependency error still owned by engine
686 * :ghissue:`1842`: task with UnmetDependency error still owned by engine
687 * :ghissue:`1847`: add InlineBackend to ConsoleApp class list
687 * :ghissue:`1847`: add InlineBackend to ConsoleApp class list
688 * :ghissue:`1846`: Exceptions within multiprocessing crash Ipython notebook kernel
688 * :ghissue:`1846`: Exceptions within multiprocessing crash Ipython notebook kernel
689 * :ghissue:`1843`: Notebook does not exist and permalinks
689 * :ghissue:`1843`: Notebook does not exist and permalinks
690 * :ghissue:`1837`: edit magic broken in head
690 * :ghissue:`1837`: edit magic broken in head
691 * :ghissue:`1834`: resubmitted tasks doesn't have same session name
691 * :ghissue:`1834`: resubmitted tasks doesn't have same session name
692 * :ghissue:`1836`: preserve header for resubmitted tasks
692 * :ghissue:`1836`: preserve header for resubmitted tasks
693 * :ghissue:`1776`: fix magic menu in qtconsole
693 * :ghissue:`1776`: fix magic menu in qtconsole
694 * :ghissue:`1828`: change default extension to .ipy for %save -r
694 * :ghissue:`1828`: change default extension to .ipy for %save -r
695 * :ghissue:`1800`: Reintroduce recall
695 * :ghissue:`1800`: Reintroduce recall
696 * :ghissue:`1671`: __future__ environments
696 * :ghissue:`1671`: __future__ environments
697 * :ghissue:`1830`: lsmagic lists magics in alphabetical order
697 * :ghissue:`1830`: lsmagic lists magics in alphabetical order
698 * :ghissue:`1835`: Use Python import in ipython profile config
698 * :ghissue:`1835`: Use Python import in ipython profile config
699 * :ghissue:`1773`: Update SymPy profile: SymPy's latex() can now print set and frozenset
699 * :ghissue:`1773`: Update SymPy profile: SymPy's latex() can now print set and frozenset
700 * :ghissue:`1761`: Edited documentation to use IPYTHONDIR in place of ~/.ipython
700 * :ghissue:`1761`: Edited documentation to use IPYTHONDIR in place of ~/.ipython
701 * :ghissue:`1772`: notebook autocomplete fail when typing number
701 * :ghissue:`1772`: notebook autocomplete fail when typing number
702 * :ghissue:`1822`: aesthetics pass on AsyncResult.display_outputs
702 * :ghissue:`1822`: aesthetics pass on AsyncResult.display_outputs
703 * :ghissue:`1460`: Redirect http to https for notebook
703 * :ghissue:`1460`: Redirect http to https for notebook
704 * :ghissue:`1287`: Refactor the notebook tab completion/tooltip
704 * :ghissue:`1287`: Refactor the notebook tab completion/tooltip
705 * :ghissue:`1596`: In rename dialog, <return> should submit
705 * :ghissue:`1596`: In rename dialog, <return> should submit
706 * :ghissue:`1821`: ENTER submits the rename notebook dialog.
706 * :ghissue:`1821`: ENTER submits the rename notebook dialog.
707 * :ghissue:`1750`: Let the user disable random port selection
707 * :ghissue:`1750`: Let the user disable random port selection
708 * :ghissue:`1820`: NotebookApp: Make the number of ports to retry user configurable.
708 * :ghissue:`1820`: NotebookApp: Make the number of ports to retry user configurable.
709 * :ghissue:`1816`: Always use filename as the notebook name.
709 * :ghissue:`1816`: Always use filename as the notebook name.
710 * :ghissue:`1775`: assert_in not present on Python 2.6
710 * :ghissue:`1775`: assert_in not present on Python 2.6
711 * :ghissue:`1813`: Add assert_in method to nose for Python 2.6
711 * :ghissue:`1813`: Add assert_in method to nose for Python 2.6
712 * :ghissue:`1498`: Add tooltip keyboard shortcuts
712 * :ghissue:`1498`: Add tooltip keyboard shortcuts
713 * :ghissue:`1711`: New Tooltip, New Completer and JS Refactor
713 * :ghissue:`1711`: New Tooltip, New Completer and JS Refactor
714 * :ghissue:`1798`: a few simple fixes for docs/parallel
714 * :ghissue:`1798`: a few simple fixes for docs/parallel
715 * :ghissue:`1818`: possible bug with latex / markdown
715 * :ghissue:`1818`: possible bug with latex / markdown
716 * :ghissue:`1647`: Aborted parallel tasks can't be resubmitted
716 * :ghissue:`1647`: Aborted parallel tasks can't be resubmitted
717 * :ghissue:`1817`: Change behavior of ipython notebook --port=...
717 * :ghissue:`1817`: Change behavior of ipython notebook --port=...
718 * :ghissue:`1738`: IPython.embed_kernel issues
718 * :ghissue:`1738`: IPython.embed_kernel issues
719 * :ghissue:`1610`: Basic bold and italic in HTML output cells
719 * :ghissue:`1610`: Basic bold and italic in HTML output cells
720 * :ghissue:`1576`: Start and stop kernels from the notebook dashboard
720 * :ghissue:`1576`: Start and stop kernels from the notebook dashboard
721 * :ghissue:`1515`: impossible to shutdown notebook kernels
721 * :ghissue:`1515`: impossible to shutdown notebook kernels
722 * :ghissue:`1812`: Ensure AsyncResult.display_outputs doesn't display empty streams
722 * :ghissue:`1812`: Ensure AsyncResult.display_outputs doesn't display empty streams
723 * :ghissue:`1811`: warn on nonexistent exclusions in iptest
723 * :ghissue:`1811`: warn on nonexistent exclusions in iptest
724 * :ghissue:`1809`: test suite error in IPython.zmq on windows
724 * :ghissue:`1809`: test suite error in IPython.zmq on windows
725 * :ghissue:`1810`: fix for #1809, failing tests in IPython.zmq
725 * :ghissue:`1810`: fix for #1809, failing tests in IPython.zmq
726 * :ghissue:`1808`: Reposition alternate upload for firefox [need cross browser/OS/language test]
726 * :ghissue:`1808`: Reposition alternate upload for firefox [need cross browser/OS/language test]
727 * :ghissue:`1742`: Check for custom_exceptions only once
727 * :ghissue:`1742`: Check for custom_exceptions only once
728 * :ghissue:`1802`: cythonmagic tests should be skipped if Cython not available
728 * :ghissue:`1802`: cythonmagic tests should be skipped if Cython not available
729 * :ghissue:`1062`: warning message in IPython.extensions test
729 * :ghissue:`1062`: warning message in IPython.extensions test
730 * :ghissue:`1807`: add missing cython exclusion in iptest
730 * :ghissue:`1807`: add missing cython exclusion in iptest
731 * :ghissue:`1805`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with m...
731 * :ghissue:`1805`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with m...
732 * :ghissue:`1803`: MPI parallel %px bug
732 * :ghissue:`1803`: MPI parallel %px bug
733 * :ghissue:`1804`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with mingw.
733 * :ghissue:`1804`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with mingw.
734 * :ghissue:`1492`: Drag target very small if IPython Dashboard has no notebooks
734 * :ghissue:`1492`: Drag target very small if IPython Dashboard has no notebooks
735 * :ghissue:`1562`: Offer a method other than drag-n-drop to upload notebooks
735 * :ghissue:`1562`: Offer a method other than drag-n-drop to upload notebooks
736 * :ghissue:`1739`: Dashboard improvement (necessary merge of #1658 and #1676 + fix #1492)
736 * :ghissue:`1739`: Dashboard improvement (necessary merge of #1658 and #1676 + fix #1492)
737 * :ghissue:`1770`: Cython related magic functions
737 * :ghissue:`1770`: Cython related magic functions
738 * :ghissue:`1532`: qtconsole does not accept --gui switch
738 * :ghissue:`1532`: qtconsole does not accept --gui switch
739 * :ghissue:`1707`: Accept --gui=<...> switch in IPython qtconsole.
739 * :ghissue:`1707`: Accept --gui=<...> switch in IPython qtconsole.
740 * :ghissue:`1797`: Fix comment which breaks Emacs syntax highlighting.
740 * :ghissue:`1797`: Fix comment which breaks Emacs syntax highlighting.
741 * :ghissue:`1796`: %gui magic broken
741 * :ghissue:`1796`: %gui magic broken
742 * :ghissue:`1795`: fix %gui magic
742 * :ghissue:`1795`: fix %gui magic
743 * :ghissue:`1788`: extreme truncating of return values
743 * :ghissue:`1788`: extreme truncating of return values
744 * :ghissue:`1793`: Raise repr limit for strings to 80 characters (from 30).
744 * :ghissue:`1793`: Raise repr limit for strings to 80 characters (from 30).
745 * :ghissue:`1794`: don't use XDG path on OS X
745 * :ghissue:`1794`: don't use XDG path on OS X
746 * :ghissue:`1777`: ipython crash on wrong encoding
746 * :ghissue:`1777`: ipython crash on wrong encoding
747 * :ghissue:`1792`: Unicode-aware logger
747 * :ghissue:`1792`: Unicode-aware logger
748 * :ghissue:`1791`: update zmqshell magics
748 * :ghissue:`1791`: update zmqshell magics
749 * :ghissue:`1787`: DOC: Remove regression from qt-console docs.
749 * :ghissue:`1787`: DOC: Remove regression from qt-console docs.
750 * :ghissue:`1785`: IPython.utils.tests.test_process.SubProcessTestCase
750 * :ghissue:`1785`: IPython.utils.tests.test_process.SubProcessTestCase
751 * :ghissue:`1758`: test_pr, fallback on http if git protocol fail, and SSL errors...
751 * :ghissue:`1758`: test_pr, fallback on http if git protocol fail, and SSL errors...
752 * :ghissue:`1786`: Make notebook save failures more salient
752 * :ghissue:`1786`: Make notebook save failures more salient
753 * :ghissue:`1748`: Fix some tests for Python 3.3
753 * :ghissue:`1748`: Fix some tests for Python 3.3
754 * :ghissue:`1755`: test for pygments before running qt tests
754 * :ghissue:`1755`: test for pygments before running qt tests
755 * :ghissue:`1771`: Make default value of interactivity passed to run_ast_nodes configurable
755 * :ghissue:`1771`: Make default value of interactivity passed to run_ast_nodes configurable
756 * :ghissue:`1783`: part of PR #1606 (loadpy -> load) erased by magic refactoring.
756 * :ghissue:`1783`: part of PR #1606 (loadpy -> load) erased by magic refactoring.
757 * :ghissue:`1784`: restore loadpy to load
757 * :ghissue:`1784`: restore loadpy to load
758 * :ghissue:`1768`: Update parallel magics
758 * :ghissue:`1768`: Update parallel magics
759 * :ghissue:`1778`: string exception in IPython/core/magic.py:232
759 * :ghissue:`1778`: string exception in IPython/core/magic.py:232
760 * :ghissue:`1779`: Tidy up error raising in magic decorators.
760 * :ghissue:`1779`: Tidy up error raising in magic decorators.
761 * :ghissue:`1769`: Allow cell mode timeit without setup code.
761 * :ghissue:`1769`: Allow cell mode timeit without setup code.
762 * :ghissue:`1716`: Fix for fake filenames in verbose traceback
762 * :ghissue:`1716`: Fix for fake filenames in verbose traceback
763 * :ghissue:`1763`: [qtconsole] fix append_plain_html -> append_html
763 * :ghissue:`1763`: [qtconsole] fix append_plain_html -> append_html
764 * :ghissue:`1766`: Test failure in IPython.parallel
764 * :ghissue:`1766`: Test failure in IPython.parallel
765 * :ghissue:`1611`: IPEP1: Cell magics and general cleanup of the Magic system
765 * :ghissue:`1611`: IPEP1: Cell magics and general cleanup of the Magic system
766 * :ghissue:`1732`: Refactoring of the magics system and implementation of cell magics
766 * :ghissue:`1732`: Refactoring of the magics system and implementation of cell magics
767 * :ghissue:`1765`: test_pr should clearn PYTHONPATH for the subprocesses
767 * :ghissue:`1765`: test_pr should clearn PYTHONPATH for the subprocesses
768 * :ghissue:`1630`: Merge divergent Kernel implementations
768 * :ghissue:`1630`: Merge divergent Kernel implementations
769 * :ghissue:`1705`: [notebook] Make pager resizable, and remember size...
769 * :ghissue:`1705`: [notebook] Make pager resizable, and remember size...
770 * :ghissue:`1606`: Share code for %pycat and %loadpy, make %pycat aware of URLs
770 * :ghissue:`1606`: Share code for %pycat and %loadpy, make %pycat aware of URLs
771 * :ghissue:`1720`: Adding interactive inline plotting to notebooks with flot
771 * :ghissue:`1720`: Adding interactive inline plotting to notebooks with flot
772 * :ghissue:`1701`: [notebook] Open HTML links in a new window by default
772 * :ghissue:`1701`: [notebook] Open HTML links in a new window by default
773 * :ghissue:`1757`: Open IPython notebook hyperlinks in a new window using target=_blank
773 * :ghissue:`1757`: Open IPython notebook hyperlinks in a new window using target=_blank
774 * :ghissue:`1735`: Open IPython notebook hyperlinks in a new window using target=_blank
774 * :ghissue:`1735`: Open IPython notebook hyperlinks in a new window using target=_blank
775 * :ghissue:`1754`: Fix typo enconters->encounters
775 * :ghissue:`1754`: Fix typo enconters->encounters
776 * :ghissue:`1753`: Clear window title when kernel is restarted
776 * :ghissue:`1753`: Clear window title when kernel is restarted
777 * :ghissue:`735`: Images missing from XML/SVG export (for me)
777 * :ghissue:`735`: Images missing from XML/SVG export (for me)
778 * :ghissue:`1449`: Fix for bug #735 : Images missing from XML/SVG export
778 * :ghissue:`1449`: Fix for bug #735 : Images missing from XML/SVG export
779 * :ghissue:`1752`: Reconnect Websocket when it closes unexpectedly
779 * :ghissue:`1752`: Reconnect Websocket when it closes unexpectedly
780 * :ghissue:`1751`: Reconnect Websocket when it closes unexpectedly
780 * :ghissue:`1751`: Reconnect Websocket when it closes unexpectedly
781 * :ghissue:`1749`: Load MathJax.js using HTTPS when IPython notebook server is HTTPS
781 * :ghissue:`1749`: Load MathJax.js using HTTPS when IPython notebook server is HTTPS
782 * :ghissue:`1743`: Tooltip completer js refactor
782 * :ghissue:`1743`: Tooltip completer js refactor
783 * :ghissue:`1700`: A module for sending custom user messages from the kernel.
783 * :ghissue:`1700`: A module for sending custom user messages from the kernel.
784 * :ghissue:`1745`: htmlnotebook: Cursor is off
784 * :ghissue:`1745`: htmlnotebook: Cursor is off
785 * :ghissue:`1728`: ipython crash with matplotlib during picking
785 * :ghissue:`1728`: ipython crash with matplotlib during picking
786 * :ghissue:`1681`: add qt config option to clear_on_kernel_restart
786 * :ghissue:`1681`: add qt config option to clear_on_kernel_restart
787 * :ghissue:`1733`: Tooltip completer js refactor
787 * :ghissue:`1733`: Tooltip completer js refactor
788 * :ghissue:`1676`: Kernel status/shutdown from dashboard
788 * :ghissue:`1676`: Kernel status/shutdown from dashboard
789 * :ghissue:`1658`: Alternate notebook upload methods
789 * :ghissue:`1658`: Alternate notebook upload methods
790 * :ghissue:`1727`: terminate kernel after embed_kernel tests
790 * :ghissue:`1727`: terminate kernel after embed_kernel tests
791 * :ghissue:`1737`: add HistoryManager to ipapp class list
791 * :ghissue:`1737`: add HistoryManager to ipapp class list
792 * :ghissue:`945`: Open a notebook from the command line
792 * :ghissue:`945`: Open a notebook from the command line
793 * :ghissue:`1686`: ENH: Open a notebook from the command line
793 * :ghissue:`1686`: ENH: Open a notebook from the command line
794 * :ghissue:`1709`: fixes #1708, failing test in arg_split on windows
794 * :ghissue:`1709`: fixes #1708, failing test in arg_split on windows
795 * :ghissue:`1718`: Use CRegExp trait for regular expressions.
795 * :ghissue:`1718`: Use CRegExp trait for regular expressions.
796 * :ghissue:`1729`: Catch failure in repr() for %whos
796 * :ghissue:`1729`: Catch failure in repr() for %whos
797 * :ghissue:`1726`: use eval for command-line args instead of exec
797 * :ghissue:`1726`: use eval for command-line args instead of exec
798 * :ghissue:`1723`: scatter/gather fail with targets='all'
798 * :ghissue:`1723`: scatter/gather fail with targets='all'
799 * :ghissue:`1724`: fix scatter/gather with targets='all'
799 * :ghissue:`1724`: fix scatter/gather with targets='all'
800 * :ghissue:`1725`: add --no-ff to git pull in test_pr
800 * :ghissue:`1725`: add --no-ff to git pull in test_pr
801 * :ghissue:`1722`: unicode exception when evaluating expression with non-ascii characters
801 * :ghissue:`1722`: unicode exception when evaluating expression with non-ascii characters
802 * :ghissue:`1721`: Tooltip completer js refactor
802 * :ghissue:`1721`: Tooltip completer js refactor
803 * :ghissue:`1657`: Add `wait` optional argument to `hooks.editor`
803 * :ghissue:`1657`: Add `wait` optional argument to `hooks.editor`
804 * :ghissue:`123`: Define sys.ps{1,2}
804 * :ghissue:`123`: Define sys.ps{1,2}
805 * :ghissue:`1717`: Define generic sys.ps{1,2,3}, for use by scripts.
805 * :ghissue:`1717`: Define generic sys.ps{1,2,3}, for use by scripts.
806 * :ghissue:`1442`: cache-size issue in qtconsole
806 * :ghissue:`1442`: cache-size issue in qtconsole
807 * :ghissue:`1691`: Finish PR #1446
807 * :ghissue:`1691`: Finish PR #1446
808 * :ghissue:`1446`: Fixing Issue #1442
808 * :ghissue:`1446`: Fixing Issue #1442
809 * :ghissue:`1710`: update MathJax CDN url for https
809 * :ghissue:`1710`: update MathJax CDN url for https
810 * :ghissue:`81`: Autocall fails if first function argument begins with "-" or "+
810 * :ghissue:`81`: Autocall fails if first function argument begins with "-" or "+
811 * :ghissue:`1713`: Make autocall regexp's configurable.
811 * :ghissue:`1713`: Make autocall regexp's configurable.
812 * :ghissue:`211`: paste command not working
812 * :ghissue:`211`: paste command not working
813 * :ghissue:`1703`: Allow TryNext to have an error message without it affecting the command chain
813 * :ghissue:`1703`: Allow TryNext to have an error message without it affecting the command chain
814 * :ghissue:`1714`: minor adjustments to test_pr
814 * :ghissue:`1714`: minor adjustments to test_pr
815 * :ghissue:`1509`: New tooltip for notebook
815 * :ghissue:`1509`: New tooltip for notebook
816 * :ghissue:`1697`: Major refactoring of the Notebook, Kernel and CodeCell JavaScript.
816 * :ghissue:`1697`: Major refactoring of the Notebook, Kernel and CodeCell JavaScript.
817 * :ghissue:`788`: Progress indicator in the notebook (and perhaps the Qt console)
817 * :ghissue:`788`: Progress indicator in the notebook (and perhaps the Qt console)
818 * :ghissue:`1034`: Single process Qt console
818 * :ghissue:`1034`: Single process Qt console
819 * :ghissue:`1557`: magic function conflict while using --pylab
819 * :ghissue:`1557`: magic function conflict while using --pylab
820 * :ghissue:`1476`: Pylab figure objects not properly updating
820 * :ghissue:`1476`: Pylab figure objects not properly updating
821 * :ghissue:`1704`: ensure all needed qt parts can be imported before settling for one
821 * :ghissue:`1704`: ensure all needed qt parts can be imported before settling for one
822 * :ghissue:`1708`: test failure in arg_split on windows
822 * :ghissue:`1708`: test failure in arg_split on windows
823 * :ghissue:`1706`: Mark test_push_numpy_nocopy as a known failure for Python 3
823 * :ghissue:`1706`: Mark test_push_numpy_nocopy as a known failure for Python 3
824 * :ghissue:`1696`: notebook tooltip fail on function with number
824 * :ghissue:`1696`: notebook tooltip fail on function with number
825 * :ghissue:`1698`: fix tooltip on token with number
825 * :ghissue:`1698`: fix tooltip on token with number
826 * :ghissue:`1226`: Windows GUI only (pythonw) bug for IPython on Python 3.x
826 * :ghissue:`1226`: Windows GUI only (pythonw) bug for IPython on Python 3.x
827 * :ghissue:`1245`: pythonw py3k fixes for issue #1226
827 * :ghissue:`1245`: pythonw py3k fixes for issue #1226
828 * :ghissue:`1417`: Notebook Completer Class
828 * :ghissue:`1417`: Notebook Completer Class
829 * :ghissue:`1690`: [Bogus] Deliberately make a test fail
829 * :ghissue:`1690`: [Bogus] Deliberately make a test fail
830 * :ghissue:`1685`: Add script to test pull request
830 * :ghissue:`1685`: Add script to test pull request
831 * :ghissue:`1167`: Settle on a choice for $IPYTHONDIR
831 * :ghissue:`1167`: Settle on a choice for $IPYTHONDIR
832 * :ghissue:`1693`: deprecate IPYTHON_DIR in favor of IPYTHONDIR
832 * :ghissue:`1693`: deprecate IPYTHON_DIR in favor of IPYTHONDIR
833 * :ghissue:`1672`: ipython-qtconsole.desktop is using a deprecated format
833 * :ghissue:`1672`: ipython-qtconsole.desktop is using a deprecated format
834 * :ghissue:`1695`: Avoid deprecated warnings from ipython-qtconsole.desktop.
834 * :ghissue:`1695`: Avoid deprecated warnings from ipython-qtconsole.desktop.
835 * :ghissue:`1694`: Add quote to notebook to allow it to load
835 * :ghissue:`1694`: Add quote to notebook to allow it to load
836 * :ghissue:`1240`: sys.path missing `''` as first entry when kernel launched without interface
836 * :ghissue:`1240`: sys.path missing `''` as first entry when kernel launched without interface
837 * :ghissue:`1689`: Fix sys.path missing '' as first entry in `ipython kernel`.
837 * :ghissue:`1689`: Fix sys.path missing '' as first entry in `ipython kernel`.
838 * :ghissue:`1683`: Parallel controller failing with Pymongo 2.2
838 * :ghissue:`1683`: Parallel controller failing with Pymongo 2.2
839 * :ghissue:`1687`: import Binary from bson instead of pymongo
839 * :ghissue:`1687`: import Binary from bson instead of pymongo
840 * :ghissue:`1614`: Display Image in Qtconsole
840 * :ghissue:`1614`: Display Image in Qtconsole
841 * :ghissue:`1616`: Make IPython.core.display.Image less notebook-centric
841 * :ghissue:`1616`: Make IPython.core.display.Image less notebook-centric
842 * :ghissue:`1684`: CLN: Remove redundant function definition.
842 * :ghissue:`1684`: CLN: Remove redundant function definition.
843 * :ghissue:`1655`: Add %open magic command to open editor in non-blocking manner
843 * :ghissue:`1655`: Add %open magic command to open editor in non-blocking manner
844 * :ghissue:`1677`: middle-click paste broken in notebook
844 * :ghissue:`1677`: middle-click paste broken in notebook
845 * :ghissue:`1670`: Point %pastebin to gist
845 * :ghissue:`1670`: Point %pastebin to gist
846 * :ghissue:`1667`: Test failure in test_message_spec
846 * :ghissue:`1667`: Test failure in test_message_spec
847 * :ghissue:`1668`: Test failure in IPython.zmq.tests.test_message_spec.test_complete "'pyout' != 'status'"
847 * :ghissue:`1668`: Test failure in IPython.zmq.tests.test_message_spec.test_complete "'pyout' != 'status'"
848 * :ghissue:`1669`: handle pyout messages in test_message_spec
848 * :ghissue:`1669`: handle pyout messages in test_message_spec
849 * :ghissue:`1295`: add binary-tree engine interconnect example
849 * :ghissue:`1295`: add binary-tree engine interconnect example
850 * :ghissue:`1642`: Cherry-picked commits from 0.12.1 release
850 * :ghissue:`1642`: Cherry-picked commits from 0.12.1 release
851 * :ghissue:`1659`: Handle carriage return characters ("\r") in HTML notebook output.
851 * :ghissue:`1659`: Handle carriage return characters ("\r") in HTML notebook output.
852 * :ghissue:`1313`: Figure out MathJax 2 support
852 * :ghissue:`1313`: Figure out MathJax 2 support
853 * :ghissue:`1653`: Test failure in IPython.zmq
853 * :ghissue:`1653`: Test failure in IPython.zmq
854 * :ghissue:`1656`: ensure kernels are cleaned up in embed_kernel tests
854 * :ghissue:`1656`: ensure kernels are cleaned up in embed_kernel tests
855 * :ghissue:`1666`: pip install ipython==dev installs version 0.8 from an old svn repo
855 * :ghissue:`1666`: pip install ipython==dev installs version 0.8 from an old svn repo
856 * :ghissue:`1664`: InteractiveShell.run_code: Update docstring.
856 * :ghissue:`1664`: InteractiveShell.run_code: Update docstring.
857 * :ghissue:`1512`: `print stuff,` should avoid newline
857 * :ghissue:`1512`: `print stuff,` should avoid newline
858 * :ghissue:`1662`: Delay flushing softspace until after cell finishes
858 * :ghissue:`1662`: Delay flushing softspace until after cell finishes
859 * :ghissue:`1643`: handle jpg/jpeg in the qtconsole
859 * :ghissue:`1643`: handle jpg/jpeg in the qtconsole
860 * :ghissue:`966`: dreload fails on Windows XP with iPython 0.11 "Unexpected Error"
860 * :ghissue:`966`: dreload fails on Windows XP with iPython 0.11 "Unexpected Error"
861 * :ghissue:`1500`: dreload doesn't seem to exclude numpy
861 * :ghissue:`1500`: dreload doesn't seem to exclude numpy
862 * :ghissue:`1520`: kernel crash when showing tooltip (?)
862 * :ghissue:`1520`: kernel crash when showing tooltip (?)
863 * :ghissue:`1652`: add patch_pyzmq() for backporting a few changes from newer pyzmq
863 * :ghissue:`1652`: add patch_pyzmq() for backporting a few changes from newer pyzmq
864 * :ghissue:`1650`: DOC: moving files with SSH launchers
864 * :ghissue:`1650`: DOC: moving files with SSH launchers
865 * :ghissue:`1357`: add IPython.embed_kernel()
865 * :ghissue:`1357`: add IPython.embed_kernel()
866 * :ghissue:`1640`: Finish up embed_kernel
866 * :ghissue:`1640`: Finish up embed_kernel
867 * :ghissue:`1651`: Remove bundled Itpl module
867 * :ghissue:`1651`: Remove bundled Itpl module
868 * :ghissue:`1634`: incremental improvements to SSH launchers
868 * :ghissue:`1634`: incremental improvements to SSH launchers
869 * :ghissue:`1649`: move examples/test_embed into examples/tests/embed
869 * :ghissue:`1649`: move examples/test_embed into examples/tests/embed
870 * :ghissue:`1171`: Recognise virtualenvs
870 * :ghissue:`1171`: Recognise virtualenvs
871 * :ghissue:`1479`: test_extension failing in Windows
871 * :ghissue:`1479`: test_extension failing in Windows
872 * :ghissue:`1633`: Fix installing extension from local file on Windows
872 * :ghissue:`1633`: Fix installing extension from local file on Windows
873 * :ghissue:`1644`: Update copyright date to 2012
873 * :ghissue:`1644`: Update copyright date to 2012
874 * :ghissue:`1636`: Test_deepreload breaks pylab irunner tests
874 * :ghissue:`1636`: Test_deepreload breaks pylab irunner tests
875 * :ghissue:`1645`: Exclude UserDict when deep reloading NumPy.
875 * :ghissue:`1645`: Exclude UserDict when deep reloading NumPy.
876 * :ghissue:`1454`: make it possible to start engine in 'disabled' mode and 'enable' later
876 * :ghissue:`1454`: make it possible to start engine in 'disabled' mode and 'enable' later
877 * :ghissue:`1641`: Escape code for the current time in PromptManager
877 * :ghissue:`1641`: Escape code for the current time in PromptManager
878 * :ghissue:`1638`: ipython console clobbers custom sys.path
878 * :ghissue:`1638`: ipython console clobbers custom sys.path
879 * :ghissue:`1637`: Removed a ':' which shouldn't have been there
879 * :ghissue:`1637`: Removed a ':' which shouldn't have been there
880 * :ghissue:`1536`: ipython 0.12 embed shell won't run startup scripts
880 * :ghissue:`1536`: ipython 0.12 embed shell won't run startup scripts
881 * :ghissue:`1628`: error: QApplication already exists in TestKillRing
881 * :ghissue:`1628`: error: QApplication already exists in TestKillRing
882 * :ghissue:`1631`: TST: QApplication doesn't quit early enough with PySide.
882 * :ghissue:`1631`: TST: QApplication doesn't quit early enough with PySide.
883 * :ghissue:`1629`: evaluate a few dangling validate_message generators
883 * :ghissue:`1629`: evaluate a few dangling validate_message generators
884 * :ghissue:`1621`: clear In[] prompt numbers on "Clear All Output"
884 * :ghissue:`1621`: clear In[] prompt numbers on "Clear All Output"
885 * :ghissue:`1627`: Test the Message Spec
885 * :ghissue:`1627`: Test the Message Spec
886 * :ghissue:`1470`: SyntaxError on setup.py install with Python 3
886 * :ghissue:`1470`: SyntaxError on setup.py install with Python 3
887 * :ghissue:`1624`: Fixes for byte-compilation on Python 3
887 * :ghissue:`1624`: Fixes for byte-compilation on Python 3
888 * :ghissue:`1612`: pylab=inline fig.show() non-existent in notebook
888 * :ghissue:`1612`: pylab=inline fig.show() non-existent in notebook
889 * :ghissue:`1615`: Add show() method to figure objects.
889 * :ghissue:`1615`: Add show() method to figure objects.
890 * :ghissue:`1622`: deepreload fails on Python 3
890 * :ghissue:`1622`: deepreload fails on Python 3
891 * :ghissue:`1625`: Fix deepreload on Python 3
891 * :ghissue:`1625`: Fix deepreload on Python 3
892 * :ghissue:`1626`: Failure in new `dreload` tests under Python 3.2
892 * :ghissue:`1626`: Failure in new `dreload` tests under Python 3.2
893 * :ghissue:`1623`: iPython / matplotlib Memory error with imshow
893 * :ghissue:`1623`: iPython / matplotlib Memory error with imshow
894 * :ghissue:`1619`: pyin messages should have execution_count
894 * :ghissue:`1619`: pyin messages should have execution_count
895 * :ghissue:`1620`: pyin message now have execution_count
895 * :ghissue:`1620`: pyin message now have execution_count
896 * :ghissue:`32`: dreload produces spurious traceback when numpy is involved
896 * :ghissue:`32`: dreload produces spurious traceback when numpy is involved
897 * :ghissue:`1457`: Update deepreload to use a rewritten knee.py. Fixes dreload(numpy).
897 * :ghissue:`1457`: Update deepreload to use a rewritten knee.py. Fixes dreload(numpy).
898 * :ghissue:`1613`: allow map / parallel function for single-engine views
898 * :ghissue:`1613`: allow map / parallel function for single-engine views
899 * :ghissue:`1609`: exit notebook cleanly on SIGINT, SIGTERM
899 * :ghissue:`1609`: exit notebook cleanly on SIGINT, SIGTERM
900 * :ghissue:`1531`: Function keyword completion fails if cursor is in the middle of the complete parentheses
900 * :ghissue:`1531`: Function keyword completion fails if cursor is in the middle of the complete parentheses
901 * :ghissue:`1607`: cleanup sqlitedb temporary db file after tests
901 * :ghissue:`1607`: cleanup sqlitedb temporary db file after tests
902 * :ghissue:`1608`: don't rely on timedelta.total_seconds in AsyncResult
902 * :ghissue:`1608`: don't rely on timedelta.total_seconds in AsyncResult
903 * :ghissue:`1421`: ipython32 %run -d breaks with NameError name 'execfile' is not defined
903 * :ghissue:`1421`: ipython32 %run -d breaks with NameError name 'execfile' is not defined
904 * :ghissue:`1599`: Fix for %run -d on Python 3
904 * :ghissue:`1599`: Fix for %run -d on Python 3
905 * :ghissue:`1201`: %env magic fails with Python 3.2
905 * :ghissue:`1201`: %env magic fails with Python 3.2
906 * :ghissue:`1602`: Fix %env magic on Python 3.
906 * :ghissue:`1602`: Fix %env magic on Python 3.
907 * :ghissue:`1603`: Remove python3 profile
907 * :ghissue:`1603`: Remove python3 profile
908 * :ghissue:`1604`: Exclude IPython.quarantine from installation
908 * :ghissue:`1604`: Exclude IPython.quarantine from installation
909 * :ghissue:`1601`: Security file is not removed after shutdown by Ctrl+C or kill -INT
909 * :ghissue:`1601`: Security file is not removed after shutdown by Ctrl+C or kill -INT
910 * :ghissue:`1600`: Specify encoding for io.open in notebook_reformat tests
910 * :ghissue:`1600`: Specify encoding for io.open in notebook_reformat tests
911 * :ghissue:`1605`: Small fixes for Animation and Progress notebook
911 * :ghissue:`1605`: Small fixes for Animation and Progress notebook
912 * :ghissue:`1452`: Bug fix for approval
912 * :ghissue:`1452`: Bug fix for approval
913 * :ghissue:`13`: Improve robustness and debuggability of test suite
913 * :ghissue:`13`: Improve robustness and debuggability of test suite
914 * :ghissue:`70`: IPython should prioritize __all__ during tab completion
914 * :ghissue:`70`: IPython should prioritize __all__ during tab completion
915 * :ghissue:`1529`: __all__ feature, improvement to dir2, and tests for both
915 * :ghissue:`1529`: __all__ feature, improvement to dir2, and tests for both
916 * :ghissue:`1475`: Custom namespace for %run
916 * :ghissue:`1475`: Custom namespace for %run
917 * :ghissue:`1564`: calling .abort on AsyncMapResult results in traceback
917 * :ghissue:`1564`: calling .abort on AsyncMapResult results in traceback
918 * :ghissue:`1548`: add sugar methods/properties to AsyncResult
918 * :ghissue:`1548`: add sugar methods/properties to AsyncResult
919 * :ghissue:`1535`: Fix pretty printing dispatch
919 * :ghissue:`1535`: Fix pretty printing dispatch
920 * :ghissue:`1522`: Discussion: some potential Qt console refactoring
920 * :ghissue:`1522`: Discussion: some potential Qt console refactoring
921 * :ghissue:`1399`: Use LaTeX to print various built-in types with the SymPy printing extension
921 * :ghissue:`1399`: Use LaTeX to print various built-in types with the SymPy printing extension
922 * :ghissue:`1597`: re-enter kernel.eventloop after catching SIGINT
922 * :ghissue:`1597`: re-enter kernel.eventloop after catching SIGINT
923 * :ghissue:`1490`: rename plaintext cell -> raw cell
923 * :ghissue:`1490`: rename plaintext cell -> raw cell
924 * :ghissue:`1487`: %notebook fails in qtconsole
924 * :ghissue:`1487`: %notebook fails in qtconsole
925 * :ghissue:`1545`: trailing newline not preserved in splitline ipynb
925 * :ghissue:`1545`: trailing newline not preserved in splitline ipynb
926 * :ghissue:`1480`: Fix %notebook magic, etc. nbformat unicode tests and fixes
926 * :ghissue:`1480`: Fix %notebook magic, etc. nbformat unicode tests and fixes
927 * :ghissue:`1588`: Gtk3 integration with ipython works.
927 * :ghissue:`1588`: Gtk3 integration with ipython works.
928 * :ghissue:`1595`: Examples syntax (avoid errors installing on Python 3)
928 * :ghissue:`1595`: Examples syntax (avoid errors installing on Python 3)
929 * :ghissue:`1526`: Find encoding for Python files
929 * :ghissue:`1526`: Find encoding for Python files
930 * :ghissue:`1594`: Fix writing git commit ID to a file on build with Python 3
930 * :ghissue:`1594`: Fix writing git commit ID to a file on build with Python 3
931 * :ghissue:`1556`: shallow-copy DictDB query results
931 * :ghissue:`1556`: shallow-copy DictDB query results
932 * :ghissue:`1499`: various pyflakes issues
932 * :ghissue:`1499`: various pyflakes issues
933 * :ghissue:`1502`: small changes in response to pyflakes pass
933 * :ghissue:`1502`: small changes in response to pyflakes pass
934 * :ghissue:`1445`: Don't build sphinx docs for sdists
934 * :ghissue:`1445`: Don't build sphinx docs for sdists
935 * :ghissue:`1484`: unhide .git_commit_info.ini
935 * :ghissue:`1484`: unhide .git_commit_info.ini
936 * :ghissue:`1538`: store git commit hash in utils._sysinfo instead of hidden data file
936 * :ghissue:`1538`: store git commit hash in utils._sysinfo instead of hidden data file
937 * :ghissue:`1546`: attempt to suppress exceptions in channel threads at shutdown
937 * :ghissue:`1546`: attempt to suppress exceptions in channel threads at shutdown
938 * :ghissue:`1524`: unhide git_commit_info.ini
938 * :ghissue:`1524`: unhide git_commit_info.ini
939 * :ghissue:`1559`: update tools/github_stats.py to use GitHub API v3
939 * :ghissue:`1559`: update tools/github_stats.py to use GitHub API v3
940 * :ghissue:`1563`: clear_output improvements
940 * :ghissue:`1563`: clear_output improvements
941 * :ghissue:`1558`: Ipython testing documentation still mentions twisted and trial
941 * :ghissue:`1558`: Ipython testing documentation still mentions twisted and trial
942 * :ghissue:`1560`: remove obsolete discussion of Twisted/trial from testing docs
942 * :ghissue:`1560`: remove obsolete discussion of Twisted/trial from testing docs
943 * :ghissue:`1561`: Qtconsole - nonstandard \a and \b
943 * :ghissue:`1561`: Qtconsole - nonstandard \a and \b
944 * :ghissue:`1569`: BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561]
944 * :ghissue:`1569`: BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561]
945 * :ghissue:`1574`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole
945 * :ghissue:`1574`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole
946 * :ghissue:`1573`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole.
946 * :ghissue:`1573`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole.
947 * :ghissue:`1590`: 'iPython3 qtconsole' doesn't work in Windows 7
947 * :ghissue:`1590`: 'iPython3 qtconsole' doesn't work in Windows 7
948 * :ghissue:`602`: User test the html notebook
948 * :ghissue:`602`: User test the html notebook
949 * :ghissue:`613`: Implement Namespace panel section
949 * :ghissue:`613`: Implement Namespace panel section
950 * :ghissue:`879`: How to handle Javascript output in the notebook
950 * :ghissue:`879`: How to handle Javascript output in the notebook
951 * :ghissue:`1255`: figure.show() raises an error with the inline backend
951 * :ghissue:`1255`: figure.show() raises an error with the inline backend
952 * :ghissue:`1467`: Document or bundle a git-integrated facility for stripping VCS-unfriendly binary data
952 * :ghissue:`1467`: Document or bundle a git-integrated facility for stripping VCS-unfriendly binary data
953 * :ghissue:`1237`: Kernel status and logout button overlap
953 * :ghissue:`1237`: Kernel status and logout button overlap
954 * :ghissue:`1319`: Running a cell with ctrl+Enter selects text in cell
954 * :ghissue:`1319`: Running a cell with ctrl+Enter selects text in cell
955 * :ghissue:`1571`: module member autocomplete should respect __all__
955 * :ghissue:`1571`: module member autocomplete should respect __all__
956 * :ghissue:`1566`: ipython3 doesn't run in Win7 with Python 3.2
956 * :ghissue:`1566`: ipython3 doesn't run in Win7 with Python 3.2
957 * :ghissue:`1568`: fix PR #1567
957 * :ghissue:`1568`: fix PR #1567
958 * :ghissue:`1567`: Fix: openssh_tunnel did not parse port in `server`
958 * :ghissue:`1567`: Fix: openssh_tunnel did not parse port in `server`
959 * :ghissue:`1565`: fix AsyncResult.abort
959 * :ghissue:`1565`: fix AsyncResult.abort
960 * :ghissue:`1550`: Crash when starting notebook in a non-ascii path
960 * :ghissue:`1550`: Crash when starting notebook in a non-ascii path
961 * :ghissue:`1552`: use os.getcwdu in NotebookManager
961 * :ghissue:`1552`: use os.getcwdu in NotebookManager
962 * :ghissue:`1554`: wrong behavior of the all function on iterators
962 * :ghissue:`1554`: wrong behavior of the all function on iterators
963 * :ghissue:`1541`: display_pub flushes stdout/err
963 * :ghissue:`1541`: display_pub flushes stdout/err
964 * :ghissue:`1539`: Asynchrous issue when using clear_display and print x,y,z
964 * :ghissue:`1539`: Asynchrous issue when using clear_display and print x,y,z
965 * :ghissue:`1544`: make MultiKernelManager.kernel_manager_class configurable
965 * :ghissue:`1544`: make MultiKernelManager.kernel_manager_class configurable
966 * :ghissue:`1494`: Untrusted Secure Websocket broken on latest chrome dev
966 * :ghissue:`1494`: Untrusted Secure Websocket broken on latest chrome dev
967 * :ghissue:`1521`: only install ipython-qtconsole gui script on Windows
967 * :ghissue:`1521`: only install ipython-qtconsole gui script on Windows
968 * :ghissue:`1528`: Tab completion optionally respects __all__ (+ dir2() cleanup)
968 * :ghissue:`1528`: Tab completion optionally respects __all__ (+ dir2() cleanup)
969 * :ghissue:`1527`: Making a progress bar work in IPython Notebook
969 * :ghissue:`1527`: Making a progress bar work in IPython Notebook
970 * :ghissue:`1497`: __all__ functionality added to dir2(obj)
970 * :ghissue:`1497`: __all__ functionality added to dir2(obj)
971 * :ghissue:`1518`: Pretty printing exceptions is broken
971 * :ghissue:`1518`: Pretty printing exceptions is broken
972 * :ghissue:`811`: Fixes for ipython unhandeled OSError exception on failure of os.getcwdu()
972 * :ghissue:`811`: Fixes for ipython unhandeled OSError exception on failure of os.getcwdu()
973 * :ghissue:`1517`: Fix indentation bug in IPython/lib/pretty.py
973 * :ghissue:`1517`: Fix indentation bug in IPython/lib/pretty.py
974 * :ghissue:`1519`: BUG: Include the name of the exception type in its pretty format.
974 * :ghissue:`1519`: BUG: Include the name of the exception type in its pretty format.
975 * :ghissue:`1525`: A hack for auto-complete numpy recarray
975 * :ghissue:`1525`: A hack for auto-complete numpy recarray
976 * :ghissue:`1489`: Fix zero-copy push
976 * :ghissue:`1489`: Fix zero-copy push
977 * :ghissue:`1401`: numpy arrays cannot be used with View.apply() in Python 3
977 * :ghissue:`1401`: numpy arrays cannot be used with View.apply() in Python 3
978 * :ghissue:`1477`: fix dangling `buffer` in IPython.parallel.util
978 * :ghissue:`1477`: fix dangling `buffer` in IPython.parallel.util
979 * :ghissue:`1514`: DOC: Fix references to IPython.lib.pretty instead of the old location
979 * :ghissue:`1514`: DOC: Fix references to IPython.lib.pretty instead of the old location
980 * :ghissue:`1511`: Version comparison error ( '2.1.11' < '2.1.4' ==> True)
980 * :ghissue:`1511`: Version comparison error ( '2.1.11' < '2.1.4' ==> True)
981 * :ghissue:`1506`: "Fixing" the Notebook scroll to help in visually comparing outputs
981 * :ghissue:`1506`: "Fixing" the Notebook scroll to help in visually comparing outputs
982 * :ghissue:`1481`: BUG: Improve placement of CallTipWidget
982 * :ghissue:`1481`: BUG: Improve placement of CallTipWidget
983 * :ghissue:`1241`: When our debugger class is used standalone `_oh` key errors are thrown
983 * :ghissue:`1241`: When our debugger class is used standalone `_oh` key errors are thrown
984 * :ghissue:`676`: IPython.embed() from ipython crashes twice on exit
984 * :ghissue:`676`: IPython.embed() from ipython crashes twice on exit
985 * :ghissue:`1496`: BUG: LBYL when clearing the output history on shutdown.
985 * :ghissue:`1496`: BUG: LBYL when clearing the output history on shutdown.
986 * :ghissue:`1507`: python3 notebook: TypeError: unorderable types
986 * :ghissue:`1507`: python3 notebook: TypeError: unorderable types
987 * :ghissue:`1508`: fix sorting profiles in clustermanager
987 * :ghissue:`1508`: fix sorting profiles in clustermanager
988 * :ghissue:`1495`: BUG: Fix pretty-printing for overzealous objects
988 * :ghissue:`1495`: BUG: Fix pretty-printing for overzealous objects
989 * :ghissue:`1505`: SQLite objects created in a thread can only be used in that same thread
989 * :ghissue:`1505`: SQLite objects created in a thread can only be used in that same thread
990 * :ghissue:`1482`: %history documentation out of date?
990 * :ghissue:`1482`: %history documentation out of date?
991 * :ghissue:`1501`: dreload doesn't seem to exclude numpy
991 * :ghissue:`1501`: dreload doesn't seem to exclude numpy
992 * :ghissue:`1472`: more general fix for #662
992 * :ghissue:`1472`: more general fix for #662
993 * :ghissue:`1486`: save state of qtconsole
993 * :ghissue:`1486`: save state of qtconsole
994 * :ghissue:`1485`: add history search to qtconsole
994 * :ghissue:`1485`: add history search to qtconsole
995 * :ghissue:`1483`: updated magic_history docstring
995 * :ghissue:`1483`: updated magic_history docstring
996 * :ghissue:`1383`: First version of cluster web service.
996 * :ghissue:`1383`: First version of cluster web service.
997 * :ghissue:`482`: test_run.test_tclass fails on Windows
997 * :ghissue:`482`: test_run.test_tclass fails on Windows
998 * :ghissue:`1398`: fix %tb after SyntaxError
998 * :ghissue:`1398`: fix %tb after SyntaxError
999 * :ghissue:`1478`: key function or lambda in sorted function doesn't find global variables
999 * :ghissue:`1478`: key function or lambda in sorted function doesn't find global variables
1000 * :ghissue:`1415`: handle exit/quit/exit()/quit() variants in zmqconsole
1000 * :ghissue:`1415`: handle exit/quit/exit()/quit() variants in zmqconsole
1001 * :ghissue:`1440`: Fix for failing testsuite when using --with-xml-coverage on windows.
1001 * :ghissue:`1440`: Fix for failing testsuite when using --with-xml-coverage on windows.
1002 * :ghissue:`1419`: Add %install_ext magic function.
1002 * :ghissue:`1419`: Add %install_ext magic function.
1003 * :ghissue:`1424`: Win32 shell interactivity
1003 * :ghissue:`1424`: Win32 shell interactivity
1004 * :ghissue:`1434`: Controller should schedule tasks of multiple clients at the same time
1004 * :ghissue:`1434`: Controller should schedule tasks of multiple clients at the same time
1005 * :ghissue:`1268`: notebook %reset magic fails with StdinNotImplementedError
1005 * :ghissue:`1268`: notebook %reset magic fails with StdinNotImplementedError
1006 * :ghissue:`1438`: from cherrypy import expose fails when running script form parent directory
1006 * :ghissue:`1438`: from cherrypy import expose fails when running script form parent directory
1007 * :ghissue:`1468`: Simplify structure of a Job in the TaskScheduler
1007 * :ghissue:`1468`: Simplify structure of a Job in the TaskScheduler
1008 * :ghissue:`875`: never build unicode error messages
1008 * :ghissue:`875`: never build unicode error messages
1009 * :ghissue:`1107`: Tab autocompletion can suggest invalid syntax
1009 * :ghissue:`1107`: Tab autocompletion can suggest invalid syntax
1010 * :ghissue:`1447`: 1107 - Tab autocompletion can suggest invalid syntax
1010 * :ghissue:`1447`: 1107 - Tab autocompletion can suggest invalid syntax
1011 * :ghissue:`1469`: Fix typo in comment (insert space)
1011 * :ghissue:`1469`: Fix typo in comment (insert space)
1012 * :ghissue:`1463`: Fix completion when importing modules in the cwd.
1012 * :ghissue:`1463`: Fix completion when importing modules in the cwd.
1013 * :ghissue:`1437`: unfriendly error handling with pythonw and ipython-qtconsole
1013 * :ghissue:`1437`: unfriendly error handling with pythonw and ipython-qtconsole
1014 * :ghissue:`1466`: Fix for issue #1437, unfriendly windows qtconsole error handling
1014 * :ghissue:`1466`: Fix for issue #1437, unfriendly windows qtconsole error handling
1015 * :ghissue:`1432`: Fix ipython directive
1015 * :ghissue:`1432`: Fix ipython directive
1016 * :ghissue:`1465`: allow `ipython help subcommand` syntax
1016 * :ghissue:`1465`: allow `ipython help subcommand` syntax
1017 * :ghissue:`1394`: Wishlist: Remove hard dependency on ctypes
1017 * :ghissue:`1394`: Wishlist: Remove hard dependency on ctypes
1018 * :ghissue:`1416`: Conditional import of ctypes in inputhook
1018 * :ghissue:`1416`: Conditional import of ctypes in inputhook
1019 * :ghissue:`1462`: expedite parallel tests
1019 * :ghissue:`1462`: expedite parallel tests
1020 * :ghissue:`1418`: Strict mode in javascript
1020 * :ghissue:`1418`: Strict mode in javascript
1021 * :ghissue:`1410`: Add javascript library and css stylesheet loading to JS class.
1021 * :ghissue:`1410`: Add javascript library and css stylesheet loading to JS class.
1022 * :ghissue:`1427`: #922 again
1022 * :ghissue:`1427`: #922 again
1023 * :ghissue:`1448`: Fix for #875 Never build unicode error messages
1023 * :ghissue:`1448`: Fix for #875 Never build unicode error messages
1024 * :ghissue:`1458`: use eval to uncan References
1024 * :ghissue:`1458`: use eval to uncan References
1025 * :ghissue:`1455`: Python3 install fails
1025 * :ghissue:`1455`: Python3 install fails
1026 * :ghissue:`1450`: load mathjax from CDN via https
1026 * :ghissue:`1450`: load mathjax from CDN via https
1027 * :ghissue:`1182`: Qtconsole, multiwindow
1027 * :ghissue:`1182`: Qtconsole, multiwindow
1028 * :ghissue:`1439`: Notebook not storing heading celltype information
1028 * :ghissue:`1439`: Notebook not storing heading celltype information
1029 * :ghissue:`1451`: include heading level in JSON
1029 * :ghissue:`1451`: include heading level in JSON
1030 * :ghissue:`1444`: Fix pyhton -> python typos
1030 * :ghissue:`1444`: Fix pyhton -> python typos
1031 * :ghissue:`1412`: Input parsing issue with %prun
1031 * :ghissue:`1412`: Input parsing issue with %prun
1032 * :ghissue:`1414`: ignore errors in shell.var_expand
1032 * :ghissue:`1414`: ignore errors in shell.var_expand
1033 * :ghissue:`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_*"
1033 * :ghissue:`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_*"
1034 * :ghissue:`1431`: Beginner Error: ipython qtconsole
1034 * :ghissue:`1431`: Beginner Error: ipython qtconsole
1035 * :ghissue:`1436`: "ipython-qtconsole --gui qt" hangs on 64-bit win7
1035 * :ghissue:`1436`: "ipython-qtconsole --gui qt" hangs on 64-bit win7
1036 * :ghissue:`1433`: websocket connection fails on Chrome
1036 * :ghissue:`1433`: websocket connection fails on Chrome
1037 * :ghissue:`1430`: Fix for tornado check for tornado < 1.1.0
1037 * :ghissue:`1430`: Fix for tornado check for tornado < 1.1.0
1038 * :ghissue:`1408`: test_get_home_dir_3 failed on Mac OS X
1038 * :ghissue:`1408`: test_get_home_dir_3 failed on Mac OS X
1039 * :ghissue:`1413`: get_home_dir expands symlinks, adjust test accordingly
1039 * :ghissue:`1413`: get_home_dir expands symlinks, adjust test accordingly
1040 * :ghissue:`1420`: fixes #922
1040 * :ghissue:`1420`: fixes #922
1041 * :ghissue:`823`: KnownFailure tests appearing as errors
1041 * :ghissue:`823`: KnownFailure tests appearing as errors
1042 * :ghissue:`1385`: updated and prettified magic doc strings
1042 * :ghissue:`1385`: updated and prettified magic doc strings
1043 * :ghissue:`1406`: Browser selection
1043 * :ghissue:`1406`: Browser selection
1044 * :ghissue:`1411`: ipcluster starts 8 engines "successfully" but Client only finds two
1044 * :ghissue:`1411`: ipcluster starts 8 engines "successfully" but Client only finds two
1045 * :ghissue:`1375`: %history -g -f file encoding issue
1045 * :ghissue:`1375`: %history -g -f file encoding issue
1046 * :ghissue:`1377`: Saving non-ascii history
1046 * :ghissue:`1377`: Saving non-ascii history
1047 * :ghissue:`797`: Source introspection needs to be smarter in python 3.2
1047 * :ghissue:`797`: Source introspection needs to be smarter in python 3.2
1048 * :ghissue:`846`: Autoreload extension doesn't work with Python 3.2
1048 * :ghissue:`846`: Autoreload extension doesn't work with Python 3.2
1049 * :ghissue:`1360`: IPython notebook not starting on winXP
1049 * :ghissue:`1360`: IPython notebook not starting on winXP
1050 * :ghissue:`1407`: Qtconsole segfaults on OSX when displaying some pop-up function tooltips
1050 * :ghissue:`1407`: Qtconsole segfaults on OSX when displaying some pop-up function tooltips
1051 * :ghissue:`1402`: fix symlinked /home issue for FreeBSD
1051 * :ghissue:`1402`: fix symlinked /home issue for FreeBSD
1052 * :ghissue:`1403`: pyreadline cyclic dependency with pdb++/pdbpp module
1052 * :ghissue:`1403`: pyreadline cyclic dependency with pdb++/pdbpp module
1053 * :ghissue:`1405`: Only monkeypatch xunit when the tests are run using it.
1053 * :ghissue:`1405`: Only monkeypatch xunit when the tests are run using it.
1054 * :ghissue:`1404`: Feature Request: List/Dictionary tab completion
1054 * :ghissue:`1404`: Feature Request: List/Dictionary tab completion
1055 * :ghissue:`1395`: Xunit & KnownFailure
1055 * :ghissue:`1395`: Xunit & KnownFailure
1056 * :ghissue:`1396`: Fix for %tb magic.
1056 * :ghissue:`1396`: Fix for %tb magic.
1057 * :ghissue:`1397`: Stay or leave message not working, Safari session lost.
1057 * :ghissue:`1397`: Stay or leave message not working, Safari session lost.
1058 * :ghissue:`1389`: pylab=inline inoperant through ssh tunnelling?
1058 * :ghissue:`1389`: pylab=inline inoperant through ssh tunnelling?
1059 * :ghissue:`1386`: Jsd3
1059 * :ghissue:`1386`: Jsd3
1060 * :ghissue:`1388`: Add simple support for running inside a virtualenv
1060 * :ghissue:`1388`: Add simple support for running inside a virtualenv
1061 * :ghissue:`826`: Add support for creation of parallel task when no engine is running
1061 * :ghissue:`826`: Add support for creation of parallel task when no engine is running
1062 * :ghissue:`1391`: Improve Hub/Scheduler when no engines are registered
1062 * :ghissue:`1391`: Improve Hub/Scheduler when no engines are registered
1063 * :ghissue:`1369`: load header with engine id when engine dies in TaskScheduler
1063 * :ghissue:`1369`: load header with engine id when engine dies in TaskScheduler
1064 * :ghissue:`1345`: notebook can't save unicode as script
1064 * :ghissue:`1345`: notebook can't save unicode as script
1065 * :ghissue:`1353`: Save notebook as script using unicode file handle.
1065 * :ghissue:`1353`: Save notebook as script using unicode file handle.
1066 * :ghissue:`1352`: Add '-m mod : run library module as a script' option.
1066 * :ghissue:`1352`: Add '-m mod : run library module as a script' option.
1067 * :ghissue:`1363`: Fix some minor color/style config issues in the qtconsole
1067 * :ghissue:`1363`: Fix some minor color/style config issues in the qtconsole
1068 * :ghissue:`1371`: Adds a quiet keyword to sync_imports
1068 * :ghissue:`1371`: Adds a quiet keyword to sync_imports
1069 * :ghissue:`1390`: Blank screen for notebooks on Safari
1069 * :ghissue:`1390`: Blank screen for notebooks on Safari
1070 * :ghissue:`1387`: Fixing Cell menu to update cell type select box.
1070 * :ghissue:`1387`: Fixing Cell menu to update cell type select box.
1071 * :ghissue:`645`: Standalone WX GUI support is broken
1071 * :ghissue:`645`: Standalone WX GUI support is broken
1072 * :ghissue:`1296`: Wx gui example: fixes the broken example for `%gui wx`.
1072 * :ghissue:`1296`: Wx gui example: fixes the broken example for `%gui wx`.
1073 * :ghissue:`1254`: typo in notebooklist.js breaks links
1073 * :ghissue:`1254`: typo in notebooklist.js breaks links
1074 * :ghissue:`781`: Users should be able to clone a notebook
1074 * :ghissue:`781`: Users should be able to clone a notebook
1075 * :ghissue:`1372`: ipcontroller cleans up connection files unless reuse=True
1075 * :ghissue:`1372`: ipcontroller cleans up connection files unless reuse=True
1076 * :ghissue:`1374`: remove calls to meaningless ZMQStream.on_err
1076 * :ghissue:`1374`: remove calls to meaningless ZMQStream.on_err
1077 * :ghissue:`1382`: Update RO for Notebook
1077 * :ghissue:`1382`: Update RO for Notebook
1078 * :ghissue:`1370`: allow draft76 websockets (Safari)
1078 * :ghissue:`1370`: allow draft76 websockets (Safari)
1079 * :ghissue:`1368`: Ensure handler patterns are str, not unicode
1079 * :ghissue:`1368`: Ensure handler patterns are str, not unicode
1080 * :ghissue:`1379`: Sage link on website homepage broken
1080 * :ghissue:`1379`: Sage link on website homepage broken
1081 * :ghissue:`1376`: FWIW does not work with Chrome 16.0.912.77 Ubuntu 10.10
1081 * :ghissue:`1376`: FWIW does not work with Chrome 16.0.912.77 Ubuntu 10.10
1082 * :ghissue:`1358`: Cannot install ipython on Windows 7 64-bit
1082 * :ghissue:`1358`: Cannot install ipython on Windows 7 64-bit
1083 * :ghissue:`1367`: Ctrl - m t does not toggle output in chrome
1083 * :ghissue:`1367`: Ctrl - m t does not toggle output in chrome
1084 * :ghissue:`1359`: [sympyprinting] MathJax can't render \root{m}{n}
1084 * :ghissue:`1359`: [sympyprinting] MathJax can't render \root{m}{n}
1085 * :ghissue:`1337`: Tab in the notebook after `(` should not indent, only give a tooltip
1085 * :ghissue:`1337`: Tab in the notebook after `(` should not indent, only give a tooltip
1086 * :ghissue:`1339`: Notebook printing broken
1086 * :ghissue:`1339`: Notebook printing broken
1087 * :ghissue:`1344`: Ctrl + M + L does not toggle line numbering in htmlnotebook
1087 * :ghissue:`1344`: Ctrl + M + L does not toggle line numbering in htmlnotebook
1088 * :ghissue:`1348`: Ctrl + M + M does not switch to markdown cell
1088 * :ghissue:`1348`: Ctrl + M + M does not switch to markdown cell
1089 * :ghissue:`1361`: Notebook bug fix branch
1089 * :ghissue:`1361`: Notebook bug fix branch
1090 * :ghissue:`1364`: avoid jsonlib returning Decimal
1090 * :ghissue:`1364`: avoid jsonlib returning Decimal
1091 * :ghissue:`1362`: Don't log complete contents of history replies, even in debug
1091 * :ghissue:`1362`: Don't log complete contents of history replies, even in debug
1092 * :ghissue:`888`: ReST support in notebooks
1092 * :ghissue:`888`: ReST support in notebooks
1093 * :ghissue:`1205`: notebook stores HTML escaped text in the file
1093 * :ghissue:`1205`: notebook stores HTML escaped text in the file
1094 * :ghissue:`1351`: add IPython.embed_kernel()
1094 * :ghissue:`1351`: add IPython.embed_kernel()
1095 * :ghissue:`1243`: magic commands without % are not completed properly in htmlnotebook
1095 * :ghissue:`1243`: magic commands without % are not completed properly in htmlnotebook
1096 * :ghissue:`1347`: fix weird magic completion in notebook
1096 * :ghissue:`1347`: fix weird magic completion in notebook
1097 * :ghissue:`1355`: notebook.html extends layout.html now
1097 * :ghissue:`1355`: notebook.html extends layout.html now
1098 * :ghissue:`1354`: min and max in the notebook
1098 * :ghissue:`1354`: min and max in the notebook
1099 * :ghissue:`1346`: fixups for alternate URL prefix stuff
1099 * :ghissue:`1346`: fixups for alternate URL prefix stuff
1100 * :ghissue:`1336`: crack at making notebook.html use the layout.html template
1100 * :ghissue:`1336`: crack at making notebook.html use the layout.html template
1101 * :ghissue:`1331`: RST and heading cells
1101 * :ghissue:`1331`: RST and heading cells
1102 * :ghissue:`1350`: Add '-m mod : run library module as a script' option
1102 * :ghissue:`1350`: Add '-m mod : run library module as a script' option
1103 * :ghissue:`1247`: fixes a bug causing extra newlines after comments.
1103 * :ghissue:`1247`: fixes a bug causing extra newlines after comments.
1104 * :ghissue:`1329`: add base_url to notebook configuration options
1104 * :ghissue:`1329`: add base_url to notebook configuration options
1105 * :ghissue:`1332`: notebook - allow prefixes in URL path.
1105 * :ghissue:`1332`: notebook - allow prefixes in URL path.
1106 * :ghissue:`1317`: Very slow traceback construction from Cython extension
1106 * :ghissue:`1317`: Very slow traceback construction from Cython extension
1107 * :ghissue:`1341`: Don't attempt to tokenize binary files for tracebacks
1107 * :ghissue:`1341`: Don't attempt to tokenize binary files for tracebacks
1108 * :ghissue:`1300`: Cell Input collapse
1108 * :ghissue:`1300`: Cell Input collapse
1109 * :ghissue:`1334`: added key handler for control-s to notebook, seems to work pretty well
1109 * :ghissue:`1334`: added key handler for control-s to notebook, seems to work pretty well
1110 * :ghissue:`1338`: Fix see also in docstrings so API docs build
1110 * :ghissue:`1338`: Fix see also in docstrings so API docs build
1111 * :ghissue:`1335`: Notebook toolbar UI
1111 * :ghissue:`1335`: Notebook toolbar UI
1112 * :ghissue:`1299`: made notebook.html extend layout.html
1112 * :ghissue:`1299`: made notebook.html extend layout.html
1113 * :ghissue:`1318`: make Ctrl-D in qtconsole act same as in terminal (ready to merge)
1113 * :ghissue:`1318`: make Ctrl-D in qtconsole act same as in terminal (ready to merge)
1114 * :ghissue:`873`: ReST support in notebook frontend
1114 * :ghissue:`873`: ReST support in notebook frontend
1115 * :ghissue:`1139`: Notebook webkit notification
1115 * :ghissue:`1139`: Notebook webkit notification
1116 * :ghissue:`1314`: Insertcell
1116 * :ghissue:`1314`: Insertcell
1117 * :ghissue:`1328`: Coverage
1117 * :ghissue:`1328`: Coverage
1118 * :ghissue:`1206`: don't preserve fixConsole output in json
1118 * :ghissue:`1206`: don't preserve fixConsole output in json
1119 * :ghissue:`1330`: Add linewrapping to text cells (new feature in CodeMirror).
1119 * :ghissue:`1330`: Add linewrapping to text cells (new feature in CodeMirror).
1120 * :ghissue:`1309`: Inoculate clearcmd extension into %reset functionality
1120 * :ghissue:`1309`: Inoculate clearcmd extension into %reset functionality
1121 * :ghissue:`1327`: Updatecm2
1121 * :ghissue:`1327`: Updatecm2
1122 * :ghissue:`1326`: Removing Ace edit capability.
1122 * :ghissue:`1326`: Removing Ace edit capability.
1123 * :ghissue:`1325`: forgotten selected_cell -> get_selected_cell
1123 * :ghissue:`1325`: forgotten selected_cell -> get_selected_cell
1124 * :ghissue:`1316`: Pass subprocess test runners a suitable location for xunit output
1124 * :ghissue:`1316`: Pass subprocess test runners a suitable location for xunit output
1125 * :ghissue:`1315`: Collect results from subprocess runners and spit out Xunit XML output.
1125 * :ghissue:`1315`: Collect results from subprocess runners and spit out Xunit XML output.
1126 * :ghissue:`1233`: Update CodeMirror to the latest version
1126 * :ghissue:`1233`: Update CodeMirror to the latest version
1127 * :ghissue:`1234`: Refactor how the notebook focuses cells
1127 * :ghissue:`1234`: Refactor how the notebook focuses cells
1128 * :ghissue:`1235`: After upgrading CodeMirror check the status of some bugs
1128 * :ghissue:`1235`: After upgrading CodeMirror check the status of some bugs
1129 * :ghissue:`1236`: Review how select is called when notebook cells are inserted
1129 * :ghissue:`1236`: Review how select is called when notebook cells are inserted
1130 * :ghissue:`1303`: Updatecm
1130 * :ghissue:`1303`: Updatecm
1131 * :ghissue:`1311`: Fixing CM related indentation problems.
1131 * :ghissue:`1311`: Fixing CM related indentation problems.
1132 * :ghissue:`1304`: controller/server load can disrupt heartbeat
1132 * :ghissue:`1304`: controller/server load can disrupt heartbeat
1133 * :ghissue:`1312`: minor heartbeat tweaks
1133 * :ghissue:`1312`: minor heartbeat tweaks
1134 * :ghissue:`1302`: Input parsing with %prun clobbers escapes
1134 * :ghissue:`1302`: Input parsing with %prun clobbers escapes
1135 * :ghissue:`1306`: Fix %prun input parsing for escaped characters (closes #1302)
1135 * :ghissue:`1306`: Fix %prun input parsing for escaped characters (closes #1302)
1136 * :ghissue:`1251`: IPython-0.12 can't import map module on Python 3.1
1136 * :ghissue:`1251`: IPython-0.12 can't import map module on Python 3.1
1137 * :ghissue:`1202`: Pyreadline install exclusion for 64 bit windows no longer required, version dependency not correctly specified.
1137 * :ghissue:`1202`: Pyreadline install exclusion for 64 bit windows no longer required, version dependency not correctly specified.
1138 * :ghissue:`1301`: New "Fix for issue #1202" based on current master.
1138 * :ghissue:`1301`: New "Fix for issue #1202" based on current master.
1139 * :ghissue:`1242`: changed key map name to match changes to python mode
1139 * :ghissue:`1242`: changed key map name to match changes to python mode
1140 * :ghissue:`1203`: Fix for issue #1202
1140 * :ghissue:`1203`: Fix for issue #1202
1141 * :ghissue:`1289`: Make autoreload extension work on Python 3.
1141 * :ghissue:`1289`: Make autoreload extension work on Python 3.
1142 * :ghissue:`1263`: Different 'C-x' for shortcut, 'C-m c' not toCodeCell anymore
1142 * :ghissue:`1263`: Different 'C-x' for shortcut, 'C-m c' not toCodeCell anymore
1143 * :ghissue:`1259`: Replace "from (.|..) import" with absolute imports.
1143 * :ghissue:`1259`: Replace "from (.|..) import" with absolute imports.
1144 * :ghissue:`1278`: took a crack at making notebook.html extend layout.html
1144 * :ghissue:`1278`: took a crack at making notebook.html extend layout.html
1145 * :ghissue:`1210`: Add 'quiet' option to suppress screen output during %prun calls, edited dochelp
1145 * :ghissue:`1210`: Add 'quiet' option to suppress screen output during %prun calls, edited dochelp
1146 * :ghissue:`1288`: Don't ask for confirmation when stdin isn't available
1146 * :ghissue:`1288`: Don't ask for confirmation when stdin isn't available
1147 * :ghissue:`1290`: Cell-level cut & paste overwrites multiple cells
1147 * :ghissue:`1290`: Cell-level cut & paste overwrites multiple cells
1148 * :ghissue:`1291`: Minor, but important fixes to cut/copy/paste.
1148 * :ghissue:`1291`: Minor, but important fixes to cut/copy/paste.
1149 * :ghissue:`1293`: TaskScheduler.hwm default value
1149 * :ghissue:`1293`: TaskScheduler.hwm default value
1150 * :ghissue:`1294`: TaskScheduler.hwm default to 1 instead of 0
1150 * :ghissue:`1294`: TaskScheduler.hwm default to 1 instead of 0
1151 * :ghissue:`1281`: in Hub: registration_timeout must be an integer, but heartmonitor.period is CFloat
1151 * :ghissue:`1281`: in Hub: registration_timeout must be an integer, but heartmonitor.period is CFloat
1152 * :ghissue:`1283`: HeartMonitor.period should be an Integer
1152 * :ghissue:`1283`: HeartMonitor.period should be an Integer
1153 * :ghissue:`1162`: Allow merge/split adjacent cells in notebook
1153 * :ghissue:`1162`: Allow merge/split adjacent cells in notebook
1154 * :ghissue:`1264`: Aceify
1154 * :ghissue:`1264`: Aceify
1155 * :ghissue:`1261`: Mergesplit
1155 * :ghissue:`1261`: Mergesplit
1156 * :ghissue:`1269`: Another strange input handling error
1156 * :ghissue:`1269`: Another strange input handling error
1157 * :ghissue:`1284`: a fix for GH 1269
1157 * :ghissue:`1284`: a fix for GH 1269
1158 * :ghissue:`1232`: Dead kernel loop
1158 * :ghissue:`1232`: Dead kernel loop
1159 * :ghissue:`1279`: ImportError: cannot import name S1 (from logging)
1159 * :ghissue:`1279`: ImportError: cannot import name S1 (from logging)
1160 * :ghissue:`1276`: notebook menu item to send a KeyboardInterrupt to the kernel
1160 * :ghissue:`1276`: notebook menu item to send a KeyboardInterrupt to the kernel
1161 * :ghissue:`1213`: BUG: Minor typo in history_console_widget.py
1161 * :ghissue:`1213`: BUG: Minor typo in history_console_widget.py
1162 * :ghissue:`1248`: IPython notebook doesn't work with lastest version of tornado
1162 * :ghissue:`1248`: IPython notebook doesn't work with lastest version of tornado
1163 * :ghissue:`1267`: add NoDB for non-recording Hub
1163 * :ghissue:`1267`: add NoDB for non-recording Hub
1164 * :ghissue:`1222`: allow Reference as callable in map/apply
1164 * :ghissue:`1222`: allow Reference as callable in map/apply
1165 * :ghissue:`1257`: use self.kernel_manager_class in qtconsoleapp
1165 * :ghissue:`1257`: use self.kernel_manager_class in qtconsoleapp
1166 * :ghissue:`1220`: Open a new notebook while connecting to an existing kernel (opened by qtconsole or terminal or standalone)
1166 * :ghissue:`1220`: Open a new notebook while connecting to an existing kernel (opened by qtconsole or terminal or standalone)
1167 * :ghissue:`1253`: set auto_create flag for notebook apps
1167 * :ghissue:`1253`: set auto_create flag for notebook apps
1168 * :ghissue:`1260`: heartbeat failure on long gil-holding operation
1168 * :ghissue:`1260`: heartbeat failure on long gil-holding operation
1169 * :ghissue:`1262`: Heartbeat no longer shares the app's Context
1169 * :ghissue:`1262`: Heartbeat no longer shares the app's Context
1170 * :ghissue:`1225`: SyntaxError display broken in Python 3
1170 * :ghissue:`1225`: SyntaxError display broken in Python 3
1171 * :ghissue:`1229`: Fix display of SyntaxError in Python 3
1171 * :ghissue:`1229`: Fix display of SyntaxError in Python 3
1172 * :ghissue:`1256`: Dewijmoize
1172 * :ghissue:`1256`: Dewijmoize
1173 * :ghissue:`1246`: Skip tests that require X, when importing pylab results in RuntimeError.
1173 * :ghissue:`1246`: Skip tests that require X, when importing pylab results in RuntimeError.
1174 * :ghissue:`1250`: Wijmoize
1174 * :ghissue:`1250`: Wijmoize
1175 * :ghissue:`1244`: can not imput chinese word "ι€ " , exit right now
1175 * :ghissue:`1244`: can not imput chinese word "ι€ " , exit right now
1176 * :ghissue:`1194`: Adding Opera 11 as a compatible browser for ipython notebook
1176 * :ghissue:`1194`: Adding Opera 11 as a compatible browser for ipython notebook
1177 * :ghissue:`1198`: Kernel Has Died error in Notebook
1177 * :ghissue:`1198`: Kernel Has Died error in Notebook
1178 * :ghissue:`1211`: serve local files in notebook-dir
1178 * :ghissue:`1211`: serve local files in notebook-dir
1179 * :ghissue:`1224`: edit text cells on double-click instead of single-click
1179 * :ghissue:`1224`: edit text cells on double-click instead of single-click
1180 * :ghissue:`1187`: misc notebook: connection file cleanup, first heartbeat, startup flush
1180 * :ghissue:`1187`: misc notebook: connection file cleanup, first heartbeat, startup flush
1181 * :ghissue:`1207`: fix loadpy duplicating newlines
1181 * :ghissue:`1207`: fix loadpy duplicating newlines
1182 * :ghissue:`1060`: Always save the .py file to disk next to the .ipynb
1182 * :ghissue:`1060`: Always save the .py file to disk next to the .ipynb
1183 * :ghissue:`1066`: execute cell in place should preserve the current insertion-point in the notebook
1183 * :ghissue:`1066`: execute cell in place should preserve the current insertion-point in the notebook
1184 * :ghissue:`1141`: "In" numbers are not invalidated when restarting kernel
1184 * :ghissue:`1141`: "In" numbers are not invalidated when restarting kernel
1185 * :ghissue:`1231`: pip on OSX tries to install files in /System directory.
1185 * :ghissue:`1231`: pip on OSX tries to install files in /System directory.
1186 * :ghissue:`1129`: Unified setup.py
1186 * :ghissue:`1129`: Unified setup.py
1187 * :ghissue:`1199`: Reduce IPython.external.*
1187 * :ghissue:`1199`: Reduce IPython.external.*
1188 * :ghissue:`1219`: Make all the static files path absolute.
1188 * :ghissue:`1219`: Make all the static files path absolute.
1189 * :ghissue:`1218`: Added -q option to %prun for suppression of the output, along with editing the dochelp string.
1189 * :ghissue:`1218`: Added -q option to %prun for suppression of the output, along with editing the dochelp string.
1190 * :ghissue:`1217`: Added -q option to %prun for suppression of the output, along with editing the dochelp string
1190 * :ghissue:`1217`: Added -q option to %prun for suppression of the output, along with editing the dochelp string
1191 * :ghissue:`1216`: Pdb tab completion does not work in QtConsole
1191 * :ghissue:`1216`: Pdb tab completion does not work in QtConsole
1192 * :ghissue:`1197`: Interactive shell trying to: from ... import history
1192 * :ghissue:`1197`: Interactive shell trying to: from ... import history
1193 * :ghissue:`1175`: core.completer: Clean up excessive and unused code.
1193 * :ghissue:`1175`: core.completer: Clean up excessive and unused code.
1194 * :ghissue:`1208`: should dv.sync_import print failed imports ?
1194 * :ghissue:`1208`: should dv.sync_import print failed imports ?
1195 * :ghissue:`1186`: payloadpage.py not used by qtconsole
1195 * :ghissue:`1186`: payloadpage.py not used by qtconsole
1196 * :ghissue:`1204`: double newline from %loadpy in python notebook (at least on mac)
1196 * :ghissue:`1204`: double newline from %loadpy in python notebook (at least on mac)
1197 * :ghissue:`1192`: Invalid JSON data
1197 * :ghissue:`1192`: Invalid JSON data
1198 * :ghissue:`1196`: docs: looks like a file path might have been accidentally pasted in the middle of a word
1198 * :ghissue:`1196`: docs: looks like a file path might have been accidentally pasted in the middle of a word
1199 * :ghissue:`1189`: Right justify of 'in' prompt in variable prompt size configurations
1199 * :ghissue:`1189`: Right justify of 'in' prompt in variable prompt size configurations
1200 * :ghissue:`1185`: ipython console not work proper with stdout...
1200 * :ghissue:`1185`: ipython console not work proper with stdout...
1201 * :ghissue:`1191`: profile/startup files not executed with "notebook"
1201 * :ghissue:`1191`: profile/startup files not executed with "notebook"
1202 * :ghissue:`1190`: Fix link to Chris Fonnesbeck blog post about 0.11 highlights.
1202 * :ghissue:`1190`: Fix link to Chris Fonnesbeck blog post about 0.11 highlights.
1203 * :ghissue:`1174`: Remove %install_default_config and %install_profiles
1203 * :ghissue:`1174`: Remove %install_default_config and %install_profiles
@@ -1,178 +1,178 b''
1 .. _issues_list_4:
1 .. _issues_list_4:
2
2
3 Issues closed in the 4.x development cycle
3 Issues closed in the 4.x development cycle
4 ==========================================
4 ==========================================
5
5
6
6
7 Issues closed in 4.2
7 Issues closed in 4.2
8 --------------------
8 --------------------
9
9
10 GitHub stats for 2015/02/02 - 2016/04/20 (since 4.1)
10 GitHub stats for 2015/02/02 - 2016/04/20 (since 4.1)
11
11
12 These lists are automatically generated, and may be incomplete or contain duplicates.
12 These lists are automatically generated, and may be incomplete or contain duplicates.
13
13
14 We closed 10 issues and merged 22 pull requests.
14 We closed 10 issues and merged 22 pull requests.
15 The full list can be seen `on GitHub <https://github.com/ipython/ipython/issues?q=milestone%3A4.2+>`__
15 The full list can be seen `on GitHub <https://github.com/ipython/ipython/issues?q=milestone%3A4.2+>`__
16
16
17 The following 10 authors contributed 27 commits.
17 The following 10 authors contributed 27 commits.
18
18
19 * Benjamin Ragan-Kelley
19 * Benjamin Ragan-Kelley
20 * Carlos Cordoba
20 * Carlos Cordoba
21 * GΓΆkhan Karabulut
21 * GΓΆkhan Karabulut
22 * Jonas Rauber
22 * Jonas Rauber
23 * Matthias Bussonnier
23 * Matthias Bussonnier
24 * Paul Ivanov
24 * Paul Ivanov
25 * Sebastian Bank
25 * Sebastian Bank
26 * Thomas A Caswell
26 * Thomas A Caswell
27 * Thomas Kluyver
27 * Thomas Kluyver
28 * Vincent Woo
28 * Vincent Woo
29
29
30
30
31 Issues closed in 4.1
31 Issues closed in 4.1
32 --------------------
32 --------------------
33
33
34 GitHub stats for 2015/08/12 - 2016/02/02 (since 4.0.0)
34 GitHub stats for 2015/08/12 - 2016/02/02 (since 4.0.0)
35
35
36 These lists are automatically generated, and may be incomplete or contain duplicates.
36 These lists are automatically generated, and may be incomplete or contain duplicates.
37
37
38 We closed 60 issues and merged 148 pull requests.
38 We closed 60 issues and merged 148 pull requests.
39 The full list can be seen `on GitHub <https://github.com/ipython/ipython/issues?q=milestone%3A4.1+>`__
39 The full list can be seen `on GitHub <https://github.com/ipython/ipython/issues?q=milestone%3A4.1+>`__
40
40
41 The following 52 authors contributed 468 commits.
41 The following 52 authors contributed 468 commits.
42
42
43 * Aaron Meurer
43 * Aaron Meurer
44 * Alexandre Avanian
44 * Alexandre Avanian
45 * Anthony Sottile
45 * Anthony Sottile
46 * Antony Lee
46 * Antony Lee
47 * Arthur Loder
47 * Arthur Loder
48 * Ben Kasel
48 * Ben Kasel
49 * Ben Rousch
49 * Ben Rousch
50 * Benjamin Ragan-Kelley
50 * Benjamin Ragan-Kelley
51 * bollwyvl
51 * bollwyvl
52 * Carol Willing
52 * Carol Willing
53 * Christopher Roach
53 * Christopher Roach
54 * Douglas La Rocca
54 * Douglas La Rocca
55 * Fairly
55 * Fairly
56 * Fernando Perez
56 * Fernando Perez
57 * Frank Sachsenheim
57 * Frank Sachsenheim
58 * Guillaume DOUMENC
58 * Guillaume DOUMENC
59 * GΓ‘bor Luk
59 * GΓ‘bor Luk
60 * Hoyt Koepke
60 * Hoyt Koepke
61 * Ivan Timokhin
61 * Ivan Timokhin
62 * Jacob Niehus
62 * Jacob Niehus
63 * JamshedVesuna
63 * JamshedVesuna
64 * Jan Schulz
64 * Jan Schulz
65 * Jan-Philip Gehrcke
65 * Jan-Philip Gehrcke
66 * jc
66 * jc
67 * Jessica B. Hamrick
67 * Jessica B. Hamrick
68 * jferrara
68 * jferrara
69 * John Bohannon
69 * John Bohannon
70 * John Kirkham
70 * John Kirkham
71 * Jonathan Frederic
71 * Jonathan Frederic
72 * Kyle Kelley
72 * Kyle Kelley
73 * Lev Givon
73 * Lev Givon
74 * Lilian Besson
74 * Lilian Besson
75 * lingxz
75 * lingxz
76 * Matthias Bussonnier
76 * Matthias Bussonnier
77 * memeplex
77 * memeplex
78 * Michael Droettboom
78 * Michael Droettboom
79 * naught101
79 * naught101
80 * Peter Waller
80 * Peter Waller
81 * Pierre Gerold
81 * Pierre Gerold
82 * RΓ©my LΓ©one
82 * RΓ©my LΓ©one
83 * Scott Sanderson
83 * Scott Sanderson
84 * Shanzhuo Zhang
84 * Shanzhuo Zhang
85 * Sylvain Corlay
85 * Sylvain Corlay
86 * Tayfun Sen
86 * Tayfun Sen
87 * Thomas A Caswell
87 * Thomas A Caswell
88 * Thomas Ballinger
88 * Thomas Ballinger
89 * Thomas Kluyver
89 * Thomas Kluyver
90 * Vincent Legoll
90 * Vincent Legoll
91 * Wouter Bolsterlee
91 * Wouter Bolsterlee
92 * xconverge
92 * xconverge
93 * Yuri Numerov
93 * Yuri Numerov
94 * Zachary Pincus
94 * Zachary Pincus
95
95
96
96
97 Issues closed in 4.0
97 Issues closed in 4.0
98 --------------------
98 --------------------
99
99
100
100
101 GitHub stats for 2015/02/27 - 2015/08/11 (since 3.0)
101 GitHub stats for 2015/02/27 - 2015/08/11 (since 3.0)
102
102
103 These lists are automatically generated, and may be incomplete or contain duplicates.
103 These lists are automatically generated, and may be incomplete or contain duplicates.
104
104
105 We closed 35 issues and merged 125 pull requests.
105 We closed 35 issues and merged 125 pull requests.
106 The full list can be seen `on GitHub <https://github.com/ipython/ipython/milestone/4.0>`__
106 The full list can be seen `on GitHub <https://github.com/ipython/ipython/milestone/21>`__
107
107
108 The following 69 authors contributed 1186 commits.
108 The following 69 authors contributed 1186 commits.
109
109
110 * Abe Guerra
110 * Abe Guerra
111 * Adal Chiriliuc
111 * Adal Chiriliuc
112 * Alexander Belopolsky
112 * Alexander Belopolsky
113 * Andrew Murray
113 * Andrew Murray
114 * Antonio Russo
114 * Antonio Russo
115 * Benjamin Ragan-Kelley
115 * Benjamin Ragan-Kelley
116 * BjΓΆrn Linse
116 * BjΓΆrn Linse
117 * Brian Drawert
117 * Brian Drawert
118 * chebee7i
118 * chebee7i
119 * Daniel Rocco
119 * Daniel Rocco
120 * Donny Winston
120 * Donny Winston
121 * Drekin
121 * Drekin
122 * Erik Hvatum
122 * Erik Hvatum
123 * Fernando Perez
123 * Fernando Perez
124 * Francisco de la PeΓ±a
124 * Francisco de la PeΓ±a
125 * Frazer McLean
125 * Frazer McLean
126 * Gareth Elston
126 * Gareth Elston
127 * Gert-Ludwig Ingold
127 * Gert-Ludwig Ingold
128 * Giuseppe Venturini
128 * Giuseppe Venturini
129 * Ian Barfield
129 * Ian Barfield
130 * Ivan Pozdeev
130 * Ivan Pozdeev
131 * Jakob Gager
131 * Jakob Gager
132 * Jan Schulz
132 * Jan Schulz
133 * Jason Grout
133 * Jason Grout
134 * Jeff Hussmann
134 * Jeff Hussmann
135 * Jessica B. Hamrick
135 * Jessica B. Hamrick
136 * Joe Borg
136 * Joe Borg
137 * Joel Nothman
137 * Joel Nothman
138 * Johan Forsberg
138 * Johan Forsberg
139 * Jonathan Frederic
139 * Jonathan Frederic
140 * Justin Tyberg
140 * Justin Tyberg
141 * Koen van Besien
141 * Koen van Besien
142 * Kyle Kelley
142 * Kyle Kelley
143 * Lorena Pantano
143 * Lorena Pantano
144 * Lucretiel
144 * Lucretiel
145 * Marin Gilles
145 * Marin Gilles
146 * mashenjun
146 * mashenjun
147 * Mathieu
147 * Mathieu
148 * Matthias Bussonnier
148 * Matthias Bussonnier
149 * Merlijn van Deen
149 * Merlijn van Deen
150 * Mikhail Korobov
150 * Mikhail Korobov
151 * Naveen Nathan
151 * Naveen Nathan
152 * Nicholas Bollweg
152 * Nicholas Bollweg
153 * nottaanibot
153 * nottaanibot
154 * Omer Katz
154 * Omer Katz
155 * onesandzeroes
155 * onesandzeroes
156 * Patrick Snape
156 * Patrick Snape
157 * patter001
157 * patter001
158 * Peter Parente
158 * Peter Parente
159 * Pietro Battiston
159 * Pietro Battiston
160 * RickWinter
160 * RickWinter
161 * Robert Smith
161 * Robert Smith
162 * Ryan Nelson
162 * Ryan Nelson
163 * Scott Sanderson
163 * Scott Sanderson
164 * Sebastiaan Mathot
164 * Sebastiaan Mathot
165 * Sylvain Corlay
165 * Sylvain Corlay
166 * thethomask
166 * thethomask
167 * Thomas A Caswell
167 * Thomas A Caswell
168 * Thomas Adriaan Hellinger
168 * Thomas Adriaan Hellinger
169 * Thomas Kluyver
169 * Thomas Kluyver
170 * Tianhui Michael Li
170 * Tianhui Michael Li
171 * tmtabor
171 * tmtabor
172 * unknown
172 * unknown
173 * Victor Ramirez
173 * Victor Ramirez
174 * Volker Braun
174 * Volker Braun
175 * Wieland Hoffmann
175 * Wieland Hoffmann
176 * Yuval Langer
176 * Yuval Langer
177 * ZoltΓ‘n VΓΆrΓΆs
177 * ZoltΓ‘n VΓΆrΓΆs
178 * Γ‰lie Michel
178 * Γ‰lie Michel
@@ -1,391 +1,391 b''
1 ============
1 ============
2 3.x Series
2 3.x Series
3 ============
3 ============
4
4
5 IPython 3.2.3
5 IPython 3.2.3
6 =============
6 =============
7
7
8 Fixes compatibility with Python 3.4.4.
8 Fixes compatibility with Python 3.4.4.
9
9
10 IPython 3.2.2
10 IPython 3.2.2
11 =============
11 =============
12
12
13 Address vulnerabilities when files have maliciously crafted filenames (CVE-2015-6938),
13 Address vulnerabilities when files have maliciously crafted filenames (CVE-2015-6938),
14 or vulnerability when opening text files with malicious binary content (CVE pending).
14 or vulnerability when opening text files with malicious binary content (CVE pending).
15
15
16 Users are **strongly** encouraged to upgrade immediately.
16 Users are **strongly** encouraged to upgrade immediately.
17 There are also a few small unicode and nbconvert-related fixes.
17 There are also a few small unicode and nbconvert-related fixes.
18
18
19
19
20 IPython 3.2.1
20 IPython 3.2.1
21 =============
21 =============
22
22
23 IPython 3.2.1 is a small bugfix release, primarily for cross-site security fixes in the notebook.
23 IPython 3.2.1 is a small bugfix release, primarily for cross-site security fixes in the notebook.
24 Users are **strongly** encouraged to upgrade immediately.
24 Users are **strongly** encouraged to upgrade immediately.
25 There are also a few small unicode and nbconvert-related fixes.
25 There are also a few small unicode and nbconvert-related fixes.
26
26
27 See :ref:`issues_list_3` for details.
27 See :ref:`issues_list_3` for details.
28
28
29
29
30 IPython 3.2
30 IPython 3.2
31 ===========
31 ===========
32
32
33 IPython 3.2 contains important security fixes. Users are **strongly** encouraged to upgrade immediately.
33 IPython 3.2 contains important security fixes. Users are **strongly** encouraged to upgrade immediately.
34
34
35 Highlights:
35 Highlights:
36
36
37 - Address cross-site scripting vulnerabilities CVE-2015-4706, CVE-2015-4707
37 - Address cross-site scripting vulnerabilities CVE-2015-4706, CVE-2015-4707
38 - A security improvement that set the secure attribute to login cookie to prevent them to be sent over http
38 - A security improvement that set the secure attribute to login cookie to prevent them to be sent over http
39 - Revert the face color of matplotlib axes in the inline backend to not be transparent.
39 - Revert the face color of matplotlib axes in the inline backend to not be transparent.
40 - Enable mathjax safe mode by default
40 - Enable mathjax safe mode by default
41 - Fix XSS vulnerability in JSON error messages
41 - Fix XSS vulnerability in JSON error messages
42 - Various widget-related fixes
42 - Various widget-related fixes
43
43
44 See :ref:`issues_list_3` for details.
44 See :ref:`issues_list_3` for details.
45
45
46
46
47 IPython 3.1
47 IPython 3.1
48 ===========
48 ===========
49
49
50 Released April 3, 2015
50 Released April 3, 2015
51
51
52 The first 3.x bugfix release, with 33 contributors and 344 commits.
52 The first 3.x bugfix release, with 33 contributors and 344 commits.
53 This primarily includes bugfixes to notebook layout and focus problems.
53 This primarily includes bugfixes to notebook layout and focus problems.
54
54
55
55
56 Highlights:
56 Highlights:
57
57
58 - Various focus jumping and scrolling fixes in the notebook.
58 - Various focus jumping and scrolling fixes in the notebook.
59 - Various message ordering and widget fixes in the notebook.
59 - Various message ordering and widget fixes in the notebook.
60 - Images in markdown and output are confined to the notebook width.
60 - Images in markdown and output are confined to the notebook width.
61 An `.unconfined` CSS class is added to disable this behavior per-image.
61 An `.unconfined` CSS class is added to disable this behavior per-image.
62 The resize handle on output images is removed.
62 The resize handle on output images is removed.
63 - Improved ordering of tooltip content for Python functions, putting the signature at the top.
63 - Improved ordering of tooltip content for Python functions, putting the signature at the top.
64 - Fix UnicodeErrors when displaying some objects with unicode reprs on Python 2.
64 - Fix UnicodeErrors when displaying some objects with unicode reprs on Python 2.
65 - Set the kernel's working directory to the notebook directory when running ``nbconvert --execute``,
65 - Set the kernel's working directory to the notebook directory when running ``nbconvert --execute``,
66 so that behavior matches the live notebook.
66 so that behavior matches the live notebook.
67 - Allow setting custom SSL options for the tornado server with ``NotebookApp.ssl_options``,
67 - Allow setting custom SSL options for the tornado server with ``NotebookApp.ssl_options``,
68 and protect against POODLE with default settings by disabling SSLv3.
68 and protect against POODLE with default settings by disabling SSLv3.
69 - Fix memory leak in the IPython.parallel Controller on Python 3.
69 - Fix memory leak in the IPython.parallel Controller on Python 3.
70
70
71
71
72 See :ref:`issues_list_3` for details.
72 See :ref:`issues_list_3` for details.
73
73
74
74
75 Release 3.0
75 Release 3.0
76 ===========
76 ===========
77
77
78 Released February 27, 2015
78 Released February 27, 2015
79
79
80 This is a really big release. Over 150 contributors, and almost 6000 commits in a bit under a year.
80 This is a really big release. Over 150 contributors, and almost 6000 commits in a bit under a year.
81 Support for languages other than Python is greatly improved,
81 Support for languages other than Python is greatly improved,
82 notebook UI has been significantly redesigned,
82 notebook UI has been significantly redesigned,
83 and a lot of improvement has happened in the experimental interactive widgets.
83 and a lot of improvement has happened in the experimental interactive widgets.
84 The message protocol and document format have both been updated,
84 The message protocol and document format have both been updated,
85 while maintaining better compatibility with previous versions than prior updates.
85 while maintaining better compatibility with previous versions than prior updates.
86 The notebook webapp now enables editing of any text file, and even
86 The notebook webapp now enables editing of any text file, and even
87 a web-based terminal (on Unix platforms).
87 a web-based terminal (on Unix platforms).
88
88
89 3.x will be the last monolithic release of IPython,
89 3.x will be the last monolithic release of IPython,
90 as the next release cycle will see the growing project split into its Python-specific and language-agnostic components.
90 as the next release cycle will see the growing project split into its Python-specific and language-agnostic components.
91 Language-agnostic projects (notebook, qtconsole, etc.) will move under the umbrella of the new Project Jupyter name,
91 Language-agnostic projects (notebook, qtconsole, etc.) will move under the umbrella of the new Project Jupyter name,
92 while Python-specific projects (interactive Python shell, Python kernel, IPython.parallel)
92 while Python-specific projects (interactive Python shell, Python kernel, IPython.parallel)
93 will remain under IPython, and be split into a few smaller packages.
93 will remain under IPython, and be split into a few smaller packages.
94 To reflect this, IPython is in a bit of a transition state.
94 To reflect this, IPython is in a bit of a transition state.
95 The logo on the notebook is now the Jupyter logo.
95 The logo on the notebook is now the Jupyter logo.
96 When installing kernels system-wide, they go in a `jupyter` directory.
96 When installing kernels system-wide, they go in a `jupyter` directory.
97 We are going to do our best to ease this transition for users and developers.
97 We are going to do our best to ease this transition for users and developers.
98
98
99 Big changes are ahead.
99 Big changes are ahead.
100
100
101
101
102 Using different kernels
102 Using different kernels
103 -----------------------
103 -----------------------
104
104
105 .. image:: ../_images/kernel_selector_screenshot.png
105 .. image:: ../_images/kernel_selector_screenshot.png
106 :alt: Screenshot of 'new' dropdown showing different kernels
106 :alt: Screenshot of 'new' dropdown showing different kernels
107 :align: center
107 :align: center
108
108
109 You can now choose a kernel for a notebook within the user interface, rather
109 You can now choose a kernel for a notebook within the user interface, rather
110 than starting up a separate notebook server for each kernel you want to use. The
110 than starting up a separate notebook server for each kernel you want to use. The
111 syntax highlighting adapts to match the language you're working in.
111 syntax highlighting adapts to match the language you're working in.
112
112
113 Information about the kernel is stored in the notebook file, so when you open a
113 Information about the kernel is stored in the notebook file, so when you open a
114 notebook, it will automatically start the correct kernel.
114 notebook, it will automatically start the correct kernel.
115
115
116 It is also easier to use the Qt console and the terminal console with other
116 It is also easier to use the Qt console and the terminal console with other
117 kernels, using the --kernel flag::
117 kernels, using the --kernel flag::
118
118
119 ipython qtconsole --kernel bash
119 ipython qtconsole --kernel bash
120 ipython console --kernel bash
120 ipython console --kernel bash
121
121
122 # To list available kernels
122 # To list available kernels
123 ipython kernelspec list
123 ipython kernelspec list
124
124
125 Kernel authors should see :ref:`kernelspecs` for how to register their kernels
125 Kernel authors should see :ref:`kernelspecs` for how to register their kernels
126 with IPython so that these mechanisms work.
126 with IPython so that these mechanisms work.
127
127
128 Typing unicode identifiers
128 Typing unicode identifiers
129 --------------------------
129 --------------------------
130
130
131 .. image:: /_images/unicode_completion.png
131 .. image:: /_images/unicode_completion.png
132
132
133 Complex expressions can be much cleaner when written with a wider choice of
133 Complex expressions can be much cleaner when written with a wider choice of
134 characters. Python 3 allows unicode identifiers, and IPython 3 makes it easier
134 characters. Python 3 allows unicode identifiers, and IPython 3 makes it easier
135 to type those, using a feature from Julia. Type a backslash followed by a LaTeX
135 to type those, using a feature from Julia. Type a backslash followed by a LaTeX
136 style short name, such as ``\alpha``. Press tab, and it will turn into Ξ±.
136 style short name, such as ``\alpha``. Press tab, and it will turn into Ξ±.
137
137
138 Widget migration guide
138 Widget migration guide
139 ----------------------
139 ----------------------
140 The widget framework has a lot of backwards incompatible changes.
140 The widget framework has a lot of backwards incompatible changes.
141 For information about migrating widget notebooks and custom widgets to 3.0 refer
141 For information about migrating widget notebooks and custom widgets to 3.0 refer
142 to the :doc:`widget migration guide<version3_widget_migration>`.
142 to the :doc:`widget migration guide<version3_widget_migration>`.
143
143
144 Other new features
144 Other new features
145 ------------------
145 ------------------
146
146
147 * :class:`~.TextWidget` and :class:`~.TextareaWidget` objects now include a
147 * :class:`~.TextWidget` and :class:`~.TextareaWidget` objects now include a
148 ``placeholder`` attribute, for displaying placeholder text before the
148 ``placeholder`` attribute, for displaying placeholder text before the
149 user has typed anything.
149 user has typed anything.
150
150
151 * The :magic:`load` magic can now find the source for objects in the user namespace.
151 * The :magic:`load` magic can now find the source for objects in the user namespace.
152 To enable searching the namespace, use the ``-n`` option.
152 To enable searching the namespace, use the ``-n`` option.
153
153
154 .. sourcecode:: ipython
154 .. sourcecode:: ipython
155
155
156 In [1]: %load -n my_module.some_function
156 In [1]: %load -n my_module.some_function
157
157
158 * :class:`~.DirectView` objects have a new :meth:`~.DirectView.use_cloudpickle`
158 * :class:`~.DirectView` objects have a new :meth:`~.DirectView.use_cloudpickle`
159 method, which works like ``view.use_dill()``, but causes the ``cloudpickle``
159 method, which works like ``view.use_dill()``, but causes the ``cloudpickle``
160 module from PiCloud's `cloud`__ library to be used rather than dill or the
160 module from PiCloud's `cloud`__ library to be used rather than dill or the
161 builtin pickle module.
161 builtin pickle module.
162
162
163 __ https://pypi.python.org/pypi/cloud
163 __ https://pypi.python.org/pypi/cloud
164
164
165 * Added a .ipynb exporter to nbconvert. It can be used by passing `--to notebook`
165 * Added a .ipynb exporter to nbconvert. It can be used by passing `--to notebook`
166 as a commandline argument to nbconvert.
166 as a commandline argument to nbconvert.
167
167
168 * New nbconvert preprocessor called :class:`~.ClearOutputPreprocessor`. This
168 * New nbconvert preprocessor called :class:`~.ClearOutputPreprocessor`. This
169 clears the output from IPython notebooks.
169 clears the output from IPython notebooks.
170
170
171 * New preprocessor for nbconvert that executes all the code cells in a notebook.
171 * New preprocessor for nbconvert that executes all the code cells in a notebook.
172 To run a notebook and save its output in a new notebook::
172 To run a notebook and save its output in a new notebook::
173
173
174 ipython nbconvert InputNotebook --ExecutePreprocessor.enabled=True --to notebook --output Executed
174 ipython nbconvert InputNotebook --ExecutePreprocessor.enabled=True --to notebook --output Executed
175
175
176 * Consecutive stream (stdout/stderr) output is merged into a single output
176 * Consecutive stream (stdout/stderr) output is merged into a single output
177 in the notebook document.
177 in the notebook document.
178 Previously, all output messages were preserved as separate output fields in the JSON.
178 Previously, all output messages were preserved as separate output fields in the JSON.
179 Now, the same merge is applied to the stored output as the displayed output,
179 Now, the same merge is applied to the stored output as the displayed output,
180 improving document load time for notebooks with many small outputs.
180 improving document load time for notebooks with many small outputs.
181
181
182 * ``NotebookApp.webapp_settings`` is deprecated and replaced with
182 * ``NotebookApp.webapp_settings`` is deprecated and replaced with
183 the more informatively named ``NotebookApp.tornado_settings``.
183 the more informatively named ``NotebookApp.tornado_settings``.
184
184
185 * Using :magic:`timeit` prints warnings if there is atleast a 4x difference in timings
185 * Using :magic:`timeit` prints warnings if there is atleast a 4x difference in timings
186 between the slowest and fastest runs, since this might meant that the multiple
186 between the slowest and fastest runs, since this might meant that the multiple
187 runs are not independent of one another.
187 runs are not independent of one another.
188
188
189 * It's now possible to provide mechanisms to integrate IPython with other event
189 * It's now possible to provide mechanisms to integrate IPython with other event
190 loops, in addition to the ones we already support. This lets you run GUI code
190 loops, in addition to the ones we already support. This lets you run GUI code
191 in IPython with an interactive prompt, and to embed the IPython
191 in IPython with an interactive prompt, and to embed the IPython
192 kernel in GUI applications. See :doc:`/config/eventloops` for details. As part
192 kernel in GUI applications. See :doc:`/config/eventloops` for details. As part
193 of this, the direct ``enable_*`` and ``disable_*`` functions for various GUIs
193 of this, the direct ``enable_*`` and ``disable_*`` functions for various GUIs
194 in :mod:`IPython.lib.inputhook` have been deprecated in favour of
194 in :mod:`IPython.lib.inputhook` have been deprecated in favour of
195 :meth:`~.InputHookManager.enable_gui` and :meth:`~.InputHookManager.disable_gui`.
195 :meth:`~.InputHookManager.enable_gui` and :meth:`~.InputHookManager.disable_gui`.
196
196
197 * 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.
197 * 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.
198
198
199 * The function :func:`~IPython.html.widgets.interaction.interact_manual` has been
199 * The function :func:`~IPython.html.widgets.interaction.interact_manual` has been
200 added which behaves similarly to :func:`~IPython.html.widgets.interaction.interact`,
200 added which behaves similarly to :func:`~IPython.html.widgets.interaction.interact`,
201 but adds a button to explicitly run the interacted-with function, rather than
201 but adds a button to explicitly run the interacted-with function, rather than
202 doing it automatically for every change of the parameter widgets. This should
202 doing it automatically for every change of the parameter widgets. This should
203 be useful for long-running functions.
203 be useful for long-running functions.
204
204
205 * 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.
205 * 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.
206
206
207 * The Notebook application now offers integrated terminals on Unix platforms,
207 * The Notebook application now offers integrated terminals on Unix platforms,
208 intended for when it is used on a remote server. To enable these, install
208 intended for when it is used on a remote server. To enable these, install
209 the ``terminado`` Python package.
209 the ``terminado`` Python package.
210
210
211 * The Notebook application can now edit any plain text files, via a full-page CodeMirror instance.
211 * The Notebook application can now edit any plain text files, via a full-page CodeMirror instance.
212
212
213 * Setting the default highlighting language for nbconvert with the config option
213 * Setting the default highlighting language for nbconvert with the config option
214 ``NbConvertBase.default_language`` is deprecated. Nbconvert now respects
214 ``NbConvertBase.default_language`` is deprecated. Nbconvert now respects
215 metadata stored in the :ref:`kernel spec <kernelspecs>`.
215 metadata stored in the :ref:`kernel spec <kernelspecs>`.
216
216
217 * IPython can now be configured systemwide, with files in :file:`/etc/ipython`
217 * IPython can now be configured systemwide, with files in :file:`/etc/ipython`
218 or :file:`/usr/local/etc/ipython` on Unix systems,
218 or :file:`/usr/local/etc/ipython` on Unix systems,
219 or :file:`{%PROGRAMDATA%}\\ipython` on Windows.
219 or :file:`{%PROGRAMDATA%}\\ipython` on Windows.
220
220
221 * Added support for configurable user-supplied `Jinja
221 * Added support for configurable user-supplied `Jinja
222 <http://jinja.pocoo.org/>`_ HTML templates for the notebook. Paths to
222 <http://jinja.pocoo.org/>`_ HTML templates for the notebook. Paths to
223 directories containing template files can be specified via
223 directories containing template files can be specified via
224 ``NotebookApp.extra_template_paths``. User-supplied template directories
224 ``NotebookApp.extra_template_paths``. User-supplied template directories
225 searched first by the notebook, making it possible to replace existing
225 searched first by the notebook, making it possible to replace existing
226 templates with your own files.
226 templates with your own files.
227
227
228 For example, to replace the notebook's built-in ``error.html`` with your own,
228 For example, to replace the notebook's built-in ``error.html`` with your own,
229 create a directory like ``/home/my_templates`` and put your override template
229 create a directory like ``/home/my_templates`` and put your override template
230 at ``/home/my_templates/error.html``. To start the notebook with your custom
230 at ``/home/my_templates/error.html``. To start the notebook with your custom
231 error page enabled, you would run::
231 error page enabled, you would run::
232
232
233 ipython notebook '--extra_template_paths=["/home/my_templates/"]'
233 ipython notebook '--extra_template_paths=["/home/my_templates/"]'
234
234
235 It's also possible to override a template while also `inheriting
235 It's also possible to override a template while also `inheriting
236 <http://jinja.pocoo.org/docs/dev/templates/#template-inheritance>`_ from that
236 <http://jinja.pocoo.org/docs/dev/templates/#template-inheritance>`_ from that
237 template, by prepending ``templates/`` to the ``{% extends %}`` target of
237 template, by prepending ``templates/`` to the ``{% extends %}`` target of
238 your child template. This is useful when you only want to override a
238 your child template. This is useful when you only want to override a
239 specific block of a template. For example, to add additional CSS to the
239 specific block of a template. For example, to add additional CSS to the
240 built-in ``error.html``, you might create an override that looks like::
240 built-in ``error.html``, you might create an override that looks like::
241
241
242 {% extends "templates/error.html" %}
242 {% extends "templates/error.html" %}
243
243
244 {% block stylesheet %}
244 {% block stylesheet %}
245 {{super()}}
245 {{super()}}
246 <style type="text/css">
246 <style type="text/css">
247 /* My Awesome CSS */
247 /* My Awesome CSS */
248 </style>
248 </style>
249 {% endblock %}
249 {% endblock %}
250
250
251 * Added a widget persistence API. This allows you to persist your notebooks interactive widgets.
251 * Added a widget persistence API. This allows you to persist your notebooks interactive widgets.
252 Two levels of control are provided:
252 Two levels of control are provided:
253 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 necessary.
253 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 necessary.
254 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.
254 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.
255
255
256 Example code for persisting your widget state to session data::
256 Example code for persisting your widget state to session data::
257
257
258 %%javascript
258 %%javascript
259 require(['widgets/js/manager'], function(manager) {
259 require(['widgets/js/manager'], function(manager) {
260 manager.WidgetManager.set_state_callbacks(function() { // Load
260 manager.WidgetManager.set_state_callbacks(function() { // Load
261 return JSON.parse(sessionStorage.widgets_state || '{}');
261 return JSON.parse(sessionStorage.widgets_state || '{}');
262 }, function(state) { // Save
262 }, function(state) { // Save
263 sessionStorage.widgets_state = JSON.stringify(state);
263 sessionStorage.widgets_state = JSON.stringify(state);
264 });
264 });
265 });
265 });
266
266
267 * Enhanced support for :magic:`env` magic. As before, :magic:`env` with no
267 * Enhanced support for :magic:`env` magic. As before, :magic:`env` with no
268 arguments displays all environment variables and values. Additionally,
268 arguments displays all environment variables and values. Additionally,
269 :magic:`env` can be used to get or set individual environment variables. To
269 :magic:`env` can be used to get or set individual environment variables. To
270 display an individual value, use the `%env var` syntax. To set a value, use
270 display an individual value, use the `%env var` syntax. To set a value, use
271 `env var val` or `env var=val`. Python value expansion using `$` works as usual.
271 `env var val` or `env var=val`. Python value expansion using `$` works as usual.
272
272
273
273
274 Backwards incompatible changes
274 Backwards incompatible changes
275 ------------------------------
275 ------------------------------
276
276
277 * The :ref:`message protocol <messaging>` has been updated from version 4 to version 5.
277 * The :ref:`message protocol <messaging>` has been updated from version 4 to version 5.
278 Adapters are included, so IPython frontends can still talk to kernels that
278 Adapters are included, so IPython frontends can still talk to kernels that
279 implement protocol version 4.
279 implement protocol version 4.
280
280
281 * The notebook format has been updated from version 3 to version 4.
281 * The notebook format has been updated from version 3 to version 4.
282 Read-only support for v4 notebooks has been backported to IPython 2.4.
282 Read-only support for v4 notebooks has been backported to IPython 2.4.
283 Notable changes:
283 Notable changes:
284
284
285 * heading cells are removed in favor or markdown headings
285 * heading cells are removed in favor or markdown headings
286 * notebook outputs and output messages are more consistent with each other
286 * notebook outputs and output messages are more consistent with each other
287 * use :func:`IPython.nbformat.read` and :func:`~IPython.nbformat.write`
287 * use :func:`IPython.nbformat.read` and :func:`~IPython.nbformat.write`
288 to read and write notebook files
288 to read and write notebook files
289 instead of the deprecated :mod:`IPython.nbformat.current` APIs.
289 instead of the deprecated :mod:`IPython.nbformat.current` APIs.
290
290
291 You can downgrade a notebook to v3 via ``nbconvert``::
291 You can downgrade a notebook to v3 via ``nbconvert``::
292
292
293 ipython nbconvert --to notebook --nbformat 3 <notebook>
293 ipython nbconvert --to notebook --nbformat 3 <notebook>
294
294
295 which will create :file:`notebook.v3.ipynb`, a copy of the notebook in v3 format.
295 which will create :file:`notebook.v3.ipynb`, a copy of the notebook in v3 format.
296
296
297 * :func:`IPython.core.oinspect.getsource` call specification has changed:
297 * :func:`IPython.core.oinspect.getsource` call specification has changed:
298
298
299 * `oname` keyword argument has been added for property source formatting
299 * `oname` keyword argument has been added for property source formatting
300 * `is_binary` keyword argument has been dropped, passing ``True`` had
300 * `is_binary` keyword argument has been dropped, passing ``True`` had
301 previously short-circuited the function to return ``None`` unconditionally
301 previously short-circuited the function to return ``None`` unconditionally
302
302
303 * Removed the octavemagic extension: it is now available as ``oct2py.ipython``.
303 * Removed the octavemagic extension: it is now available as ``oct2py.ipython``.
304
304
305 * Creating PDFs with LaTeX no longer uses a post processor.
305 * Creating PDFs with LaTeX no longer uses a post processor.
306 Use `nbconvert --to pdf` instead of `nbconvert --to latex --post pdf`.
306 Use `nbconvert --to pdf` instead of `nbconvert --to latex --post pdf`.
307
307
308 * Used https://github.com/jdfreder/bootstrap2to3 to migrate the Notebook to Bootstrap 3.
308 * Used https://github.com/jdfreder/bootstrap2to3 to migrate the Notebook to Bootstrap 3.
309
309
310 Additional changes:
310 Additional changes:
311
311
312 - Set `.tab-content .row` `0px;` left and right margin (bootstrap default is `-15px;`)
312 - Set `.tab-content .row` `0px;` left and right margin (bootstrap default is `-15px;`)
313 - Removed `height: @btn_mini_height;` from `.list_header>div, .list_item>div` in `tree.less`
313 - Removed `height: @btn_mini_height;` from `.list_header>div, .list_item>div` in `tree.less`
314 - Set `#header` div `margin-bottom: 0px;`
314 - Set `#header` div `margin-bottom: 0px;`
315 - Set `#menus` to `float: left;`
315 - Set `#menus` to `float: left;`
316 - Set `#maintoolbar .navbar-text` to `float: none;`
316 - Set `#maintoolbar .navbar-text` to `float: none;`
317 - Added no-padding convenience class.
317 - Added no-padding convenience class.
318 - Set border of #maintoolbar to 0px
318 - Set border of #maintoolbar to 0px
319
319
320 * Accessing the `container` DOM object when displaying javascript has been
320 * Accessing the `container` DOM object when displaying javascript has been
321 deprecated in IPython 2.0 in favor of accessing `element`. Starting with
321 deprecated in IPython 2.0 in favor of accessing `element`. Starting with
322 IPython 3.0 trying to access `container` will raise an error in browser
322 IPython 3.0 trying to access `container` will raise an error in browser
323 javascript console.
323 javascript console.
324
324
325 * ``IPython.utils.py3compat.open`` was removed: :func:`io.open` provides all
325 * ``IPython.utils.py3compat.open`` was removed: :func:`io.open` provides all
326 the same functionality.
326 the same functionality.
327
327
328 * The NotebookManager and ``/api/notebooks`` service has been replaced by
328 * The NotebookManager and ``/api/notebooks`` service has been replaced by
329 a more generic ContentsManager and ``/api/contents`` service,
329 a more generic ContentsManager and ``/api/contents`` service,
330 which supports all kinds of files.
330 which supports all kinds of files.
331 * The Dashboard now lists all files, not just notebooks and directories.
331 * The Dashboard now lists all files, not just notebooks and directories.
332 * The ``--script`` hook for saving notebooks to Python scripts is removed,
332 * The ``--script`` hook for saving notebooks to Python scripts is removed,
333 use :samp:`ipython nbconvert --to python {notebook}` instead.
333 use :samp:`ipython nbconvert --to python {notebook}` instead.
334
334
335 * The ``rmagic`` extension is deprecated, as it is now part of rpy2. See
335 * The ``rmagic`` extension is deprecated, as it is now part of rpy2. See
336 :mod:`rpy2.ipython.rmagic`.
336 :mod:`rpy2.ipython.rmagic`.
337
337
338 * :meth:`~.KernelManager.start_kernel` and :meth:`~.KernelManager.format_kernel_cmd`
338 * :meth:`~.KernelManager.start_kernel` and :meth:`~.KernelManager.format_kernel_cmd`
339 no longer accept a ``executable`` parameter. Use the kernelspec machinery instead.
339 no longer accept a ``executable`` parameter. Use the kernelspec machinery instead.
340
340
341 * The widget classes have been renamed from `*Widget` to `*`. The old names are
341 * The widget classes have been renamed from `*Widget` to `*`. The old names are
342 still functional, but are deprecated. i.e. `IntSliderWidget` has been renamed
342 still functional, but are deprecated. i.e. `IntSliderWidget` has been renamed
343 to `IntSlider`.
343 to `IntSlider`.
344 * The ContainerWidget was renamed to Box and no longer defaults as a flexible
344 * The ContainerWidget was renamed to Box and no longer defaults as a flexible
345 box in the web browser. A new FlexBox widget was added, which allows you to
345 box in the web browser. A new FlexBox widget was added, which allows you to
346 use the flexible box model.
346 use the flexible box model.
347
347
348 * The notebook now uses a single websocket at `/kernels/<kernel-id>/channels` instead of separate
348 * The notebook now uses a single websocket at `/kernels/<kernel-id>/channels` instead of separate
349 `/kernels/<kernel-id>/{shell|iopub|stdin}` channels. Messages on each channel are identified by a
349 `/kernels/<kernel-id>/{shell|iopub|stdin}` channels. Messages on each channel are identified by a
350 `channel` key in the message dict, for both send and recv.
350 `channel` key in the message dict, for both send and recv.
351
351
352
352
353 Content Security Policy
353 Content Security Policy
354 ```````````````````````
354 ```````````````````````
355
355
356 The Content Security Policy is a web standard for adding a layer of security to
356 The Content Security Policy is a web standard for adding a layer of security to
357 detect and mitigate certain classes of attacks, including Cross Site Scripting
357 detect and mitigate certain classes of attacks, including Cross Site Scripting
358 (XSS) and data injection attacks. This was introduced into the notebook to
358 (XSS) and data injection attacks. This was introduced into the notebook to
359 ensure that the IPython Notebook and its APIs (by default) can only be embedded
359 ensure that the IPython Notebook and its APIs (by default) can only be embedded
360 in an iframe on the same origin.
360 in an iframe on the same origin.
361
361
362 Override ``headers['Content-Security-Policy']`` within your notebook
362 Override ``headers['Content-Security-Policy']`` within your notebook
363 configuration to extend for alternate domains and security settings.::
363 configuration to extend for alternate domains and security settings.::
364
364
365 c.NotebookApp.tornado_settings = {
365 c.NotebookApp.tornado_settings = {
366 'headers': {
366 'headers': {
367 'Content-Security-Policy': "frame-ancestors 'self'"
367 'Content-Security-Policy': "frame-ancestors 'self'"
368 }
368 }
369 }
369 }
370
370
371 Example policies::
371 Example policies::
372
372
373 Content-Security-Policy: default-src 'self' https://*.jupyter.org
373 Content-Security-Policy: default-src 'self' https://*.jupyter.org
374
374
375 Matches embeddings on any subdomain of jupyter.org, so long as they are served
375 Matches embeddings on any subdomain of jupyter.org, so long as they are served
376 over SSL.
376 over SSL.
377
377
378 There is a `report-uri <https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives#report-uri>`_ endpoint available for logging CSP violations, located at
378 There is a `report-uri <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri>`_ endpoint available for logging CSP violations, located at
379 ``/api/security/csp-report``. To use it, set ``report-uri`` as part of the CSP::
379 ``/api/security/csp-report``. To use it, set ``report-uri`` as part of the CSP::
380
380
381 c.NotebookApp.tornado_settings = {
381 c.NotebookApp.tornado_settings = {
382 'headers': {
382 'headers': {
383 'Content-Security-Policy': "frame-ancestors 'self'; report-uri /api/security/csp-report"
383 'Content-Security-Policy': "frame-ancestors 'self'; report-uri /api/security/csp-report"
384 }
384 }
385 }
385 }
386
386
387 It simply provides the CSP report as a warning in IPython's logs. The default
387 It simply provides the CSP report as a warning in IPython's logs. The default
388 CSP sets this report-uri relative to the ``base_url`` (not shown above).
388 CSP sets this report-uri relative to the ``base_url`` (not shown above).
389
389
390 For a more thorough and accurate guide on Content Security Policies, check out
390 For a more thorough and accurate guide on Content Security Policies, check out
391 `MDN's Using Content Security Policy <https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy>`_ for more examples.
391 `MDN's Using Content Security Policy <https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy>`_ for more examples.
General Comments 0
You need to be logged in to leave comments. Login now