##// END OF EJS Templates
- Improvements to demo classes and some magic fixes.
fperez -
Show More

The requested changes are too big and content was truncated. Show full diff

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