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