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