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