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