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