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