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