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