##// END OF EJS Templates
implement %run myscript.ipy
vivainio -
Show More

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

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