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