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