##// END OF EJS Templates
Tweak description of failure.
Thomas Kluyver -
Show More
@@ -1,3827 +1,3827 b''
1 1 # encoding: utf-8
2 2 """Magic functions for InteractiveShell.
3 3 """
4 4
5 5 #-----------------------------------------------------------------------------
6 6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 7 # Copyright (C) 2001-2007 Fernando Perez <fperez@colorado.edu>
8 8 # Copyright (C) 2008-2011 The IPython Development Team
9 9
10 10 # Distributed under the terms of the BSD License. The full license is in
11 11 # the file COPYING, distributed as part of this software.
12 12 #-----------------------------------------------------------------------------
13 13
14 14 #-----------------------------------------------------------------------------
15 15 # Imports
16 16 #-----------------------------------------------------------------------------
17 17
18 18 import __builtin__ as builtin_mod
19 19 import __future__
20 20 import bdb
21 21 import inspect
22 22 import imp
23 23 import io
24 24 import json
25 25 import os
26 26 import sys
27 27 import shutil
28 28 import re
29 29 import time
30 30 import gc
31 31 from StringIO import StringIO
32 32 from getopt import getopt,GetoptError
33 33 from pprint import pformat
34 34 from urllib2 import urlopen
35 35
36 36 # cProfile was added in Python2.5
37 37 try:
38 38 import cProfile as profile
39 39 import pstats
40 40 except ImportError:
41 41 # profile isn't bundled by default in Debian for license reasons
42 42 try:
43 43 import profile,pstats
44 44 except ImportError:
45 45 profile = pstats = None
46 46
47 47 import IPython
48 48 from IPython.core import debugger, oinspect
49 49 from IPython.core.error import TryNext
50 50 from IPython.core.error import UsageError
51 51 from IPython.core.error import StdinNotImplementedError
52 52 from IPython.core.fakemodule import FakeModule
53 53 from IPython.core.profiledir import ProfileDir
54 54 from IPython.core.macro import Macro
55 55 from IPython.core import magic_arguments, page
56 56 from IPython.core.prefilter import ESC_MAGIC
57 57 from IPython.core.pylabtools import mpl_runner
58 58 from IPython.testing.skipdoctest import skip_doctest
59 59 from IPython.utils import py3compat
60 60 from IPython.utils import openpy
61 61 from IPython.utils.encoding import DEFAULT_ENCODING
62 62 from IPython.utils.io import file_read, nlprint
63 63 from IPython.utils.module_paths import find_mod
64 64 from IPython.utils.path import get_py_filename, unquote_filename
65 65 from IPython.utils.process import arg_split, abbrev_cwd
66 66 from IPython.utils.terminal import set_term_title
67 67 from IPython.utils.text import LSString, SList, format_screen
68 68 from IPython.utils.timing import clock, clock2
69 69 from IPython.utils.warn import warn, error
70 70 from IPython.utils.ipstruct import Struct
71 71 from IPython.config.application import Application
72 72
73 73 #-----------------------------------------------------------------------------
74 74 # Utility functions
75 75 #-----------------------------------------------------------------------------
76 76
77 77 def on_off(tag):
78 78 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
79 79 return ['OFF','ON'][tag]
80 80
81 81 class Bunch: pass
82 82
83 83 def compress_dhist(dh):
84 84 head, tail = dh[:-10], dh[-10:]
85 85
86 86 newhead = []
87 87 done = set()
88 88 for h in head:
89 89 if h in done:
90 90 continue
91 91 newhead.append(h)
92 92 done.add(h)
93 93
94 94 return newhead + tail
95 95
96 96 def needs_local_scope(func):
97 97 """Decorator to mark magic functions which need to local scope to run."""
98 98 func.needs_local_scope = True
99 99 return func
100 100
101 101
102 102 # Used for exception handling in magic_edit
103 103 class MacroToEdit(ValueError): pass
104 104
105 105 #***************************************************************************
106 106 # Main class implementing Magic functionality
107 107
108 108 # XXX - for some odd reason, if Magic is made a new-style class, we get errors
109 109 # on construction of the main InteractiveShell object. Something odd is going
110 110 # on with super() calls, Configurable and the MRO... For now leave it as-is, but
111 111 # eventually this needs to be clarified.
112 112 # BG: This is because InteractiveShell inherits from this, but is itself a
113 113 # Configurable. This messes up the MRO in some way. The fix is that we need to
114 114 # make Magic a configurable that InteractiveShell does not subclass.
115 115
116 116 class Magic:
117 117 """Magic functions for InteractiveShell.
118 118
119 119 Shell functions which can be reached as %function_name. All magic
120 120 functions should accept a string, which they can parse for their own
121 121 needs. This can make some functions easier to type, eg `%cd ../`
122 122 vs. `%cd("../")`
123 123
124 124 ALL definitions MUST begin with the prefix magic_. The user won't need it
125 125 at the command line, but it is is needed in the definition. """
126 126
127 127 # class globals
128 128 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
129 129 'Automagic is ON, % prefix NOT needed for magic functions.']
130 130
131 131
132 132 configurables = None
133 133 #......................................................................
134 134 # some utility functions
135 135
136 136 def __init__(self,shell):
137 137
138 138 self.options_table = {}
139 139 if profile is None:
140 140 self.magic_prun = self.profile_missing_notice
141 141 self.shell = shell
142 142 if self.configurables is None:
143 143 self.configurables = []
144 144
145 145 # namespace for holding state we may need
146 146 self._magic_state = Bunch()
147 147
148 148 def profile_missing_notice(self, *args, **kwargs):
149 149 error("""\
150 150 The profile module could not be found. It has been removed from the standard
151 151 python packages because of its non-free license. To use profiling, install the
152 152 python-profiler package from non-free.""")
153 153
154 154 def default_option(self,fn,optstr):
155 155 """Make an entry in the options_table for fn, with value optstr"""
156 156
157 157 if fn not in self.lsmagic():
158 158 error("%s is not a magic function" % fn)
159 159 self.options_table[fn] = optstr
160 160
161 161 def lsmagic(self):
162 162 """Return a list of currently available magic functions.
163 163
164 164 Gives a list of the bare names after mangling (['ls','cd', ...], not
165 165 ['magic_ls','magic_cd',...]"""
166 166
167 167 # FIXME. This needs a cleanup, in the way the magics list is built.
168 168
169 169 # magics in class definition
170 170 class_magic = lambda fn: fn.startswith('magic_') and \
171 171 callable(Magic.__dict__[fn])
172 172 # in instance namespace (run-time user additions)
173 173 inst_magic = lambda fn: fn.startswith('magic_') and \
174 174 callable(self.__dict__[fn])
175 175 # and bound magics by user (so they can access self):
176 176 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
177 177 callable(self.__class__.__dict__[fn])
178 178 magics = filter(class_magic,Magic.__dict__.keys()) + \
179 179 filter(inst_magic,self.__dict__.keys()) + \
180 180 filter(inst_bound_magic,self.__class__.__dict__.keys())
181 181 out = []
182 182 for fn in set(magics):
183 183 out.append(fn.replace('magic_','',1))
184 184 out.sort()
185 185 return out
186 186
187 187 def extract_input_lines(self, range_str, raw=False):
188 188 """Return as a string a set of input history slices.
189 189
190 190 Parameters
191 191 ----------
192 192 range_str : string
193 193 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
194 194 since this function is for use by magic functions which get their
195 195 arguments as strings. The number before the / is the session
196 196 number: ~n goes n back from the current session.
197 197
198 198 Optional Parameters:
199 199 - raw(False): by default, the processed input is used. If this is
200 200 true, the raw input history is used instead.
201 201
202 202 Note that slices can be called with two notations:
203 203
204 204 N:M -> standard python form, means including items N...(M-1).
205 205
206 206 N-M -> include items N..M (closed endpoint)."""
207 207 lines = self.shell.history_manager.\
208 208 get_range_by_str(range_str, raw=raw)
209 209 return "\n".join(x for _, _, x in lines)
210 210
211 211 def arg_err(self,func):
212 212 """Print docstring if incorrect arguments were passed"""
213 213 print 'Error in arguments:'
214 214 print oinspect.getdoc(func)
215 215
216 216 def format_latex(self,strng):
217 217 """Format a string for latex inclusion."""
218 218
219 219 # Characters that need to be escaped for latex:
220 220 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
221 221 # Magic command names as headers:
222 222 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
223 223 re.MULTILINE)
224 224 # Magic commands
225 225 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
226 226 re.MULTILINE)
227 227 # Paragraph continue
228 228 par_re = re.compile(r'\\$',re.MULTILINE)
229 229
230 230 # The "\n" symbol
231 231 newline_re = re.compile(r'\\n')
232 232
233 233 # Now build the string for output:
234 234 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
235 235 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
236 236 strng)
237 237 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
238 238 strng = par_re.sub(r'\\\\',strng)
239 239 strng = escape_re.sub(r'\\\1',strng)
240 240 strng = newline_re.sub(r'\\textbackslash{}n',strng)
241 241 return strng
242 242
243 243 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
244 244 """Parse options passed to an argument string.
245 245
246 246 The interface is similar to that of getopt(), but it returns back a
247 247 Struct with the options as keys and the stripped argument string still
248 248 as a string.
249 249
250 250 arg_str is quoted as a true sys.argv vector by using shlex.split.
251 251 This allows us to easily expand variables, glob files, quote
252 252 arguments, etc.
253 253
254 254 Options:
255 255 -mode: default 'string'. If given as 'list', the argument string is
256 256 returned as a list (split on whitespace) instead of a string.
257 257
258 258 -list_all: put all option values in lists. Normally only options
259 259 appearing more than once are put in a list.
260 260
261 261 -posix (True): whether to split the input line in POSIX mode or not,
262 262 as per the conventions outlined in the shlex module from the
263 263 standard library."""
264 264
265 265 # inject default options at the beginning of the input line
266 266 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
267 267 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
268 268
269 269 mode = kw.get('mode','string')
270 270 if mode not in ['string','list']:
271 271 raise ValueError,'incorrect mode given: %s' % mode
272 272 # Get options
273 273 list_all = kw.get('list_all',0)
274 274 posix = kw.get('posix', os.name == 'posix')
275 275 strict = kw.get('strict', True)
276 276
277 277 # Check if we have more than one argument to warrant extra processing:
278 278 odict = {} # Dictionary with options
279 279 args = arg_str.split()
280 280 if len(args) >= 1:
281 281 # If the list of inputs only has 0 or 1 thing in it, there's no
282 282 # need to look for options
283 283 argv = arg_split(arg_str, posix, strict)
284 284 # Do regular option processing
285 285 try:
286 286 opts,args = getopt(argv,opt_str,*long_opts)
287 287 except GetoptError,e:
288 288 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
289 289 " ".join(long_opts)))
290 290 for o,a in opts:
291 291 if o.startswith('--'):
292 292 o = o[2:]
293 293 else:
294 294 o = o[1:]
295 295 try:
296 296 odict[o].append(a)
297 297 except AttributeError:
298 298 odict[o] = [odict[o],a]
299 299 except KeyError:
300 300 if list_all:
301 301 odict[o] = [a]
302 302 else:
303 303 odict[o] = a
304 304
305 305 # Prepare opts,args for return
306 306 opts = Struct(odict)
307 307 if mode == 'string':
308 308 args = ' '.join(args)
309 309
310 310 return opts,args
311 311
312 312 #......................................................................
313 313 # And now the actual magic functions
314 314
315 315 # Functions for IPython shell work (vars,funcs, config, etc)
316 316 def magic_lsmagic(self, parameter_s = ''):
317 317 """List currently available magic functions."""
318 318 mesc = ESC_MAGIC
319 319 print 'Available magic functions:\n'+mesc+\
320 320 (' '+mesc).join(self.lsmagic())
321 321 print '\n' + Magic.auto_status[self.shell.automagic]
322 322 return None
323 323
324 324 def magic_magic(self, parameter_s = ''):
325 325 """Print information about the magic function system.
326 326
327 327 Supported formats: -latex, -brief, -rest
328 328 """
329 329
330 330 mode = ''
331 331 try:
332 332 if parameter_s.split()[0] == '-latex':
333 333 mode = 'latex'
334 334 if parameter_s.split()[0] == '-brief':
335 335 mode = 'brief'
336 336 if parameter_s.split()[0] == '-rest':
337 337 mode = 'rest'
338 338 rest_docs = []
339 339 except:
340 340 pass
341 341
342 342 magic_docs = []
343 343 for fname in self.lsmagic():
344 344 mname = 'magic_' + fname
345 345 for space in (Magic,self,self.__class__):
346 346 try:
347 347 fn = space.__dict__[mname]
348 348 except KeyError:
349 349 pass
350 350 else:
351 351 break
352 352 if mode == 'brief':
353 353 # only first line
354 354 if fn.__doc__:
355 355 fndoc = fn.__doc__.split('\n',1)[0]
356 356 else:
357 357 fndoc = 'No documentation'
358 358 else:
359 359 if fn.__doc__:
360 360 fndoc = fn.__doc__.rstrip()
361 361 else:
362 362 fndoc = 'No documentation'
363 363
364 364
365 365 if mode == 'rest':
366 366 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(ESC_MAGIC,
367 367 fname,fndoc))
368 368
369 369 else:
370 370 magic_docs.append('%s%s:\n\t%s\n' %(ESC_MAGIC,
371 371 fname,fndoc))
372 372
373 373 magic_docs = ''.join(magic_docs)
374 374
375 375 if mode == 'rest':
376 376 return "".join(rest_docs)
377 377
378 378 if mode == 'latex':
379 379 print self.format_latex(magic_docs)
380 380 return
381 381 else:
382 382 magic_docs = format_screen(magic_docs)
383 383 if mode == 'brief':
384 384 return magic_docs
385 385
386 386 outmsg = """
387 387 IPython's 'magic' functions
388 388 ===========================
389 389
390 390 The magic function system provides a series of functions which allow you to
391 391 control the behavior of IPython itself, plus a lot of system-type
392 392 features. All these functions are prefixed with a % character, but parameters
393 393 are given without parentheses or quotes.
394 394
395 395 NOTE: If you have 'automagic' enabled (via the command line option or with the
396 396 %automagic function), you don't need to type in the % explicitly. By default,
397 397 IPython ships with automagic on, so you should only rarely need the % escape.
398 398
399 399 Example: typing '%cd mydir' (without the quotes) changes you working directory
400 400 to 'mydir', if it exists.
401 401
402 402 For a list of the available magic functions, use %lsmagic. For a description
403 403 of any of them, type %magic_name?, e.g. '%cd?'.
404 404
405 405 Currently the magic system has the following functions:\n"""
406 406
407 407 mesc = ESC_MAGIC
408 408 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
409 409 "\n\n%s%s\n\n%s" % (outmsg,
410 410 magic_docs,mesc,mesc,
411 411 (' '+mesc).join(self.lsmagic()),
412 412 Magic.auto_status[self.shell.automagic] ) )
413 413 page.page(outmsg)
414 414
415 415 def magic_automagic(self, parameter_s = ''):
416 416 """Make magic functions callable without having to type the initial %.
417 417
418 418 Without argumentsl toggles on/off (when off, you must call it as
419 419 %automagic, of course). With arguments it sets the value, and you can
420 420 use any of (case insensitive):
421 421
422 422 - on,1,True: to activate
423 423
424 424 - off,0,False: to deactivate.
425 425
426 426 Note that magic functions have lowest priority, so if there's a
427 427 variable whose name collides with that of a magic fn, automagic won't
428 428 work for that function (you get the variable instead). However, if you
429 429 delete the variable (del var), the previously shadowed magic function
430 430 becomes visible to automagic again."""
431 431
432 432 arg = parameter_s.lower()
433 433 if parameter_s in ('on','1','true'):
434 434 self.shell.automagic = True
435 435 elif parameter_s in ('off','0','false'):
436 436 self.shell.automagic = False
437 437 else:
438 438 self.shell.automagic = not self.shell.automagic
439 439 print '\n' + Magic.auto_status[self.shell.automagic]
440 440
441 441 @skip_doctest
442 442 def magic_autocall(self, parameter_s = ''):
443 443 """Make functions callable without having to type parentheses.
444 444
445 445 Usage:
446 446
447 447 %autocall [mode]
448 448
449 449 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
450 450 value is toggled on and off (remembering the previous state).
451 451
452 452 In more detail, these values mean:
453 453
454 454 0 -> fully disabled
455 455
456 456 1 -> active, but do not apply if there are no arguments on the line.
457 457
458 458 In this mode, you get::
459 459
460 460 In [1]: callable
461 461 Out[1]: <built-in function callable>
462 462
463 463 In [2]: callable 'hello'
464 464 ------> callable('hello')
465 465 Out[2]: False
466 466
467 467 2 -> Active always. Even if no arguments are present, the callable
468 468 object is called::
469 469
470 470 In [2]: float
471 471 ------> float()
472 472 Out[2]: 0.0
473 473
474 474 Note that even with autocall off, you can still use '/' at the start of
475 475 a line to treat the first argument on the command line as a function
476 476 and add parentheses to it::
477 477
478 478 In [8]: /str 43
479 479 ------> str(43)
480 480 Out[8]: '43'
481 481
482 482 # all-random (note for auto-testing)
483 483 """
484 484
485 485 if parameter_s:
486 486 arg = int(parameter_s)
487 487 else:
488 488 arg = 'toggle'
489 489
490 490 if not arg in (0,1,2,'toggle'):
491 491 error('Valid modes: (0->Off, 1->Smart, 2->Full')
492 492 return
493 493
494 494 if arg in (0,1,2):
495 495 self.shell.autocall = arg
496 496 else: # toggle
497 497 if self.shell.autocall:
498 498 self._magic_state.autocall_save = self.shell.autocall
499 499 self.shell.autocall = 0
500 500 else:
501 501 try:
502 502 self.shell.autocall = self._magic_state.autocall_save
503 503 except AttributeError:
504 504 self.shell.autocall = self._magic_state.autocall_save = 1
505 505
506 506 print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall]
507 507
508 508
509 509 def magic_page(self, parameter_s=''):
510 510 """Pretty print the object and display it through a pager.
511 511
512 512 %page [options] OBJECT
513 513
514 514 If no object is given, use _ (last output).
515 515
516 516 Options:
517 517
518 518 -r: page str(object), don't pretty-print it."""
519 519
520 520 # After a function contributed by Olivier Aubert, slightly modified.
521 521
522 522 # Process options/args
523 523 opts,args = self.parse_options(parameter_s,'r')
524 524 raw = 'r' in opts
525 525
526 526 oname = args and args or '_'
527 527 info = self._ofind(oname)
528 528 if info['found']:
529 529 txt = (raw and str or pformat)( info['obj'] )
530 530 page.page(txt)
531 531 else:
532 532 print 'Object `%s` not found' % oname
533 533
534 534 def magic_profile(self, parameter_s=''):
535 535 """Print your currently active IPython profile."""
536 536 from IPython.core.application import BaseIPythonApplication
537 537 if BaseIPythonApplication.initialized():
538 538 print BaseIPythonApplication.instance().profile
539 539 else:
540 540 error("profile is an application-level value, but you don't appear to be in an IPython application")
541 541
542 542 def magic_pinfo(self, parameter_s='', namespaces=None):
543 543 """Provide detailed information about an object.
544 544
545 545 '%pinfo object' is just a synonym for object? or ?object."""
546 546
547 547 #print 'pinfo par: <%s>' % parameter_s # dbg
548 548
549 549
550 550 # detail_level: 0 -> obj? , 1 -> obj??
551 551 detail_level = 0
552 552 # We need to detect if we got called as 'pinfo pinfo foo', which can
553 553 # happen if the user types 'pinfo foo?' at the cmd line.
554 554 pinfo,qmark1,oname,qmark2 = \
555 555 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
556 556 if pinfo or qmark1 or qmark2:
557 557 detail_level = 1
558 558 if "*" in oname:
559 559 self.magic_psearch(oname)
560 560 else:
561 561 self.shell._inspect('pinfo', oname, detail_level=detail_level,
562 562 namespaces=namespaces)
563 563
564 564 def magic_pinfo2(self, parameter_s='', namespaces=None):
565 565 """Provide extra detailed information about an object.
566 566
567 567 '%pinfo2 object' is just a synonym for object?? or ??object."""
568 568 self.shell._inspect('pinfo', parameter_s, detail_level=1,
569 569 namespaces=namespaces)
570 570
571 571 @skip_doctest
572 572 def magic_pdef(self, parameter_s='', namespaces=None):
573 573 """Print the definition header for any callable object.
574 574
575 575 If the object is a class, print the constructor information.
576 576
577 577 Examples
578 578 --------
579 579 ::
580 580
581 581 In [3]: %pdef urllib.urlopen
582 582 urllib.urlopen(url, data=None, proxies=None)
583 583 """
584 584 self._inspect('pdef',parameter_s, namespaces)
585 585
586 586 def magic_pdoc(self, parameter_s='', namespaces=None):
587 587 """Print the docstring for an object.
588 588
589 589 If the given object is a class, it will print both the class and the
590 590 constructor docstrings."""
591 591 self._inspect('pdoc',parameter_s, namespaces)
592 592
593 593 def magic_psource(self, parameter_s='', namespaces=None):
594 594 """Print (or run through pager) the source code for an object."""
595 595 self._inspect('psource',parameter_s, namespaces)
596 596
597 597 def magic_pfile(self, parameter_s=''):
598 598 """Print (or run through pager) the file where an object is defined.
599 599
600 600 The file opens at the line where the object definition begins. IPython
601 601 will honor the environment variable PAGER if set, and otherwise will
602 602 do its best to print the file in a convenient form.
603 603
604 604 If the given argument is not an object currently defined, IPython will
605 605 try to interpret it as a filename (automatically adding a .py extension
606 606 if needed). You can thus use %pfile as a syntax highlighting code
607 607 viewer."""
608 608
609 609 # first interpret argument as an object name
610 610 out = self._inspect('pfile',parameter_s)
611 611 # if not, try the input as a filename
612 612 if out == 'not found':
613 613 try:
614 614 filename = get_py_filename(parameter_s)
615 615 except IOError,msg:
616 616 print msg
617 617 return
618 618 page.page(self.shell.inspector.format(open(filename).read()))
619 619
620 620 def magic_psearch(self, parameter_s=''):
621 621 """Search for object in namespaces by wildcard.
622 622
623 623 %psearch [options] PATTERN [OBJECT TYPE]
624 624
625 625 Note: ? can be used as a synonym for %psearch, at the beginning or at
626 626 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
627 627 rest of the command line must be unchanged (options come first), so
628 628 for example the following forms are equivalent
629 629
630 630 %psearch -i a* function
631 631 -i a* function?
632 632 ?-i a* function
633 633
634 634 Arguments:
635 635
636 636 PATTERN
637 637
638 638 where PATTERN is a string containing * as a wildcard similar to its
639 639 use in a shell. The pattern is matched in all namespaces on the
640 640 search path. By default objects starting with a single _ are not
641 641 matched, many IPython generated objects have a single
642 642 underscore. The default is case insensitive matching. Matching is
643 643 also done on the attributes of objects and not only on the objects
644 644 in a module.
645 645
646 646 [OBJECT TYPE]
647 647
648 648 Is the name of a python type from the types module. The name is
649 649 given in lowercase without the ending type, ex. StringType is
650 650 written string. By adding a type here only objects matching the
651 651 given type are matched. Using all here makes the pattern match all
652 652 types (this is the default).
653 653
654 654 Options:
655 655
656 656 -a: makes the pattern match even objects whose names start with a
657 657 single underscore. These names are normally omitted from the
658 658 search.
659 659
660 660 -i/-c: make the pattern case insensitive/sensitive. If neither of
661 661 these options are given, the default is read from your configuration
662 662 file, with the option ``InteractiveShell.wildcards_case_sensitive``.
663 663 If this option is not specified in your configuration file, IPython's
664 664 internal default is to do a case sensitive search.
665 665
666 666 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
667 667 specify can be searched in any of the following namespaces:
668 668 'builtin', 'user', 'user_global','internal', 'alias', where
669 669 'builtin' and 'user' are the search defaults. Note that you should
670 670 not use quotes when specifying namespaces.
671 671
672 672 'Builtin' contains the python module builtin, 'user' contains all
673 673 user data, 'alias' only contain the shell aliases and no python
674 674 objects, 'internal' contains objects used by IPython. The
675 675 'user_global' namespace is only used by embedded IPython instances,
676 676 and it contains module-level globals. You can add namespaces to the
677 677 search with -s or exclude them with -e (these options can be given
678 678 more than once).
679 679
680 680 Examples
681 681 --------
682 682 ::
683 683
684 684 %psearch a* -> objects beginning with an a
685 685 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
686 686 %psearch a* function -> all functions beginning with an a
687 687 %psearch re.e* -> objects beginning with an e in module re
688 688 %psearch r*.e* -> objects that start with e in modules starting in r
689 689 %psearch r*.* string -> all strings in modules beginning with r
690 690
691 691 Case sensitive search::
692 692
693 693 %psearch -c a* list all object beginning with lower case a
694 694
695 695 Show objects beginning with a single _::
696 696
697 697 %psearch -a _* list objects beginning with a single underscore"""
698 698 try:
699 699 parameter_s.encode('ascii')
700 700 except UnicodeEncodeError:
701 701 print 'Python identifiers can only contain ascii characters.'
702 702 return
703 703
704 704 # default namespaces to be searched
705 705 def_search = ['user_local', 'user_global', 'builtin']
706 706
707 707 # Process options/args
708 708 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
709 709 opt = opts.get
710 710 shell = self.shell
711 711 psearch = shell.inspector.psearch
712 712
713 713 # select case options
714 714 if opts.has_key('i'):
715 715 ignore_case = True
716 716 elif opts.has_key('c'):
717 717 ignore_case = False
718 718 else:
719 719 ignore_case = not shell.wildcards_case_sensitive
720 720
721 721 # Build list of namespaces to search from user options
722 722 def_search.extend(opt('s',[]))
723 723 ns_exclude = ns_exclude=opt('e',[])
724 724 ns_search = [nm for nm in def_search if nm not in ns_exclude]
725 725
726 726 # Call the actual search
727 727 try:
728 728 psearch(args,shell.ns_table,ns_search,
729 729 show_all=opt('a'),ignore_case=ignore_case)
730 730 except:
731 731 shell.showtraceback()
732 732
733 733 @skip_doctest
734 734 def magic_who_ls(self, parameter_s=''):
735 735 """Return a sorted list of all interactive variables.
736 736
737 737 If arguments are given, only variables of types matching these
738 738 arguments are returned.
739 739
740 740 Examples
741 741 --------
742 742
743 743 Define two variables and list them with who_ls::
744 744
745 745 In [1]: alpha = 123
746 746
747 747 In [2]: beta = 'test'
748 748
749 749 In [3]: %who_ls
750 750 Out[3]: ['alpha', 'beta']
751 751
752 752 In [4]: %who_ls int
753 753 Out[4]: ['alpha']
754 754
755 755 In [5]: %who_ls str
756 756 Out[5]: ['beta']
757 757 """
758 758
759 759 user_ns = self.shell.user_ns
760 760 user_ns_hidden = self.shell.user_ns_hidden
761 761 out = [ i for i in user_ns
762 762 if not i.startswith('_') \
763 763 and not i in user_ns_hidden ]
764 764
765 765 typelist = parameter_s.split()
766 766 if typelist:
767 767 typeset = set(typelist)
768 768 out = [i for i in out if type(user_ns[i]).__name__ in typeset]
769 769
770 770 out.sort()
771 771 return out
772 772
773 773 @skip_doctest
774 774 def magic_who(self, parameter_s=''):
775 775 """Print all interactive variables, with some minimal formatting.
776 776
777 777 If any arguments are given, only variables whose type matches one of
778 778 these are printed. For example::
779 779
780 780 %who function str
781 781
782 782 will only list functions and strings, excluding all other types of
783 783 variables. To find the proper type names, simply use type(var) at a
784 784 command line to see how python prints type names. For example:
785 785
786 786 ::
787 787
788 788 In [1]: type('hello')\\
789 789 Out[1]: <type 'str'>
790 790
791 791 indicates that the type name for strings is 'str'.
792 792
793 793 ``%who`` always excludes executed names loaded through your configuration
794 794 file and things which are internal to IPython.
795 795
796 796 This is deliberate, as typically you may load many modules and the
797 797 purpose of %who is to show you only what you've manually defined.
798 798
799 799 Examples
800 800 --------
801 801
802 802 Define two variables and list them with who::
803 803
804 804 In [1]: alpha = 123
805 805
806 806 In [2]: beta = 'test'
807 807
808 808 In [3]: %who
809 809 alpha beta
810 810
811 811 In [4]: %who int
812 812 alpha
813 813
814 814 In [5]: %who str
815 815 beta
816 816 """
817 817
818 818 varlist = self.magic_who_ls(parameter_s)
819 819 if not varlist:
820 820 if parameter_s:
821 821 print 'No variables match your requested type.'
822 822 else:
823 823 print 'Interactive namespace is empty.'
824 824 return
825 825
826 826 # if we have variables, move on...
827 827 count = 0
828 828 for i in varlist:
829 829 print i+'\t',
830 830 count += 1
831 831 if count > 8:
832 832 count = 0
833 833 print
834 834 print
835 835
836 836 @skip_doctest
837 837 def magic_whos(self, parameter_s=''):
838 838 """Like %who, but gives some extra information about each variable.
839 839
840 840 The same type filtering of %who can be applied here.
841 841
842 842 For all variables, the type is printed. Additionally it prints:
843 843
844 844 - For {},[],(): their length.
845 845
846 846 - For numpy arrays, a summary with shape, number of
847 847 elements, typecode and size in memory.
848 848
849 849 - Everything else: a string representation, snipping their middle if
850 850 too long.
851 851
852 852 Examples
853 853 --------
854 854
855 855 Define two variables and list them with whos::
856 856
857 857 In [1]: alpha = 123
858 858
859 859 In [2]: beta = 'test'
860 860
861 861 In [3]: %whos
862 862 Variable Type Data/Info
863 863 --------------------------------
864 864 alpha int 123
865 865 beta str test
866 866 """
867 867
868 868 varnames = self.magic_who_ls(parameter_s)
869 869 if not varnames:
870 870 if parameter_s:
871 871 print 'No variables match your requested type.'
872 872 else:
873 873 print 'Interactive namespace is empty.'
874 874 return
875 875
876 876 # if we have variables, move on...
877 877
878 878 # for these types, show len() instead of data:
879 879 seq_types = ['dict', 'list', 'tuple']
880 880
881 881 # for numpy arrays, display summary info
882 882 ndarray_type = None
883 883 if 'numpy' in sys.modules:
884 884 try:
885 885 from numpy import ndarray
886 886 except ImportError:
887 887 pass
888 888 else:
889 889 ndarray_type = ndarray.__name__
890 890
891 891 # Find all variable names and types so we can figure out column sizes
892 892 def get_vars(i):
893 893 return self.shell.user_ns[i]
894 894
895 895 # some types are well known and can be shorter
896 896 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
897 897 def type_name(v):
898 898 tn = type(v).__name__
899 899 return abbrevs.get(tn,tn)
900 900
901 901 varlist = map(get_vars,varnames)
902 902
903 903 typelist = []
904 904 for vv in varlist:
905 905 tt = type_name(vv)
906 906
907 907 if tt=='instance':
908 908 typelist.append( abbrevs.get(str(vv.__class__),
909 909 str(vv.__class__)))
910 910 else:
911 911 typelist.append(tt)
912 912
913 913 # column labels and # of spaces as separator
914 914 varlabel = 'Variable'
915 915 typelabel = 'Type'
916 916 datalabel = 'Data/Info'
917 917 colsep = 3
918 918 # variable format strings
919 919 vformat = "{0:<{varwidth}}{1:<{typewidth}}"
920 920 aformat = "%s: %s elems, type `%s`, %s bytes"
921 921 # find the size of the columns to format the output nicely
922 922 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
923 923 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
924 924 # table header
925 925 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
926 926 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
927 927 # and the table itself
928 928 kb = 1024
929 929 Mb = 1048576 # kb**2
930 930 for vname,var,vtype in zip(varnames,varlist,typelist):
931 931 print vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth),
932 932 if vtype in seq_types:
933 933 print "n="+str(len(var))
934 934 elif vtype == ndarray_type:
935 935 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
936 936 if vtype==ndarray_type:
937 937 # numpy
938 938 vsize = var.size
939 939 vbytes = vsize*var.itemsize
940 940 vdtype = var.dtype
941 941
942 942 if vbytes < 100000:
943 943 print aformat % (vshape,vsize,vdtype,vbytes)
944 944 else:
945 945 print aformat % (vshape,vsize,vdtype,vbytes),
946 946 if vbytes < Mb:
947 947 print '(%s kb)' % (vbytes/kb,)
948 948 else:
949 949 print '(%s Mb)' % (vbytes/Mb,)
950 950 else:
951 951 try:
952 952 vstr = str(var)
953 953 except UnicodeEncodeError:
954 954 vstr = unicode(var).encode(DEFAULT_ENCODING,
955 955 'backslashreplace')
956 956 except:
957 vstr = "<object with id %d (repr failed)>" % id(var)
957 vstr = "<object with id %d (str() failed)>" % id(var)
958 958 vstr = vstr.replace('\n','\\n')
959 959 if len(vstr) < 50:
960 960 print vstr
961 961 else:
962 962 print vstr[:25] + "<...>" + vstr[-25:]
963 963
964 964 def magic_reset(self, parameter_s=''):
965 965 """Resets the namespace by removing all names defined by the user, if
966 966 called without arguments, or by removing some types of objects, such
967 967 as everything currently in IPython's In[] and Out[] containers (see
968 968 the parameters for details).
969 969
970 970 Parameters
971 971 ----------
972 972 -f : force reset without asking for confirmation.
973 973
974 974 -s : 'Soft' reset: Only clears your namespace, leaving history intact.
975 975 References to objects may be kept. By default (without this option),
976 976 we do a 'hard' reset, giving you a new session and removing all
977 977 references to objects from the current session.
978 978
979 979 in : reset input history
980 980
981 981 out : reset output history
982 982
983 983 dhist : reset directory history
984 984
985 985 array : reset only variables that are NumPy arrays
986 986
987 987 See Also
988 988 --------
989 989 magic_reset_selective : invoked as ``%reset_selective``
990 990
991 991 Examples
992 992 --------
993 993 ::
994 994
995 995 In [6]: a = 1
996 996
997 997 In [7]: a
998 998 Out[7]: 1
999 999
1000 1000 In [8]: 'a' in _ip.user_ns
1001 1001 Out[8]: True
1002 1002
1003 1003 In [9]: %reset -f
1004 1004
1005 1005 In [1]: 'a' in _ip.user_ns
1006 1006 Out[1]: False
1007 1007
1008 1008 In [2]: %reset -f in
1009 1009 Flushing input history
1010 1010
1011 1011 In [3]: %reset -f dhist in
1012 1012 Flushing directory history
1013 1013 Flushing input history
1014 1014
1015 1015 Notes
1016 1016 -----
1017 1017 Calling this magic from clients that do not implement standard input,
1018 1018 such as the ipython notebook interface, will reset the namespace
1019 1019 without confirmation.
1020 1020 """
1021 1021 opts, args = self.parse_options(parameter_s,'sf', mode='list')
1022 1022 if 'f' in opts:
1023 1023 ans = True
1024 1024 else:
1025 1025 try:
1026 1026 ans = self.shell.ask_yes_no(
1027 1027 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ", default='n')
1028 1028 except StdinNotImplementedError:
1029 1029 ans = True
1030 1030 if not ans:
1031 1031 print 'Nothing done.'
1032 1032 return
1033 1033
1034 1034 if 's' in opts: # Soft reset
1035 1035 user_ns = self.shell.user_ns
1036 1036 for i in self.magic_who_ls():
1037 1037 del(user_ns[i])
1038 1038 elif len(args) == 0: # Hard reset
1039 1039 self.shell.reset(new_session = False)
1040 1040
1041 1041 # reset in/out/dhist/array: previously extensinions/clearcmd.py
1042 1042 ip = self.shell
1043 1043 user_ns = self.user_ns # local lookup, heavily used
1044 1044
1045 1045 for target in args:
1046 1046 target = target.lower() # make matches case insensitive
1047 1047 if target == 'out':
1048 1048 print "Flushing output cache (%d entries)" % len(user_ns['_oh'])
1049 1049 self.displayhook.flush()
1050 1050
1051 1051 elif target == 'in':
1052 1052 print "Flushing input history"
1053 1053 pc = self.displayhook.prompt_count + 1
1054 1054 for n in range(1, pc):
1055 1055 key = '_i'+repr(n)
1056 1056 user_ns.pop(key,None)
1057 1057 user_ns.update(dict(_i=u'',_ii=u'',_iii=u''))
1058 1058 hm = ip.history_manager
1059 1059 # don't delete these, as %save and %macro depending on the length
1060 1060 # of these lists to be preserved
1061 1061 hm.input_hist_parsed[:] = [''] * pc
1062 1062 hm.input_hist_raw[:] = [''] * pc
1063 1063 # hm has internal machinery for _i,_ii,_iii, clear it out
1064 1064 hm._i = hm._ii = hm._iii = hm._i00 = u''
1065 1065
1066 1066 elif target == 'array':
1067 1067 # Support cleaning up numpy arrays
1068 1068 try:
1069 1069 from numpy import ndarray
1070 1070 # This must be done with items and not iteritems because we're
1071 1071 # going to modify the dict in-place.
1072 1072 for x,val in user_ns.items():
1073 1073 if isinstance(val,ndarray):
1074 1074 del user_ns[x]
1075 1075 except ImportError:
1076 1076 print "reset array only works if Numpy is available."
1077 1077
1078 1078 elif target == 'dhist':
1079 1079 print "Flushing directory history"
1080 1080 del user_ns['_dh'][:]
1081 1081
1082 1082 else:
1083 1083 print "Don't know how to reset ",
1084 1084 print target + ", please run `%reset?` for details"
1085 1085
1086 1086 gc.collect()
1087 1087
1088 1088 def magic_reset_selective(self, parameter_s=''):
1089 1089 """Resets the namespace by removing names defined by the user.
1090 1090
1091 1091 Input/Output history are left around in case you need them.
1092 1092
1093 1093 %reset_selective [-f] regex
1094 1094
1095 1095 No action is taken if regex is not included
1096 1096
1097 1097 Options
1098 1098 -f : force reset without asking for confirmation.
1099 1099
1100 1100 See Also
1101 1101 --------
1102 1102 magic_reset : invoked as ``%reset``
1103 1103
1104 1104 Examples
1105 1105 --------
1106 1106
1107 1107 We first fully reset the namespace so your output looks identical to
1108 1108 this example for pedagogical reasons; in practice you do not need a
1109 1109 full reset::
1110 1110
1111 1111 In [1]: %reset -f
1112 1112
1113 1113 Now, with a clean namespace we can make a few variables and use
1114 1114 ``%reset_selective`` to only delete names that match our regexp::
1115 1115
1116 1116 In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8
1117 1117
1118 1118 In [3]: who_ls
1119 1119 Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c']
1120 1120
1121 1121 In [4]: %reset_selective -f b[2-3]m
1122 1122
1123 1123 In [5]: who_ls
1124 1124 Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1125 1125
1126 1126 In [6]: %reset_selective -f d
1127 1127
1128 1128 In [7]: who_ls
1129 1129 Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1130 1130
1131 1131 In [8]: %reset_selective -f c
1132 1132
1133 1133 In [9]: who_ls
1134 1134 Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m']
1135 1135
1136 1136 In [10]: %reset_selective -f b
1137 1137
1138 1138 In [11]: who_ls
1139 1139 Out[11]: ['a']
1140 1140
1141 1141 Notes
1142 1142 -----
1143 1143 Calling this magic from clients that do not implement standard input,
1144 1144 such as the ipython notebook interface, will reset the namespace
1145 1145 without confirmation.
1146 1146 """
1147 1147
1148 1148 opts, regex = self.parse_options(parameter_s,'f')
1149 1149
1150 1150 if opts.has_key('f'):
1151 1151 ans = True
1152 1152 else:
1153 1153 try:
1154 1154 ans = self.shell.ask_yes_no(
1155 1155 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ",
1156 1156 default='n')
1157 1157 except StdinNotImplementedError:
1158 1158 ans = True
1159 1159 if not ans:
1160 1160 print 'Nothing done.'
1161 1161 return
1162 1162 user_ns = self.shell.user_ns
1163 1163 if not regex:
1164 1164 print 'No regex pattern specified. Nothing done.'
1165 1165 return
1166 1166 else:
1167 1167 try:
1168 1168 m = re.compile(regex)
1169 1169 except TypeError:
1170 1170 raise TypeError('regex must be a string or compiled pattern')
1171 1171 for i in self.magic_who_ls():
1172 1172 if m.search(i):
1173 1173 del(user_ns[i])
1174 1174
1175 1175 def magic_xdel(self, parameter_s=''):
1176 1176 """Delete a variable, trying to clear it from anywhere that
1177 1177 IPython's machinery has references to it. By default, this uses
1178 1178 the identity of the named object in the user namespace to remove
1179 1179 references held under other names. The object is also removed
1180 1180 from the output history.
1181 1181
1182 1182 Options
1183 1183 -n : Delete the specified name from all namespaces, without
1184 1184 checking their identity.
1185 1185 """
1186 1186 opts, varname = self.parse_options(parameter_s,'n')
1187 1187 try:
1188 1188 self.shell.del_var(varname, ('n' in opts))
1189 1189 except (NameError, ValueError) as e:
1190 1190 print type(e).__name__ +": "+ str(e)
1191 1191
1192 1192 def magic_logstart(self,parameter_s=''):
1193 1193 """Start logging anywhere in a session.
1194 1194
1195 1195 %logstart [-o|-r|-t] [log_name [log_mode]]
1196 1196
1197 1197 If no name is given, it defaults to a file named 'ipython_log.py' in your
1198 1198 current directory, in 'rotate' mode (see below).
1199 1199
1200 1200 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1201 1201 history up to that point and then continues logging.
1202 1202
1203 1203 %logstart takes a second optional parameter: logging mode. This can be one
1204 1204 of (note that the modes are given unquoted):\\
1205 1205 append: well, that says it.\\
1206 1206 backup: rename (if exists) to name~ and start name.\\
1207 1207 global: single logfile in your home dir, appended to.\\
1208 1208 over : overwrite existing log.\\
1209 1209 rotate: create rotating logs name.1~, name.2~, etc.
1210 1210
1211 1211 Options:
1212 1212
1213 1213 -o: log also IPython's output. In this mode, all commands which
1214 1214 generate an Out[NN] prompt are recorded to the logfile, right after
1215 1215 their corresponding input line. The output lines are always
1216 1216 prepended with a '#[Out]# ' marker, so that the log remains valid
1217 1217 Python code.
1218 1218
1219 1219 Since this marker is always the same, filtering only the output from
1220 1220 a log is very easy, using for example a simple awk call::
1221 1221
1222 1222 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1223 1223
1224 1224 -r: log 'raw' input. Normally, IPython's logs contain the processed
1225 1225 input, so that user lines are logged in their final form, converted
1226 1226 into valid Python. For example, %Exit is logged as
1227 1227 _ip.magic("Exit"). If the -r flag is given, all input is logged
1228 1228 exactly as typed, with no transformations applied.
1229 1229
1230 1230 -t: put timestamps before each input line logged (these are put in
1231 1231 comments)."""
1232 1232
1233 1233 opts,par = self.parse_options(parameter_s,'ort')
1234 1234 log_output = 'o' in opts
1235 1235 log_raw_input = 'r' in opts
1236 1236 timestamp = 't' in opts
1237 1237
1238 1238 logger = self.shell.logger
1239 1239
1240 1240 # if no args are given, the defaults set in the logger constructor by
1241 1241 # ipython remain valid
1242 1242 if par:
1243 1243 try:
1244 1244 logfname,logmode = par.split()
1245 1245 except:
1246 1246 logfname = par
1247 1247 logmode = 'backup'
1248 1248 else:
1249 1249 logfname = logger.logfname
1250 1250 logmode = logger.logmode
1251 1251 # put logfname into rc struct as if it had been called on the command
1252 1252 # line, so it ends up saved in the log header Save it in case we need
1253 1253 # to restore it...
1254 1254 old_logfile = self.shell.logfile
1255 1255 if logfname:
1256 1256 logfname = os.path.expanduser(logfname)
1257 1257 self.shell.logfile = logfname
1258 1258
1259 1259 loghead = '# IPython log file\n\n'
1260 1260 try:
1261 1261 started = logger.logstart(logfname,loghead,logmode,
1262 1262 log_output,timestamp,log_raw_input)
1263 1263 except:
1264 1264 self.shell.logfile = old_logfile
1265 1265 warn("Couldn't start log: %s" % sys.exc_info()[1])
1266 1266 else:
1267 1267 # log input history up to this point, optionally interleaving
1268 1268 # output if requested
1269 1269
1270 1270 if timestamp:
1271 1271 # disable timestamping for the previous history, since we've
1272 1272 # lost those already (no time machine here).
1273 1273 logger.timestamp = False
1274 1274
1275 1275 if log_raw_input:
1276 1276 input_hist = self.shell.history_manager.input_hist_raw
1277 1277 else:
1278 1278 input_hist = self.shell.history_manager.input_hist_parsed
1279 1279
1280 1280 if log_output:
1281 1281 log_write = logger.log_write
1282 1282 output_hist = self.shell.history_manager.output_hist
1283 1283 for n in range(1,len(input_hist)-1):
1284 1284 log_write(input_hist[n].rstrip() + '\n')
1285 1285 if n in output_hist:
1286 1286 log_write(repr(output_hist[n]),'output')
1287 1287 else:
1288 1288 logger.log_write('\n'.join(input_hist[1:]))
1289 1289 logger.log_write('\n')
1290 1290 if timestamp:
1291 1291 # re-enable timestamping
1292 1292 logger.timestamp = True
1293 1293
1294 1294 print ('Activating auto-logging. '
1295 1295 'Current session state plus future input saved.')
1296 1296 logger.logstate()
1297 1297
1298 1298 def magic_logstop(self,parameter_s=''):
1299 1299 """Fully stop logging and close log file.
1300 1300
1301 1301 In order to start logging again, a new %logstart call needs to be made,
1302 1302 possibly (though not necessarily) with a new filename, mode and other
1303 1303 options."""
1304 1304 self.logger.logstop()
1305 1305
1306 1306 def magic_logoff(self,parameter_s=''):
1307 1307 """Temporarily stop logging.
1308 1308
1309 1309 You must have previously started logging."""
1310 1310 self.shell.logger.switch_log(0)
1311 1311
1312 1312 def magic_logon(self,parameter_s=''):
1313 1313 """Restart logging.
1314 1314
1315 1315 This function is for restarting logging which you've temporarily
1316 1316 stopped with %logoff. For starting logging for the first time, you
1317 1317 must use the %logstart function, which allows you to specify an
1318 1318 optional log filename."""
1319 1319
1320 1320 self.shell.logger.switch_log(1)
1321 1321
1322 1322 def magic_logstate(self,parameter_s=''):
1323 1323 """Print the status of the logging system."""
1324 1324
1325 1325 self.shell.logger.logstate()
1326 1326
1327 1327 def magic_pdb(self, parameter_s=''):
1328 1328 """Control the automatic calling of the pdb interactive debugger.
1329 1329
1330 1330 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1331 1331 argument it works as a toggle.
1332 1332
1333 1333 When an exception is triggered, IPython can optionally call the
1334 1334 interactive pdb debugger after the traceback printout. %pdb toggles
1335 1335 this feature on and off.
1336 1336
1337 1337 The initial state of this feature is set in your configuration
1338 1338 file (the option is ``InteractiveShell.pdb``).
1339 1339
1340 1340 If you want to just activate the debugger AFTER an exception has fired,
1341 1341 without having to type '%pdb on' and rerunning your code, you can use
1342 1342 the %debug magic."""
1343 1343
1344 1344 par = parameter_s.strip().lower()
1345 1345
1346 1346 if par:
1347 1347 try:
1348 1348 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1349 1349 except KeyError:
1350 1350 print ('Incorrect argument. Use on/1, off/0, '
1351 1351 'or nothing for a toggle.')
1352 1352 return
1353 1353 else:
1354 1354 # toggle
1355 1355 new_pdb = not self.shell.call_pdb
1356 1356
1357 1357 # set on the shell
1358 1358 self.shell.call_pdb = new_pdb
1359 1359 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1360 1360
1361 1361 def magic_debug(self, parameter_s=''):
1362 1362 """Activate the interactive debugger in post-mortem mode.
1363 1363
1364 1364 If an exception has just occurred, this lets you inspect its stack
1365 1365 frames interactively. Note that this will always work only on the last
1366 1366 traceback that occurred, so you must call this quickly after an
1367 1367 exception that you wish to inspect has fired, because if another one
1368 1368 occurs, it clobbers the previous one.
1369 1369
1370 1370 If you want IPython to automatically do this on every exception, see
1371 1371 the %pdb magic for more details.
1372 1372 """
1373 1373 self.shell.debugger(force=True)
1374 1374
1375 1375 @skip_doctest
1376 1376 def magic_prun(self, parameter_s ='',user_mode=1,
1377 1377 opts=None,arg_lst=None,prog_ns=None):
1378 1378
1379 1379 """Run a statement through the python code profiler.
1380 1380
1381 1381 Usage:
1382 1382 %prun [options] statement
1383 1383
1384 1384 The given statement (which doesn't require quote marks) is run via the
1385 1385 python profiler in a manner similar to the profile.run() function.
1386 1386 Namespaces are internally managed to work correctly; profile.run
1387 1387 cannot be used in IPython because it makes certain assumptions about
1388 1388 namespaces which do not hold under IPython.
1389 1389
1390 1390 Options:
1391 1391
1392 1392 -l <limit>: you can place restrictions on what or how much of the
1393 1393 profile gets printed. The limit value can be:
1394 1394
1395 1395 * A string: only information for function names containing this string
1396 1396 is printed.
1397 1397
1398 1398 * An integer: only these many lines are printed.
1399 1399
1400 1400 * A float (between 0 and 1): this fraction of the report is printed
1401 1401 (for example, use a limit of 0.4 to see the topmost 40% only).
1402 1402
1403 1403 You can combine several limits with repeated use of the option. For
1404 1404 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1405 1405 information about class constructors.
1406 1406
1407 1407 -r: return the pstats.Stats object generated by the profiling. This
1408 1408 object has all the information about the profile in it, and you can
1409 1409 later use it for further analysis or in other functions.
1410 1410
1411 1411 -s <key>: sort profile by given key. You can provide more than one key
1412 1412 by using the option several times: '-s key1 -s key2 -s key3...'. The
1413 1413 default sorting key is 'time'.
1414 1414
1415 1415 The following is copied verbatim from the profile documentation
1416 1416 referenced below:
1417 1417
1418 1418 When more than one key is provided, additional keys are used as
1419 1419 secondary criteria when the there is equality in all keys selected
1420 1420 before them.
1421 1421
1422 1422 Abbreviations can be used for any key names, as long as the
1423 1423 abbreviation is unambiguous. The following are the keys currently
1424 1424 defined:
1425 1425
1426 1426 Valid Arg Meaning
1427 1427 "calls" call count
1428 1428 "cumulative" cumulative time
1429 1429 "file" file name
1430 1430 "module" file name
1431 1431 "pcalls" primitive call count
1432 1432 "line" line number
1433 1433 "name" function name
1434 1434 "nfl" name/file/line
1435 1435 "stdname" standard name
1436 1436 "time" internal time
1437 1437
1438 1438 Note that all sorts on statistics are in descending order (placing
1439 1439 most time consuming items first), where as name, file, and line number
1440 1440 searches are in ascending order (i.e., alphabetical). The subtle
1441 1441 distinction between "nfl" and "stdname" is that the standard name is a
1442 1442 sort of the name as printed, which means that the embedded line
1443 1443 numbers get compared in an odd way. For example, lines 3, 20, and 40
1444 1444 would (if the file names were the same) appear in the string order
1445 1445 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1446 1446 line numbers. In fact, sort_stats("nfl") is the same as
1447 1447 sort_stats("name", "file", "line").
1448 1448
1449 1449 -T <filename>: save profile results as shown on screen to a text
1450 1450 file. The profile is still shown on screen.
1451 1451
1452 1452 -D <filename>: save (via dump_stats) profile statistics to given
1453 1453 filename. This data is in a format understood by the pstats module, and
1454 1454 is generated by a call to the dump_stats() method of profile
1455 1455 objects. The profile is still shown on screen.
1456 1456
1457 1457 -q: suppress output to the pager. Best used with -T and/or -D above.
1458 1458
1459 1459 If you want to run complete programs under the profiler's control, use
1460 1460 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1461 1461 contains profiler specific options as described here.
1462 1462
1463 1463 You can read the complete documentation for the profile module with::
1464 1464
1465 1465 In [1]: import profile; profile.help()
1466 1466 """
1467 1467
1468 1468 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1469 1469
1470 1470 if user_mode: # regular user call
1471 1471 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:q',
1472 1472 list_all=1, posix=False)
1473 1473 namespace = self.shell.user_ns
1474 1474 else: # called to run a program by %run -p
1475 1475 try:
1476 1476 filename = get_py_filename(arg_lst[0])
1477 1477 except IOError as e:
1478 1478 try:
1479 1479 msg = str(e)
1480 1480 except UnicodeError:
1481 1481 msg = e.message
1482 1482 error(msg)
1483 1483 return
1484 1484
1485 1485 arg_str = 'execfile(filename,prog_ns)'
1486 1486 namespace = {
1487 1487 'execfile': self.shell.safe_execfile,
1488 1488 'prog_ns': prog_ns,
1489 1489 'filename': filename
1490 1490 }
1491 1491
1492 1492 opts.merge(opts_def)
1493 1493
1494 1494 prof = profile.Profile()
1495 1495 try:
1496 1496 prof = prof.runctx(arg_str,namespace,namespace)
1497 1497 sys_exit = ''
1498 1498 except SystemExit:
1499 1499 sys_exit = """*** SystemExit exception caught in code being profiled."""
1500 1500
1501 1501 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1502 1502
1503 1503 lims = opts.l
1504 1504 if lims:
1505 1505 lims = [] # rebuild lims with ints/floats/strings
1506 1506 for lim in opts.l:
1507 1507 try:
1508 1508 lims.append(int(lim))
1509 1509 except ValueError:
1510 1510 try:
1511 1511 lims.append(float(lim))
1512 1512 except ValueError:
1513 1513 lims.append(lim)
1514 1514
1515 1515 # Trap output.
1516 1516 stdout_trap = StringIO()
1517 1517
1518 1518 if hasattr(stats,'stream'):
1519 1519 # In newer versions of python, the stats object has a 'stream'
1520 1520 # attribute to write into.
1521 1521 stats.stream = stdout_trap
1522 1522 stats.print_stats(*lims)
1523 1523 else:
1524 1524 # For older versions, we manually redirect stdout during printing
1525 1525 sys_stdout = sys.stdout
1526 1526 try:
1527 1527 sys.stdout = stdout_trap
1528 1528 stats.print_stats(*lims)
1529 1529 finally:
1530 1530 sys.stdout = sys_stdout
1531 1531
1532 1532 output = stdout_trap.getvalue()
1533 1533 output = output.rstrip()
1534 1534
1535 1535 if 'q' not in opts:
1536 1536 page.page(output)
1537 1537 print sys_exit,
1538 1538
1539 1539 dump_file = opts.D[0]
1540 1540 text_file = opts.T[0]
1541 1541 if dump_file:
1542 1542 dump_file = unquote_filename(dump_file)
1543 1543 prof.dump_stats(dump_file)
1544 1544 print '\n*** Profile stats marshalled to file',\
1545 1545 `dump_file`+'.',sys_exit
1546 1546 if text_file:
1547 1547 text_file = unquote_filename(text_file)
1548 1548 pfile = open(text_file,'w')
1549 1549 pfile.write(output)
1550 1550 pfile.close()
1551 1551 print '\n*** Profile printout saved to text file',\
1552 1552 `text_file`+'.',sys_exit
1553 1553
1554 1554 if opts.has_key('r'):
1555 1555 return stats
1556 1556 else:
1557 1557 return None
1558 1558
1559 1559 @skip_doctest
1560 1560 def magic_run(self, parameter_s ='', runner=None,
1561 1561 file_finder=get_py_filename):
1562 1562 """Run the named file inside IPython as a program.
1563 1563
1564 1564 Usage:\\
1565 1565 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1566 1566
1567 1567 Parameters after the filename are passed as command-line arguments to
1568 1568 the program (put in sys.argv). Then, control returns to IPython's
1569 1569 prompt.
1570 1570
1571 1571 This is similar to running at a system prompt:\\
1572 1572 $ python file args\\
1573 1573 but with the advantage of giving you IPython's tracebacks, and of
1574 1574 loading all variables into your interactive namespace for further use
1575 1575 (unless -p is used, see below).
1576 1576
1577 1577 The file is executed in a namespace initially consisting only of
1578 1578 __name__=='__main__' and sys.argv constructed as indicated. It thus
1579 1579 sees its environment as if it were being run as a stand-alone program
1580 1580 (except for sharing global objects such as previously imported
1581 1581 modules). But after execution, the IPython interactive namespace gets
1582 1582 updated with all variables defined in the program (except for __name__
1583 1583 and sys.argv). This allows for very convenient loading of code for
1584 1584 interactive work, while giving each program a 'clean sheet' to run in.
1585 1585
1586 1586 Options:
1587 1587
1588 1588 -n: __name__ is NOT set to '__main__', but to the running file's name
1589 1589 without extension (as python does under import). This allows running
1590 1590 scripts and reloading the definitions in them without calling code
1591 1591 protected by an ' if __name__ == "__main__" ' clause.
1592 1592
1593 1593 -i: run the file in IPython's namespace instead of an empty one. This
1594 1594 is useful if you are experimenting with code written in a text editor
1595 1595 which depends on variables defined interactively.
1596 1596
1597 1597 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1598 1598 being run. This is particularly useful if IPython is being used to
1599 1599 run unittests, which always exit with a sys.exit() call. In such
1600 1600 cases you are interested in the output of the test results, not in
1601 1601 seeing a traceback of the unittest module.
1602 1602
1603 1603 -t: print timing information at the end of the run. IPython will give
1604 1604 you an estimated CPU time consumption for your script, which under
1605 1605 Unix uses the resource module to avoid the wraparound problems of
1606 1606 time.clock(). Under Unix, an estimate of time spent on system tasks
1607 1607 is also given (for Windows platforms this is reported as 0.0).
1608 1608
1609 1609 If -t is given, an additional -N<N> option can be given, where <N>
1610 1610 must be an integer indicating how many times you want the script to
1611 1611 run. The final timing report will include total and per run results.
1612 1612
1613 1613 For example (testing the script uniq_stable.py)::
1614 1614
1615 1615 In [1]: run -t uniq_stable
1616 1616
1617 1617 IPython CPU timings (estimated):\\
1618 1618 User : 0.19597 s.\\
1619 1619 System: 0.0 s.\\
1620 1620
1621 1621 In [2]: run -t -N5 uniq_stable
1622 1622
1623 1623 IPython CPU timings (estimated):\\
1624 1624 Total runs performed: 5\\
1625 1625 Times : Total Per run\\
1626 1626 User : 0.910862 s, 0.1821724 s.\\
1627 1627 System: 0.0 s, 0.0 s.
1628 1628
1629 1629 -d: run your program under the control of pdb, the Python debugger.
1630 1630 This allows you to execute your program step by step, watch variables,
1631 1631 etc. Internally, what IPython does is similar to calling:
1632 1632
1633 1633 pdb.run('execfile("YOURFILENAME")')
1634 1634
1635 1635 with a breakpoint set on line 1 of your file. You can change the line
1636 1636 number for this automatic breakpoint to be <N> by using the -bN option
1637 1637 (where N must be an integer). For example::
1638 1638
1639 1639 %run -d -b40 myscript
1640 1640
1641 1641 will set the first breakpoint at line 40 in myscript.py. Note that
1642 1642 the first breakpoint must be set on a line which actually does
1643 1643 something (not a comment or docstring) for it to stop execution.
1644 1644
1645 1645 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1646 1646 first enter 'c' (without quotes) to start execution up to the first
1647 1647 breakpoint.
1648 1648
1649 1649 Entering 'help' gives information about the use of the debugger. You
1650 1650 can easily see pdb's full documentation with "import pdb;pdb.help()"
1651 1651 at a prompt.
1652 1652
1653 1653 -p: run program under the control of the Python profiler module (which
1654 1654 prints a detailed report of execution times, function calls, etc).
1655 1655
1656 1656 You can pass other options after -p which affect the behavior of the
1657 1657 profiler itself. See the docs for %prun for details.
1658 1658
1659 1659 In this mode, the program's variables do NOT propagate back to the
1660 1660 IPython interactive namespace (because they remain in the namespace
1661 1661 where the profiler executes them).
1662 1662
1663 1663 Internally this triggers a call to %prun, see its documentation for
1664 1664 details on the options available specifically for profiling.
1665 1665
1666 1666 There is one special usage for which the text above doesn't apply:
1667 1667 if the filename ends with .ipy, the file is run as ipython script,
1668 1668 just as if the commands were written on IPython prompt.
1669 1669
1670 1670 -m: specify module name to load instead of script path. Similar to
1671 1671 the -m option for the python interpreter. Use this option last if you
1672 1672 want to combine with other %run options. Unlike the python interpreter
1673 1673 only source modules are allowed no .pyc or .pyo files.
1674 1674 For example::
1675 1675
1676 1676 %run -m example
1677 1677
1678 1678 will run the example module.
1679 1679
1680 1680 """
1681 1681
1682 1682 # get arguments and set sys.argv for program to be run.
1683 1683 opts, arg_lst = self.parse_options(parameter_s, 'nidtN:b:pD:l:rs:T:em:',
1684 1684 mode='list', list_all=1)
1685 1685 if "m" in opts:
1686 1686 modulename = opts["m"][0]
1687 1687 modpath = find_mod(modulename)
1688 1688 if modpath is None:
1689 1689 warn('%r is not a valid modulename on sys.path'%modulename)
1690 1690 return
1691 1691 arg_lst = [modpath] + arg_lst
1692 1692 try:
1693 1693 filename = file_finder(arg_lst[0])
1694 1694 except IndexError:
1695 1695 warn('you must provide at least a filename.')
1696 1696 print '\n%run:\n', oinspect.getdoc(self.magic_run)
1697 1697 return
1698 1698 except IOError as e:
1699 1699 try:
1700 1700 msg = str(e)
1701 1701 except UnicodeError:
1702 1702 msg = e.message
1703 1703 error(msg)
1704 1704 return
1705 1705
1706 1706 if filename.lower().endswith('.ipy'):
1707 1707 self.shell.safe_execfile_ipy(filename)
1708 1708 return
1709 1709
1710 1710 # Control the response to exit() calls made by the script being run
1711 1711 exit_ignore = 'e' in opts
1712 1712
1713 1713 # Make sure that the running script gets a proper sys.argv as if it
1714 1714 # were run from a system shell.
1715 1715 save_argv = sys.argv # save it for later restoring
1716 1716
1717 1717 # simulate shell expansion on arguments, at least tilde expansion
1718 1718 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
1719 1719
1720 1720 sys.argv = [filename] + args # put in the proper filename
1721 1721 # protect sys.argv from potential unicode strings on Python 2:
1722 1722 if not py3compat.PY3:
1723 1723 sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ]
1724 1724
1725 1725 if 'i' in opts:
1726 1726 # Run in user's interactive namespace
1727 1727 prog_ns = self.shell.user_ns
1728 1728 __name__save = self.shell.user_ns['__name__']
1729 1729 prog_ns['__name__'] = '__main__'
1730 1730 main_mod = self.shell.new_main_mod(prog_ns)
1731 1731 else:
1732 1732 # Run in a fresh, empty namespace
1733 1733 if 'n' in opts:
1734 1734 name = os.path.splitext(os.path.basename(filename))[0]
1735 1735 else:
1736 1736 name = '__main__'
1737 1737
1738 1738 main_mod = self.shell.new_main_mod()
1739 1739 prog_ns = main_mod.__dict__
1740 1740 prog_ns['__name__'] = name
1741 1741
1742 1742 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1743 1743 # set the __file__ global in the script's namespace
1744 1744 prog_ns['__file__'] = filename
1745 1745
1746 1746 # pickle fix. See interactiveshell for an explanation. But we need to make sure
1747 1747 # that, if we overwrite __main__, we replace it at the end
1748 1748 main_mod_name = prog_ns['__name__']
1749 1749
1750 1750 if main_mod_name == '__main__':
1751 1751 restore_main = sys.modules['__main__']
1752 1752 else:
1753 1753 restore_main = False
1754 1754
1755 1755 # This needs to be undone at the end to prevent holding references to
1756 1756 # every single object ever created.
1757 1757 sys.modules[main_mod_name] = main_mod
1758 1758
1759 1759 try:
1760 1760 stats = None
1761 1761 with self.readline_no_record:
1762 1762 if 'p' in opts:
1763 1763 stats = self.magic_prun('', 0, opts, arg_lst, prog_ns)
1764 1764 else:
1765 1765 if 'd' in opts:
1766 1766 deb = debugger.Pdb(self.shell.colors)
1767 1767 # reset Breakpoint state, which is moronically kept
1768 1768 # in a class
1769 1769 bdb.Breakpoint.next = 1
1770 1770 bdb.Breakpoint.bplist = {}
1771 1771 bdb.Breakpoint.bpbynumber = [None]
1772 1772 # Set an initial breakpoint to stop execution
1773 1773 maxtries = 10
1774 1774 bp = int(opts.get('b', [1])[0])
1775 1775 checkline = deb.checkline(filename, bp)
1776 1776 if not checkline:
1777 1777 for bp in range(bp + 1, bp + maxtries + 1):
1778 1778 if deb.checkline(filename, bp):
1779 1779 break
1780 1780 else:
1781 1781 msg = ("\nI failed to find a valid line to set "
1782 1782 "a breakpoint\n"
1783 1783 "after trying up to line: %s.\n"
1784 1784 "Please set a valid breakpoint manually "
1785 1785 "with the -b option." % bp)
1786 1786 error(msg)
1787 1787 return
1788 1788 # if we find a good linenumber, set the breakpoint
1789 1789 deb.do_break('%s:%s' % (filename, bp))
1790 1790 # Start file run
1791 1791 print "NOTE: Enter 'c' at the",
1792 1792 print "%s prompt to start your script." % deb.prompt
1793 1793 ns = {'execfile': py3compat.execfile, 'prog_ns': prog_ns}
1794 1794 try:
1795 1795 deb.run('execfile("%s", prog_ns)' % filename, ns)
1796 1796
1797 1797 except:
1798 1798 etype, value, tb = sys.exc_info()
1799 1799 # Skip three frames in the traceback: the %run one,
1800 1800 # one inside bdb.py, and the command-line typed by the
1801 1801 # user (run by exec in pdb itself).
1802 1802 self.shell.InteractiveTB(etype, value, tb, tb_offset=3)
1803 1803 else:
1804 1804 if runner is None:
1805 1805 runner = self.shell.safe_execfile
1806 1806 if 't' in opts:
1807 1807 # timed execution
1808 1808 try:
1809 1809 nruns = int(opts['N'][0])
1810 1810 if nruns < 1:
1811 1811 error('Number of runs must be >=1')
1812 1812 return
1813 1813 except (KeyError):
1814 1814 nruns = 1
1815 1815 twall0 = time.time()
1816 1816 if nruns == 1:
1817 1817 t0 = clock2()
1818 1818 runner(filename, prog_ns, prog_ns,
1819 1819 exit_ignore=exit_ignore)
1820 1820 t1 = clock2()
1821 1821 t_usr = t1[0] - t0[0]
1822 1822 t_sys = t1[1] - t0[1]
1823 1823 print "\nIPython CPU timings (estimated):"
1824 1824 print " User : %10.2f s." % t_usr
1825 1825 print " System : %10.2f s." % t_sys
1826 1826 else:
1827 1827 runs = range(nruns)
1828 1828 t0 = clock2()
1829 1829 for nr in runs:
1830 1830 runner(filename, prog_ns, prog_ns,
1831 1831 exit_ignore=exit_ignore)
1832 1832 t1 = clock2()
1833 1833 t_usr = t1[0] - t0[0]
1834 1834 t_sys = t1[1] - t0[1]
1835 1835 print "\nIPython CPU timings (estimated):"
1836 1836 print "Total runs performed:", nruns
1837 1837 print " Times : %10.2f %10.2f" % ('Total', 'Per run')
1838 1838 print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns)
1839 1839 print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns)
1840 1840 twall1 = time.time()
1841 1841 print "Wall time: %10.2f s." % (twall1 - twall0)
1842 1842
1843 1843 else:
1844 1844 # regular execution
1845 1845 runner(filename, prog_ns, prog_ns, exit_ignore=exit_ignore)
1846 1846
1847 1847 if 'i' in opts:
1848 1848 self.shell.user_ns['__name__'] = __name__save
1849 1849 else:
1850 1850 # The shell MUST hold a reference to prog_ns so after %run
1851 1851 # exits, the python deletion mechanism doesn't zero it out
1852 1852 # (leaving dangling references).
1853 1853 self.shell.cache_main_mod(prog_ns, filename)
1854 1854 # update IPython interactive namespace
1855 1855
1856 1856 # Some forms of read errors on the file may mean the
1857 1857 # __name__ key was never set; using pop we don't have to
1858 1858 # worry about a possible KeyError.
1859 1859 prog_ns.pop('__name__', None)
1860 1860
1861 1861 self.shell.user_ns.update(prog_ns)
1862 1862 finally:
1863 1863 # It's a bit of a mystery why, but __builtins__ can change from
1864 1864 # being a module to becoming a dict missing some key data after
1865 1865 # %run. As best I can see, this is NOT something IPython is doing
1866 1866 # at all, and similar problems have been reported before:
1867 1867 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1868 1868 # Since this seems to be done by the interpreter itself, the best
1869 1869 # we can do is to at least restore __builtins__ for the user on
1870 1870 # exit.
1871 1871 self.shell.user_ns['__builtins__'] = builtin_mod
1872 1872
1873 1873 # Ensure key global structures are restored
1874 1874 sys.argv = save_argv
1875 1875 if restore_main:
1876 1876 sys.modules['__main__'] = restore_main
1877 1877 else:
1878 1878 # Remove from sys.modules the reference to main_mod we'd
1879 1879 # added. Otherwise it will trap references to objects
1880 1880 # contained therein.
1881 1881 del sys.modules[main_mod_name]
1882 1882
1883 1883 return stats
1884 1884
1885 1885 @skip_doctest
1886 1886 def magic_timeit(self, parameter_s =''):
1887 1887 """Time execution of a Python statement or expression
1888 1888
1889 1889 Usage:\\
1890 1890 %timeit [-n<N> -r<R> [-t|-c]] statement
1891 1891
1892 1892 Time execution of a Python statement or expression using the timeit
1893 1893 module.
1894 1894
1895 1895 Options:
1896 1896 -n<N>: execute the given statement <N> times in a loop. If this value
1897 1897 is not given, a fitting value is chosen.
1898 1898
1899 1899 -r<R>: repeat the loop iteration <R> times and take the best result.
1900 1900 Default: 3
1901 1901
1902 1902 -t: use time.time to measure the time, which is the default on Unix.
1903 1903 This function measures wall time.
1904 1904
1905 1905 -c: use time.clock to measure the time, which is the default on
1906 1906 Windows and measures wall time. On Unix, resource.getrusage is used
1907 1907 instead and returns the CPU user time.
1908 1908
1909 1909 -p<P>: use a precision of <P> digits to display the timing result.
1910 1910 Default: 3
1911 1911
1912 1912
1913 1913 Examples
1914 1914 --------
1915 1915 ::
1916 1916
1917 1917 In [1]: %timeit pass
1918 1918 10000000 loops, best of 3: 53.3 ns per loop
1919 1919
1920 1920 In [2]: u = None
1921 1921
1922 1922 In [3]: %timeit u is None
1923 1923 10000000 loops, best of 3: 184 ns per loop
1924 1924
1925 1925 In [4]: %timeit -r 4 u == None
1926 1926 1000000 loops, best of 4: 242 ns per loop
1927 1927
1928 1928 In [5]: import time
1929 1929
1930 1930 In [6]: %timeit -n1 time.sleep(2)
1931 1931 1 loops, best of 3: 2 s per loop
1932 1932
1933 1933
1934 1934 The times reported by %timeit will be slightly higher than those
1935 1935 reported by the timeit.py script when variables are accessed. This is
1936 1936 due to the fact that %timeit executes the statement in the namespace
1937 1937 of the shell, compared with timeit.py, which uses a single setup
1938 1938 statement to import function or create variables. Generally, the bias
1939 1939 does not matter as long as results from timeit.py are not mixed with
1940 1940 those from %timeit."""
1941 1941
1942 1942 import timeit
1943 1943 import math
1944 1944
1945 1945 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1946 1946 # certain terminals. Until we figure out a robust way of
1947 1947 # auto-detecting if the terminal can deal with it, use plain 'us' for
1948 1948 # microseconds. I am really NOT happy about disabling the proper
1949 1949 # 'micro' prefix, but crashing is worse... If anyone knows what the
1950 1950 # right solution for this is, I'm all ears...
1951 1951 #
1952 1952 # Note: using
1953 1953 #
1954 1954 # s = u'\xb5'
1955 1955 # s.encode(sys.getdefaultencoding())
1956 1956 #
1957 1957 # is not sufficient, as I've seen terminals where that fails but
1958 1958 # print s
1959 1959 #
1960 1960 # succeeds
1961 1961 #
1962 1962 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1963 1963
1964 1964 #units = [u"s", u"ms",u'\xb5',"ns"]
1965 1965 units = [u"s", u"ms",u'us',"ns"]
1966 1966
1967 1967 scaling = [1, 1e3, 1e6, 1e9]
1968 1968
1969 1969 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1970 1970 posix=False, strict=False)
1971 1971 if stmt == "":
1972 1972 return
1973 1973 timefunc = timeit.default_timer
1974 1974 number = int(getattr(opts, "n", 0))
1975 1975 repeat = int(getattr(opts, "r", timeit.default_repeat))
1976 1976 precision = int(getattr(opts, "p", 3))
1977 1977 if hasattr(opts, "t"):
1978 1978 timefunc = time.time
1979 1979 if hasattr(opts, "c"):
1980 1980 timefunc = clock
1981 1981
1982 1982 timer = timeit.Timer(timer=timefunc)
1983 1983 # this code has tight coupling to the inner workings of timeit.Timer,
1984 1984 # but is there a better way to achieve that the code stmt has access
1985 1985 # to the shell namespace?
1986 1986
1987 1987 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1988 1988 'setup': "pass"}
1989 1989 # Track compilation time so it can be reported if too long
1990 1990 # Minimum time above which compilation time will be reported
1991 1991 tc_min = 0.1
1992 1992
1993 1993 t0 = clock()
1994 1994 code = compile(src, "<magic-timeit>", "exec")
1995 1995 tc = clock()-t0
1996 1996
1997 1997 ns = {}
1998 1998 exec code in self.shell.user_ns, ns
1999 1999 timer.inner = ns["inner"]
2000 2000
2001 2001 if number == 0:
2002 2002 # determine number so that 0.2 <= total time < 2.0
2003 2003 number = 1
2004 2004 for i in range(1, 10):
2005 2005 if timer.timeit(number) >= 0.2:
2006 2006 break
2007 2007 number *= 10
2008 2008
2009 2009 best = min(timer.repeat(repeat, number)) / number
2010 2010
2011 2011 if best > 0.0 and best < 1000.0:
2012 2012 order = min(-int(math.floor(math.log10(best)) // 3), 3)
2013 2013 elif best >= 1000.0:
2014 2014 order = 0
2015 2015 else:
2016 2016 order = 3
2017 2017 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
2018 2018 precision,
2019 2019 best * scaling[order],
2020 2020 units[order])
2021 2021 if tc > tc_min:
2022 2022 print "Compiler time: %.2f s" % tc
2023 2023
2024 2024 @skip_doctest
2025 2025 @needs_local_scope
2026 2026 def magic_time(self,parameter_s = ''):
2027 2027 """Time execution of a Python statement or expression.
2028 2028
2029 2029 The CPU and wall clock times are printed, and the value of the
2030 2030 expression (if any) is returned. Note that under Win32, system time
2031 2031 is always reported as 0, since it can not be measured.
2032 2032
2033 2033 This function provides very basic timing functionality. In Python
2034 2034 2.3, the timeit module offers more control and sophistication, so this
2035 2035 could be rewritten to use it (patches welcome).
2036 2036
2037 2037 Examples
2038 2038 --------
2039 2039 ::
2040 2040
2041 2041 In [1]: time 2**128
2042 2042 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2043 2043 Wall time: 0.00
2044 2044 Out[1]: 340282366920938463463374607431768211456L
2045 2045
2046 2046 In [2]: n = 1000000
2047 2047
2048 2048 In [3]: time sum(range(n))
2049 2049 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
2050 2050 Wall time: 1.37
2051 2051 Out[3]: 499999500000L
2052 2052
2053 2053 In [4]: time print 'hello world'
2054 2054 hello world
2055 2055 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2056 2056 Wall time: 0.00
2057 2057
2058 2058 Note that the time needed by Python to compile the given expression
2059 2059 will be reported if it is more than 0.1s. In this example, the
2060 2060 actual exponentiation is done by Python at compilation time, so while
2061 2061 the expression can take a noticeable amount of time to compute, that
2062 2062 time is purely due to the compilation:
2063 2063
2064 2064 In [5]: time 3**9999;
2065 2065 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2066 2066 Wall time: 0.00 s
2067 2067
2068 2068 In [6]: time 3**999999;
2069 2069 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2070 2070 Wall time: 0.00 s
2071 2071 Compiler : 0.78 s
2072 2072 """
2073 2073
2074 2074 # fail immediately if the given expression can't be compiled
2075 2075
2076 2076 expr = self.shell.prefilter(parameter_s,False)
2077 2077
2078 2078 # Minimum time above which compilation time will be reported
2079 2079 tc_min = 0.1
2080 2080
2081 2081 try:
2082 2082 mode = 'eval'
2083 2083 t0 = clock()
2084 2084 code = compile(expr,'<timed eval>',mode)
2085 2085 tc = clock()-t0
2086 2086 except SyntaxError:
2087 2087 mode = 'exec'
2088 2088 t0 = clock()
2089 2089 code = compile(expr,'<timed exec>',mode)
2090 2090 tc = clock()-t0
2091 2091 # skew measurement as little as possible
2092 2092 glob = self.shell.user_ns
2093 2093 locs = self._magic_locals
2094 2094 clk = clock2
2095 2095 wtime = time.time
2096 2096 # time execution
2097 2097 wall_st = wtime()
2098 2098 if mode=='eval':
2099 2099 st = clk()
2100 2100 out = eval(code, glob, locs)
2101 2101 end = clk()
2102 2102 else:
2103 2103 st = clk()
2104 2104 exec code in glob, locs
2105 2105 end = clk()
2106 2106 out = None
2107 2107 wall_end = wtime()
2108 2108 # Compute actual times and report
2109 2109 wall_time = wall_end-wall_st
2110 2110 cpu_user = end[0]-st[0]
2111 2111 cpu_sys = end[1]-st[1]
2112 2112 cpu_tot = cpu_user+cpu_sys
2113 2113 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
2114 2114 (cpu_user,cpu_sys,cpu_tot)
2115 2115 print "Wall time: %.2f s" % wall_time
2116 2116 if tc > tc_min:
2117 2117 print "Compiler : %.2f s" % tc
2118 2118 return out
2119 2119
2120 2120 @skip_doctest
2121 2121 def magic_macro(self,parameter_s = ''):
2122 2122 """Define a macro for future re-execution. It accepts ranges of history,
2123 2123 filenames or string objects.
2124 2124
2125 2125 Usage:\\
2126 2126 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
2127 2127
2128 2128 Options:
2129 2129
2130 2130 -r: use 'raw' input. By default, the 'processed' history is used,
2131 2131 so that magics are loaded in their transformed version to valid
2132 2132 Python. If this option is given, the raw input as typed as the
2133 2133 command line is used instead.
2134 2134
2135 2135 This will define a global variable called `name` which is a string
2136 2136 made of joining the slices and lines you specify (n1,n2,... numbers
2137 2137 above) from your input history into a single string. This variable
2138 2138 acts like an automatic function which re-executes those lines as if
2139 2139 you had typed them. You just type 'name' at the prompt and the code
2140 2140 executes.
2141 2141
2142 2142 The syntax for indicating input ranges is described in %history.
2143 2143
2144 2144 Note: as a 'hidden' feature, you can also use traditional python slice
2145 2145 notation, where N:M means numbers N through M-1.
2146 2146
2147 2147 For example, if your history contains (%hist prints it)::
2148 2148
2149 2149 44: x=1
2150 2150 45: y=3
2151 2151 46: z=x+y
2152 2152 47: print x
2153 2153 48: a=5
2154 2154 49: print 'x',x,'y',y
2155 2155
2156 2156 you can create a macro with lines 44 through 47 (included) and line 49
2157 2157 called my_macro with::
2158 2158
2159 2159 In [55]: %macro my_macro 44-47 49
2160 2160
2161 2161 Now, typing `my_macro` (without quotes) will re-execute all this code
2162 2162 in one pass.
2163 2163
2164 2164 You don't need to give the line-numbers in order, and any given line
2165 2165 number can appear multiple times. You can assemble macros with any
2166 2166 lines from your input history in any order.
2167 2167
2168 2168 The macro is a simple object which holds its value in an attribute,
2169 2169 but IPython's display system checks for macros and executes them as
2170 2170 code instead of printing them when you type their name.
2171 2171
2172 2172 You can view a macro's contents by explicitly printing it with::
2173 2173
2174 2174 print macro_name
2175 2175
2176 2176 """
2177 2177 opts,args = self.parse_options(parameter_s,'r',mode='list')
2178 2178 if not args: # List existing macros
2179 2179 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2180 2180 isinstance(v, Macro))
2181 2181 if len(args) == 1:
2182 2182 raise UsageError(
2183 2183 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2184 2184 name, codefrom = args[0], " ".join(args[1:])
2185 2185
2186 2186 #print 'rng',ranges # dbg
2187 2187 try:
2188 2188 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2189 2189 except (ValueError, TypeError) as e:
2190 2190 print e.args[0]
2191 2191 return
2192 2192 macro = Macro(lines)
2193 2193 self.shell.define_macro(name, macro)
2194 2194 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2195 2195 print '=== Macro contents: ==='
2196 2196 print macro,
2197 2197
2198 2198 def magic_save(self,parameter_s = ''):
2199 2199 """Save a set of lines or a macro to a given filename.
2200 2200
2201 2201 Usage:\\
2202 2202 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2203 2203
2204 2204 Options:
2205 2205
2206 2206 -r: use 'raw' input. By default, the 'processed' history is used,
2207 2207 so that magics are loaded in their transformed version to valid
2208 2208 Python. If this option is given, the raw input as typed as the
2209 2209 command line is used instead.
2210 2210
2211 2211 This function uses the same syntax as %history for input ranges,
2212 2212 then saves the lines to the filename you specify.
2213 2213
2214 2214 It adds a '.py' extension to the file if you don't do so yourself, and
2215 2215 it asks for confirmation before overwriting existing files."""
2216 2216
2217 2217 opts,args = self.parse_options(parameter_s,'r',mode='list')
2218 2218 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
2219 2219 if not fname.endswith('.py'):
2220 2220 fname += '.py'
2221 2221 if os.path.isfile(fname):
2222 2222 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2223 2223 if ans.lower() not in ['y','yes']:
2224 2224 print 'Operation cancelled.'
2225 2225 return
2226 2226 try:
2227 2227 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
2228 2228 except (TypeError, ValueError) as e:
2229 2229 print e.args[0]
2230 2230 return
2231 2231 with io.open(fname,'w', encoding="utf-8") as f:
2232 2232 f.write(u"# coding: utf-8\n")
2233 2233 f.write(py3compat.cast_unicode(cmds))
2234 2234 print 'The following commands were written to file `%s`:' % fname
2235 2235 print cmds
2236 2236
2237 2237 def magic_pastebin(self, parameter_s = ''):
2238 2238 """Upload code to Github's Gist paste bin, returning the URL.
2239 2239
2240 2240 Usage:\\
2241 2241 %pastebin [-d "Custom description"] 1-7
2242 2242
2243 2243 The argument can be an input history range, a filename, or the name of a
2244 2244 string or macro.
2245 2245
2246 2246 Options:
2247 2247
2248 2248 -d: Pass a custom description for the gist. The default will say
2249 2249 "Pasted from IPython".
2250 2250 """
2251 2251 opts, args = self.parse_options(parameter_s, 'd:')
2252 2252
2253 2253 try:
2254 2254 code = self.shell.find_user_code(args)
2255 2255 except (ValueError, TypeError) as e:
2256 2256 print e.args[0]
2257 2257 return
2258 2258
2259 2259 post_data = json.dumps({
2260 2260 "description": opts.get('d', "Pasted from IPython"),
2261 2261 "public": True,
2262 2262 "files": {
2263 2263 "file1.py": {
2264 2264 "content": code
2265 2265 }
2266 2266 }
2267 2267 }).encode('utf-8')
2268 2268
2269 2269 response = urlopen("https://api.github.com/gists", post_data)
2270 2270 response_data = json.loads(response.read().decode('utf-8'))
2271 2271 return response_data['html_url']
2272 2272
2273 2273 def magic_loadpy(self, arg_s):
2274 2274 """Load a .py python script into the GUI console.
2275 2275
2276 2276 This magic command can either take a local filename or a url::
2277 2277
2278 2278 %loadpy myscript.py
2279 2279 %loadpy http://www.example.com/myscript.py
2280 2280 """
2281 2281 arg_s = unquote_filename(arg_s)
2282 2282 remote_url = arg_s.startswith(('http://', 'https://'))
2283 2283 local_url = not remote_url
2284 2284 if local_url and not arg_s.endswith('.py'):
2285 2285 # Local files must be .py; for remote URLs it's possible that the
2286 2286 # fetch URL doesn't have a .py in it (many servers have an opaque
2287 2287 # URL, such as scipy-central.org).
2288 2288 raise ValueError('%%loadpy only works with .py files: %s' % arg_s)
2289 2289
2290 2290 # openpy takes care of finding the source encoding (per PEP 263)
2291 2291 if remote_url:
2292 2292 contents = openpy.read_py_url(arg_s, skip_encoding_cookie=True)
2293 2293 else:
2294 2294 contents = openpy.read_py_file(arg_s, skip_encoding_cookie=True)
2295 2295
2296 2296 self.set_next_input(contents)
2297 2297
2298 2298 def _find_edit_target(self, args, opts, last_call):
2299 2299 """Utility method used by magic_edit to find what to edit."""
2300 2300
2301 2301 def make_filename(arg):
2302 2302 "Make a filename from the given args"
2303 2303 arg = unquote_filename(arg)
2304 2304 try:
2305 2305 filename = get_py_filename(arg)
2306 2306 except IOError:
2307 2307 # If it ends with .py but doesn't already exist, assume we want
2308 2308 # a new file.
2309 2309 if arg.endswith('.py'):
2310 2310 filename = arg
2311 2311 else:
2312 2312 filename = None
2313 2313 return filename
2314 2314
2315 2315 # Set a few locals from the options for convenience:
2316 2316 opts_prev = 'p' in opts
2317 2317 opts_raw = 'r' in opts
2318 2318
2319 2319 # custom exceptions
2320 2320 class DataIsObject(Exception): pass
2321 2321
2322 2322 # Default line number value
2323 2323 lineno = opts.get('n',None)
2324 2324
2325 2325 if opts_prev:
2326 2326 args = '_%s' % last_call[0]
2327 2327 if not self.shell.user_ns.has_key(args):
2328 2328 args = last_call[1]
2329 2329
2330 2330 # use last_call to remember the state of the previous call, but don't
2331 2331 # let it be clobbered by successive '-p' calls.
2332 2332 try:
2333 2333 last_call[0] = self.shell.displayhook.prompt_count
2334 2334 if not opts_prev:
2335 2335 last_call[1] = args
2336 2336 except:
2337 2337 pass
2338 2338
2339 2339 # by default this is done with temp files, except when the given
2340 2340 # arg is a filename
2341 2341 use_temp = True
2342 2342
2343 2343 data = ''
2344 2344
2345 2345 # First, see if the arguments should be a filename.
2346 2346 filename = make_filename(args)
2347 2347 if filename:
2348 2348 use_temp = False
2349 2349 elif args:
2350 2350 # Mode where user specifies ranges of lines, like in %macro.
2351 2351 data = self.extract_input_lines(args, opts_raw)
2352 2352 if not data:
2353 2353 try:
2354 2354 # Load the parameter given as a variable. If not a string,
2355 2355 # process it as an object instead (below)
2356 2356
2357 2357 #print '*** args',args,'type',type(args) # dbg
2358 2358 data = eval(args, self.shell.user_ns)
2359 2359 if not isinstance(data, basestring):
2360 2360 raise DataIsObject
2361 2361
2362 2362 except (NameError,SyntaxError):
2363 2363 # given argument is not a variable, try as a filename
2364 2364 filename = make_filename(args)
2365 2365 if filename is None:
2366 2366 warn("Argument given (%s) can't be found as a variable "
2367 2367 "or as a filename." % args)
2368 2368 return
2369 2369 use_temp = False
2370 2370
2371 2371 except DataIsObject:
2372 2372 # macros have a special edit function
2373 2373 if isinstance(data, Macro):
2374 2374 raise MacroToEdit(data)
2375 2375
2376 2376 # For objects, try to edit the file where they are defined
2377 2377 try:
2378 2378 filename = inspect.getabsfile(data)
2379 2379 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2380 2380 # class created by %edit? Try to find source
2381 2381 # by looking for method definitions instead, the
2382 2382 # __module__ in those classes is FakeModule.
2383 2383 attrs = [getattr(data, aname) for aname in dir(data)]
2384 2384 for attr in attrs:
2385 2385 if not inspect.ismethod(attr):
2386 2386 continue
2387 2387 filename = inspect.getabsfile(attr)
2388 2388 if filename and 'fakemodule' not in filename.lower():
2389 2389 # change the attribute to be the edit target instead
2390 2390 data = attr
2391 2391 break
2392 2392
2393 2393 datafile = 1
2394 2394 except TypeError:
2395 2395 filename = make_filename(args)
2396 2396 datafile = 1
2397 2397 warn('Could not find file where `%s` is defined.\n'
2398 2398 'Opening a file named `%s`' % (args,filename))
2399 2399 # Now, make sure we can actually read the source (if it was in
2400 2400 # a temp file it's gone by now).
2401 2401 if datafile:
2402 2402 try:
2403 2403 if lineno is None:
2404 2404 lineno = inspect.getsourcelines(data)[1]
2405 2405 except IOError:
2406 2406 filename = make_filename(args)
2407 2407 if filename is None:
2408 2408 warn('The file `%s` where `%s` was defined cannot '
2409 2409 'be read.' % (filename,data))
2410 2410 return
2411 2411 use_temp = False
2412 2412
2413 2413 if use_temp:
2414 2414 filename = self.shell.mktempfile(data)
2415 2415 print 'IPython will make a temporary file named:',filename
2416 2416
2417 2417 return filename, lineno, use_temp
2418 2418
2419 2419 def _edit_macro(self,mname,macro):
2420 2420 """open an editor with the macro data in a file"""
2421 2421 filename = self.shell.mktempfile(macro.value)
2422 2422 self.shell.hooks.editor(filename)
2423 2423
2424 2424 # and make a new macro object, to replace the old one
2425 2425 mfile = open(filename)
2426 2426 mvalue = mfile.read()
2427 2427 mfile.close()
2428 2428 self.shell.user_ns[mname] = Macro(mvalue)
2429 2429
2430 2430 def magic_ed(self,parameter_s=''):
2431 2431 """Alias to %edit."""
2432 2432 return self.magic_edit(parameter_s)
2433 2433
2434 2434 @skip_doctest
2435 2435 def magic_edit(self,parameter_s='',last_call=['','']):
2436 2436 """Bring up an editor and execute the resulting code.
2437 2437
2438 2438 Usage:
2439 2439 %edit [options] [args]
2440 2440
2441 2441 %edit runs IPython's editor hook. The default version of this hook is
2442 2442 set to call the editor specified by your $EDITOR environment variable.
2443 2443 If this isn't found, it will default to vi under Linux/Unix and to
2444 2444 notepad under Windows. See the end of this docstring for how to change
2445 2445 the editor hook.
2446 2446
2447 2447 You can also set the value of this editor via the
2448 2448 ``TerminalInteractiveShell.editor`` option in your configuration file.
2449 2449 This is useful if you wish to use a different editor from your typical
2450 2450 default with IPython (and for Windows users who typically don't set
2451 2451 environment variables).
2452 2452
2453 2453 This command allows you to conveniently edit multi-line code right in
2454 2454 your IPython session.
2455 2455
2456 2456 If called without arguments, %edit opens up an empty editor with a
2457 2457 temporary file and will execute the contents of this file when you
2458 2458 close it (don't forget to save it!).
2459 2459
2460 2460
2461 2461 Options:
2462 2462
2463 2463 -n <number>: open the editor at a specified line number. By default,
2464 2464 the IPython editor hook uses the unix syntax 'editor +N filename', but
2465 2465 you can configure this by providing your own modified hook if your
2466 2466 favorite editor supports line-number specifications with a different
2467 2467 syntax.
2468 2468
2469 2469 -p: this will call the editor with the same data as the previous time
2470 2470 it was used, regardless of how long ago (in your current session) it
2471 2471 was.
2472 2472
2473 2473 -r: use 'raw' input. This option only applies to input taken from the
2474 2474 user's history. By default, the 'processed' history is used, so that
2475 2475 magics are loaded in their transformed version to valid Python. If
2476 2476 this option is given, the raw input as typed as the command line is
2477 2477 used instead. When you exit the editor, it will be executed by
2478 2478 IPython's own processor.
2479 2479
2480 2480 -x: do not execute the edited code immediately upon exit. This is
2481 2481 mainly useful if you are editing programs which need to be called with
2482 2482 command line arguments, which you can then do using %run.
2483 2483
2484 2484
2485 2485 Arguments:
2486 2486
2487 2487 If arguments are given, the following possibilities exist:
2488 2488
2489 2489 - If the argument is a filename, IPython will load that into the
2490 2490 editor. It will execute its contents with execfile() when you exit,
2491 2491 loading any code in the file into your interactive namespace.
2492 2492
2493 2493 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
2494 2494 The syntax is the same as in the %history magic.
2495 2495
2496 2496 - If the argument is a string variable, its contents are loaded
2497 2497 into the editor. You can thus edit any string which contains
2498 2498 python code (including the result of previous edits).
2499 2499
2500 2500 - If the argument is the name of an object (other than a string),
2501 2501 IPython will try to locate the file where it was defined and open the
2502 2502 editor at the point where it is defined. You can use `%edit function`
2503 2503 to load an editor exactly at the point where 'function' is defined,
2504 2504 edit it and have the file be executed automatically.
2505 2505
2506 2506 - If the object is a macro (see %macro for details), this opens up your
2507 2507 specified editor with a temporary file containing the macro's data.
2508 2508 Upon exit, the macro is reloaded with the contents of the file.
2509 2509
2510 2510 Note: opening at an exact line is only supported under Unix, and some
2511 2511 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2512 2512 '+NUMBER' parameter necessary for this feature. Good editors like
2513 2513 (X)Emacs, vi, jed, pico and joe all do.
2514 2514
2515 2515 After executing your code, %edit will return as output the code you
2516 2516 typed in the editor (except when it was an existing file). This way
2517 2517 you can reload the code in further invocations of %edit as a variable,
2518 2518 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2519 2519 the output.
2520 2520
2521 2521 Note that %edit is also available through the alias %ed.
2522 2522
2523 2523 This is an example of creating a simple function inside the editor and
2524 2524 then modifying it. First, start up the editor::
2525 2525
2526 2526 In [1]: ed
2527 2527 Editing... done. Executing edited code...
2528 2528 Out[1]: 'def foo():\\n print "foo() was defined in an editing
2529 2529 session"\\n'
2530 2530
2531 2531 We can then call the function foo()::
2532 2532
2533 2533 In [2]: foo()
2534 2534 foo() was defined in an editing session
2535 2535
2536 2536 Now we edit foo. IPython automatically loads the editor with the
2537 2537 (temporary) file where foo() was previously defined::
2538 2538
2539 2539 In [3]: ed foo
2540 2540 Editing... done. Executing edited code...
2541 2541
2542 2542 And if we call foo() again we get the modified version::
2543 2543
2544 2544 In [4]: foo()
2545 2545 foo() has now been changed!
2546 2546
2547 2547 Here is an example of how to edit a code snippet successive
2548 2548 times. First we call the editor::
2549 2549
2550 2550 In [5]: ed
2551 2551 Editing... done. Executing edited code...
2552 2552 hello
2553 2553 Out[5]: "print 'hello'\\n"
2554 2554
2555 2555 Now we call it again with the previous output (stored in _)::
2556 2556
2557 2557 In [6]: ed _
2558 2558 Editing... done. Executing edited code...
2559 2559 hello world
2560 2560 Out[6]: "print 'hello world'\\n"
2561 2561
2562 2562 Now we call it with the output #8 (stored in _8, also as Out[8])::
2563 2563
2564 2564 In [7]: ed _8
2565 2565 Editing... done. Executing edited code...
2566 2566 hello again
2567 2567 Out[7]: "print 'hello again'\\n"
2568 2568
2569 2569
2570 2570 Changing the default editor hook:
2571 2571
2572 2572 If you wish to write your own editor hook, you can put it in a
2573 2573 configuration file which you load at startup time. The default hook
2574 2574 is defined in the IPython.core.hooks module, and you can use that as a
2575 2575 starting example for further modifications. That file also has
2576 2576 general instructions on how to set a new hook for use once you've
2577 2577 defined it."""
2578 2578 opts,args = self.parse_options(parameter_s,'prxn:')
2579 2579
2580 2580 try:
2581 2581 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
2582 2582 except MacroToEdit as e:
2583 2583 self._edit_macro(args, e.args[0])
2584 2584 return
2585 2585
2586 2586 # do actual editing here
2587 2587 print 'Editing...',
2588 2588 sys.stdout.flush()
2589 2589 try:
2590 2590 # Quote filenames that may have spaces in them
2591 2591 if ' ' in filename:
2592 2592 filename = "'%s'" % filename
2593 2593 self.shell.hooks.editor(filename,lineno)
2594 2594 except TryNext:
2595 2595 warn('Could not open editor')
2596 2596 return
2597 2597
2598 2598 # XXX TODO: should this be generalized for all string vars?
2599 2599 # For now, this is special-cased to blocks created by cpaste
2600 2600 if args.strip() == 'pasted_block':
2601 2601 self.shell.user_ns['pasted_block'] = file_read(filename)
2602 2602
2603 2603 if 'x' in opts: # -x prevents actual execution
2604 2604 print
2605 2605 else:
2606 2606 print 'done. Executing edited code...'
2607 2607 if 'r' in opts: # Untranslated IPython code
2608 2608 self.shell.run_cell(file_read(filename),
2609 2609 store_history=False)
2610 2610 else:
2611 2611 self.shell.safe_execfile(filename,self.shell.user_ns,
2612 2612 self.shell.user_ns)
2613 2613
2614 2614 if is_temp:
2615 2615 try:
2616 2616 return open(filename).read()
2617 2617 except IOError,msg:
2618 2618 if msg.filename == filename:
2619 2619 warn('File not found. Did you forget to save?')
2620 2620 return
2621 2621 else:
2622 2622 self.shell.showtraceback()
2623 2623
2624 2624 def magic_xmode(self,parameter_s = ''):
2625 2625 """Switch modes for the exception handlers.
2626 2626
2627 2627 Valid modes: Plain, Context and Verbose.
2628 2628
2629 2629 If called without arguments, acts as a toggle."""
2630 2630
2631 2631 def xmode_switch_err(name):
2632 2632 warn('Error changing %s exception modes.\n%s' %
2633 2633 (name,sys.exc_info()[1]))
2634 2634
2635 2635 shell = self.shell
2636 2636 new_mode = parameter_s.strip().capitalize()
2637 2637 try:
2638 2638 shell.InteractiveTB.set_mode(mode=new_mode)
2639 2639 print 'Exception reporting mode:',shell.InteractiveTB.mode
2640 2640 except:
2641 2641 xmode_switch_err('user')
2642 2642
2643 2643 def magic_colors(self,parameter_s = ''):
2644 2644 """Switch color scheme for prompts, info system and exception handlers.
2645 2645
2646 2646 Currently implemented schemes: NoColor, Linux, LightBG.
2647 2647
2648 2648 Color scheme names are not case-sensitive.
2649 2649
2650 2650 Examples
2651 2651 --------
2652 2652 To get a plain black and white terminal::
2653 2653
2654 2654 %colors nocolor
2655 2655 """
2656 2656
2657 2657 def color_switch_err(name):
2658 2658 warn('Error changing %s color schemes.\n%s' %
2659 2659 (name,sys.exc_info()[1]))
2660 2660
2661 2661
2662 2662 new_scheme = parameter_s.strip()
2663 2663 if not new_scheme:
2664 2664 raise UsageError(
2665 2665 "%colors: you must specify a color scheme. See '%colors?'")
2666 2666 return
2667 2667 # local shortcut
2668 2668 shell = self.shell
2669 2669
2670 2670 import IPython.utils.rlineimpl as readline
2671 2671
2672 2672 if not shell.colors_force and \
2673 2673 not readline.have_readline and sys.platform == "win32":
2674 2674 msg = """\
2675 2675 Proper color support under MS Windows requires the pyreadline library.
2676 2676 You can find it at:
2677 2677 http://ipython.org/pyreadline.html
2678 2678 Gary's readline needs the ctypes module, from:
2679 2679 http://starship.python.net/crew/theller/ctypes
2680 2680 (Note that ctypes is already part of Python versions 2.5 and newer).
2681 2681
2682 2682 Defaulting color scheme to 'NoColor'"""
2683 2683 new_scheme = 'NoColor'
2684 2684 warn(msg)
2685 2685
2686 2686 # readline option is 0
2687 2687 if not shell.colors_force and not shell.has_readline:
2688 2688 new_scheme = 'NoColor'
2689 2689
2690 2690 # Set prompt colors
2691 2691 try:
2692 2692 shell.prompt_manager.color_scheme = new_scheme
2693 2693 except:
2694 2694 color_switch_err('prompt')
2695 2695 else:
2696 2696 shell.colors = \
2697 2697 shell.prompt_manager.color_scheme_table.active_scheme_name
2698 2698 # Set exception colors
2699 2699 try:
2700 2700 shell.InteractiveTB.set_colors(scheme = new_scheme)
2701 2701 shell.SyntaxTB.set_colors(scheme = new_scheme)
2702 2702 except:
2703 2703 color_switch_err('exception')
2704 2704
2705 2705 # Set info (for 'object?') colors
2706 2706 if shell.color_info:
2707 2707 try:
2708 2708 shell.inspector.set_active_scheme(new_scheme)
2709 2709 except:
2710 2710 color_switch_err('object inspector')
2711 2711 else:
2712 2712 shell.inspector.set_active_scheme('NoColor')
2713 2713
2714 2714 def magic_pprint(self, parameter_s=''):
2715 2715 """Toggle pretty printing on/off."""
2716 2716 ptformatter = self.shell.display_formatter.formatters['text/plain']
2717 2717 ptformatter.pprint = bool(1 - ptformatter.pprint)
2718 2718 print 'Pretty printing has been turned', \
2719 2719 ['OFF','ON'][ptformatter.pprint]
2720 2720
2721 2721 #......................................................................
2722 2722 # Functions to implement unix shell-type things
2723 2723
2724 2724 @skip_doctest
2725 2725 def magic_alias(self, parameter_s = ''):
2726 2726 """Define an alias for a system command.
2727 2727
2728 2728 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2729 2729
2730 2730 Then, typing 'alias_name params' will execute the system command 'cmd
2731 2731 params' (from your underlying operating system).
2732 2732
2733 2733 Aliases have lower precedence than magic functions and Python normal
2734 2734 variables, so if 'foo' is both a Python variable and an alias, the
2735 2735 alias can not be executed until 'del foo' removes the Python variable.
2736 2736
2737 2737 You can use the %l specifier in an alias definition to represent the
2738 2738 whole line when the alias is called. For example::
2739 2739
2740 2740 In [2]: alias bracket echo "Input in brackets: <%l>"
2741 2741 In [3]: bracket hello world
2742 2742 Input in brackets: <hello world>
2743 2743
2744 2744 You can also define aliases with parameters using %s specifiers (one
2745 2745 per parameter)::
2746 2746
2747 2747 In [1]: alias parts echo first %s second %s
2748 2748 In [2]: %parts A B
2749 2749 first A second B
2750 2750 In [3]: %parts A
2751 2751 Incorrect number of arguments: 2 expected.
2752 2752 parts is an alias to: 'echo first %s second %s'
2753 2753
2754 2754 Note that %l and %s are mutually exclusive. You can only use one or
2755 2755 the other in your aliases.
2756 2756
2757 2757 Aliases expand Python variables just like system calls using ! or !!
2758 2758 do: all expressions prefixed with '$' get expanded. For details of
2759 2759 the semantic rules, see PEP-215:
2760 2760 http://www.python.org/peps/pep-0215.html. This is the library used by
2761 2761 IPython for variable expansion. If you want to access a true shell
2762 2762 variable, an extra $ is necessary to prevent its expansion by
2763 2763 IPython::
2764 2764
2765 2765 In [6]: alias show echo
2766 2766 In [7]: PATH='A Python string'
2767 2767 In [8]: show $PATH
2768 2768 A Python string
2769 2769 In [9]: show $$PATH
2770 2770 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2771 2771
2772 2772 You can use the alias facility to acess all of $PATH. See the %rehash
2773 2773 and %rehashx functions, which automatically create aliases for the
2774 2774 contents of your $PATH.
2775 2775
2776 2776 If called with no parameters, %alias prints the current alias table."""
2777 2777
2778 2778 par = parameter_s.strip()
2779 2779 if not par:
2780 2780 stored = self.db.get('stored_aliases', {} )
2781 2781 aliases = sorted(self.shell.alias_manager.aliases)
2782 2782 # for k, v in stored:
2783 2783 # atab.append(k, v[0])
2784 2784
2785 2785 print "Total number of aliases:", len(aliases)
2786 2786 sys.stdout.flush()
2787 2787 return aliases
2788 2788
2789 2789 # Now try to define a new one
2790 2790 try:
2791 2791 alias,cmd = par.split(None, 1)
2792 2792 except:
2793 2793 print oinspect.getdoc(self.magic_alias)
2794 2794 else:
2795 2795 self.shell.alias_manager.soft_define_alias(alias, cmd)
2796 2796 # end magic_alias
2797 2797
2798 2798 def magic_unalias(self, parameter_s = ''):
2799 2799 """Remove an alias"""
2800 2800
2801 2801 aname = parameter_s.strip()
2802 2802 self.shell.alias_manager.undefine_alias(aname)
2803 2803 stored = self.db.get('stored_aliases', {} )
2804 2804 if aname in stored:
2805 2805 print "Removing %stored alias",aname
2806 2806 del stored[aname]
2807 2807 self.db['stored_aliases'] = stored
2808 2808
2809 2809 def magic_rehashx(self, parameter_s = ''):
2810 2810 """Update the alias table with all executable files in $PATH.
2811 2811
2812 2812 This version explicitly checks that every entry in $PATH is a file
2813 2813 with execute access (os.X_OK), so it is much slower than %rehash.
2814 2814
2815 2815 Under Windows, it checks executability as a match against a
2816 2816 '|'-separated string of extensions, stored in the IPython config
2817 2817 variable win_exec_ext. This defaults to 'exe|com|bat'.
2818 2818
2819 2819 This function also resets the root module cache of module completer,
2820 2820 used on slow filesystems.
2821 2821 """
2822 2822 from IPython.core.alias import InvalidAliasError
2823 2823
2824 2824 # for the benefit of module completer in ipy_completers.py
2825 2825 del self.shell.db['rootmodules']
2826 2826
2827 2827 path = [os.path.abspath(os.path.expanduser(p)) for p in
2828 2828 os.environ.get('PATH','').split(os.pathsep)]
2829 2829 path = filter(os.path.isdir,path)
2830 2830
2831 2831 syscmdlist = []
2832 2832 # Now define isexec in a cross platform manner.
2833 2833 if os.name == 'posix':
2834 2834 isexec = lambda fname:os.path.isfile(fname) and \
2835 2835 os.access(fname,os.X_OK)
2836 2836 else:
2837 2837 try:
2838 2838 winext = os.environ['pathext'].replace(';','|').replace('.','')
2839 2839 except KeyError:
2840 2840 winext = 'exe|com|bat|py'
2841 2841 if 'py' not in winext:
2842 2842 winext += '|py'
2843 2843 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2844 2844 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2845 2845 savedir = os.getcwdu()
2846 2846
2847 2847 # Now walk the paths looking for executables to alias.
2848 2848 try:
2849 2849 # write the whole loop for posix/Windows so we don't have an if in
2850 2850 # the innermost part
2851 2851 if os.name == 'posix':
2852 2852 for pdir in path:
2853 2853 os.chdir(pdir)
2854 2854 for ff in os.listdir(pdir):
2855 2855 if isexec(ff):
2856 2856 try:
2857 2857 # Removes dots from the name since ipython
2858 2858 # will assume names with dots to be python.
2859 2859 self.shell.alias_manager.define_alias(
2860 2860 ff.replace('.',''), ff)
2861 2861 except InvalidAliasError:
2862 2862 pass
2863 2863 else:
2864 2864 syscmdlist.append(ff)
2865 2865 else:
2866 2866 no_alias = self.shell.alias_manager.no_alias
2867 2867 for pdir in path:
2868 2868 os.chdir(pdir)
2869 2869 for ff in os.listdir(pdir):
2870 2870 base, ext = os.path.splitext(ff)
2871 2871 if isexec(ff) and base.lower() not in no_alias:
2872 2872 if ext.lower() == '.exe':
2873 2873 ff = base
2874 2874 try:
2875 2875 # Removes dots from the name since ipython
2876 2876 # will assume names with dots to be python.
2877 2877 self.shell.alias_manager.define_alias(
2878 2878 base.lower().replace('.',''), ff)
2879 2879 except InvalidAliasError:
2880 2880 pass
2881 2881 syscmdlist.append(ff)
2882 2882 self.shell.db['syscmdlist'] = syscmdlist
2883 2883 finally:
2884 2884 os.chdir(savedir)
2885 2885
2886 2886 @skip_doctest
2887 2887 def magic_pwd(self, parameter_s = ''):
2888 2888 """Return the current working directory path.
2889 2889
2890 2890 Examples
2891 2891 --------
2892 2892 ::
2893 2893
2894 2894 In [9]: pwd
2895 2895 Out[9]: '/home/tsuser/sprint/ipython'
2896 2896 """
2897 2897 return os.getcwdu()
2898 2898
2899 2899 @skip_doctest
2900 2900 def magic_cd(self, parameter_s=''):
2901 2901 """Change the current working directory.
2902 2902
2903 2903 This command automatically maintains an internal list of directories
2904 2904 you visit during your IPython session, in the variable _dh. The
2905 2905 command %dhist shows this history nicely formatted. You can also
2906 2906 do 'cd -<tab>' to see directory history conveniently.
2907 2907
2908 2908 Usage:
2909 2909
2910 2910 cd 'dir': changes to directory 'dir'.
2911 2911
2912 2912 cd -: changes to the last visited directory.
2913 2913
2914 2914 cd -<n>: changes to the n-th directory in the directory history.
2915 2915
2916 2916 cd --foo: change to directory that matches 'foo' in history
2917 2917
2918 2918 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2919 2919 (note: cd <bookmark_name> is enough if there is no
2920 2920 directory <bookmark_name>, but a bookmark with the name exists.)
2921 2921 'cd -b <tab>' allows you to tab-complete bookmark names.
2922 2922
2923 2923 Options:
2924 2924
2925 2925 -q: quiet. Do not print the working directory after the cd command is
2926 2926 executed. By default IPython's cd command does print this directory,
2927 2927 since the default prompts do not display path information.
2928 2928
2929 2929 Note that !cd doesn't work for this purpose because the shell where
2930 2930 !command runs is immediately discarded after executing 'command'.
2931 2931
2932 2932 Examples
2933 2933 --------
2934 2934 ::
2935 2935
2936 2936 In [10]: cd parent/child
2937 2937 /home/tsuser/parent/child
2938 2938 """
2939 2939
2940 2940 parameter_s = parameter_s.strip()
2941 2941 #bkms = self.shell.persist.get("bookmarks",{})
2942 2942
2943 2943 oldcwd = os.getcwdu()
2944 2944 numcd = re.match(r'(-)(\d+)$',parameter_s)
2945 2945 # jump in directory history by number
2946 2946 if numcd:
2947 2947 nn = int(numcd.group(2))
2948 2948 try:
2949 2949 ps = self.shell.user_ns['_dh'][nn]
2950 2950 except IndexError:
2951 2951 print 'The requested directory does not exist in history.'
2952 2952 return
2953 2953 else:
2954 2954 opts = {}
2955 2955 elif parameter_s.startswith('--'):
2956 2956 ps = None
2957 2957 fallback = None
2958 2958 pat = parameter_s[2:]
2959 2959 dh = self.shell.user_ns['_dh']
2960 2960 # first search only by basename (last component)
2961 2961 for ent in reversed(dh):
2962 2962 if pat in os.path.basename(ent) and os.path.isdir(ent):
2963 2963 ps = ent
2964 2964 break
2965 2965
2966 2966 if fallback is None and pat in ent and os.path.isdir(ent):
2967 2967 fallback = ent
2968 2968
2969 2969 # if we have no last part match, pick the first full path match
2970 2970 if ps is None:
2971 2971 ps = fallback
2972 2972
2973 2973 if ps is None:
2974 2974 print "No matching entry in directory history"
2975 2975 return
2976 2976 else:
2977 2977 opts = {}
2978 2978
2979 2979
2980 2980 else:
2981 2981 #turn all non-space-escaping backslashes to slashes,
2982 2982 # for c:\windows\directory\names\
2983 2983 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2984 2984 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2985 2985 # jump to previous
2986 2986 if ps == '-':
2987 2987 try:
2988 2988 ps = self.shell.user_ns['_dh'][-2]
2989 2989 except IndexError:
2990 2990 raise UsageError('%cd -: No previous directory to change to.')
2991 2991 # jump to bookmark if needed
2992 2992 else:
2993 2993 if not os.path.isdir(ps) or opts.has_key('b'):
2994 2994 bkms = self.db.get('bookmarks', {})
2995 2995
2996 2996 if bkms.has_key(ps):
2997 2997 target = bkms[ps]
2998 2998 print '(bookmark:%s) -> %s' % (ps,target)
2999 2999 ps = target
3000 3000 else:
3001 3001 if opts.has_key('b'):
3002 3002 raise UsageError("Bookmark '%s' not found. "
3003 3003 "Use '%%bookmark -l' to see your bookmarks." % ps)
3004 3004
3005 3005 # strip extra quotes on Windows, because os.chdir doesn't like them
3006 3006 ps = unquote_filename(ps)
3007 3007 # at this point ps should point to the target dir
3008 3008 if ps:
3009 3009 try:
3010 3010 os.chdir(os.path.expanduser(ps))
3011 3011 if hasattr(self.shell, 'term_title') and self.shell.term_title:
3012 3012 set_term_title('IPython: ' + abbrev_cwd())
3013 3013 except OSError:
3014 3014 print sys.exc_info()[1]
3015 3015 else:
3016 3016 cwd = os.getcwdu()
3017 3017 dhist = self.shell.user_ns['_dh']
3018 3018 if oldcwd != cwd:
3019 3019 dhist.append(cwd)
3020 3020 self.db['dhist'] = compress_dhist(dhist)[-100:]
3021 3021
3022 3022 else:
3023 3023 os.chdir(self.shell.home_dir)
3024 3024 if hasattr(self.shell, 'term_title') and self.shell.term_title:
3025 3025 set_term_title('IPython: ' + '~')
3026 3026 cwd = os.getcwdu()
3027 3027 dhist = self.shell.user_ns['_dh']
3028 3028
3029 3029 if oldcwd != cwd:
3030 3030 dhist.append(cwd)
3031 3031 self.db['dhist'] = compress_dhist(dhist)[-100:]
3032 3032 if not 'q' in opts and self.shell.user_ns['_dh']:
3033 3033 print self.shell.user_ns['_dh'][-1]
3034 3034
3035 3035
3036 3036 def magic_env(self, parameter_s=''):
3037 3037 """List environment variables."""
3038 3038
3039 3039 return dict(os.environ)
3040 3040
3041 3041 def magic_pushd(self, parameter_s=''):
3042 3042 """Place the current dir on stack and change directory.
3043 3043
3044 3044 Usage:\\
3045 3045 %pushd ['dirname']
3046 3046 """
3047 3047
3048 3048 dir_s = self.shell.dir_stack
3049 3049 tgt = os.path.expanduser(unquote_filename(parameter_s))
3050 3050 cwd = os.getcwdu().replace(self.home_dir,'~')
3051 3051 if tgt:
3052 3052 self.magic_cd(parameter_s)
3053 3053 dir_s.insert(0,cwd)
3054 3054 return self.magic_dirs()
3055 3055
3056 3056 def magic_popd(self, parameter_s=''):
3057 3057 """Change to directory popped off the top of the stack.
3058 3058 """
3059 3059 if not self.shell.dir_stack:
3060 3060 raise UsageError("%popd on empty stack")
3061 3061 top = self.shell.dir_stack.pop(0)
3062 3062 self.magic_cd(top)
3063 3063 print "popd ->",top
3064 3064
3065 3065 def magic_dirs(self, parameter_s=''):
3066 3066 """Return the current directory stack."""
3067 3067
3068 3068 return self.shell.dir_stack
3069 3069
3070 3070 def magic_dhist(self, parameter_s=''):
3071 3071 """Print your history of visited directories.
3072 3072
3073 3073 %dhist -> print full history\\
3074 3074 %dhist n -> print last n entries only\\
3075 3075 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
3076 3076
3077 3077 This history is automatically maintained by the %cd command, and
3078 3078 always available as the global list variable _dh. You can use %cd -<n>
3079 3079 to go to directory number <n>.
3080 3080
3081 3081 Note that most of time, you should view directory history by entering
3082 3082 cd -<TAB>.
3083 3083
3084 3084 """
3085 3085
3086 3086 dh = self.shell.user_ns['_dh']
3087 3087 if parameter_s:
3088 3088 try:
3089 3089 args = map(int,parameter_s.split())
3090 3090 except:
3091 3091 self.arg_err(Magic.magic_dhist)
3092 3092 return
3093 3093 if len(args) == 1:
3094 3094 ini,fin = max(len(dh)-(args[0]),0),len(dh)
3095 3095 elif len(args) == 2:
3096 3096 ini,fin = args
3097 3097 else:
3098 3098 self.arg_err(Magic.magic_dhist)
3099 3099 return
3100 3100 else:
3101 3101 ini,fin = 0,len(dh)
3102 3102 nlprint(dh,
3103 3103 header = 'Directory history (kept in _dh)',
3104 3104 start=ini,stop=fin)
3105 3105
3106 3106 @skip_doctest
3107 3107 def magic_sc(self, parameter_s=''):
3108 3108 """Shell capture - execute a shell command and capture its output.
3109 3109
3110 3110 DEPRECATED. Suboptimal, retained for backwards compatibility.
3111 3111
3112 3112 You should use the form 'var = !command' instead. Example:
3113 3113
3114 3114 "%sc -l myfiles = ls ~" should now be written as
3115 3115
3116 3116 "myfiles = !ls ~"
3117 3117
3118 3118 myfiles.s, myfiles.l and myfiles.n still apply as documented
3119 3119 below.
3120 3120
3121 3121 --
3122 3122 %sc [options] varname=command
3123 3123
3124 3124 IPython will run the given command using commands.getoutput(), and
3125 3125 will then update the user's interactive namespace with a variable
3126 3126 called varname, containing the value of the call. Your command can
3127 3127 contain shell wildcards, pipes, etc.
3128 3128
3129 3129 The '=' sign in the syntax is mandatory, and the variable name you
3130 3130 supply must follow Python's standard conventions for valid names.
3131 3131
3132 3132 (A special format without variable name exists for internal use)
3133 3133
3134 3134 Options:
3135 3135
3136 3136 -l: list output. Split the output on newlines into a list before
3137 3137 assigning it to the given variable. By default the output is stored
3138 3138 as a single string.
3139 3139
3140 3140 -v: verbose. Print the contents of the variable.
3141 3141
3142 3142 In most cases you should not need to split as a list, because the
3143 3143 returned value is a special type of string which can automatically
3144 3144 provide its contents either as a list (split on newlines) or as a
3145 3145 space-separated string. These are convenient, respectively, either
3146 3146 for sequential processing or to be passed to a shell command.
3147 3147
3148 3148 For example::
3149 3149
3150 3150 # Capture into variable a
3151 3151 In [1]: sc a=ls *py
3152 3152
3153 3153 # a is a string with embedded newlines
3154 3154 In [2]: a
3155 3155 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3156 3156
3157 3157 # which can be seen as a list:
3158 3158 In [3]: a.l
3159 3159 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3160 3160
3161 3161 # or as a whitespace-separated string:
3162 3162 In [4]: a.s
3163 3163 Out[4]: 'setup.py win32_manual_post_install.py'
3164 3164
3165 3165 # a.s is useful to pass as a single command line:
3166 3166 In [5]: !wc -l $a.s
3167 3167 146 setup.py
3168 3168 130 win32_manual_post_install.py
3169 3169 276 total
3170 3170
3171 3171 # while the list form is useful to loop over:
3172 3172 In [6]: for f in a.l:
3173 3173 ...: !wc -l $f
3174 3174 ...:
3175 3175 146 setup.py
3176 3176 130 win32_manual_post_install.py
3177 3177
3178 3178 Similarly, the lists returned by the -l option are also special, in
3179 3179 the sense that you can equally invoke the .s attribute on them to
3180 3180 automatically get a whitespace-separated string from their contents::
3181 3181
3182 3182 In [7]: sc -l b=ls *py
3183 3183
3184 3184 In [8]: b
3185 3185 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3186 3186
3187 3187 In [9]: b.s
3188 3188 Out[9]: 'setup.py win32_manual_post_install.py'
3189 3189
3190 3190 In summary, both the lists and strings used for output capture have
3191 3191 the following special attributes::
3192 3192
3193 3193 .l (or .list) : value as list.
3194 3194 .n (or .nlstr): value as newline-separated string.
3195 3195 .s (or .spstr): value as space-separated string.
3196 3196 """
3197 3197
3198 3198 opts,args = self.parse_options(parameter_s,'lv')
3199 3199 # Try to get a variable name and command to run
3200 3200 try:
3201 3201 # the variable name must be obtained from the parse_options
3202 3202 # output, which uses shlex.split to strip options out.
3203 3203 var,_ = args.split('=',1)
3204 3204 var = var.strip()
3205 3205 # But the command has to be extracted from the original input
3206 3206 # parameter_s, not on what parse_options returns, to avoid the
3207 3207 # quote stripping which shlex.split performs on it.
3208 3208 _,cmd = parameter_s.split('=',1)
3209 3209 except ValueError:
3210 3210 var,cmd = '',''
3211 3211 # If all looks ok, proceed
3212 3212 split = 'l' in opts
3213 3213 out = self.shell.getoutput(cmd, split=split)
3214 3214 if opts.has_key('v'):
3215 3215 print '%s ==\n%s' % (var,pformat(out))
3216 3216 if var:
3217 3217 self.shell.user_ns.update({var:out})
3218 3218 else:
3219 3219 return out
3220 3220
3221 3221 def magic_sx(self, parameter_s=''):
3222 3222 """Shell execute - run a shell command and capture its output.
3223 3223
3224 3224 %sx command
3225 3225
3226 3226 IPython will run the given command using commands.getoutput(), and
3227 3227 return the result formatted as a list (split on '\\n'). Since the
3228 3228 output is _returned_, it will be stored in ipython's regular output
3229 3229 cache Out[N] and in the '_N' automatic variables.
3230 3230
3231 3231 Notes:
3232 3232
3233 3233 1) If an input line begins with '!!', then %sx is automatically
3234 3234 invoked. That is, while::
3235 3235
3236 3236 !ls
3237 3237
3238 3238 causes ipython to simply issue system('ls'), typing::
3239 3239
3240 3240 !!ls
3241 3241
3242 3242 is a shorthand equivalent to::
3243 3243
3244 3244 %sx ls
3245 3245
3246 3246 2) %sx differs from %sc in that %sx automatically splits into a list,
3247 3247 like '%sc -l'. The reason for this is to make it as easy as possible
3248 3248 to process line-oriented shell output via further python commands.
3249 3249 %sc is meant to provide much finer control, but requires more
3250 3250 typing.
3251 3251
3252 3252 3) Just like %sc -l, this is a list with special attributes:
3253 3253 ::
3254 3254
3255 3255 .l (or .list) : value as list.
3256 3256 .n (or .nlstr): value as newline-separated string.
3257 3257 .s (or .spstr): value as whitespace-separated string.
3258 3258
3259 3259 This is very useful when trying to use such lists as arguments to
3260 3260 system commands."""
3261 3261
3262 3262 if parameter_s:
3263 3263 return self.shell.getoutput(parameter_s)
3264 3264
3265 3265
3266 3266 def magic_bookmark(self, parameter_s=''):
3267 3267 """Manage IPython's bookmark system.
3268 3268
3269 3269 %bookmark <name> - set bookmark to current dir
3270 3270 %bookmark <name> <dir> - set bookmark to <dir>
3271 3271 %bookmark -l - list all bookmarks
3272 3272 %bookmark -d <name> - remove bookmark
3273 3273 %bookmark -r - remove all bookmarks
3274 3274
3275 3275 You can later on access a bookmarked folder with::
3276 3276
3277 3277 %cd -b <name>
3278 3278
3279 3279 or simply '%cd <name>' if there is no directory called <name> AND
3280 3280 there is such a bookmark defined.
3281 3281
3282 3282 Your bookmarks persist through IPython sessions, but they are
3283 3283 associated with each profile."""
3284 3284
3285 3285 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3286 3286 if len(args) > 2:
3287 3287 raise UsageError("%bookmark: too many arguments")
3288 3288
3289 3289 bkms = self.db.get('bookmarks',{})
3290 3290
3291 3291 if opts.has_key('d'):
3292 3292 try:
3293 3293 todel = args[0]
3294 3294 except IndexError:
3295 3295 raise UsageError(
3296 3296 "%bookmark -d: must provide a bookmark to delete")
3297 3297 else:
3298 3298 try:
3299 3299 del bkms[todel]
3300 3300 except KeyError:
3301 3301 raise UsageError(
3302 3302 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3303 3303
3304 3304 elif opts.has_key('r'):
3305 3305 bkms = {}
3306 3306 elif opts.has_key('l'):
3307 3307 bks = bkms.keys()
3308 3308 bks.sort()
3309 3309 if bks:
3310 3310 size = max(map(len,bks))
3311 3311 else:
3312 3312 size = 0
3313 3313 fmt = '%-'+str(size)+'s -> %s'
3314 3314 print 'Current bookmarks:'
3315 3315 for bk in bks:
3316 3316 print fmt % (bk,bkms[bk])
3317 3317 else:
3318 3318 if not args:
3319 3319 raise UsageError("%bookmark: You must specify the bookmark name")
3320 3320 elif len(args)==1:
3321 3321 bkms[args[0]] = os.getcwdu()
3322 3322 elif len(args)==2:
3323 3323 bkms[args[0]] = args[1]
3324 3324 self.db['bookmarks'] = bkms
3325 3325
3326 3326 def magic_pycat(self, parameter_s=''):
3327 3327 """Show a syntax-highlighted file through a pager.
3328 3328
3329 3329 This magic is similar to the cat utility, but it will assume the file
3330 3330 to be Python source and will show it with syntax highlighting. """
3331 3331
3332 3332 try:
3333 3333 filename = get_py_filename(parameter_s)
3334 3334 cont = file_read(filename)
3335 3335 except IOError:
3336 3336 try:
3337 3337 cont = eval(parameter_s,self.user_ns)
3338 3338 except NameError:
3339 3339 cont = None
3340 3340 if cont is None:
3341 3341 print "Error: no such file or variable"
3342 3342 return
3343 3343
3344 3344 page.page(self.shell.pycolorize(cont))
3345 3345
3346 3346 def magic_quickref(self,arg):
3347 3347 """ Show a quick reference sheet """
3348 3348 import IPython.core.usage
3349 3349 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3350 3350
3351 3351 page.page(qr)
3352 3352
3353 3353 def magic_doctest_mode(self,parameter_s=''):
3354 3354 """Toggle doctest mode on and off.
3355 3355
3356 3356 This mode is intended to make IPython behave as much as possible like a
3357 3357 plain Python shell, from the perspective of how its prompts, exceptions
3358 3358 and output look. This makes it easy to copy and paste parts of a
3359 3359 session into doctests. It does so by:
3360 3360
3361 3361 - Changing the prompts to the classic ``>>>`` ones.
3362 3362 - Changing the exception reporting mode to 'Plain'.
3363 3363 - Disabling pretty-printing of output.
3364 3364
3365 3365 Note that IPython also supports the pasting of code snippets that have
3366 3366 leading '>>>' and '...' prompts in them. This means that you can paste
3367 3367 doctests from files or docstrings (even if they have leading
3368 3368 whitespace), and the code will execute correctly. You can then use
3369 3369 '%history -t' to see the translated history; this will give you the
3370 3370 input after removal of all the leading prompts and whitespace, which
3371 3371 can be pasted back into an editor.
3372 3372
3373 3373 With these features, you can switch into this mode easily whenever you
3374 3374 need to do testing and changes to doctests, without having to leave
3375 3375 your existing IPython session.
3376 3376 """
3377 3377
3378 3378 from IPython.utils.ipstruct import Struct
3379 3379
3380 3380 # Shorthands
3381 3381 shell = self.shell
3382 3382 pm = shell.prompt_manager
3383 3383 meta = shell.meta
3384 3384 disp_formatter = self.shell.display_formatter
3385 3385 ptformatter = disp_formatter.formatters['text/plain']
3386 3386 # dstore is a data store kept in the instance metadata bag to track any
3387 3387 # changes we make, so we can undo them later.
3388 3388 dstore = meta.setdefault('doctest_mode',Struct())
3389 3389 save_dstore = dstore.setdefault
3390 3390
3391 3391 # save a few values we'll need to recover later
3392 3392 mode = save_dstore('mode',False)
3393 3393 save_dstore('rc_pprint',ptformatter.pprint)
3394 3394 save_dstore('xmode',shell.InteractiveTB.mode)
3395 3395 save_dstore('rc_separate_out',shell.separate_out)
3396 3396 save_dstore('rc_separate_out2',shell.separate_out2)
3397 3397 save_dstore('rc_prompts_pad_left',pm.justify)
3398 3398 save_dstore('rc_separate_in',shell.separate_in)
3399 3399 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
3400 3400 save_dstore('prompt_templates',(pm.in_template, pm.in2_template, pm.out_template))
3401 3401
3402 3402 if mode == False:
3403 3403 # turn on
3404 3404 pm.in_template = '>>> '
3405 3405 pm.in2_template = '... '
3406 3406 pm.out_template = ''
3407 3407
3408 3408 # Prompt separators like plain python
3409 3409 shell.separate_in = ''
3410 3410 shell.separate_out = ''
3411 3411 shell.separate_out2 = ''
3412 3412
3413 3413 pm.justify = False
3414 3414
3415 3415 ptformatter.pprint = False
3416 3416 disp_formatter.plain_text_only = True
3417 3417
3418 3418 shell.magic_xmode('Plain')
3419 3419 else:
3420 3420 # turn off
3421 3421 pm.in_template, pm.in2_template, pm.out_template = dstore.prompt_templates
3422 3422
3423 3423 shell.separate_in = dstore.rc_separate_in
3424 3424
3425 3425 shell.separate_out = dstore.rc_separate_out
3426 3426 shell.separate_out2 = dstore.rc_separate_out2
3427 3427
3428 3428 pm.justify = dstore.rc_prompts_pad_left
3429 3429
3430 3430 ptformatter.pprint = dstore.rc_pprint
3431 3431 disp_formatter.plain_text_only = dstore.rc_plain_text_only
3432 3432
3433 3433 shell.magic_xmode(dstore.xmode)
3434 3434
3435 3435 # Store new mode and inform
3436 3436 dstore.mode = bool(1-int(mode))
3437 3437 mode_label = ['OFF','ON'][dstore.mode]
3438 3438 print 'Doctest mode is:', mode_label
3439 3439
3440 3440 def magic_gui(self, parameter_s=''):
3441 3441 """Enable or disable IPython GUI event loop integration.
3442 3442
3443 3443 %gui [GUINAME]
3444 3444
3445 3445 This magic replaces IPython's threaded shells that were activated
3446 3446 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3447 3447 can now be enabled at runtime and keyboard
3448 3448 interrupts should work without any problems. The following toolkits
3449 3449 are supported: wxPython, PyQt4, PyGTK, Tk and Cocoa (OSX)::
3450 3450
3451 3451 %gui wx # enable wxPython event loop integration
3452 3452 %gui qt4|qt # enable PyQt4 event loop integration
3453 3453 %gui gtk # enable PyGTK event loop integration
3454 3454 %gui gtk3 # enable Gtk3 event loop integration
3455 3455 %gui tk # enable Tk event loop integration
3456 3456 %gui OSX # enable Cocoa event loop integration
3457 3457 # (requires %matplotlib 1.1)
3458 3458 %gui # disable all event loop integration
3459 3459
3460 3460 WARNING: after any of these has been called you can simply create
3461 3461 an application object, but DO NOT start the event loop yourself, as
3462 3462 we have already handled that.
3463 3463 """
3464 3464 opts, arg = self.parse_options(parameter_s, '')
3465 3465 if arg=='': arg = None
3466 3466 try:
3467 3467 return self.enable_gui(arg)
3468 3468 except Exception as e:
3469 3469 # print simple error message, rather than traceback if we can't
3470 3470 # hook up the GUI
3471 3471 error(str(e))
3472 3472
3473 3473 def magic_install_ext(self, parameter_s):
3474 3474 """Download and install an extension from a URL, e.g.::
3475 3475
3476 3476 %install_ext https://bitbucket.org/birkenfeld/ipython-physics/raw/d1310a2ab15d/physics.py
3477 3477
3478 3478 The URL should point to an importable Python module - either a .py file
3479 3479 or a .zip file.
3480 3480
3481 3481 Parameters:
3482 3482
3483 3483 -n filename : Specify a name for the file, rather than taking it from
3484 3484 the URL.
3485 3485 """
3486 3486 opts, args = self.parse_options(parameter_s, 'n:')
3487 3487 try:
3488 3488 filename = self.extension_manager.install_extension(args, opts.get('n'))
3489 3489 except ValueError as e:
3490 3490 print e
3491 3491 return
3492 3492
3493 3493 filename = os.path.basename(filename)
3494 3494 print "Installed %s. To use it, type:" % filename
3495 3495 print " %%load_ext %s" % os.path.splitext(filename)[0]
3496 3496
3497 3497
3498 3498 def magic_load_ext(self, module_str):
3499 3499 """Load an IPython extension by its module name."""
3500 3500 return self.extension_manager.load_extension(module_str)
3501 3501
3502 3502 def magic_unload_ext(self, module_str):
3503 3503 """Unload an IPython extension by its module name."""
3504 3504 self.extension_manager.unload_extension(module_str)
3505 3505
3506 3506 def magic_reload_ext(self, module_str):
3507 3507 """Reload an IPython extension by its module name."""
3508 3508 self.extension_manager.reload_extension(module_str)
3509 3509
3510 3510 def magic_install_profiles(self, s):
3511 3511 """%install_profiles has been deprecated."""
3512 3512 print '\n'.join([
3513 3513 "%install_profiles has been deprecated.",
3514 3514 "Use `ipython profile list` to view available profiles.",
3515 3515 "Requesting a profile with `ipython profile create <name>`",
3516 3516 "or `ipython --profile=<name>` will start with the bundled",
3517 3517 "profile of that name if it exists."
3518 3518 ])
3519 3519
3520 3520 def magic_install_default_config(self, s):
3521 3521 """%install_default_config has been deprecated."""
3522 3522 print '\n'.join([
3523 3523 "%install_default_config has been deprecated.",
3524 3524 "Use `ipython profile create <name>` to initialize a profile",
3525 3525 "with the default config files.",
3526 3526 "Add `--reset` to overwrite already existing config files with defaults."
3527 3527 ])
3528 3528
3529 3529 # Pylab support: simple wrappers that activate pylab, load gui input
3530 3530 # handling and modify slightly %run
3531 3531
3532 3532 @skip_doctest
3533 3533 def _pylab_magic_run(self, parameter_s=''):
3534 3534 Magic.magic_run(self, parameter_s,
3535 3535 runner=mpl_runner(self.shell.safe_execfile))
3536 3536
3537 3537 _pylab_magic_run.__doc__ = magic_run.__doc__
3538 3538
3539 3539 @skip_doctest
3540 3540 def magic_pylab(self, s):
3541 3541 """Load numpy and matplotlib to work interactively.
3542 3542
3543 3543 %pylab [GUINAME]
3544 3544
3545 3545 This function lets you activate pylab (matplotlib, numpy and
3546 3546 interactive support) at any point during an IPython session.
3547 3547
3548 3548 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3549 3549 pylab and mlab, as well as all names from numpy and pylab.
3550 3550
3551 3551 If you are using the inline matplotlib backend for embedded figures,
3552 3552 you can adjust its behavior via the %config magic::
3553 3553
3554 3554 # enable SVG figures, necessary for SVG+XHTML export in the qtconsole
3555 3555 In [1]: %config InlineBackend.figure_format = 'svg'
3556 3556
3557 3557 # change the behavior of closing all figures at the end of each
3558 3558 # execution (cell), or allowing reuse of active figures across
3559 3559 # cells:
3560 3560 In [2]: %config InlineBackend.close_figures = False
3561 3561
3562 3562 Parameters
3563 3563 ----------
3564 3564 guiname : optional
3565 3565 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk',
3566 3566 'osx' or 'tk'). If given, the corresponding Matplotlib backend is
3567 3567 used, otherwise matplotlib's default (which you can override in your
3568 3568 matplotlib config file) is used.
3569 3569
3570 3570 Examples
3571 3571 --------
3572 3572 In this case, where the MPL default is TkAgg::
3573 3573
3574 3574 In [2]: %pylab
3575 3575
3576 3576 Welcome to pylab, a matplotlib-based Python environment.
3577 3577 Backend in use: TkAgg
3578 3578 For more information, type 'help(pylab)'.
3579 3579
3580 3580 But you can explicitly request a different backend::
3581 3581
3582 3582 In [3]: %pylab qt
3583 3583
3584 3584 Welcome to pylab, a matplotlib-based Python environment.
3585 3585 Backend in use: Qt4Agg
3586 3586 For more information, type 'help(pylab)'.
3587 3587 """
3588 3588
3589 3589 if Application.initialized():
3590 3590 app = Application.instance()
3591 3591 try:
3592 3592 import_all_status = app.pylab_import_all
3593 3593 except AttributeError:
3594 3594 import_all_status = True
3595 3595 else:
3596 3596 import_all_status = True
3597 3597
3598 3598 self.shell.enable_pylab(s, import_all=import_all_status)
3599 3599
3600 3600 def magic_tb(self, s):
3601 3601 """Print the last traceback with the currently active exception mode.
3602 3602
3603 3603 See %xmode for changing exception reporting modes."""
3604 3604 self.shell.showtraceback()
3605 3605
3606 3606 @skip_doctest
3607 3607 def magic_precision(self, s=''):
3608 3608 """Set floating point precision for pretty printing.
3609 3609
3610 3610 Can set either integer precision or a format string.
3611 3611
3612 3612 If numpy has been imported and precision is an int,
3613 3613 numpy display precision will also be set, via ``numpy.set_printoptions``.
3614 3614
3615 3615 If no argument is given, defaults will be restored.
3616 3616
3617 3617 Examples
3618 3618 --------
3619 3619 ::
3620 3620
3621 3621 In [1]: from math import pi
3622 3622
3623 3623 In [2]: %precision 3
3624 3624 Out[2]: u'%.3f'
3625 3625
3626 3626 In [3]: pi
3627 3627 Out[3]: 3.142
3628 3628
3629 3629 In [4]: %precision %i
3630 3630 Out[4]: u'%i'
3631 3631
3632 3632 In [5]: pi
3633 3633 Out[5]: 3
3634 3634
3635 3635 In [6]: %precision %e
3636 3636 Out[6]: u'%e'
3637 3637
3638 3638 In [7]: pi**10
3639 3639 Out[7]: 9.364805e+04
3640 3640
3641 3641 In [8]: %precision
3642 3642 Out[8]: u'%r'
3643 3643
3644 3644 In [9]: pi**10
3645 3645 Out[9]: 93648.047476082982
3646 3646
3647 3647 """
3648 3648
3649 3649 ptformatter = self.shell.display_formatter.formatters['text/plain']
3650 3650 ptformatter.float_precision = s
3651 3651 return ptformatter.float_format
3652 3652
3653 3653
3654 3654 @magic_arguments.magic_arguments()
3655 3655 @magic_arguments.argument(
3656 3656 '-e', '--export', action='store_true', default=False,
3657 3657 help='Export IPython history as a notebook. The filename argument '
3658 3658 'is used to specify the notebook name and format. For example '
3659 3659 'a filename of notebook.ipynb will result in a notebook name '
3660 3660 'of "notebook" and a format of "xml". Likewise using a ".json" '
3661 3661 'or ".py" file extension will write the notebook in the json '
3662 3662 'or py formats.'
3663 3663 )
3664 3664 @magic_arguments.argument(
3665 3665 '-f', '--format',
3666 3666 help='Convert an existing IPython notebook to a new format. This option '
3667 3667 'specifies the new format and can have the values: xml, json, py. '
3668 3668 'The target filename is chosen automatically based on the new '
3669 3669 'format. The filename argument gives the name of the source file.'
3670 3670 )
3671 3671 @magic_arguments.argument(
3672 3672 'filename', type=unicode,
3673 3673 help='Notebook name or filename'
3674 3674 )
3675 3675 def magic_notebook(self, s):
3676 3676 """Export and convert IPython notebooks.
3677 3677
3678 3678 This function can export the current IPython history to a notebook file
3679 3679 or can convert an existing notebook file into a different format. For
3680 3680 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
3681 3681 To export the history to "foo.py" do "%notebook -e foo.py". To convert
3682 3682 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
3683 3683 formats include (json/ipynb, py).
3684 3684 """
3685 3685 args = magic_arguments.parse_argstring(self.magic_notebook, s)
3686 3686
3687 3687 from IPython.nbformat import current
3688 3688 args.filename = unquote_filename(args.filename)
3689 3689 if args.export:
3690 3690 fname, name, format = current.parse_filename(args.filename)
3691 3691 cells = []
3692 3692 hist = list(self.history_manager.get_range())
3693 3693 for session, prompt_number, input in hist[:-1]:
3694 3694 cells.append(current.new_code_cell(prompt_number=prompt_number, input=input))
3695 3695 worksheet = current.new_worksheet(cells=cells)
3696 3696 nb = current.new_notebook(name=name,worksheets=[worksheet])
3697 3697 with io.open(fname, 'w', encoding='utf-8') as f:
3698 3698 current.write(nb, f, format);
3699 3699 elif args.format is not None:
3700 3700 old_fname, old_name, old_format = current.parse_filename(args.filename)
3701 3701 new_format = args.format
3702 3702 if new_format == u'xml':
3703 3703 raise ValueError('Notebooks cannot be written as xml.')
3704 3704 elif new_format == u'ipynb' or new_format == u'json':
3705 3705 new_fname = old_name + u'.ipynb'
3706 3706 new_format = u'json'
3707 3707 elif new_format == u'py':
3708 3708 new_fname = old_name + u'.py'
3709 3709 else:
3710 3710 raise ValueError('Invalid notebook format: %s' % new_format)
3711 3711 with io.open(old_fname, 'r', encoding='utf-8') as f:
3712 3712 nb = current.read(f, old_format)
3713 3713 with io.open(new_fname, 'w', encoding='utf-8') as f:
3714 3714 current.write(nb, f, new_format)
3715 3715
3716 3716 def magic_config(self, s):
3717 3717 """configure IPython
3718 3718
3719 3719 %config Class[.trait=value]
3720 3720
3721 3721 This magic exposes most of the IPython config system. Any
3722 3722 Configurable class should be able to be configured with the simple
3723 3723 line::
3724 3724
3725 3725 %config Class.trait=value
3726 3726
3727 3727 Where `value` will be resolved in the user's namespace, if it is an
3728 3728 expression or variable name.
3729 3729
3730 3730 Examples
3731 3731 --------
3732 3732
3733 3733 To see what classes are available for config, pass no arguments::
3734 3734
3735 3735 In [1]: %config
3736 3736 Available objects for config:
3737 3737 TerminalInteractiveShell
3738 3738 HistoryManager
3739 3739 PrefilterManager
3740 3740 AliasManager
3741 3741 IPCompleter
3742 3742 PromptManager
3743 3743 DisplayFormatter
3744 3744
3745 3745 To view what is configurable on a given class, just pass the class
3746 3746 name::
3747 3747
3748 3748 In [2]: %config IPCompleter
3749 3749 IPCompleter options
3750 3750 -----------------
3751 3751 IPCompleter.omit__names=<Enum>
3752 3752 Current: 2
3753 3753 Choices: (0, 1, 2)
3754 3754 Instruct the completer to omit private method names
3755 3755 Specifically, when completing on ``object.<tab>``.
3756 3756 When 2 [default]: all names that start with '_' will be excluded.
3757 3757 When 1: all 'magic' names (``__foo__``) will be excluded.
3758 3758 When 0: nothing will be excluded.
3759 3759 IPCompleter.merge_completions=<CBool>
3760 3760 Current: True
3761 3761 Whether to merge completion results into a single list
3762 3762 If False, only the completion results from the first non-empty completer
3763 3763 will be returned.
3764 3764 IPCompleter.limit_to__all__=<CBool>
3765 3765 Current: False
3766 3766 Instruct the completer to use __all__ for the completion
3767 3767 Specifically, when completing on ``object.<tab>``.
3768 3768 When True: only those names in obj.__all__ will be included.
3769 3769 When False [default]: the __all__ attribute is ignored
3770 3770 IPCompleter.greedy=<CBool>
3771 3771 Current: False
3772 3772 Activate greedy completion
3773 3773 This will enable completion on elements of lists, results of function calls,
3774 3774 etc., but can be unsafe because the code is actually evaluated on TAB.
3775 3775
3776 3776 but the real use is in setting values::
3777 3777
3778 3778 In [3]: %config IPCompleter.greedy = True
3779 3779
3780 3780 and these values are read from the user_ns if they are variables::
3781 3781
3782 3782 In [4]: feeling_greedy=False
3783 3783
3784 3784 In [5]: %config IPCompleter.greedy = feeling_greedy
3785 3785
3786 3786 """
3787 3787 from IPython.config.loader import Config
3788 3788 # some IPython objects are Configurable, but do not yet have
3789 3789 # any configurable traits. Exclude them from the effects of
3790 3790 # this magic, as their presence is just noise:
3791 3791 configurables = [ c for c in self.configurables if c.__class__.class_traits(config=True) ]
3792 3792 classnames = [ c.__class__.__name__ for c in configurables ]
3793 3793
3794 3794 line = s.strip()
3795 3795 if not line:
3796 3796 # print available configurable names
3797 3797 print "Available objects for config:"
3798 3798 for name in classnames:
3799 3799 print " ", name
3800 3800 return
3801 3801 elif line in classnames:
3802 3802 # `%config TerminalInteractiveShell` will print trait info for
3803 3803 # TerminalInteractiveShell
3804 3804 c = configurables[classnames.index(line)]
3805 3805 cls = c.__class__
3806 3806 help = cls.class_get_help(c)
3807 3807 # strip leading '--' from cl-args:
3808 3808 help = re.sub(re.compile(r'^--', re.MULTILINE), '', help)
3809 3809 print help
3810 3810 return
3811 3811 elif '=' not in line:
3812 3812 raise UsageError("Invalid config statement: %r, should be Class.trait = value" % line)
3813 3813
3814 3814
3815 3815 # otherwise, assume we are setting configurables.
3816 3816 # leave quotes on args when splitting, because we want
3817 3817 # unquoted args to eval in user_ns
3818 3818 cfg = Config()
3819 3819 exec "cfg."+line in locals(), self.user_ns
3820 3820
3821 3821 for configurable in configurables:
3822 3822 try:
3823 3823 configurable.update_config(cfg)
3824 3824 except Exception as e:
3825 3825 error(e)
3826 3826
3827 3827 # end Magic
General Comments 0
You need to be logged in to leave comments. Login now