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