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