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