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