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