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