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