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