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