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