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