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