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