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