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