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