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