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