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