##// END OF EJS Templates
fix loadpy duplicating newlines
MinRK -
Show More
@@ -1,3677 +1,3677 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 If you want to run complete programs under the profiler's control, use
1363 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
1364 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1365 contains profiler specific options as described here.
1365 contains profiler specific options as described here.
1366
1366
1367 You can read the complete documentation for the profile module with::
1367 You can read the complete documentation for the profile module with::
1368
1368
1369 In [1]: import profile; profile.help()
1369 In [1]: import profile; profile.help()
1370 """
1370 """
1371
1371
1372 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1372 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1373 # protect user quote marks
1373 # protect user quote marks
1374 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1374 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1375
1375
1376 if user_mode: # regular user call
1376 if user_mode: # regular user call
1377 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1377 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1378 list_all=1)
1378 list_all=1)
1379 namespace = self.shell.user_ns
1379 namespace = self.shell.user_ns
1380 else: # called to run a program by %run -p
1380 else: # called to run a program by %run -p
1381 try:
1381 try:
1382 filename = get_py_filename(arg_lst[0])
1382 filename = get_py_filename(arg_lst[0])
1383 except IOError as e:
1383 except IOError as e:
1384 try:
1384 try:
1385 msg = str(e)
1385 msg = str(e)
1386 except UnicodeError:
1386 except UnicodeError:
1387 msg = e.message
1387 msg = e.message
1388 error(msg)
1388 error(msg)
1389 return
1389 return
1390
1390
1391 arg_str = 'execfile(filename,prog_ns)'
1391 arg_str = 'execfile(filename,prog_ns)'
1392 namespace = {
1392 namespace = {
1393 'execfile': self.shell.safe_execfile,
1393 'execfile': self.shell.safe_execfile,
1394 'prog_ns': prog_ns,
1394 'prog_ns': prog_ns,
1395 'filename': filename
1395 'filename': filename
1396 }
1396 }
1397
1397
1398 opts.merge(opts_def)
1398 opts.merge(opts_def)
1399
1399
1400 prof = profile.Profile()
1400 prof = profile.Profile()
1401 try:
1401 try:
1402 prof = prof.runctx(arg_str,namespace,namespace)
1402 prof = prof.runctx(arg_str,namespace,namespace)
1403 sys_exit = ''
1403 sys_exit = ''
1404 except SystemExit:
1404 except SystemExit:
1405 sys_exit = """*** SystemExit exception caught in code being profiled."""
1405 sys_exit = """*** SystemExit exception caught in code being profiled."""
1406
1406
1407 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1407 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1408
1408
1409 lims = opts.l
1409 lims = opts.l
1410 if lims:
1410 if lims:
1411 lims = [] # rebuild lims with ints/floats/strings
1411 lims = [] # rebuild lims with ints/floats/strings
1412 for lim in opts.l:
1412 for lim in opts.l:
1413 try:
1413 try:
1414 lims.append(int(lim))
1414 lims.append(int(lim))
1415 except ValueError:
1415 except ValueError:
1416 try:
1416 try:
1417 lims.append(float(lim))
1417 lims.append(float(lim))
1418 except ValueError:
1418 except ValueError:
1419 lims.append(lim)
1419 lims.append(lim)
1420
1420
1421 # Trap output.
1421 # Trap output.
1422 stdout_trap = StringIO()
1422 stdout_trap = StringIO()
1423
1423
1424 if hasattr(stats,'stream'):
1424 if hasattr(stats,'stream'):
1425 # In newer versions of python, the stats object has a 'stream'
1425 # In newer versions of python, the stats object has a 'stream'
1426 # attribute to write into.
1426 # attribute to write into.
1427 stats.stream = stdout_trap
1427 stats.stream = stdout_trap
1428 stats.print_stats(*lims)
1428 stats.print_stats(*lims)
1429 else:
1429 else:
1430 # For older versions, we manually redirect stdout during printing
1430 # For older versions, we manually redirect stdout during printing
1431 sys_stdout = sys.stdout
1431 sys_stdout = sys.stdout
1432 try:
1432 try:
1433 sys.stdout = stdout_trap
1433 sys.stdout = stdout_trap
1434 stats.print_stats(*lims)
1434 stats.print_stats(*lims)
1435 finally:
1435 finally:
1436 sys.stdout = sys_stdout
1436 sys.stdout = sys_stdout
1437
1437
1438 output = stdout_trap.getvalue()
1438 output = stdout_trap.getvalue()
1439 output = output.rstrip()
1439 output = output.rstrip()
1440
1440
1441 page.page(output)
1441 page.page(output)
1442 print sys_exit,
1442 print sys_exit,
1443
1443
1444 dump_file = opts.D[0]
1444 dump_file = opts.D[0]
1445 text_file = opts.T[0]
1445 text_file = opts.T[0]
1446 if dump_file:
1446 if dump_file:
1447 dump_file = unquote_filename(dump_file)
1447 dump_file = unquote_filename(dump_file)
1448 prof.dump_stats(dump_file)
1448 prof.dump_stats(dump_file)
1449 print '\n*** Profile stats marshalled to file',\
1449 print '\n*** Profile stats marshalled to file',\
1450 `dump_file`+'.',sys_exit
1450 `dump_file`+'.',sys_exit
1451 if text_file:
1451 if text_file:
1452 text_file = unquote_filename(text_file)
1452 text_file = unquote_filename(text_file)
1453 pfile = file(text_file,'w')
1453 pfile = file(text_file,'w')
1454 pfile.write(output)
1454 pfile.write(output)
1455 pfile.close()
1455 pfile.close()
1456 print '\n*** Profile printout saved to text file',\
1456 print '\n*** Profile printout saved to text file',\
1457 `text_file`+'.',sys_exit
1457 `text_file`+'.',sys_exit
1458
1458
1459 if opts.has_key('r'):
1459 if opts.has_key('r'):
1460 return stats
1460 return stats
1461 else:
1461 else:
1462 return None
1462 return None
1463
1463
1464 @skip_doctest
1464 @skip_doctest
1465 def magic_run(self, parameter_s ='', runner=None,
1465 def magic_run(self, parameter_s ='', runner=None,
1466 file_finder=get_py_filename):
1466 file_finder=get_py_filename):
1467 """Run the named file inside IPython as a program.
1467 """Run the named file inside IPython as a program.
1468
1468
1469 Usage:\\
1469 Usage:\\
1470 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1470 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1471
1471
1472 Parameters after the filename are passed as command-line arguments to
1472 Parameters after the filename are passed as command-line arguments to
1473 the program (put in sys.argv). Then, control returns to IPython's
1473 the program (put in sys.argv). Then, control returns to IPython's
1474 prompt.
1474 prompt.
1475
1475
1476 This is similar to running at a system prompt:\\
1476 This is similar to running at a system prompt:\\
1477 $ python file args\\
1477 $ python file args\\
1478 but with the advantage of giving you IPython's tracebacks, and of
1478 but with the advantage of giving you IPython's tracebacks, and of
1479 loading all variables into your interactive namespace for further use
1479 loading all variables into your interactive namespace for further use
1480 (unless -p is used, see below).
1480 (unless -p is used, see below).
1481
1481
1482 The file is executed in a namespace initially consisting only of
1482 The file is executed in a namespace initially consisting only of
1483 __name__=='__main__' and sys.argv constructed as indicated. It thus
1483 __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
1484 sees its environment as if it were being run as a stand-alone program
1485 (except for sharing global objects such as previously imported
1485 (except for sharing global objects such as previously imported
1486 modules). But after execution, the IPython interactive namespace gets
1486 modules). But after execution, the IPython interactive namespace gets
1487 updated with all variables defined in the program (except for __name__
1487 updated with all variables defined in the program (except for __name__
1488 and sys.argv). This allows for very convenient loading of code for
1488 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.
1489 interactive work, while giving each program a 'clean sheet' to run in.
1490
1490
1491 Options:
1491 Options:
1492
1492
1493 -n: __name__ is NOT set to '__main__', but to the running file's name
1493 -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
1494 without extension (as python does under import). This allows running
1495 scripts and reloading the definitions in them without calling code
1495 scripts and reloading the definitions in them without calling code
1496 protected by an ' if __name__ == "__main__" ' clause.
1496 protected by an ' if __name__ == "__main__" ' clause.
1497
1497
1498 -i: run the file in IPython's namespace instead of an empty one. This
1498 -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
1499 is useful if you are experimenting with code written in a text editor
1500 which depends on variables defined interactively.
1500 which depends on variables defined interactively.
1501
1501
1502 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1502 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1503 being run. This is particularly useful if IPython is being used to
1503 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
1504 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
1505 cases you are interested in the output of the test results, not in
1506 seeing a traceback of the unittest module.
1506 seeing a traceback of the unittest module.
1507
1507
1508 -t: print timing information at the end of the run. IPython will give
1508 -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
1509 you an estimated CPU time consumption for your script, which under
1510 Unix uses the resource module to avoid the wraparound problems of
1510 Unix uses the resource module to avoid the wraparound problems of
1511 time.clock(). Under Unix, an estimate of time spent on system tasks
1511 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).
1512 is also given (for Windows platforms this is reported as 0.0).
1513
1513
1514 If -t is given, an additional -N<N> option can be given, where <N>
1514 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
1515 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.
1516 run. The final timing report will include total and per run results.
1517
1517
1518 For example (testing the script uniq_stable.py):
1518 For example (testing the script uniq_stable.py):
1519
1519
1520 In [1]: run -t uniq_stable
1520 In [1]: run -t uniq_stable
1521
1521
1522 IPython CPU timings (estimated):\\
1522 IPython CPU timings (estimated):\\
1523 User : 0.19597 s.\\
1523 User : 0.19597 s.\\
1524 System: 0.0 s.\\
1524 System: 0.0 s.\\
1525
1525
1526 In [2]: run -t -N5 uniq_stable
1526 In [2]: run -t -N5 uniq_stable
1527
1527
1528 IPython CPU timings (estimated):\\
1528 IPython CPU timings (estimated):\\
1529 Total runs performed: 5\\
1529 Total runs performed: 5\\
1530 Times : Total Per run\\
1530 Times : Total Per run\\
1531 User : 0.910862 s, 0.1821724 s.\\
1531 User : 0.910862 s, 0.1821724 s.\\
1532 System: 0.0 s, 0.0 s.
1532 System: 0.0 s, 0.0 s.
1533
1533
1534 -d: run your program under the control of pdb, the Python debugger.
1534 -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,
1535 This allows you to execute your program step by step, watch variables,
1536 etc. Internally, what IPython does is similar to calling:
1536 etc. Internally, what IPython does is similar to calling:
1537
1537
1538 pdb.run('execfile("YOURFILENAME")')
1538 pdb.run('execfile("YOURFILENAME")')
1539
1539
1540 with a breakpoint set on line 1 of your file. You can change the line
1540 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
1541 number for this automatic breakpoint to be <N> by using the -bN option
1542 (where N must be an integer). For example:
1542 (where N must be an integer). For example:
1543
1543
1544 %run -d -b40 myscript
1544 %run -d -b40 myscript
1545
1545
1546 will set the first breakpoint at line 40 in myscript.py. Note that
1546 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
1547 the first breakpoint must be set on a line which actually does
1548 something (not a comment or docstring) for it to stop execution.
1548 something (not a comment or docstring) for it to stop execution.
1549
1549
1550 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1550 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
1551 first enter 'c' (without qoutes) to start execution up to the first
1552 breakpoint.
1552 breakpoint.
1553
1553
1554 Entering 'help' gives information about the use of the debugger. You
1554 Entering 'help' gives information about the use of the debugger. You
1555 can easily see pdb's full documentation with "import pdb;pdb.help()"
1555 can easily see pdb's full documentation with "import pdb;pdb.help()"
1556 at a prompt.
1556 at a prompt.
1557
1557
1558 -p: run program under the control of the Python profiler module (which
1558 -p: run program under the control of the Python profiler module (which
1559 prints a detailed report of execution times, function calls, etc).
1559 prints a detailed report of execution times, function calls, etc).
1560
1560
1561 You can pass other options after -p which affect the behavior of the
1561 You can pass other options after -p which affect the behavior of the
1562 profiler itself. See the docs for %prun for details.
1562 profiler itself. See the docs for %prun for details.
1563
1563
1564 In this mode, the program's variables do NOT propagate back to the
1564 In this mode, the program's variables do NOT propagate back to the
1565 IPython interactive namespace (because they remain in the namespace
1565 IPython interactive namespace (because they remain in the namespace
1566 where the profiler executes them).
1566 where the profiler executes them).
1567
1567
1568 Internally this triggers a call to %prun, see its documentation for
1568 Internally this triggers a call to %prun, see its documentation for
1569 details on the options available specifically for profiling.
1569 details on the options available specifically for profiling.
1570
1570
1571 There is one special usage for which the text above doesn't apply:
1571 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,
1572 if the filename ends with .ipy, the file is run as ipython script,
1573 just as if the commands were written on IPython prompt.
1573 just as if the commands were written on IPython prompt.
1574
1574
1575 -m: specify module name to load instead of script path. Similar to
1575 -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
1576 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
1577 want to combine with other %run options. Unlike the python interpreter
1578 only source modules are allowed no .pyc or .pyo files.
1578 only source modules are allowed no .pyc or .pyo files.
1579 For example:
1579 For example:
1580
1580
1581 %run -m example
1581 %run -m example
1582
1582
1583 will run the example module.
1583 will run the example module.
1584
1584
1585 """
1585 """
1586
1586
1587 # get arguments and set sys.argv for program to be run.
1587 # 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:',
1588 opts, arg_lst = self.parse_options(parameter_s, 'nidtN:b:pD:l:rs:T:em:',
1589 mode='list', list_all=1)
1589 mode='list', list_all=1)
1590 if "m" in opts:
1590 if "m" in opts:
1591 modulename = opts["m"][0]
1591 modulename = opts["m"][0]
1592 modpath = find_mod(modulename)
1592 modpath = find_mod(modulename)
1593 if modpath is None:
1593 if modpath is None:
1594 warn('%r is not a valid modulename on sys.path'%modulename)
1594 warn('%r is not a valid modulename on sys.path'%modulename)
1595 return
1595 return
1596 arg_lst = [modpath] + arg_lst
1596 arg_lst = [modpath] + arg_lst
1597 try:
1597 try:
1598 filename = file_finder(arg_lst[0])
1598 filename = file_finder(arg_lst[0])
1599 except IndexError:
1599 except IndexError:
1600 warn('you must provide at least a filename.')
1600 warn('you must provide at least a filename.')
1601 print '\n%run:\n', oinspect.getdoc(self.magic_run)
1601 print '\n%run:\n', oinspect.getdoc(self.magic_run)
1602 return
1602 return
1603 except IOError as e:
1603 except IOError as e:
1604 try:
1604 try:
1605 msg = str(e)
1605 msg = str(e)
1606 except UnicodeError:
1606 except UnicodeError:
1607 msg = e.message
1607 msg = e.message
1608 error(msg)
1608 error(msg)
1609 return
1609 return
1610
1610
1611 if filename.lower().endswith('.ipy'):
1611 if filename.lower().endswith('.ipy'):
1612 self.shell.safe_execfile_ipy(filename)
1612 self.shell.safe_execfile_ipy(filename)
1613 return
1613 return
1614
1614
1615 # Control the response to exit() calls made by the script being run
1615 # Control the response to exit() calls made by the script being run
1616 exit_ignore = 'e' in opts
1616 exit_ignore = 'e' in opts
1617
1617
1618 # Make sure that the running script gets a proper sys.argv as if it
1618 # Make sure that the running script gets a proper sys.argv as if it
1619 # were run from a system shell.
1619 # were run from a system shell.
1620 save_argv = sys.argv # save it for later restoring
1620 save_argv = sys.argv # save it for later restoring
1621
1621
1622 # simulate shell expansion on arguments, at least tilde expansion
1622 # simulate shell expansion on arguments, at least tilde expansion
1623 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
1623 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
1624
1624
1625 sys.argv = [filename] + args # put in the proper filename
1625 sys.argv = [filename] + args # put in the proper filename
1626 # protect sys.argv from potential unicode strings on Python 2:
1626 # protect sys.argv from potential unicode strings on Python 2:
1627 if not py3compat.PY3:
1627 if not py3compat.PY3:
1628 sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ]
1628 sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ]
1629
1629
1630 if 'i' in opts:
1630 if 'i' in opts:
1631 # Run in user's interactive namespace
1631 # Run in user's interactive namespace
1632 prog_ns = self.shell.user_ns
1632 prog_ns = self.shell.user_ns
1633 __name__save = self.shell.user_ns['__name__']
1633 __name__save = self.shell.user_ns['__name__']
1634 prog_ns['__name__'] = '__main__'
1634 prog_ns['__name__'] = '__main__'
1635 main_mod = self.shell.new_main_mod(prog_ns)
1635 main_mod = self.shell.new_main_mod(prog_ns)
1636 else:
1636 else:
1637 # Run in a fresh, empty namespace
1637 # Run in a fresh, empty namespace
1638 if 'n' in opts:
1638 if 'n' in opts:
1639 name = os.path.splitext(os.path.basename(filename))[0]
1639 name = os.path.splitext(os.path.basename(filename))[0]
1640 else:
1640 else:
1641 name = '__main__'
1641 name = '__main__'
1642
1642
1643 main_mod = self.shell.new_main_mod()
1643 main_mod = self.shell.new_main_mod()
1644 prog_ns = main_mod.__dict__
1644 prog_ns = main_mod.__dict__
1645 prog_ns['__name__'] = name
1645 prog_ns['__name__'] = name
1646
1646
1647 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1647 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1648 # set the __file__ global in the script's namespace
1648 # set the __file__ global in the script's namespace
1649 prog_ns['__file__'] = filename
1649 prog_ns['__file__'] = filename
1650
1650
1651 # pickle fix. See interactiveshell for an explanation. But we need to make sure
1651 # 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
1652 # that, if we overwrite __main__, we replace it at the end
1653 main_mod_name = prog_ns['__name__']
1653 main_mod_name = prog_ns['__name__']
1654
1654
1655 if main_mod_name == '__main__':
1655 if main_mod_name == '__main__':
1656 restore_main = sys.modules['__main__']
1656 restore_main = sys.modules['__main__']
1657 else:
1657 else:
1658 restore_main = False
1658 restore_main = False
1659
1659
1660 # This needs to be undone at the end to prevent holding references to
1660 # This needs to be undone at the end to prevent holding references to
1661 # every single object ever created.
1661 # every single object ever created.
1662 sys.modules[main_mod_name] = main_mod
1662 sys.modules[main_mod_name] = main_mod
1663
1663
1664 try:
1664 try:
1665 stats = None
1665 stats = None
1666 with self.readline_no_record:
1666 with self.readline_no_record:
1667 if 'p' in opts:
1667 if 'p' in opts:
1668 stats = self.magic_prun('', 0, opts, arg_lst, prog_ns)
1668 stats = self.magic_prun('', 0, opts, arg_lst, prog_ns)
1669 else:
1669 else:
1670 if 'd' in opts:
1670 if 'd' in opts:
1671 deb = debugger.Pdb(self.shell.colors)
1671 deb = debugger.Pdb(self.shell.colors)
1672 # reset Breakpoint state, which is moronically kept
1672 # reset Breakpoint state, which is moronically kept
1673 # in a class
1673 # in a class
1674 bdb.Breakpoint.next = 1
1674 bdb.Breakpoint.next = 1
1675 bdb.Breakpoint.bplist = {}
1675 bdb.Breakpoint.bplist = {}
1676 bdb.Breakpoint.bpbynumber = [None]
1676 bdb.Breakpoint.bpbynumber = [None]
1677 # Set an initial breakpoint to stop execution
1677 # Set an initial breakpoint to stop execution
1678 maxtries = 10
1678 maxtries = 10
1679 bp = int(opts.get('b', [1])[0])
1679 bp = int(opts.get('b', [1])[0])
1680 checkline = deb.checkline(filename, bp)
1680 checkline = deb.checkline(filename, bp)
1681 if not checkline:
1681 if not checkline:
1682 for bp in range(bp + 1, bp + maxtries + 1):
1682 for bp in range(bp + 1, bp + maxtries + 1):
1683 if deb.checkline(filename, bp):
1683 if deb.checkline(filename, bp):
1684 break
1684 break
1685 else:
1685 else:
1686 msg = ("\nI failed to find a valid line to set "
1686 msg = ("\nI failed to find a valid line to set "
1687 "a breakpoint\n"
1687 "a breakpoint\n"
1688 "after trying up to line: %s.\n"
1688 "after trying up to line: %s.\n"
1689 "Please set a valid breakpoint manually "
1689 "Please set a valid breakpoint manually "
1690 "with the -b option." % bp)
1690 "with the -b option." % bp)
1691 error(msg)
1691 error(msg)
1692 return
1692 return
1693 # if we find a good linenumber, set the breakpoint
1693 # if we find a good linenumber, set the breakpoint
1694 deb.do_break('%s:%s' % (filename, bp))
1694 deb.do_break('%s:%s' % (filename, bp))
1695 # Start file run
1695 # Start file run
1696 print "NOTE: Enter 'c' at the",
1696 print "NOTE: Enter 'c' at the",
1697 print "%s prompt to start your script." % deb.prompt
1697 print "%s prompt to start your script." % deb.prompt
1698 try:
1698 try:
1699 deb.run('execfile("%s")' % filename, prog_ns)
1699 deb.run('execfile("%s")' % filename, prog_ns)
1700
1700
1701 except:
1701 except:
1702 etype, value, tb = sys.exc_info()
1702 etype, value, tb = sys.exc_info()
1703 # Skip three frames in the traceback: the %run one,
1703 # Skip three frames in the traceback: the %run one,
1704 # one inside bdb.py, and the command-line typed by the
1704 # one inside bdb.py, and the command-line typed by the
1705 # user (run by exec in pdb itself).
1705 # user (run by exec in pdb itself).
1706 self.shell.InteractiveTB(etype, value, tb, tb_offset=3)
1706 self.shell.InteractiveTB(etype, value, tb, tb_offset=3)
1707 else:
1707 else:
1708 if runner is None:
1708 if runner is None:
1709 runner = self.shell.safe_execfile
1709 runner = self.shell.safe_execfile
1710 if 't' in opts:
1710 if 't' in opts:
1711 # timed execution
1711 # timed execution
1712 try:
1712 try:
1713 nruns = int(opts['N'][0])
1713 nruns = int(opts['N'][0])
1714 if nruns < 1:
1714 if nruns < 1:
1715 error('Number of runs must be >=1')
1715 error('Number of runs must be >=1')
1716 return
1716 return
1717 except (KeyError):
1717 except (KeyError):
1718 nruns = 1
1718 nruns = 1
1719 twall0 = time.time()
1719 twall0 = time.time()
1720 if nruns == 1:
1720 if nruns == 1:
1721 t0 = clock2()
1721 t0 = clock2()
1722 runner(filename, prog_ns, prog_ns,
1722 runner(filename, prog_ns, prog_ns,
1723 exit_ignore=exit_ignore)
1723 exit_ignore=exit_ignore)
1724 t1 = clock2()
1724 t1 = clock2()
1725 t_usr = t1[0] - t0[0]
1725 t_usr = t1[0] - t0[0]
1726 t_sys = t1[1] - t0[1]
1726 t_sys = t1[1] - t0[1]
1727 print "\nIPython CPU timings (estimated):"
1727 print "\nIPython CPU timings (estimated):"
1728 print " User : %10.2f s." % t_usr
1728 print " User : %10.2f s." % t_usr
1729 print " System : %10.2f s." % t_sys
1729 print " System : %10.2f s." % t_sys
1730 else:
1730 else:
1731 runs = range(nruns)
1731 runs = range(nruns)
1732 t0 = clock2()
1732 t0 = clock2()
1733 for nr in runs:
1733 for nr in runs:
1734 runner(filename, prog_ns, prog_ns,
1734 runner(filename, prog_ns, prog_ns,
1735 exit_ignore=exit_ignore)
1735 exit_ignore=exit_ignore)
1736 t1 = clock2()
1736 t1 = clock2()
1737 t_usr = t1[0] - t0[0]
1737 t_usr = t1[0] - t0[0]
1738 t_sys = t1[1] - t0[1]
1738 t_sys = t1[1] - t0[1]
1739 print "\nIPython CPU timings (estimated):"
1739 print "\nIPython CPU timings (estimated):"
1740 print "Total runs performed:", nruns
1740 print "Total runs performed:", nruns
1741 print " Times : %10.2f %10.2f" % ('Total', 'Per run')
1741 print " Times : %10.2f %10.2f" % ('Total', 'Per run')
1742 print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns)
1742 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)
1743 print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns)
1744 twall1 = time.time()
1744 twall1 = time.time()
1745 print "Wall time: %10.2f s." % (twall1 - twall0)
1745 print "Wall time: %10.2f s." % (twall1 - twall0)
1746
1746
1747 else:
1747 else:
1748 # regular execution
1748 # regular execution
1749 runner(filename, prog_ns, prog_ns, exit_ignore=exit_ignore)
1749 runner(filename, prog_ns, prog_ns, exit_ignore=exit_ignore)
1750
1750
1751 if 'i' in opts:
1751 if 'i' in opts:
1752 self.shell.user_ns['__name__'] = __name__save
1752 self.shell.user_ns['__name__'] = __name__save
1753 else:
1753 else:
1754 # The shell MUST hold a reference to prog_ns so after %run
1754 # The shell MUST hold a reference to prog_ns so after %run
1755 # exits, the python deletion mechanism doesn't zero it out
1755 # exits, the python deletion mechanism doesn't zero it out
1756 # (leaving dangling references).
1756 # (leaving dangling references).
1757 self.shell.cache_main_mod(prog_ns, filename)
1757 self.shell.cache_main_mod(prog_ns, filename)
1758 # update IPython interactive namespace
1758 # update IPython interactive namespace
1759
1759
1760 # Some forms of read errors on the file may mean the
1760 # Some forms of read errors on the file may mean the
1761 # __name__ key was never set; using pop we don't have to
1761 # __name__ key was never set; using pop we don't have to
1762 # worry about a possible KeyError.
1762 # worry about a possible KeyError.
1763 prog_ns.pop('__name__', None)
1763 prog_ns.pop('__name__', None)
1764
1764
1765 self.shell.user_ns.update(prog_ns)
1765 self.shell.user_ns.update(prog_ns)
1766 finally:
1766 finally:
1767 # It's a bit of a mystery why, but __builtins__ can change from
1767 # 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
1768 # 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
1769 # %run. As best I can see, this is NOT something IPython is doing
1770 # at all, and similar problems have been reported before:
1770 # at all, and similar problems have been reported before:
1771 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1771 # 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
1772 # 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
1773 # we can do is to at least restore __builtins__ for the user on
1774 # exit.
1774 # exit.
1775 self.shell.user_ns['__builtins__'] = builtin_mod
1775 self.shell.user_ns['__builtins__'] = builtin_mod
1776
1776
1777 # Ensure key global structures are restored
1777 # Ensure key global structures are restored
1778 sys.argv = save_argv
1778 sys.argv = save_argv
1779 if restore_main:
1779 if restore_main:
1780 sys.modules['__main__'] = restore_main
1780 sys.modules['__main__'] = restore_main
1781 else:
1781 else:
1782 # Remove from sys.modules the reference to main_mod we'd
1782 # Remove from sys.modules the reference to main_mod we'd
1783 # added. Otherwise it will trap references to objects
1783 # added. Otherwise it will trap references to objects
1784 # contained therein.
1784 # contained therein.
1785 del sys.modules[main_mod_name]
1785 del sys.modules[main_mod_name]
1786
1786
1787 return stats
1787 return stats
1788
1788
1789 @skip_doctest
1789 @skip_doctest
1790 def magic_timeit(self, parameter_s =''):
1790 def magic_timeit(self, parameter_s =''):
1791 """Time execution of a Python statement or expression
1791 """Time execution of a Python statement or expression
1792
1792
1793 Usage:\\
1793 Usage:\\
1794 %timeit [-n<N> -r<R> [-t|-c]] statement
1794 %timeit [-n<N> -r<R> [-t|-c]] statement
1795
1795
1796 Time execution of a Python statement or expression using the timeit
1796 Time execution of a Python statement or expression using the timeit
1797 module.
1797 module.
1798
1798
1799 Options:
1799 Options:
1800 -n<N>: execute the given statement <N> times in a loop. If this value
1800 -n<N>: execute the given statement <N> times in a loop. If this value
1801 is not given, a fitting value is chosen.
1801 is not given, a fitting value is chosen.
1802
1802
1803 -r<R>: repeat the loop iteration <R> times and take the best result.
1803 -r<R>: repeat the loop iteration <R> times and take the best result.
1804 Default: 3
1804 Default: 3
1805
1805
1806 -t: use time.time to measure the time, which is the default on Unix.
1806 -t: use time.time to measure the time, which is the default on Unix.
1807 This function measures wall time.
1807 This function measures wall time.
1808
1808
1809 -c: use time.clock to measure the time, which is the default on
1809 -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
1810 Windows and measures wall time. On Unix, resource.getrusage is used
1811 instead and returns the CPU user time.
1811 instead and returns the CPU user time.
1812
1812
1813 -p<P>: use a precision of <P> digits to display the timing result.
1813 -p<P>: use a precision of <P> digits to display the timing result.
1814 Default: 3
1814 Default: 3
1815
1815
1816
1816
1817 Examples:
1817 Examples:
1818
1818
1819 In [1]: %timeit pass
1819 In [1]: %timeit pass
1820 10000000 loops, best of 3: 53.3 ns per loop
1820 10000000 loops, best of 3: 53.3 ns per loop
1821
1821
1822 In [2]: u = None
1822 In [2]: u = None
1823
1823
1824 In [3]: %timeit u is None
1824 In [3]: %timeit u is None
1825 10000000 loops, best of 3: 184 ns per loop
1825 10000000 loops, best of 3: 184 ns per loop
1826
1826
1827 In [4]: %timeit -r 4 u == None
1827 In [4]: %timeit -r 4 u == None
1828 1000000 loops, best of 4: 242 ns per loop
1828 1000000 loops, best of 4: 242 ns per loop
1829
1829
1830 In [5]: import time
1830 In [5]: import time
1831
1831
1832 In [6]: %timeit -n1 time.sleep(2)
1832 In [6]: %timeit -n1 time.sleep(2)
1833 1 loops, best of 3: 2 s per loop
1833 1 loops, best of 3: 2 s per loop
1834
1834
1835
1835
1836 The times reported by %timeit will be slightly higher than those
1836 The times reported by %timeit will be slightly higher than those
1837 reported by the timeit.py script when variables are accessed. This is
1837 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
1838 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
1839 of the shell, compared with timeit.py, which uses a single setup
1840 statement to import function or create variables. Generally, the bias
1840 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
1841 does not matter as long as results from timeit.py are not mixed with
1842 those from %timeit."""
1842 those from %timeit."""
1843
1843
1844 import timeit
1844 import timeit
1845 import math
1845 import math
1846
1846
1847 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1847 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1848 # certain terminals. Until we figure out a robust way of
1848 # certain terminals. Until we figure out a robust way of
1849 # auto-detecting if the terminal can deal with it, use plain 'us' for
1849 # auto-detecting if the terminal can deal with it, use plain 'us' for
1850 # microseconds. I am really NOT happy about disabling the proper
1850 # microseconds. I am really NOT happy about disabling the proper
1851 # 'micro' prefix, but crashing is worse... If anyone knows what the
1851 # 'micro' prefix, but crashing is worse... If anyone knows what the
1852 # right solution for this is, I'm all ears...
1852 # right solution for this is, I'm all ears...
1853 #
1853 #
1854 # Note: using
1854 # Note: using
1855 #
1855 #
1856 # s = u'\xb5'
1856 # s = u'\xb5'
1857 # s.encode(sys.getdefaultencoding())
1857 # s.encode(sys.getdefaultencoding())
1858 #
1858 #
1859 # is not sufficient, as I've seen terminals where that fails but
1859 # is not sufficient, as I've seen terminals where that fails but
1860 # print s
1860 # print s
1861 #
1861 #
1862 # succeeds
1862 # succeeds
1863 #
1863 #
1864 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1864 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1865
1865
1866 #units = [u"s", u"ms",u'\xb5',"ns"]
1866 #units = [u"s", u"ms",u'\xb5',"ns"]
1867 units = [u"s", u"ms",u'us',"ns"]
1867 units = [u"s", u"ms",u'us',"ns"]
1868
1868
1869 scaling = [1, 1e3, 1e6, 1e9]
1869 scaling = [1, 1e3, 1e6, 1e9]
1870
1870
1871 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1871 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1872 posix=False, strict=False)
1872 posix=False, strict=False)
1873 if stmt == "":
1873 if stmt == "":
1874 return
1874 return
1875 timefunc = timeit.default_timer
1875 timefunc = timeit.default_timer
1876 number = int(getattr(opts, "n", 0))
1876 number = int(getattr(opts, "n", 0))
1877 repeat = int(getattr(opts, "r", timeit.default_repeat))
1877 repeat = int(getattr(opts, "r", timeit.default_repeat))
1878 precision = int(getattr(opts, "p", 3))
1878 precision = int(getattr(opts, "p", 3))
1879 if hasattr(opts, "t"):
1879 if hasattr(opts, "t"):
1880 timefunc = time.time
1880 timefunc = time.time
1881 if hasattr(opts, "c"):
1881 if hasattr(opts, "c"):
1882 timefunc = clock
1882 timefunc = clock
1883
1883
1884 timer = timeit.Timer(timer=timefunc)
1884 timer = timeit.Timer(timer=timefunc)
1885 # this code has tight coupling to the inner workings of timeit.Timer,
1885 # 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
1886 # but is there a better way to achieve that the code stmt has access
1887 # to the shell namespace?
1887 # to the shell namespace?
1888
1888
1889 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1889 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1890 'setup': "pass"}
1890 'setup': "pass"}
1891 # Track compilation time so it can be reported if too long
1891 # Track compilation time so it can be reported if too long
1892 # Minimum time above which compilation time will be reported
1892 # Minimum time above which compilation time will be reported
1893 tc_min = 0.1
1893 tc_min = 0.1
1894
1894
1895 t0 = clock()
1895 t0 = clock()
1896 code = compile(src, "<magic-timeit>", "exec")
1896 code = compile(src, "<magic-timeit>", "exec")
1897 tc = clock()-t0
1897 tc = clock()-t0
1898
1898
1899 ns = {}
1899 ns = {}
1900 exec code in self.shell.user_ns, ns
1900 exec code in self.shell.user_ns, ns
1901 timer.inner = ns["inner"]
1901 timer.inner = ns["inner"]
1902
1902
1903 if number == 0:
1903 if number == 0:
1904 # determine number so that 0.2 <= total time < 2.0
1904 # determine number so that 0.2 <= total time < 2.0
1905 number = 1
1905 number = 1
1906 for i in range(1, 10):
1906 for i in range(1, 10):
1907 if timer.timeit(number) >= 0.2:
1907 if timer.timeit(number) >= 0.2:
1908 break
1908 break
1909 number *= 10
1909 number *= 10
1910
1910
1911 best = min(timer.repeat(repeat, number)) / number
1911 best = min(timer.repeat(repeat, number)) / number
1912
1912
1913 if best > 0.0 and best < 1000.0:
1913 if best > 0.0 and best < 1000.0:
1914 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1914 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1915 elif best >= 1000.0:
1915 elif best >= 1000.0:
1916 order = 0
1916 order = 0
1917 else:
1917 else:
1918 order = 3
1918 order = 3
1919 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1919 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1920 precision,
1920 precision,
1921 best * scaling[order],
1921 best * scaling[order],
1922 units[order])
1922 units[order])
1923 if tc > tc_min:
1923 if tc > tc_min:
1924 print "Compiler time: %.2f s" % tc
1924 print "Compiler time: %.2f s" % tc
1925
1925
1926 @skip_doctest
1926 @skip_doctest
1927 @needs_local_scope
1927 @needs_local_scope
1928 def magic_time(self,parameter_s = ''):
1928 def magic_time(self,parameter_s = ''):
1929 """Time execution of a Python statement or expression.
1929 """Time execution of a Python statement or expression.
1930
1930
1931 The CPU and wall clock times are printed, and the value of the
1931 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
1932 expression (if any) is returned. Note that under Win32, system time
1933 is always reported as 0, since it can not be measured.
1933 is always reported as 0, since it can not be measured.
1934
1934
1935 This function provides very basic timing functionality. In Python
1935 This function provides very basic timing functionality. In Python
1936 2.3, the timeit module offers more control and sophistication, so this
1936 2.3, the timeit module offers more control and sophistication, so this
1937 could be rewritten to use it (patches welcome).
1937 could be rewritten to use it (patches welcome).
1938
1938
1939 Some examples:
1939 Some examples:
1940
1940
1941 In [1]: time 2**128
1941 In [1]: time 2**128
1942 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1942 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1943 Wall time: 0.00
1943 Wall time: 0.00
1944 Out[1]: 340282366920938463463374607431768211456L
1944 Out[1]: 340282366920938463463374607431768211456L
1945
1945
1946 In [2]: n = 1000000
1946 In [2]: n = 1000000
1947
1947
1948 In [3]: time sum(range(n))
1948 In [3]: time sum(range(n))
1949 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1949 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1950 Wall time: 1.37
1950 Wall time: 1.37
1951 Out[3]: 499999500000L
1951 Out[3]: 499999500000L
1952
1952
1953 In [4]: time print 'hello world'
1953 In [4]: time print 'hello world'
1954 hello world
1954 hello world
1955 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1955 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1956 Wall time: 0.00
1956 Wall time: 0.00
1957
1957
1958 Note that the time needed by Python to compile the given expression
1958 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
1959 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
1960 actual exponentiation is done by Python at compilation time, so while
1961 the expression can take a noticeable amount of time to compute, that
1961 the expression can take a noticeable amount of time to compute, that
1962 time is purely due to the compilation:
1962 time is purely due to the compilation:
1963
1963
1964 In [5]: time 3**9999;
1964 In [5]: time 3**9999;
1965 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1965 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1966 Wall time: 0.00 s
1966 Wall time: 0.00 s
1967
1967
1968 In [6]: time 3**999999;
1968 In [6]: time 3**999999;
1969 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1969 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1970 Wall time: 0.00 s
1970 Wall time: 0.00 s
1971 Compiler : 0.78 s
1971 Compiler : 0.78 s
1972 """
1972 """
1973
1973
1974 # fail immediately if the given expression can't be compiled
1974 # fail immediately if the given expression can't be compiled
1975
1975
1976 expr = self.shell.prefilter(parameter_s,False)
1976 expr = self.shell.prefilter(parameter_s,False)
1977
1977
1978 # Minimum time above which compilation time will be reported
1978 # Minimum time above which compilation time will be reported
1979 tc_min = 0.1
1979 tc_min = 0.1
1980
1980
1981 try:
1981 try:
1982 mode = 'eval'
1982 mode = 'eval'
1983 t0 = clock()
1983 t0 = clock()
1984 code = compile(expr,'<timed eval>',mode)
1984 code = compile(expr,'<timed eval>',mode)
1985 tc = clock()-t0
1985 tc = clock()-t0
1986 except SyntaxError:
1986 except SyntaxError:
1987 mode = 'exec'
1987 mode = 'exec'
1988 t0 = clock()
1988 t0 = clock()
1989 code = compile(expr,'<timed exec>',mode)
1989 code = compile(expr,'<timed exec>',mode)
1990 tc = clock()-t0
1990 tc = clock()-t0
1991 # skew measurement as little as possible
1991 # skew measurement as little as possible
1992 glob = self.shell.user_ns
1992 glob = self.shell.user_ns
1993 locs = self._magic_locals
1993 locs = self._magic_locals
1994 clk = clock2
1994 clk = clock2
1995 wtime = time.time
1995 wtime = time.time
1996 # time execution
1996 # time execution
1997 wall_st = wtime()
1997 wall_st = wtime()
1998 if mode=='eval':
1998 if mode=='eval':
1999 st = clk()
1999 st = clk()
2000 out = eval(code, glob, locs)
2000 out = eval(code, glob, locs)
2001 end = clk()
2001 end = clk()
2002 else:
2002 else:
2003 st = clk()
2003 st = clk()
2004 exec code in glob, locs
2004 exec code in glob, locs
2005 end = clk()
2005 end = clk()
2006 out = None
2006 out = None
2007 wall_end = wtime()
2007 wall_end = wtime()
2008 # Compute actual times and report
2008 # Compute actual times and report
2009 wall_time = wall_end-wall_st
2009 wall_time = wall_end-wall_st
2010 cpu_user = end[0]-st[0]
2010 cpu_user = end[0]-st[0]
2011 cpu_sys = end[1]-st[1]
2011 cpu_sys = end[1]-st[1]
2012 cpu_tot = cpu_user+cpu_sys
2012 cpu_tot = cpu_user+cpu_sys
2013 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
2013 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
2014 (cpu_user,cpu_sys,cpu_tot)
2014 (cpu_user,cpu_sys,cpu_tot)
2015 print "Wall time: %.2f s" % wall_time
2015 print "Wall time: %.2f s" % wall_time
2016 if tc > tc_min:
2016 if tc > tc_min:
2017 print "Compiler : %.2f s" % tc
2017 print "Compiler : %.2f s" % tc
2018 return out
2018 return out
2019
2019
2020 @skip_doctest
2020 @skip_doctest
2021 def magic_macro(self,parameter_s = ''):
2021 def magic_macro(self,parameter_s = ''):
2022 """Define a macro for future re-execution. It accepts ranges of history,
2022 """Define a macro for future re-execution. It accepts ranges of history,
2023 filenames or string objects.
2023 filenames or string objects.
2024
2024
2025 Usage:\\
2025 Usage:\\
2026 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
2026 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
2027
2027
2028 Options:
2028 Options:
2029
2029
2030 -r: use 'raw' input. By default, the 'processed' history is used,
2030 -r: use 'raw' input. By default, the 'processed' history is used,
2031 so that magics are loaded in their transformed version to valid
2031 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
2032 Python. If this option is given, the raw input as typed as the
2033 command line is used instead.
2033 command line is used instead.
2034
2034
2035 This will define a global variable called `name` which is a string
2035 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
2036 made of joining the slices and lines you specify (n1,n2,... numbers
2037 above) from your input history into a single string. This variable
2037 above) from your input history into a single string. This variable
2038 acts like an automatic function which re-executes those lines as if
2038 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
2039 you had typed them. You just type 'name' at the prompt and the code
2040 executes.
2040 executes.
2041
2041
2042 The syntax for indicating input ranges is described in %history.
2042 The syntax for indicating input ranges is described in %history.
2043
2043
2044 Note: as a 'hidden' feature, you can also use traditional python slice
2044 Note: as a 'hidden' feature, you can also use traditional python slice
2045 notation, where N:M means numbers N through M-1.
2045 notation, where N:M means numbers N through M-1.
2046
2046
2047 For example, if your history contains (%hist prints it):
2047 For example, if your history contains (%hist prints it):
2048
2048
2049 44: x=1
2049 44: x=1
2050 45: y=3
2050 45: y=3
2051 46: z=x+y
2051 46: z=x+y
2052 47: print x
2052 47: print x
2053 48: a=5
2053 48: a=5
2054 49: print 'x',x,'y',y
2054 49: print 'x',x,'y',y
2055
2055
2056 you can create a macro with lines 44 through 47 (included) and line 49
2056 you can create a macro with lines 44 through 47 (included) and line 49
2057 called my_macro with:
2057 called my_macro with:
2058
2058
2059 In [55]: %macro my_macro 44-47 49
2059 In [55]: %macro my_macro 44-47 49
2060
2060
2061 Now, typing `my_macro` (without quotes) will re-execute all this code
2061 Now, typing `my_macro` (without quotes) will re-execute all this code
2062 in one pass.
2062 in one pass.
2063
2063
2064 You don't need to give the line-numbers in order, and any given line
2064 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
2065 number can appear multiple times. You can assemble macros with any
2066 lines from your input history in any order.
2066 lines from your input history in any order.
2067
2067
2068 The macro is a simple object which holds its value in an attribute,
2068 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
2069 but IPython's display system checks for macros and executes them as
2070 code instead of printing them when you type their name.
2070 code instead of printing them when you type their name.
2071
2071
2072 You can view a macro's contents by explicitly printing it with:
2072 You can view a macro's contents by explicitly printing it with:
2073
2073
2074 'print macro_name'.
2074 'print macro_name'.
2075
2075
2076 """
2076 """
2077 opts,args = self.parse_options(parameter_s,'r',mode='list')
2077 opts,args = self.parse_options(parameter_s,'r',mode='list')
2078 if not args: # List existing macros
2078 if not args: # List existing macros
2079 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2079 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2080 isinstance(v, Macro))
2080 isinstance(v, Macro))
2081 if len(args) == 1:
2081 if len(args) == 1:
2082 raise UsageError(
2082 raise UsageError(
2083 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2083 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2084 name, codefrom = args[0], " ".join(args[1:])
2084 name, codefrom = args[0], " ".join(args[1:])
2085
2085
2086 #print 'rng',ranges # dbg
2086 #print 'rng',ranges # dbg
2087 try:
2087 try:
2088 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2088 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2089 except (ValueError, TypeError) as e:
2089 except (ValueError, TypeError) as e:
2090 print e.args[0]
2090 print e.args[0]
2091 return
2091 return
2092 macro = Macro(lines)
2092 macro = Macro(lines)
2093 self.shell.define_macro(name, macro)
2093 self.shell.define_macro(name, macro)
2094 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2094 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2095 print '=== Macro contents: ==='
2095 print '=== Macro contents: ==='
2096 print macro,
2096 print macro,
2097
2097
2098 def magic_save(self,parameter_s = ''):
2098 def magic_save(self,parameter_s = ''):
2099 """Save a set of lines or a macro to a given filename.
2099 """Save a set of lines or a macro to a given filename.
2100
2100
2101 Usage:\\
2101 Usage:\\
2102 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2102 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2103
2103
2104 Options:
2104 Options:
2105
2105
2106 -r: use 'raw' input. By default, the 'processed' history is used,
2106 -r: use 'raw' input. By default, the 'processed' history is used,
2107 so that magics are loaded in their transformed version to valid
2107 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
2108 Python. If this option is given, the raw input as typed as the
2109 command line is used instead.
2109 command line is used instead.
2110
2110
2111 This function uses the same syntax as %history for input ranges,
2111 This function uses the same syntax as %history for input ranges,
2112 then saves the lines to the filename you specify.
2112 then saves the lines to the filename you specify.
2113
2113
2114 It adds a '.py' extension to the file if you don't do so yourself, and
2114 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."""
2115 it asks for confirmation before overwriting existing files."""
2116
2116
2117 opts,args = self.parse_options(parameter_s,'r',mode='list')
2117 opts,args = self.parse_options(parameter_s,'r',mode='list')
2118 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
2118 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
2119 if not fname.endswith('.py'):
2119 if not fname.endswith('.py'):
2120 fname += '.py'
2120 fname += '.py'
2121 if os.path.isfile(fname):
2121 if os.path.isfile(fname):
2122 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2122 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2123 if ans.lower() not in ['y','yes']:
2123 if ans.lower() not in ['y','yes']:
2124 print 'Operation cancelled.'
2124 print 'Operation cancelled.'
2125 return
2125 return
2126 try:
2126 try:
2127 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
2127 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
2128 except (TypeError, ValueError) as e:
2128 except (TypeError, ValueError) as e:
2129 print e.args[0]
2129 print e.args[0]
2130 return
2130 return
2131 with py3compat.open(fname,'w', encoding="utf-8") as f:
2131 with py3compat.open(fname,'w', encoding="utf-8") as f:
2132 f.write(u"# coding: utf-8\n")
2132 f.write(u"# coding: utf-8\n")
2133 f.write(py3compat.cast_unicode(cmds))
2133 f.write(py3compat.cast_unicode(cmds))
2134 print 'The following commands were written to file `%s`:' % fname
2134 print 'The following commands were written to file `%s`:' % fname
2135 print cmds
2135 print cmds
2136
2136
2137 def magic_pastebin(self, parameter_s = ''):
2137 def magic_pastebin(self, parameter_s = ''):
2138 """Upload code to the 'Lodge it' paste bin, returning the URL."""
2138 """Upload code to the 'Lodge it' paste bin, returning the URL."""
2139 try:
2139 try:
2140 code = self.shell.find_user_code(parameter_s)
2140 code = self.shell.find_user_code(parameter_s)
2141 except (ValueError, TypeError) as e:
2141 except (ValueError, TypeError) as e:
2142 print e.args[0]
2142 print e.args[0]
2143 return
2143 return
2144 pbserver = ServerProxy('http://paste.pocoo.org/xmlrpc/')
2144 pbserver = ServerProxy('http://paste.pocoo.org/xmlrpc/')
2145 id = pbserver.pastes.newPaste("python", code)
2145 id = pbserver.pastes.newPaste("python", code)
2146 return "http://paste.pocoo.org/show/" + id
2146 return "http://paste.pocoo.org/show/" + id
2147
2147
2148 def magic_loadpy(self, arg_s):
2148 def magic_loadpy(self, arg_s):
2149 """Load a .py python script into the GUI console.
2149 """Load a .py python script into the GUI console.
2150
2150
2151 This magic command can either take a local filename or a url::
2151 This magic command can either take a local filename or a url::
2152
2152
2153 %loadpy myscript.py
2153 %loadpy myscript.py
2154 %loadpy http://www.example.com/myscript.py
2154 %loadpy http://www.example.com/myscript.py
2155 """
2155 """
2156 arg_s = unquote_filename(arg_s)
2156 arg_s = unquote_filename(arg_s)
2157 remote_url = arg_s.startswith(('http://', 'https://'))
2157 remote_url = arg_s.startswith(('http://', 'https://'))
2158 local_url = not remote_url
2158 local_url = not remote_url
2159 if local_url and not arg_s.endswith('.py'):
2159 if local_url and not arg_s.endswith('.py'):
2160 # Local files must be .py; for remote URLs it's possible that the
2160 # 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
2161 # fetch URL doesn't have a .py in it (many servers have an opaque
2162 # URL, such as scipy-central.org).
2162 # URL, such as scipy-central.org).
2163 raise ValueError('%%load only works with .py files: %s' % arg_s)
2163 raise ValueError('%%load only works with .py files: %s' % arg_s)
2164 if remote_url:
2164 if remote_url:
2165 import urllib2
2165 import urllib2
2166 fileobj = urllib2.urlopen(arg_s)
2167 # While responses have a .info().getencoding() way of asking for
2166 # While responses have a .info().getencoding() way of asking for
2168 # their encoding, in *many* cases the return value is bogus. In
2167 # their encoding, in *many* cases the return value is bogus. In
2169 # the wild, servers serving utf-8 but declaring latin-1 are
2168 # the wild, servers serving utf-8 but declaring latin-1 are
2170 # extremely common, as the old HTTP standards specify latin-1 as
2169 # 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
2170 # the default but many modern filesystems use utf-8. So we can NOT
2172 # rely on the headers. Short of building complex encoding-guessing
2171 # rely on the headers. Short of building complex encoding-guessing
2173 # logic, going with utf-8 is a simple solution likely to be right
2172 # logic, going with utf-8 is a simple solution likely to be right
2174 # in most real-world cases.
2173 # in most real-world cases.
2175 linesource = fileobj.read().decode('utf-8', 'replace').splitlines()
2174 with urllib2.urlopen(arg_s) as fileobj:
2175 linesource = fileobj.read().decode('utf-8', 'replace').splitlines()
2176 else:
2176 else:
2177 fileobj = linesource = open(arg_s)
2177 with open(arg_s) as fileobj:
2178 linesource = fileobj.read().splitlines()
2178
2179
2179 # Strip out encoding declarations
2180 # Strip out encoding declarations
2180 lines = [l for l in linesource if not _encoding_declaration_re.match(l)]
2181 lines = [l for l in linesource if not _encoding_declaration_re.match(l)]
2181 fileobj.close()
2182
2182
2183 self.set_next_input(os.linesep.join(lines))
2183 self.set_next_input(os.linesep.join(lines))
2184
2184
2185 def _find_edit_target(self, args, opts, last_call):
2185 def _find_edit_target(self, args, opts, last_call):
2186 """Utility method used by magic_edit to find what to edit."""
2186 """Utility method used by magic_edit to find what to edit."""
2187
2187
2188 def make_filename(arg):
2188 def make_filename(arg):
2189 "Make a filename from the given args"
2189 "Make a filename from the given args"
2190 arg = unquote_filename(arg)
2190 arg = unquote_filename(arg)
2191 try:
2191 try:
2192 filename = get_py_filename(arg)
2192 filename = get_py_filename(arg)
2193 except IOError:
2193 except IOError:
2194 # If it ends with .py but doesn't already exist, assume we want
2194 # If it ends with .py but doesn't already exist, assume we want
2195 # a new file.
2195 # a new file.
2196 if arg.endswith('.py'):
2196 if arg.endswith('.py'):
2197 filename = arg
2197 filename = arg
2198 else:
2198 else:
2199 filename = None
2199 filename = None
2200 return filename
2200 return filename
2201
2201
2202 # Set a few locals from the options for convenience:
2202 # Set a few locals from the options for convenience:
2203 opts_prev = 'p' in opts
2203 opts_prev = 'p' in opts
2204 opts_raw = 'r' in opts
2204 opts_raw = 'r' in opts
2205
2205
2206 # custom exceptions
2206 # custom exceptions
2207 class DataIsObject(Exception): pass
2207 class DataIsObject(Exception): pass
2208
2208
2209 # Default line number value
2209 # Default line number value
2210 lineno = opts.get('n',None)
2210 lineno = opts.get('n',None)
2211
2211
2212 if opts_prev:
2212 if opts_prev:
2213 args = '_%s' % last_call[0]
2213 args = '_%s' % last_call[0]
2214 if not self.shell.user_ns.has_key(args):
2214 if not self.shell.user_ns.has_key(args):
2215 args = last_call[1]
2215 args = last_call[1]
2216
2216
2217 # use last_call to remember the state of the previous call, but don't
2217 # use last_call to remember the state of the previous call, but don't
2218 # let it be clobbered by successive '-p' calls.
2218 # let it be clobbered by successive '-p' calls.
2219 try:
2219 try:
2220 last_call[0] = self.shell.displayhook.prompt_count
2220 last_call[0] = self.shell.displayhook.prompt_count
2221 if not opts_prev:
2221 if not opts_prev:
2222 last_call[1] = parameter_s
2222 last_call[1] = parameter_s
2223 except:
2223 except:
2224 pass
2224 pass
2225
2225
2226 # by default this is done with temp files, except when the given
2226 # by default this is done with temp files, except when the given
2227 # arg is a filename
2227 # arg is a filename
2228 use_temp = True
2228 use_temp = True
2229
2229
2230 data = ''
2230 data = ''
2231
2231
2232 # First, see if the arguments should be a filename.
2232 # First, see if the arguments should be a filename.
2233 filename = make_filename(args)
2233 filename = make_filename(args)
2234 if filename:
2234 if filename:
2235 use_temp = False
2235 use_temp = False
2236 elif args:
2236 elif args:
2237 # Mode where user specifies ranges of lines, like in %macro.
2237 # Mode where user specifies ranges of lines, like in %macro.
2238 data = self.extract_input_lines(args, opts_raw)
2238 data = self.extract_input_lines(args, opts_raw)
2239 if not data:
2239 if not data:
2240 try:
2240 try:
2241 # Load the parameter given as a variable. If not a string,
2241 # Load the parameter given as a variable. If not a string,
2242 # process it as an object instead (below)
2242 # process it as an object instead (below)
2243
2243
2244 #print '*** args',args,'type',type(args) # dbg
2244 #print '*** args',args,'type',type(args) # dbg
2245 data = eval(args, self.shell.user_ns)
2245 data = eval(args, self.shell.user_ns)
2246 if not isinstance(data, basestring):
2246 if not isinstance(data, basestring):
2247 raise DataIsObject
2247 raise DataIsObject
2248
2248
2249 except (NameError,SyntaxError):
2249 except (NameError,SyntaxError):
2250 # given argument is not a variable, try as a filename
2250 # given argument is not a variable, try as a filename
2251 filename = make_filename(args)
2251 filename = make_filename(args)
2252 if filename is None:
2252 if filename is None:
2253 warn("Argument given (%s) can't be found as a variable "
2253 warn("Argument given (%s) can't be found as a variable "
2254 "or as a filename." % args)
2254 "or as a filename." % args)
2255 return
2255 return
2256 use_temp = False
2256 use_temp = False
2257
2257
2258 except DataIsObject:
2258 except DataIsObject:
2259 # macros have a special edit function
2259 # macros have a special edit function
2260 if isinstance(data, Macro):
2260 if isinstance(data, Macro):
2261 raise MacroToEdit(data)
2261 raise MacroToEdit(data)
2262
2262
2263 # For objects, try to edit the file where they are defined
2263 # For objects, try to edit the file where they are defined
2264 try:
2264 try:
2265 filename = inspect.getabsfile(data)
2265 filename = inspect.getabsfile(data)
2266 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2266 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2267 # class created by %edit? Try to find source
2267 # class created by %edit? Try to find source
2268 # by looking for method definitions instead, the
2268 # by looking for method definitions instead, the
2269 # __module__ in those classes is FakeModule.
2269 # __module__ in those classes is FakeModule.
2270 attrs = [getattr(data, aname) for aname in dir(data)]
2270 attrs = [getattr(data, aname) for aname in dir(data)]
2271 for attr in attrs:
2271 for attr in attrs:
2272 if not inspect.ismethod(attr):
2272 if not inspect.ismethod(attr):
2273 continue
2273 continue
2274 filename = inspect.getabsfile(attr)
2274 filename = inspect.getabsfile(attr)
2275 if filename and 'fakemodule' not in filename.lower():
2275 if filename and 'fakemodule' not in filename.lower():
2276 # change the attribute to be the edit target instead
2276 # change the attribute to be the edit target instead
2277 data = attr
2277 data = attr
2278 break
2278 break
2279
2279
2280 datafile = 1
2280 datafile = 1
2281 except TypeError:
2281 except TypeError:
2282 filename = make_filename(args)
2282 filename = make_filename(args)
2283 datafile = 1
2283 datafile = 1
2284 warn('Could not find file where `%s` is defined.\n'
2284 warn('Could not find file where `%s` is defined.\n'
2285 'Opening a file named `%s`' % (args,filename))
2285 'Opening a file named `%s`' % (args,filename))
2286 # Now, make sure we can actually read the source (if it was in
2286 # Now, make sure we can actually read the source (if it was in
2287 # a temp file it's gone by now).
2287 # a temp file it's gone by now).
2288 if datafile:
2288 if datafile:
2289 try:
2289 try:
2290 if lineno is None:
2290 if lineno is None:
2291 lineno = inspect.getsourcelines(data)[1]
2291 lineno = inspect.getsourcelines(data)[1]
2292 except IOError:
2292 except IOError:
2293 filename = make_filename(args)
2293 filename = make_filename(args)
2294 if filename is None:
2294 if filename is None:
2295 warn('The file `%s` where `%s` was defined cannot '
2295 warn('The file `%s` where `%s` was defined cannot '
2296 'be read.' % (filename,data))
2296 'be read.' % (filename,data))
2297 return
2297 return
2298 use_temp = False
2298 use_temp = False
2299
2299
2300 if use_temp:
2300 if use_temp:
2301 filename = self.shell.mktempfile(data)
2301 filename = self.shell.mktempfile(data)
2302 print 'IPython will make a temporary file named:',filename
2302 print 'IPython will make a temporary file named:',filename
2303
2303
2304 return filename, lineno, use_temp
2304 return filename, lineno, use_temp
2305
2305
2306 def _edit_macro(self,mname,macro):
2306 def _edit_macro(self,mname,macro):
2307 """open an editor with the macro data in a file"""
2307 """open an editor with the macro data in a file"""
2308 filename = self.shell.mktempfile(macro.value)
2308 filename = self.shell.mktempfile(macro.value)
2309 self.shell.hooks.editor(filename)
2309 self.shell.hooks.editor(filename)
2310
2310
2311 # and make a new macro object, to replace the old one
2311 # and make a new macro object, to replace the old one
2312 mfile = open(filename)
2312 mfile = open(filename)
2313 mvalue = mfile.read()
2313 mvalue = mfile.read()
2314 mfile.close()
2314 mfile.close()
2315 self.shell.user_ns[mname] = Macro(mvalue)
2315 self.shell.user_ns[mname] = Macro(mvalue)
2316
2316
2317 def magic_ed(self,parameter_s=''):
2317 def magic_ed(self,parameter_s=''):
2318 """Alias to %edit."""
2318 """Alias to %edit."""
2319 return self.magic_edit(parameter_s)
2319 return self.magic_edit(parameter_s)
2320
2320
2321 @skip_doctest
2321 @skip_doctest
2322 def magic_edit(self,parameter_s='',last_call=['','']):
2322 def magic_edit(self,parameter_s='',last_call=['','']):
2323 """Bring up an editor and execute the resulting code.
2323 """Bring up an editor and execute the resulting code.
2324
2324
2325 Usage:
2325 Usage:
2326 %edit [options] [args]
2326 %edit [options] [args]
2327
2327
2328 %edit runs IPython's editor hook. The default version of this hook is
2328 %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.
2329 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
2330 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
2331 notepad under Windows. See the end of this docstring for how to change
2332 the editor hook.
2332 the editor hook.
2333
2333
2334 You can also set the value of this editor via the
2334 You can also set the value of this editor via the
2335 ``TerminalInteractiveShell.editor`` option in your configuration file.
2335 ``TerminalInteractiveShell.editor`` option in your configuration file.
2336 This is useful if you wish to use a different editor from your typical
2336 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
2337 default with IPython (and for Windows users who typically don't set
2338 environment variables).
2338 environment variables).
2339
2339
2340 This command allows you to conveniently edit multi-line code right in
2340 This command allows you to conveniently edit multi-line code right in
2341 your IPython session.
2341 your IPython session.
2342
2342
2343 If called without arguments, %edit opens up an empty editor with a
2343 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
2344 temporary file and will execute the contents of this file when you
2345 close it (don't forget to save it!).
2345 close it (don't forget to save it!).
2346
2346
2347
2347
2348 Options:
2348 Options:
2349
2349
2350 -n <number>: open the editor at a specified line number. By default,
2350 -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
2351 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
2352 you can configure this by providing your own modified hook if your
2353 favorite editor supports line-number specifications with a different
2353 favorite editor supports line-number specifications with a different
2354 syntax.
2354 syntax.
2355
2355
2356 -p: this will call the editor with the same data as the previous time
2356 -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
2357 it was used, regardless of how long ago (in your current session) it
2358 was.
2358 was.
2359
2359
2360 -r: use 'raw' input. This option only applies to input taken from the
2360 -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
2361 user's history. By default, the 'processed' history is used, so that
2362 magics are loaded in their transformed version to valid Python. If
2362 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
2363 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
2364 used instead. When you exit the editor, it will be executed by
2365 IPython's own processor.
2365 IPython's own processor.
2366
2366
2367 -x: do not execute the edited code immediately upon exit. This is
2367 -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
2368 mainly useful if you are editing programs which need to be called with
2369 command line arguments, which you can then do using %run.
2369 command line arguments, which you can then do using %run.
2370
2370
2371
2371
2372 Arguments:
2372 Arguments:
2373
2373
2374 If arguments are given, the following possibilites exist:
2374 If arguments are given, the following possibilites exist:
2375
2375
2376 - If the argument is a filename, IPython will load that into the
2376 - If the argument is a filename, IPython will load that into the
2377 editor. It will execute its contents with execfile() when you exit,
2377 editor. It will execute its contents with execfile() when you exit,
2378 loading any code in the file into your interactive namespace.
2378 loading any code in the file into your interactive namespace.
2379
2379
2380 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
2380 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
2381 The syntax is the same as in the %history magic.
2381 The syntax is the same as in the %history magic.
2382
2382
2383 - If the argument is a string variable, its contents are loaded
2383 - If the argument is a string variable, its contents are loaded
2384 into the editor. You can thus edit any string which contains
2384 into the editor. You can thus edit any string which contains
2385 python code (including the result of previous edits).
2385 python code (including the result of previous edits).
2386
2386
2387 - If the argument is the name of an object (other than a string),
2387 - 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
2388 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`
2389 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,
2390 to load an editor exactly at the point where 'function' is defined,
2391 edit it and have the file be executed automatically.
2391 edit it and have the file be executed automatically.
2392
2392
2393 - If the object is a macro (see %macro for details), this opens up your
2393 - 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.
2394 specified editor with a temporary file containing the macro's data.
2395 Upon exit, the macro is reloaded with the contents of the file.
2395 Upon exit, the macro is reloaded with the contents of the file.
2396
2396
2397 Note: opening at an exact line is only supported under Unix, and some
2397 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
2398 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2399 '+NUMBER' parameter necessary for this feature. Good editors like
2399 '+NUMBER' parameter necessary for this feature. Good editors like
2400 (X)Emacs, vi, jed, pico and joe all do.
2400 (X)Emacs, vi, jed, pico and joe all do.
2401
2401
2402 After executing your code, %edit will return as output the code you
2402 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
2403 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,
2404 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
2405 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2406 the output.
2406 the output.
2407
2407
2408 Note that %edit is also available through the alias %ed.
2408 Note that %edit is also available through the alias %ed.
2409
2409
2410 This is an example of creating a simple function inside the editor and
2410 This is an example of creating a simple function inside the editor and
2411 then modifying it. First, start up the editor:
2411 then modifying it. First, start up the editor:
2412
2412
2413 In [1]: ed
2413 In [1]: ed
2414 Editing... done. Executing edited code...
2414 Editing... done. Executing edited code...
2415 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2415 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2416
2416
2417 We can then call the function foo():
2417 We can then call the function foo():
2418
2418
2419 In [2]: foo()
2419 In [2]: foo()
2420 foo() was defined in an editing session
2420 foo() was defined in an editing session
2421
2421
2422 Now we edit foo. IPython automatically loads the editor with the
2422 Now we edit foo. IPython automatically loads the editor with the
2423 (temporary) file where foo() was previously defined:
2423 (temporary) file where foo() was previously defined:
2424
2424
2425 In [3]: ed foo
2425 In [3]: ed foo
2426 Editing... done. Executing edited code...
2426 Editing... done. Executing edited code...
2427
2427
2428 And if we call foo() again we get the modified version:
2428 And if we call foo() again we get the modified version:
2429
2429
2430 In [4]: foo()
2430 In [4]: foo()
2431 foo() has now been changed!
2431 foo() has now been changed!
2432
2432
2433 Here is an example of how to edit a code snippet successive
2433 Here is an example of how to edit a code snippet successive
2434 times. First we call the editor:
2434 times. First we call the editor:
2435
2435
2436 In [5]: ed
2436 In [5]: ed
2437 Editing... done. Executing edited code...
2437 Editing... done. Executing edited code...
2438 hello
2438 hello
2439 Out[5]: "print 'hello'n"
2439 Out[5]: "print 'hello'n"
2440
2440
2441 Now we call it again with the previous output (stored in _):
2441 Now we call it again with the previous output (stored in _):
2442
2442
2443 In [6]: ed _
2443 In [6]: ed _
2444 Editing... done. Executing edited code...
2444 Editing... done. Executing edited code...
2445 hello world
2445 hello world
2446 Out[6]: "print 'hello world'n"
2446 Out[6]: "print 'hello world'n"
2447
2447
2448 Now we call it with the output #8 (stored in _8, also as Out[8]):
2448 Now we call it with the output #8 (stored in _8, also as Out[8]):
2449
2449
2450 In [7]: ed _8
2450 In [7]: ed _8
2451 Editing... done. Executing edited code...
2451 Editing... done. Executing edited code...
2452 hello again
2452 hello again
2453 Out[7]: "print 'hello again'n"
2453 Out[7]: "print 'hello again'n"
2454
2454
2455
2455
2456 Changing the default editor hook:
2456 Changing the default editor hook:
2457
2457
2458 If you wish to write your own editor hook, you can put it in a
2458 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
2459 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
2460 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
2461 starting example for further modifications. That file also has
2462 general instructions on how to set a new hook for use once you've
2462 general instructions on how to set a new hook for use once you've
2463 defined it."""
2463 defined it."""
2464 opts,args = self.parse_options(parameter_s,'prxn:')
2464 opts,args = self.parse_options(parameter_s,'prxn:')
2465
2465
2466 try:
2466 try:
2467 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
2467 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
2468 except MacroToEdit as e:
2468 except MacroToEdit as e:
2469 self._edit_macro(args, e.args[0])
2469 self._edit_macro(args, e.args[0])
2470 return
2470 return
2471
2471
2472 # do actual editing here
2472 # do actual editing here
2473 print 'Editing...',
2473 print 'Editing...',
2474 sys.stdout.flush()
2474 sys.stdout.flush()
2475 try:
2475 try:
2476 # Quote filenames that may have spaces in them
2476 # Quote filenames that may have spaces in them
2477 if ' ' in filename:
2477 if ' ' in filename:
2478 filename = "'%s'" % filename
2478 filename = "'%s'" % filename
2479 self.shell.hooks.editor(filename,lineno)
2479 self.shell.hooks.editor(filename,lineno)
2480 except TryNext:
2480 except TryNext:
2481 warn('Could not open editor')
2481 warn('Could not open editor')
2482 return
2482 return
2483
2483
2484 # XXX TODO: should this be generalized for all string vars?
2484 # XXX TODO: should this be generalized for all string vars?
2485 # For now, this is special-cased to blocks created by cpaste
2485 # For now, this is special-cased to blocks created by cpaste
2486 if args.strip() == 'pasted_block':
2486 if args.strip() == 'pasted_block':
2487 self.shell.user_ns['pasted_block'] = file_read(filename)
2487 self.shell.user_ns['pasted_block'] = file_read(filename)
2488
2488
2489 if 'x' in opts: # -x prevents actual execution
2489 if 'x' in opts: # -x prevents actual execution
2490 print
2490 print
2491 else:
2491 else:
2492 print 'done. Executing edited code...'
2492 print 'done. Executing edited code...'
2493 if 'r' in opts: # Untranslated IPython code
2493 if 'r' in opts: # Untranslated IPython code
2494 self.shell.run_cell(file_read(filename),
2494 self.shell.run_cell(file_read(filename),
2495 store_history=False)
2495 store_history=False)
2496 else:
2496 else:
2497 self.shell.safe_execfile(filename,self.shell.user_ns,
2497 self.shell.safe_execfile(filename,self.shell.user_ns,
2498 self.shell.user_ns)
2498 self.shell.user_ns)
2499
2499
2500 if is_temp:
2500 if is_temp:
2501 try:
2501 try:
2502 return open(filename).read()
2502 return open(filename).read()
2503 except IOError,msg:
2503 except IOError,msg:
2504 if msg.filename == filename:
2504 if msg.filename == filename:
2505 warn('File not found. Did you forget to save?')
2505 warn('File not found. Did you forget to save?')
2506 return
2506 return
2507 else:
2507 else:
2508 self.shell.showtraceback()
2508 self.shell.showtraceback()
2509
2509
2510 def magic_xmode(self,parameter_s = ''):
2510 def magic_xmode(self,parameter_s = ''):
2511 """Switch modes for the exception handlers.
2511 """Switch modes for the exception handlers.
2512
2512
2513 Valid modes: Plain, Context and Verbose.
2513 Valid modes: Plain, Context and Verbose.
2514
2514
2515 If called without arguments, acts as a toggle."""
2515 If called without arguments, acts as a toggle."""
2516
2516
2517 def xmode_switch_err(name):
2517 def xmode_switch_err(name):
2518 warn('Error changing %s exception modes.\n%s' %
2518 warn('Error changing %s exception modes.\n%s' %
2519 (name,sys.exc_info()[1]))
2519 (name,sys.exc_info()[1]))
2520
2520
2521 shell = self.shell
2521 shell = self.shell
2522 new_mode = parameter_s.strip().capitalize()
2522 new_mode = parameter_s.strip().capitalize()
2523 try:
2523 try:
2524 shell.InteractiveTB.set_mode(mode=new_mode)
2524 shell.InteractiveTB.set_mode(mode=new_mode)
2525 print 'Exception reporting mode:',shell.InteractiveTB.mode
2525 print 'Exception reporting mode:',shell.InteractiveTB.mode
2526 except:
2526 except:
2527 xmode_switch_err('user')
2527 xmode_switch_err('user')
2528
2528
2529 def magic_colors(self,parameter_s = ''):
2529 def magic_colors(self,parameter_s = ''):
2530 """Switch color scheme for prompts, info system and exception handlers.
2530 """Switch color scheme for prompts, info system and exception handlers.
2531
2531
2532 Currently implemented schemes: NoColor, Linux, LightBG.
2532 Currently implemented schemes: NoColor, Linux, LightBG.
2533
2533
2534 Color scheme names are not case-sensitive.
2534 Color scheme names are not case-sensitive.
2535
2535
2536 Examples
2536 Examples
2537 --------
2537 --------
2538 To get a plain black and white terminal::
2538 To get a plain black and white terminal::
2539
2539
2540 %colors nocolor
2540 %colors nocolor
2541 """
2541 """
2542
2542
2543 def color_switch_err(name):
2543 def color_switch_err(name):
2544 warn('Error changing %s color schemes.\n%s' %
2544 warn('Error changing %s color schemes.\n%s' %
2545 (name,sys.exc_info()[1]))
2545 (name,sys.exc_info()[1]))
2546
2546
2547
2547
2548 new_scheme = parameter_s.strip()
2548 new_scheme = parameter_s.strip()
2549 if not new_scheme:
2549 if not new_scheme:
2550 raise UsageError(
2550 raise UsageError(
2551 "%colors: you must specify a color scheme. See '%colors?'")
2551 "%colors: you must specify a color scheme. See '%colors?'")
2552 return
2552 return
2553 # local shortcut
2553 # local shortcut
2554 shell = self.shell
2554 shell = self.shell
2555
2555
2556 import IPython.utils.rlineimpl as readline
2556 import IPython.utils.rlineimpl as readline
2557
2557
2558 if not shell.colors_force and \
2558 if not shell.colors_force and \
2559 not readline.have_readline and sys.platform == "win32":
2559 not readline.have_readline and sys.platform == "win32":
2560 msg = """\
2560 msg = """\
2561 Proper color support under MS Windows requires the pyreadline library.
2561 Proper color support under MS Windows requires the pyreadline library.
2562 You can find it at:
2562 You can find it at:
2563 http://ipython.org/pyreadline.html
2563 http://ipython.org/pyreadline.html
2564 Gary's readline needs the ctypes module, from:
2564 Gary's readline needs the ctypes module, from:
2565 http://starship.python.net/crew/theller/ctypes
2565 http://starship.python.net/crew/theller/ctypes
2566 (Note that ctypes is already part of Python versions 2.5 and newer).
2566 (Note that ctypes is already part of Python versions 2.5 and newer).
2567
2567
2568 Defaulting color scheme to 'NoColor'"""
2568 Defaulting color scheme to 'NoColor'"""
2569 new_scheme = 'NoColor'
2569 new_scheme = 'NoColor'
2570 warn(msg)
2570 warn(msg)
2571
2571
2572 # readline option is 0
2572 # readline option is 0
2573 if not shell.colors_force and not shell.has_readline:
2573 if not shell.colors_force and not shell.has_readline:
2574 new_scheme = 'NoColor'
2574 new_scheme = 'NoColor'
2575
2575
2576 # Set prompt colors
2576 # Set prompt colors
2577 try:
2577 try:
2578 shell.prompt_manager.color_scheme = new_scheme
2578 shell.prompt_manager.color_scheme = new_scheme
2579 except:
2579 except:
2580 color_switch_err('prompt')
2580 color_switch_err('prompt')
2581 else:
2581 else:
2582 shell.colors = \
2582 shell.colors = \
2583 shell.prompt_manager.color_scheme_table.active_scheme_name
2583 shell.prompt_manager.color_scheme_table.active_scheme_name
2584 # Set exception colors
2584 # Set exception colors
2585 try:
2585 try:
2586 shell.InteractiveTB.set_colors(scheme = new_scheme)
2586 shell.InteractiveTB.set_colors(scheme = new_scheme)
2587 shell.SyntaxTB.set_colors(scheme = new_scheme)
2587 shell.SyntaxTB.set_colors(scheme = new_scheme)
2588 except:
2588 except:
2589 color_switch_err('exception')
2589 color_switch_err('exception')
2590
2590
2591 # Set info (for 'object?') colors
2591 # Set info (for 'object?') colors
2592 if shell.color_info:
2592 if shell.color_info:
2593 try:
2593 try:
2594 shell.inspector.set_active_scheme(new_scheme)
2594 shell.inspector.set_active_scheme(new_scheme)
2595 except:
2595 except:
2596 color_switch_err('object inspector')
2596 color_switch_err('object inspector')
2597 else:
2597 else:
2598 shell.inspector.set_active_scheme('NoColor')
2598 shell.inspector.set_active_scheme('NoColor')
2599
2599
2600 def magic_pprint(self, parameter_s=''):
2600 def magic_pprint(self, parameter_s=''):
2601 """Toggle pretty printing on/off."""
2601 """Toggle pretty printing on/off."""
2602 ptformatter = self.shell.display_formatter.formatters['text/plain']
2602 ptformatter = self.shell.display_formatter.formatters['text/plain']
2603 ptformatter.pprint = bool(1 - ptformatter.pprint)
2603 ptformatter.pprint = bool(1 - ptformatter.pprint)
2604 print 'Pretty printing has been turned', \
2604 print 'Pretty printing has been turned', \
2605 ['OFF','ON'][ptformatter.pprint]
2605 ['OFF','ON'][ptformatter.pprint]
2606
2606
2607 #......................................................................
2607 #......................................................................
2608 # Functions to implement unix shell-type things
2608 # Functions to implement unix shell-type things
2609
2609
2610 @skip_doctest
2610 @skip_doctest
2611 def magic_alias(self, parameter_s = ''):
2611 def magic_alias(self, parameter_s = ''):
2612 """Define an alias for a system command.
2612 """Define an alias for a system command.
2613
2613
2614 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2614 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2615
2615
2616 Then, typing 'alias_name params' will execute the system command 'cmd
2616 Then, typing 'alias_name params' will execute the system command 'cmd
2617 params' (from your underlying operating system).
2617 params' (from your underlying operating system).
2618
2618
2619 Aliases have lower precedence than magic functions and Python normal
2619 Aliases have lower precedence than magic functions and Python normal
2620 variables, so if 'foo' is both a Python variable and an alias, the
2620 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.
2621 alias can not be executed until 'del foo' removes the Python variable.
2622
2622
2623 You can use the %l specifier in an alias definition to represent the
2623 You can use the %l specifier in an alias definition to represent the
2624 whole line when the alias is called. For example:
2624 whole line when the alias is called. For example:
2625
2625
2626 In [2]: alias bracket echo "Input in brackets: <%l>"
2626 In [2]: alias bracket echo "Input in brackets: <%l>"
2627 In [3]: bracket hello world
2627 In [3]: bracket hello world
2628 Input in brackets: <hello world>
2628 Input in brackets: <hello world>
2629
2629
2630 You can also define aliases with parameters using %s specifiers (one
2630 You can also define aliases with parameters using %s specifiers (one
2631 per parameter):
2631 per parameter):
2632
2632
2633 In [1]: alias parts echo first %s second %s
2633 In [1]: alias parts echo first %s second %s
2634 In [2]: %parts A B
2634 In [2]: %parts A B
2635 first A second B
2635 first A second B
2636 In [3]: %parts A
2636 In [3]: %parts A
2637 Incorrect number of arguments: 2 expected.
2637 Incorrect number of arguments: 2 expected.
2638 parts is an alias to: 'echo first %s second %s'
2638 parts is an alias to: 'echo first %s second %s'
2639
2639
2640 Note that %l and %s are mutually exclusive. You can only use one or
2640 Note that %l and %s are mutually exclusive. You can only use one or
2641 the other in your aliases.
2641 the other in your aliases.
2642
2642
2643 Aliases expand Python variables just like system calls using ! or !!
2643 Aliases expand Python variables just like system calls using ! or !!
2644 do: all expressions prefixed with '$' get expanded. For details of
2644 do: all expressions prefixed with '$' get expanded. For details of
2645 the semantic rules, see PEP-215:
2645 the semantic rules, see PEP-215:
2646 http://www.python.org/peps/pep-0215.html. This is the library used by
2646 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
2647 IPython for variable expansion. If you want to access a true shell
2648 variable, an extra $ is necessary to prevent its expansion by IPython:
2648 variable, an extra $ is necessary to prevent its expansion by IPython:
2649
2649
2650 In [6]: alias show echo
2650 In [6]: alias show echo
2651 In [7]: PATH='A Python string'
2651 In [7]: PATH='A Python string'
2652 In [8]: show $PATH
2652 In [8]: show $PATH
2653 A Python string
2653 A Python string
2654 In [9]: show $$PATH
2654 In [9]: show $$PATH
2655 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2655 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2656
2656
2657 You can use the alias facility to acess all of $PATH. See the %rehash
2657 You can use the alias facility to acess all of $PATH. See the %rehash
2658 and %rehashx functions, which automatically create aliases for the
2658 and %rehashx functions, which automatically create aliases for the
2659 contents of your $PATH.
2659 contents of your $PATH.
2660
2660
2661 If called with no parameters, %alias prints the current alias table."""
2661 If called with no parameters, %alias prints the current alias table."""
2662
2662
2663 par = parameter_s.strip()
2663 par = parameter_s.strip()
2664 if not par:
2664 if not par:
2665 stored = self.db.get('stored_aliases', {} )
2665 stored = self.db.get('stored_aliases', {} )
2666 aliases = sorted(self.shell.alias_manager.aliases)
2666 aliases = sorted(self.shell.alias_manager.aliases)
2667 # for k, v in stored:
2667 # for k, v in stored:
2668 # atab.append(k, v[0])
2668 # atab.append(k, v[0])
2669
2669
2670 print "Total number of aliases:", len(aliases)
2670 print "Total number of aliases:", len(aliases)
2671 sys.stdout.flush()
2671 sys.stdout.flush()
2672 return aliases
2672 return aliases
2673
2673
2674 # Now try to define a new one
2674 # Now try to define a new one
2675 try:
2675 try:
2676 alias,cmd = par.split(None, 1)
2676 alias,cmd = par.split(None, 1)
2677 except:
2677 except:
2678 print oinspect.getdoc(self.magic_alias)
2678 print oinspect.getdoc(self.magic_alias)
2679 else:
2679 else:
2680 self.shell.alias_manager.soft_define_alias(alias, cmd)
2680 self.shell.alias_manager.soft_define_alias(alias, cmd)
2681 # end magic_alias
2681 # end magic_alias
2682
2682
2683 def magic_unalias(self, parameter_s = ''):
2683 def magic_unalias(self, parameter_s = ''):
2684 """Remove an alias"""
2684 """Remove an alias"""
2685
2685
2686 aname = parameter_s.strip()
2686 aname = parameter_s.strip()
2687 self.shell.alias_manager.undefine_alias(aname)
2687 self.shell.alias_manager.undefine_alias(aname)
2688 stored = self.db.get('stored_aliases', {} )
2688 stored = self.db.get('stored_aliases', {} )
2689 if aname in stored:
2689 if aname in stored:
2690 print "Removing %stored alias",aname
2690 print "Removing %stored alias",aname
2691 del stored[aname]
2691 del stored[aname]
2692 self.db['stored_aliases'] = stored
2692 self.db['stored_aliases'] = stored
2693
2693
2694 def magic_rehashx(self, parameter_s = ''):
2694 def magic_rehashx(self, parameter_s = ''):
2695 """Update the alias table with all executable files in $PATH.
2695 """Update the alias table with all executable files in $PATH.
2696
2696
2697 This version explicitly checks that every entry in $PATH is a file
2697 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.
2698 with execute access (os.X_OK), so it is much slower than %rehash.
2699
2699
2700 Under Windows, it checks executability as a match agains a
2700 Under Windows, it checks executability as a match agains a
2701 '|'-separated string of extensions, stored in the IPython config
2701 '|'-separated string of extensions, stored in the IPython config
2702 variable win_exec_ext. This defaults to 'exe|com|bat'.
2702 variable win_exec_ext. This defaults to 'exe|com|bat'.
2703
2703
2704 This function also resets the root module cache of module completer,
2704 This function also resets the root module cache of module completer,
2705 used on slow filesystems.
2705 used on slow filesystems.
2706 """
2706 """
2707 from IPython.core.alias import InvalidAliasError
2707 from IPython.core.alias import InvalidAliasError
2708
2708
2709 # for the benefit of module completer in ipy_completers.py
2709 # for the benefit of module completer in ipy_completers.py
2710 del self.shell.db['rootmodules']
2710 del self.shell.db['rootmodules']
2711
2711
2712 path = [os.path.abspath(os.path.expanduser(p)) for p in
2712 path = [os.path.abspath(os.path.expanduser(p)) for p in
2713 os.environ.get('PATH','').split(os.pathsep)]
2713 os.environ.get('PATH','').split(os.pathsep)]
2714 path = filter(os.path.isdir,path)
2714 path = filter(os.path.isdir,path)
2715
2715
2716 syscmdlist = []
2716 syscmdlist = []
2717 # Now define isexec in a cross platform manner.
2717 # Now define isexec in a cross platform manner.
2718 if os.name == 'posix':
2718 if os.name == 'posix':
2719 isexec = lambda fname:os.path.isfile(fname) and \
2719 isexec = lambda fname:os.path.isfile(fname) and \
2720 os.access(fname,os.X_OK)
2720 os.access(fname,os.X_OK)
2721 else:
2721 else:
2722 try:
2722 try:
2723 winext = os.environ['pathext'].replace(';','|').replace('.','')
2723 winext = os.environ['pathext'].replace(';','|').replace('.','')
2724 except KeyError:
2724 except KeyError:
2725 winext = 'exe|com|bat|py'
2725 winext = 'exe|com|bat|py'
2726 if 'py' not in winext:
2726 if 'py' not in winext:
2727 winext += '|py'
2727 winext += '|py'
2728 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2728 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2729 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2729 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2730 savedir = os.getcwdu()
2730 savedir = os.getcwdu()
2731
2731
2732 # Now walk the paths looking for executables to alias.
2732 # Now walk the paths looking for executables to alias.
2733 try:
2733 try:
2734 # write the whole loop for posix/Windows so we don't have an if in
2734 # write the whole loop for posix/Windows so we don't have an if in
2735 # the innermost part
2735 # the innermost part
2736 if os.name == 'posix':
2736 if os.name == 'posix':
2737 for pdir in path:
2737 for pdir in path:
2738 os.chdir(pdir)
2738 os.chdir(pdir)
2739 for ff in os.listdir(pdir):
2739 for ff in os.listdir(pdir):
2740 if isexec(ff):
2740 if isexec(ff):
2741 try:
2741 try:
2742 # Removes dots from the name since ipython
2742 # Removes dots from the name since ipython
2743 # will assume names with dots to be python.
2743 # will assume names with dots to be python.
2744 self.shell.alias_manager.define_alias(
2744 self.shell.alias_manager.define_alias(
2745 ff.replace('.',''), ff)
2745 ff.replace('.',''), ff)
2746 except InvalidAliasError:
2746 except InvalidAliasError:
2747 pass
2747 pass
2748 else:
2748 else:
2749 syscmdlist.append(ff)
2749 syscmdlist.append(ff)
2750 else:
2750 else:
2751 no_alias = self.shell.alias_manager.no_alias
2751 no_alias = self.shell.alias_manager.no_alias
2752 for pdir in path:
2752 for pdir in path:
2753 os.chdir(pdir)
2753 os.chdir(pdir)
2754 for ff in os.listdir(pdir):
2754 for ff in os.listdir(pdir):
2755 base, ext = os.path.splitext(ff)
2755 base, ext = os.path.splitext(ff)
2756 if isexec(ff) and base.lower() not in no_alias:
2756 if isexec(ff) and base.lower() not in no_alias:
2757 if ext.lower() == '.exe':
2757 if ext.lower() == '.exe':
2758 ff = base
2758 ff = base
2759 try:
2759 try:
2760 # Removes dots from the name since ipython
2760 # Removes dots from the name since ipython
2761 # will assume names with dots to be python.
2761 # will assume names with dots to be python.
2762 self.shell.alias_manager.define_alias(
2762 self.shell.alias_manager.define_alias(
2763 base.lower().replace('.',''), ff)
2763 base.lower().replace('.',''), ff)
2764 except InvalidAliasError:
2764 except InvalidAliasError:
2765 pass
2765 pass
2766 syscmdlist.append(ff)
2766 syscmdlist.append(ff)
2767 self.shell.db['syscmdlist'] = syscmdlist
2767 self.shell.db['syscmdlist'] = syscmdlist
2768 finally:
2768 finally:
2769 os.chdir(savedir)
2769 os.chdir(savedir)
2770
2770
2771 @skip_doctest
2771 @skip_doctest
2772 def magic_pwd(self, parameter_s = ''):
2772 def magic_pwd(self, parameter_s = ''):
2773 """Return the current working directory path.
2773 """Return the current working directory path.
2774
2774
2775 Examples
2775 Examples
2776 --------
2776 --------
2777 ::
2777 ::
2778
2778
2779 In [9]: pwd
2779 In [9]: pwd
2780 Out[9]: '/home/tsuser/sprint/ipython'
2780 Out[9]: '/home/tsuser/sprint/ipython'
2781 """
2781 """
2782 return os.getcwdu()
2782 return os.getcwdu()
2783
2783
2784 @skip_doctest
2784 @skip_doctest
2785 def magic_cd(self, parameter_s=''):
2785 def magic_cd(self, parameter_s=''):
2786 """Change the current working directory.
2786 """Change the current working directory.
2787
2787
2788 This command automatically maintains an internal list of directories
2788 This command automatically maintains an internal list of directories
2789 you visit during your IPython session, in the variable _dh. The
2789 you visit during your IPython session, in the variable _dh. The
2790 command %dhist shows this history nicely formatted. You can also
2790 command %dhist shows this history nicely formatted. You can also
2791 do 'cd -<tab>' to see directory history conveniently.
2791 do 'cd -<tab>' to see directory history conveniently.
2792
2792
2793 Usage:
2793 Usage:
2794
2794
2795 cd 'dir': changes to directory 'dir'.
2795 cd 'dir': changes to directory 'dir'.
2796
2796
2797 cd -: changes to the last visited directory.
2797 cd -: changes to the last visited directory.
2798
2798
2799 cd -<n>: changes to the n-th directory in the directory history.
2799 cd -<n>: changes to the n-th directory in the directory history.
2800
2800
2801 cd --foo: change to directory that matches 'foo' in history
2801 cd --foo: change to directory that matches 'foo' in history
2802
2802
2803 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2803 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2804 (note: cd <bookmark_name> is enough if there is no
2804 (note: cd <bookmark_name> is enough if there is no
2805 directory <bookmark_name>, but a bookmark with the name exists.)
2805 directory <bookmark_name>, but a bookmark with the name exists.)
2806 'cd -b <tab>' allows you to tab-complete bookmark names.
2806 'cd -b <tab>' allows you to tab-complete bookmark names.
2807
2807
2808 Options:
2808 Options:
2809
2809
2810 -q: quiet. Do not print the working directory after the cd command is
2810 -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,
2811 executed. By default IPython's cd command does print this directory,
2812 since the default prompts do not display path information.
2812 since the default prompts do not display path information.
2813
2813
2814 Note that !cd doesn't work for this purpose because the shell where
2814 Note that !cd doesn't work for this purpose because the shell where
2815 !command runs is immediately discarded after executing 'command'.
2815 !command runs is immediately discarded after executing 'command'.
2816
2816
2817 Examples
2817 Examples
2818 --------
2818 --------
2819 ::
2819 ::
2820
2820
2821 In [10]: cd parent/child
2821 In [10]: cd parent/child
2822 /home/tsuser/parent/child
2822 /home/tsuser/parent/child
2823 """
2823 """
2824
2824
2825 parameter_s = parameter_s.strip()
2825 parameter_s = parameter_s.strip()
2826 #bkms = self.shell.persist.get("bookmarks",{})
2826 #bkms = self.shell.persist.get("bookmarks",{})
2827
2827
2828 oldcwd = os.getcwdu()
2828 oldcwd = os.getcwdu()
2829 numcd = re.match(r'(-)(\d+)$',parameter_s)
2829 numcd = re.match(r'(-)(\d+)$',parameter_s)
2830 # jump in directory history by number
2830 # jump in directory history by number
2831 if numcd:
2831 if numcd:
2832 nn = int(numcd.group(2))
2832 nn = int(numcd.group(2))
2833 try:
2833 try:
2834 ps = self.shell.user_ns['_dh'][nn]
2834 ps = self.shell.user_ns['_dh'][nn]
2835 except IndexError:
2835 except IndexError:
2836 print 'The requested directory does not exist in history.'
2836 print 'The requested directory does not exist in history.'
2837 return
2837 return
2838 else:
2838 else:
2839 opts = {}
2839 opts = {}
2840 elif parameter_s.startswith('--'):
2840 elif parameter_s.startswith('--'):
2841 ps = None
2841 ps = None
2842 fallback = None
2842 fallback = None
2843 pat = parameter_s[2:]
2843 pat = parameter_s[2:]
2844 dh = self.shell.user_ns['_dh']
2844 dh = self.shell.user_ns['_dh']
2845 # first search only by basename (last component)
2845 # first search only by basename (last component)
2846 for ent in reversed(dh):
2846 for ent in reversed(dh):
2847 if pat in os.path.basename(ent) and os.path.isdir(ent):
2847 if pat in os.path.basename(ent) and os.path.isdir(ent):
2848 ps = ent
2848 ps = ent
2849 break
2849 break
2850
2850
2851 if fallback is None and pat in ent and os.path.isdir(ent):
2851 if fallback is None and pat in ent and os.path.isdir(ent):
2852 fallback = ent
2852 fallback = ent
2853
2853
2854 # if we have no last part match, pick the first full path match
2854 # if we have no last part match, pick the first full path match
2855 if ps is None:
2855 if ps is None:
2856 ps = fallback
2856 ps = fallback
2857
2857
2858 if ps is None:
2858 if ps is None:
2859 print "No matching entry in directory history"
2859 print "No matching entry in directory history"
2860 return
2860 return
2861 else:
2861 else:
2862 opts = {}
2862 opts = {}
2863
2863
2864
2864
2865 else:
2865 else:
2866 #turn all non-space-escaping backslashes to slashes,
2866 #turn all non-space-escaping backslashes to slashes,
2867 # for c:\windows\directory\names\
2867 # for c:\windows\directory\names\
2868 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2868 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2869 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2869 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2870 # jump to previous
2870 # jump to previous
2871 if ps == '-':
2871 if ps == '-':
2872 try:
2872 try:
2873 ps = self.shell.user_ns['_dh'][-2]
2873 ps = self.shell.user_ns['_dh'][-2]
2874 except IndexError:
2874 except IndexError:
2875 raise UsageError('%cd -: No previous directory to change to.')
2875 raise UsageError('%cd -: No previous directory to change to.')
2876 # jump to bookmark if needed
2876 # jump to bookmark if needed
2877 else:
2877 else:
2878 if not os.path.isdir(ps) or opts.has_key('b'):
2878 if not os.path.isdir(ps) or opts.has_key('b'):
2879 bkms = self.db.get('bookmarks', {})
2879 bkms = self.db.get('bookmarks', {})
2880
2880
2881 if bkms.has_key(ps):
2881 if bkms.has_key(ps):
2882 target = bkms[ps]
2882 target = bkms[ps]
2883 print '(bookmark:%s) -> %s' % (ps,target)
2883 print '(bookmark:%s) -> %s' % (ps,target)
2884 ps = target
2884 ps = target
2885 else:
2885 else:
2886 if opts.has_key('b'):
2886 if opts.has_key('b'):
2887 raise UsageError("Bookmark '%s' not found. "
2887 raise UsageError("Bookmark '%s' not found. "
2888 "Use '%%bookmark -l' to see your bookmarks." % ps)
2888 "Use '%%bookmark -l' to see your bookmarks." % ps)
2889
2889
2890 # strip extra quotes on Windows, because os.chdir doesn't like them
2890 # strip extra quotes on Windows, because os.chdir doesn't like them
2891 ps = unquote_filename(ps)
2891 ps = unquote_filename(ps)
2892 # at this point ps should point to the target dir
2892 # at this point ps should point to the target dir
2893 if ps:
2893 if ps:
2894 try:
2894 try:
2895 os.chdir(os.path.expanduser(ps))
2895 os.chdir(os.path.expanduser(ps))
2896 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2896 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2897 set_term_title('IPython: ' + abbrev_cwd())
2897 set_term_title('IPython: ' + abbrev_cwd())
2898 except OSError:
2898 except OSError:
2899 print sys.exc_info()[1]
2899 print sys.exc_info()[1]
2900 else:
2900 else:
2901 cwd = os.getcwdu()
2901 cwd = os.getcwdu()
2902 dhist = self.shell.user_ns['_dh']
2902 dhist = self.shell.user_ns['_dh']
2903 if oldcwd != cwd:
2903 if oldcwd != cwd:
2904 dhist.append(cwd)
2904 dhist.append(cwd)
2905 self.db['dhist'] = compress_dhist(dhist)[-100:]
2905 self.db['dhist'] = compress_dhist(dhist)[-100:]
2906
2906
2907 else:
2907 else:
2908 os.chdir(self.shell.home_dir)
2908 os.chdir(self.shell.home_dir)
2909 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2909 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2910 set_term_title('IPython: ' + '~')
2910 set_term_title('IPython: ' + '~')
2911 cwd = os.getcwdu()
2911 cwd = os.getcwdu()
2912 dhist = self.shell.user_ns['_dh']
2912 dhist = self.shell.user_ns['_dh']
2913
2913
2914 if oldcwd != cwd:
2914 if oldcwd != cwd:
2915 dhist.append(cwd)
2915 dhist.append(cwd)
2916 self.db['dhist'] = compress_dhist(dhist)[-100:]
2916 self.db['dhist'] = compress_dhist(dhist)[-100:]
2917 if not 'q' in opts and self.shell.user_ns['_dh']:
2917 if not 'q' in opts and self.shell.user_ns['_dh']:
2918 print self.shell.user_ns['_dh'][-1]
2918 print self.shell.user_ns['_dh'][-1]
2919
2919
2920
2920
2921 def magic_env(self, parameter_s=''):
2921 def magic_env(self, parameter_s=''):
2922 """List environment variables."""
2922 """List environment variables."""
2923
2923
2924 return os.environ.data
2924 return os.environ.data
2925
2925
2926 def magic_pushd(self, parameter_s=''):
2926 def magic_pushd(self, parameter_s=''):
2927 """Place the current dir on stack and change directory.
2927 """Place the current dir on stack and change directory.
2928
2928
2929 Usage:\\
2929 Usage:\\
2930 %pushd ['dirname']
2930 %pushd ['dirname']
2931 """
2931 """
2932
2932
2933 dir_s = self.shell.dir_stack
2933 dir_s = self.shell.dir_stack
2934 tgt = os.path.expanduser(unquote_filename(parameter_s))
2934 tgt = os.path.expanduser(unquote_filename(parameter_s))
2935 cwd = os.getcwdu().replace(self.home_dir,'~')
2935 cwd = os.getcwdu().replace(self.home_dir,'~')
2936 if tgt:
2936 if tgt:
2937 self.magic_cd(parameter_s)
2937 self.magic_cd(parameter_s)
2938 dir_s.insert(0,cwd)
2938 dir_s.insert(0,cwd)
2939 return self.magic_dirs()
2939 return self.magic_dirs()
2940
2940
2941 def magic_popd(self, parameter_s=''):
2941 def magic_popd(self, parameter_s=''):
2942 """Change to directory popped off the top of the stack.
2942 """Change to directory popped off the top of the stack.
2943 """
2943 """
2944 if not self.shell.dir_stack:
2944 if not self.shell.dir_stack:
2945 raise UsageError("%popd on empty stack")
2945 raise UsageError("%popd on empty stack")
2946 top = self.shell.dir_stack.pop(0)
2946 top = self.shell.dir_stack.pop(0)
2947 self.magic_cd(top)
2947 self.magic_cd(top)
2948 print "popd ->",top
2948 print "popd ->",top
2949
2949
2950 def magic_dirs(self, parameter_s=''):
2950 def magic_dirs(self, parameter_s=''):
2951 """Return the current directory stack."""
2951 """Return the current directory stack."""
2952
2952
2953 return self.shell.dir_stack
2953 return self.shell.dir_stack
2954
2954
2955 def magic_dhist(self, parameter_s=''):
2955 def magic_dhist(self, parameter_s=''):
2956 """Print your history of visited directories.
2956 """Print your history of visited directories.
2957
2957
2958 %dhist -> print full history\\
2958 %dhist -> print full history\\
2959 %dhist n -> print last n entries only\\
2959 %dhist n -> print last n entries only\\
2960 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2960 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2961
2961
2962 This history is automatically maintained by the %cd command, and
2962 This history is automatically maintained by the %cd command, and
2963 always available as the global list variable _dh. You can use %cd -<n>
2963 always available as the global list variable _dh. You can use %cd -<n>
2964 to go to directory number <n>.
2964 to go to directory number <n>.
2965
2965
2966 Note that most of time, you should view directory history by entering
2966 Note that most of time, you should view directory history by entering
2967 cd -<TAB>.
2967 cd -<TAB>.
2968
2968
2969 """
2969 """
2970
2970
2971 dh = self.shell.user_ns['_dh']
2971 dh = self.shell.user_ns['_dh']
2972 if parameter_s:
2972 if parameter_s:
2973 try:
2973 try:
2974 args = map(int,parameter_s.split())
2974 args = map(int,parameter_s.split())
2975 except:
2975 except:
2976 self.arg_err(Magic.magic_dhist)
2976 self.arg_err(Magic.magic_dhist)
2977 return
2977 return
2978 if len(args) == 1:
2978 if len(args) == 1:
2979 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2979 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2980 elif len(args) == 2:
2980 elif len(args) == 2:
2981 ini,fin = args
2981 ini,fin = args
2982 else:
2982 else:
2983 self.arg_err(Magic.magic_dhist)
2983 self.arg_err(Magic.magic_dhist)
2984 return
2984 return
2985 else:
2985 else:
2986 ini,fin = 0,len(dh)
2986 ini,fin = 0,len(dh)
2987 nlprint(dh,
2987 nlprint(dh,
2988 header = 'Directory history (kept in _dh)',
2988 header = 'Directory history (kept in _dh)',
2989 start=ini,stop=fin)
2989 start=ini,stop=fin)
2990
2990
2991 @skip_doctest
2991 @skip_doctest
2992 def magic_sc(self, parameter_s=''):
2992 def magic_sc(self, parameter_s=''):
2993 """Shell capture - execute a shell command and capture its output.
2993 """Shell capture - execute a shell command and capture its output.
2994
2994
2995 DEPRECATED. Suboptimal, retained for backwards compatibility.
2995 DEPRECATED. Suboptimal, retained for backwards compatibility.
2996
2996
2997 You should use the form 'var = !command' instead. Example:
2997 You should use the form 'var = !command' instead. Example:
2998
2998
2999 "%sc -l myfiles = ls ~" should now be written as
2999 "%sc -l myfiles = ls ~" should now be written as
3000
3000
3001 "myfiles = !ls ~"
3001 "myfiles = !ls ~"
3002
3002
3003 myfiles.s, myfiles.l and myfiles.n still apply as documented
3003 myfiles.s, myfiles.l and myfiles.n still apply as documented
3004 below.
3004 below.
3005
3005
3006 --
3006 --
3007 %sc [options] varname=command
3007 %sc [options] varname=command
3008
3008
3009 IPython will run the given command using commands.getoutput(), and
3009 IPython will run the given command using commands.getoutput(), and
3010 will then update the user's interactive namespace with a variable
3010 will then update the user's interactive namespace with a variable
3011 called varname, containing the value of the call. Your command can
3011 called varname, containing the value of the call. Your command can
3012 contain shell wildcards, pipes, etc.
3012 contain shell wildcards, pipes, etc.
3013
3013
3014 The '=' sign in the syntax is mandatory, and the variable name you
3014 The '=' sign in the syntax is mandatory, and the variable name you
3015 supply must follow Python's standard conventions for valid names.
3015 supply must follow Python's standard conventions for valid names.
3016
3016
3017 (A special format without variable name exists for internal use)
3017 (A special format without variable name exists for internal use)
3018
3018
3019 Options:
3019 Options:
3020
3020
3021 -l: list output. Split the output on newlines into a list before
3021 -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
3022 assigning it to the given variable. By default the output is stored
3023 as a single string.
3023 as a single string.
3024
3024
3025 -v: verbose. Print the contents of the variable.
3025 -v: verbose. Print the contents of the variable.
3026
3026
3027 In most cases you should not need to split as a list, because the
3027 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
3028 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
3029 provide its contents either as a list (split on newlines) or as a
3030 space-separated string. These are convenient, respectively, either
3030 space-separated string. These are convenient, respectively, either
3031 for sequential processing or to be passed to a shell command.
3031 for sequential processing or to be passed to a shell command.
3032
3032
3033 For example:
3033 For example:
3034
3034
3035 # all-random
3035 # all-random
3036
3036
3037 # Capture into variable a
3037 # Capture into variable a
3038 In [1]: sc a=ls *py
3038 In [1]: sc a=ls *py
3039
3039
3040 # a is a string with embedded newlines
3040 # a is a string with embedded newlines
3041 In [2]: a
3041 In [2]: a
3042 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3042 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3043
3043
3044 # which can be seen as a list:
3044 # which can be seen as a list:
3045 In [3]: a.l
3045 In [3]: a.l
3046 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3046 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3047
3047
3048 # or as a whitespace-separated string:
3048 # or as a whitespace-separated string:
3049 In [4]: a.s
3049 In [4]: a.s
3050 Out[4]: 'setup.py win32_manual_post_install.py'
3050 Out[4]: 'setup.py win32_manual_post_install.py'
3051
3051
3052 # a.s is useful to pass as a single command line:
3052 # a.s is useful to pass as a single command line:
3053 In [5]: !wc -l $a.s
3053 In [5]: !wc -l $a.s
3054 146 setup.py
3054 146 setup.py
3055 130 win32_manual_post_install.py
3055 130 win32_manual_post_install.py
3056 276 total
3056 276 total
3057
3057
3058 # while the list form is useful to loop over:
3058 # while the list form is useful to loop over:
3059 In [6]: for f in a.l:
3059 In [6]: for f in a.l:
3060 ...: !wc -l $f
3060 ...: !wc -l $f
3061 ...:
3061 ...:
3062 146 setup.py
3062 146 setup.py
3063 130 win32_manual_post_install.py
3063 130 win32_manual_post_install.py
3064
3064
3065 Similiarly, the lists returned by the -l option are also special, in
3065 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
3066 the sense that you can equally invoke the .s attribute on them to
3067 automatically get a whitespace-separated string from their contents:
3067 automatically get a whitespace-separated string from their contents:
3068
3068
3069 In [7]: sc -l b=ls *py
3069 In [7]: sc -l b=ls *py
3070
3070
3071 In [8]: b
3071 In [8]: b
3072 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3072 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3073
3073
3074 In [9]: b.s
3074 In [9]: b.s
3075 Out[9]: 'setup.py win32_manual_post_install.py'
3075 Out[9]: 'setup.py win32_manual_post_install.py'
3076
3076
3077 In summary, both the lists and strings used for ouptut capture have
3077 In summary, both the lists and strings used for ouptut capture have
3078 the following special attributes:
3078 the following special attributes:
3079
3079
3080 .l (or .list) : value as list.
3080 .l (or .list) : value as list.
3081 .n (or .nlstr): value as newline-separated string.
3081 .n (or .nlstr): value as newline-separated string.
3082 .s (or .spstr): value as space-separated string.
3082 .s (or .spstr): value as space-separated string.
3083 """
3083 """
3084
3084
3085 opts,args = self.parse_options(parameter_s,'lv')
3085 opts,args = self.parse_options(parameter_s,'lv')
3086 # Try to get a variable name and command to run
3086 # Try to get a variable name and command to run
3087 try:
3087 try:
3088 # the variable name must be obtained from the parse_options
3088 # the variable name must be obtained from the parse_options
3089 # output, which uses shlex.split to strip options out.
3089 # output, which uses shlex.split to strip options out.
3090 var,_ = args.split('=',1)
3090 var,_ = args.split('=',1)
3091 var = var.strip()
3091 var = var.strip()
3092 # But the the command has to be extracted from the original input
3092 # But the the command has to be extracted from the original input
3093 # parameter_s, not on what parse_options returns, to avoid the
3093 # parameter_s, not on what parse_options returns, to avoid the
3094 # quote stripping which shlex.split performs on it.
3094 # quote stripping which shlex.split performs on it.
3095 _,cmd = parameter_s.split('=',1)
3095 _,cmd = parameter_s.split('=',1)
3096 except ValueError:
3096 except ValueError:
3097 var,cmd = '',''
3097 var,cmd = '',''
3098 # If all looks ok, proceed
3098 # If all looks ok, proceed
3099 split = 'l' in opts
3099 split = 'l' in opts
3100 out = self.shell.getoutput(cmd, split=split)
3100 out = self.shell.getoutput(cmd, split=split)
3101 if opts.has_key('v'):
3101 if opts.has_key('v'):
3102 print '%s ==\n%s' % (var,pformat(out))
3102 print '%s ==\n%s' % (var,pformat(out))
3103 if var:
3103 if var:
3104 self.shell.user_ns.update({var:out})
3104 self.shell.user_ns.update({var:out})
3105 else:
3105 else:
3106 return out
3106 return out
3107
3107
3108 def magic_sx(self, parameter_s=''):
3108 def magic_sx(self, parameter_s=''):
3109 """Shell execute - run a shell command and capture its output.
3109 """Shell execute - run a shell command and capture its output.
3110
3110
3111 %sx command
3111 %sx command
3112
3112
3113 IPython will run the given command using commands.getoutput(), and
3113 IPython will run the given command using commands.getoutput(), and
3114 return the result formatted as a list (split on '\\n'). Since the
3114 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
3115 output is _returned_, it will be stored in ipython's regular output
3116 cache Out[N] and in the '_N' automatic variables.
3116 cache Out[N] and in the '_N' automatic variables.
3117
3117
3118 Notes:
3118 Notes:
3119
3119
3120 1) If an input line begins with '!!', then %sx is automatically
3120 1) If an input line begins with '!!', then %sx is automatically
3121 invoked. That is, while:
3121 invoked. That is, while:
3122 !ls
3122 !ls
3123 causes ipython to simply issue system('ls'), typing
3123 causes ipython to simply issue system('ls'), typing
3124 !!ls
3124 !!ls
3125 is a shorthand equivalent to:
3125 is a shorthand equivalent to:
3126 %sx ls
3126 %sx ls
3127
3127
3128 2) %sx differs from %sc in that %sx automatically splits into a list,
3128 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
3129 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.
3130 to process line-oriented shell output via further python commands.
3131 %sc is meant to provide much finer control, but requires more
3131 %sc is meant to provide much finer control, but requires more
3132 typing.
3132 typing.
3133
3133
3134 3) Just like %sc -l, this is a list with special attributes:
3134 3) Just like %sc -l, this is a list with special attributes:
3135
3135
3136 .l (or .list) : value as list.
3136 .l (or .list) : value as list.
3137 .n (or .nlstr): value as newline-separated string.
3137 .n (or .nlstr): value as newline-separated string.
3138 .s (or .spstr): value as whitespace-separated string.
3138 .s (or .spstr): value as whitespace-separated string.
3139
3139
3140 This is very useful when trying to use such lists as arguments to
3140 This is very useful when trying to use such lists as arguments to
3141 system commands."""
3141 system commands."""
3142
3142
3143 if parameter_s:
3143 if parameter_s:
3144 return self.shell.getoutput(parameter_s)
3144 return self.shell.getoutput(parameter_s)
3145
3145
3146
3146
3147 def magic_bookmark(self, parameter_s=''):
3147 def magic_bookmark(self, parameter_s=''):
3148 """Manage IPython's bookmark system.
3148 """Manage IPython's bookmark system.
3149
3149
3150 %bookmark <name> - set bookmark to current dir
3150 %bookmark <name> - set bookmark to current dir
3151 %bookmark <name> <dir> - set bookmark to <dir>
3151 %bookmark <name> <dir> - set bookmark to <dir>
3152 %bookmark -l - list all bookmarks
3152 %bookmark -l - list all bookmarks
3153 %bookmark -d <name> - remove bookmark
3153 %bookmark -d <name> - remove bookmark
3154 %bookmark -r - remove all bookmarks
3154 %bookmark -r - remove all bookmarks
3155
3155
3156 You can later on access a bookmarked folder with:
3156 You can later on access a bookmarked folder with:
3157 %cd -b <name>
3157 %cd -b <name>
3158 or simply '%cd <name>' if there is no directory called <name> AND
3158 or simply '%cd <name>' if there is no directory called <name> AND
3159 there is such a bookmark defined.
3159 there is such a bookmark defined.
3160
3160
3161 Your bookmarks persist through IPython sessions, but they are
3161 Your bookmarks persist through IPython sessions, but they are
3162 associated with each profile."""
3162 associated with each profile."""
3163
3163
3164 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3164 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3165 if len(args) > 2:
3165 if len(args) > 2:
3166 raise UsageError("%bookmark: too many arguments")
3166 raise UsageError("%bookmark: too many arguments")
3167
3167
3168 bkms = self.db.get('bookmarks',{})
3168 bkms = self.db.get('bookmarks',{})
3169
3169
3170 if opts.has_key('d'):
3170 if opts.has_key('d'):
3171 try:
3171 try:
3172 todel = args[0]
3172 todel = args[0]
3173 except IndexError:
3173 except IndexError:
3174 raise UsageError(
3174 raise UsageError(
3175 "%bookmark -d: must provide a bookmark to delete")
3175 "%bookmark -d: must provide a bookmark to delete")
3176 else:
3176 else:
3177 try:
3177 try:
3178 del bkms[todel]
3178 del bkms[todel]
3179 except KeyError:
3179 except KeyError:
3180 raise UsageError(
3180 raise UsageError(
3181 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3181 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3182
3182
3183 elif opts.has_key('r'):
3183 elif opts.has_key('r'):
3184 bkms = {}
3184 bkms = {}
3185 elif opts.has_key('l'):
3185 elif opts.has_key('l'):
3186 bks = bkms.keys()
3186 bks = bkms.keys()
3187 bks.sort()
3187 bks.sort()
3188 if bks:
3188 if bks:
3189 size = max(map(len,bks))
3189 size = max(map(len,bks))
3190 else:
3190 else:
3191 size = 0
3191 size = 0
3192 fmt = '%-'+str(size)+'s -> %s'
3192 fmt = '%-'+str(size)+'s -> %s'
3193 print 'Current bookmarks:'
3193 print 'Current bookmarks:'
3194 for bk in bks:
3194 for bk in bks:
3195 print fmt % (bk,bkms[bk])
3195 print fmt % (bk,bkms[bk])
3196 else:
3196 else:
3197 if not args:
3197 if not args:
3198 raise UsageError("%bookmark: You must specify the bookmark name")
3198 raise UsageError("%bookmark: You must specify the bookmark name")
3199 elif len(args)==1:
3199 elif len(args)==1:
3200 bkms[args[0]] = os.getcwdu()
3200 bkms[args[0]] = os.getcwdu()
3201 elif len(args)==2:
3201 elif len(args)==2:
3202 bkms[args[0]] = args[1]
3202 bkms[args[0]] = args[1]
3203 self.db['bookmarks'] = bkms
3203 self.db['bookmarks'] = bkms
3204
3204
3205 def magic_pycat(self, parameter_s=''):
3205 def magic_pycat(self, parameter_s=''):
3206 """Show a syntax-highlighted file through a pager.
3206 """Show a syntax-highlighted file through a pager.
3207
3207
3208 This magic is similar to the cat utility, but it will assume the file
3208 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. """
3209 to be Python source and will show it with syntax highlighting. """
3210
3210
3211 try:
3211 try:
3212 filename = get_py_filename(parameter_s)
3212 filename = get_py_filename(parameter_s)
3213 cont = file_read(filename)
3213 cont = file_read(filename)
3214 except IOError:
3214 except IOError:
3215 try:
3215 try:
3216 cont = eval(parameter_s,self.user_ns)
3216 cont = eval(parameter_s,self.user_ns)
3217 except NameError:
3217 except NameError:
3218 cont = None
3218 cont = None
3219 if cont is None:
3219 if cont is None:
3220 print "Error: no such file or variable"
3220 print "Error: no such file or variable"
3221 return
3221 return
3222
3222
3223 page.page(self.shell.pycolorize(cont))
3223 page.page(self.shell.pycolorize(cont))
3224
3224
3225 def magic_quickref(self,arg):
3225 def magic_quickref(self,arg):
3226 """ Show a quick reference sheet """
3226 """ Show a quick reference sheet """
3227 import IPython.core.usage
3227 import IPython.core.usage
3228 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3228 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3229
3229
3230 page.page(qr)
3230 page.page(qr)
3231
3231
3232 def magic_doctest_mode(self,parameter_s=''):
3232 def magic_doctest_mode(self,parameter_s=''):
3233 """Toggle doctest mode on and off.
3233 """Toggle doctest mode on and off.
3234
3234
3235 This mode is intended to make IPython behave as much as possible like a
3235 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
3236 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
3237 and output look. This makes it easy to copy and paste parts of a
3238 session into doctests. It does so by:
3238 session into doctests. It does so by:
3239
3239
3240 - Changing the prompts to the classic ``>>>`` ones.
3240 - Changing the prompts to the classic ``>>>`` ones.
3241 - Changing the exception reporting mode to 'Plain'.
3241 - Changing the exception reporting mode to 'Plain'.
3242 - Disabling pretty-printing of output.
3242 - Disabling pretty-printing of output.
3243
3243
3244 Note that IPython also supports the pasting of code snippets that have
3244 Note that IPython also supports the pasting of code snippets that have
3245 leading '>>>' and '...' prompts in them. This means that you can paste
3245 leading '>>>' and '...' prompts in them. This means that you can paste
3246 doctests from files or docstrings (even if they have leading
3246 doctests from files or docstrings (even if they have leading
3247 whitespace), and the code will execute correctly. You can then use
3247 whitespace), and the code will execute correctly. You can then use
3248 '%history -t' to see the translated history; this will give you the
3248 '%history -t' to see the translated history; this will give you the
3249 input after removal of all the leading prompts and whitespace, which
3249 input after removal of all the leading prompts and whitespace, which
3250 can be pasted back into an editor.
3250 can be pasted back into an editor.
3251
3251
3252 With these features, you can switch into this mode easily whenever you
3252 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
3253 need to do testing and changes to doctests, without having to leave
3254 your existing IPython session.
3254 your existing IPython session.
3255 """
3255 """
3256
3256
3257 from IPython.utils.ipstruct import Struct
3257 from IPython.utils.ipstruct import Struct
3258
3258
3259 # Shorthands
3259 # Shorthands
3260 shell = self.shell
3260 shell = self.shell
3261 pm = shell.prompt_manager
3261 pm = shell.prompt_manager
3262 meta = shell.meta
3262 meta = shell.meta
3263 disp_formatter = self.shell.display_formatter
3263 disp_formatter = self.shell.display_formatter
3264 ptformatter = disp_formatter.formatters['text/plain']
3264 ptformatter = disp_formatter.formatters['text/plain']
3265 # dstore is a data store kept in the instance metadata bag to track any
3265 # dstore is a data store kept in the instance metadata bag to track any
3266 # changes we make, so we can undo them later.
3266 # changes we make, so we can undo them later.
3267 dstore = meta.setdefault('doctest_mode',Struct())
3267 dstore = meta.setdefault('doctest_mode',Struct())
3268 save_dstore = dstore.setdefault
3268 save_dstore = dstore.setdefault
3269
3269
3270 # save a few values we'll need to recover later
3270 # save a few values we'll need to recover later
3271 mode = save_dstore('mode',False)
3271 mode = save_dstore('mode',False)
3272 save_dstore('rc_pprint',ptformatter.pprint)
3272 save_dstore('rc_pprint',ptformatter.pprint)
3273 save_dstore('xmode',shell.InteractiveTB.mode)
3273 save_dstore('xmode',shell.InteractiveTB.mode)
3274 save_dstore('rc_separate_out',shell.separate_out)
3274 save_dstore('rc_separate_out',shell.separate_out)
3275 save_dstore('rc_separate_out2',shell.separate_out2)
3275 save_dstore('rc_separate_out2',shell.separate_out2)
3276 save_dstore('rc_prompts_pad_left',pm.justify)
3276 save_dstore('rc_prompts_pad_left',pm.justify)
3277 save_dstore('rc_separate_in',shell.separate_in)
3277 save_dstore('rc_separate_in',shell.separate_in)
3278 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
3278 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))
3279 save_dstore('prompt_templates',(pm.in_template, pm.in2_template, pm.out_template))
3280
3280
3281 if mode == False:
3281 if mode == False:
3282 # turn on
3282 # turn on
3283 pm.in_template = '>>> '
3283 pm.in_template = '>>> '
3284 pm.in2_template = '... '
3284 pm.in2_template = '... '
3285 pm.out_template = ''
3285 pm.out_template = ''
3286
3286
3287 # Prompt separators like plain python
3287 # Prompt separators like plain python
3288 shell.separate_in = ''
3288 shell.separate_in = ''
3289 shell.separate_out = ''
3289 shell.separate_out = ''
3290 shell.separate_out2 = ''
3290 shell.separate_out2 = ''
3291
3291
3292 pm.justify = False
3292 pm.justify = False
3293
3293
3294 ptformatter.pprint = False
3294 ptformatter.pprint = False
3295 disp_formatter.plain_text_only = True
3295 disp_formatter.plain_text_only = True
3296
3296
3297 shell.magic_xmode('Plain')
3297 shell.magic_xmode('Plain')
3298 else:
3298 else:
3299 # turn off
3299 # turn off
3300 pm.in_template, pm.in2_template, pm.out_template = dstore.prompt_templates
3300 pm.in_template, pm.in2_template, pm.out_template = dstore.prompt_templates
3301
3301
3302 shell.separate_in = dstore.rc_separate_in
3302 shell.separate_in = dstore.rc_separate_in
3303
3303
3304 shell.separate_out = dstore.rc_separate_out
3304 shell.separate_out = dstore.rc_separate_out
3305 shell.separate_out2 = dstore.rc_separate_out2
3305 shell.separate_out2 = dstore.rc_separate_out2
3306
3306
3307 pm.justify = dstore.rc_prompts_pad_left
3307 pm.justify = dstore.rc_prompts_pad_left
3308
3308
3309 ptformatter.pprint = dstore.rc_pprint
3309 ptformatter.pprint = dstore.rc_pprint
3310 disp_formatter.plain_text_only = dstore.rc_plain_text_only
3310 disp_formatter.plain_text_only = dstore.rc_plain_text_only
3311
3311
3312 shell.magic_xmode(dstore.xmode)
3312 shell.magic_xmode(dstore.xmode)
3313
3313
3314 # Store new mode and inform
3314 # Store new mode and inform
3315 dstore.mode = bool(1-int(mode))
3315 dstore.mode = bool(1-int(mode))
3316 mode_label = ['OFF','ON'][dstore.mode]
3316 mode_label = ['OFF','ON'][dstore.mode]
3317 print 'Doctest mode is:', mode_label
3317 print 'Doctest mode is:', mode_label
3318
3318
3319 def magic_gui(self, parameter_s=''):
3319 def magic_gui(self, parameter_s=''):
3320 """Enable or disable IPython GUI event loop integration.
3320 """Enable or disable IPython GUI event loop integration.
3321
3321
3322 %gui [GUINAME]
3322 %gui [GUINAME]
3323
3323
3324 This magic replaces IPython's threaded shells that were activated
3324 This magic replaces IPython's threaded shells that were activated
3325 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3325 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3326 can now be enabled at runtime and keyboard
3326 can now be enabled at runtime and keyboard
3327 interrupts should work without any problems. The following toolkits
3327 interrupts should work without any problems. The following toolkits
3328 are supported: wxPython, PyQt4, PyGTK, Tk and Cocoa (OSX)::
3328 are supported: wxPython, PyQt4, PyGTK, Tk and Cocoa (OSX)::
3329
3329
3330 %gui wx # enable wxPython event loop integration
3330 %gui wx # enable wxPython event loop integration
3331 %gui qt4|qt # enable PyQt4 event loop integration
3331 %gui qt4|qt # enable PyQt4 event loop integration
3332 %gui gtk # enable PyGTK event loop integration
3332 %gui gtk # enable PyGTK event loop integration
3333 %gui tk # enable Tk event loop integration
3333 %gui tk # enable Tk event loop integration
3334 %gui OSX # enable Cocoa event loop integration
3334 %gui OSX # enable Cocoa event loop integration
3335 # (requires %matplotlib 1.1)
3335 # (requires %matplotlib 1.1)
3336 %gui # disable all event loop integration
3336 %gui # disable all event loop integration
3337
3337
3338 WARNING: after any of these has been called you can simply create
3338 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
3339 an application object, but DO NOT start the event loop yourself, as
3340 we have already handled that.
3340 we have already handled that.
3341 """
3341 """
3342 opts, arg = self.parse_options(parameter_s, '')
3342 opts, arg = self.parse_options(parameter_s, '')
3343 if arg=='': arg = None
3343 if arg=='': arg = None
3344 try:
3344 try:
3345 return self.enable_gui(arg)
3345 return self.enable_gui(arg)
3346 except Exception as e:
3346 except Exception as e:
3347 # print simple error message, rather than traceback if we can't
3347 # print simple error message, rather than traceback if we can't
3348 # hook up the GUI
3348 # hook up the GUI
3349 error(str(e))
3349 error(str(e))
3350
3350
3351 def magic_load_ext(self, module_str):
3351 def magic_load_ext(self, module_str):
3352 """Load an IPython extension by its module name."""
3352 """Load an IPython extension by its module name."""
3353 return self.extension_manager.load_extension(module_str)
3353 return self.extension_manager.load_extension(module_str)
3354
3354
3355 def magic_unload_ext(self, module_str):
3355 def magic_unload_ext(self, module_str):
3356 """Unload an IPython extension by its module name."""
3356 """Unload an IPython extension by its module name."""
3357 self.extension_manager.unload_extension(module_str)
3357 self.extension_manager.unload_extension(module_str)
3358
3358
3359 def magic_reload_ext(self, module_str):
3359 def magic_reload_ext(self, module_str):
3360 """Reload an IPython extension by its module name."""
3360 """Reload an IPython extension by its module name."""
3361 self.extension_manager.reload_extension(module_str)
3361 self.extension_manager.reload_extension(module_str)
3362
3362
3363 def magic_install_profiles(self, s):
3363 def magic_install_profiles(self, s):
3364 """%install_profiles has been deprecated."""
3364 """%install_profiles has been deprecated."""
3365 print '\n'.join([
3365 print '\n'.join([
3366 "%install_profiles has been deprecated.",
3366 "%install_profiles has been deprecated.",
3367 "Use `ipython profile list` to view available profiles.",
3367 "Use `ipython profile list` to view available profiles.",
3368 "Requesting a profile with `ipython profile create <name>`",
3368 "Requesting a profile with `ipython profile create <name>`",
3369 "or `ipython --profile=<name>` will start with the bundled",
3369 "or `ipython --profile=<name>` will start with the bundled",
3370 "profile of that name if it exists."
3370 "profile of that name if it exists."
3371 ])
3371 ])
3372
3372
3373 def magic_install_default_config(self, s):
3373 def magic_install_default_config(self, s):
3374 """%install_default_config has been deprecated."""
3374 """%install_default_config has been deprecated."""
3375 print '\n'.join([
3375 print '\n'.join([
3376 "%install_default_config has been deprecated.",
3376 "%install_default_config has been deprecated.",
3377 "Use `ipython profile create <name>` to initialize a profile",
3377 "Use `ipython profile create <name>` to initialize a profile",
3378 "with the default config files.",
3378 "with the default config files.",
3379 "Add `--reset` to overwrite already existing config files with defaults."
3379 "Add `--reset` to overwrite already existing config files with defaults."
3380 ])
3380 ])
3381
3381
3382 # Pylab support: simple wrappers that activate pylab, load gui input
3382 # Pylab support: simple wrappers that activate pylab, load gui input
3383 # handling and modify slightly %run
3383 # handling and modify slightly %run
3384
3384
3385 @skip_doctest
3385 @skip_doctest
3386 def _pylab_magic_run(self, parameter_s=''):
3386 def _pylab_magic_run(self, parameter_s=''):
3387 Magic.magic_run(self, parameter_s,
3387 Magic.magic_run(self, parameter_s,
3388 runner=mpl_runner(self.shell.safe_execfile))
3388 runner=mpl_runner(self.shell.safe_execfile))
3389
3389
3390 _pylab_magic_run.__doc__ = magic_run.__doc__
3390 _pylab_magic_run.__doc__ = magic_run.__doc__
3391
3391
3392 @skip_doctest
3392 @skip_doctest
3393 def magic_pylab(self, s):
3393 def magic_pylab(self, s):
3394 """Load numpy and matplotlib to work interactively.
3394 """Load numpy and matplotlib to work interactively.
3395
3395
3396 %pylab [GUINAME]
3396 %pylab [GUINAME]
3397
3397
3398 This function lets you activate pylab (matplotlib, numpy and
3398 This function lets you activate pylab (matplotlib, numpy and
3399 interactive support) at any point during an IPython session.
3399 interactive support) at any point during an IPython session.
3400
3400
3401 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3401 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.
3402 pylab and mlab, as well as all names from numpy and pylab.
3403
3403
3404 If you are using the inline matplotlib backend for embedded figures,
3404 If you are using the inline matplotlib backend for embedded figures,
3405 you can adjust its behavior via the %config magic::
3405 you can adjust its behavior via the %config magic::
3406
3406
3407 # enable SVG figures, necessary for SVG+XHTML export in the qtconsole
3407 # enable SVG figures, necessary for SVG+XHTML export in the qtconsole
3408 In [1]: %config InlineBackend.figure_format = 'svg'
3408 In [1]: %config InlineBackend.figure_format = 'svg'
3409
3409
3410 # change the behavior of closing all figures at the end of each
3410 # change the behavior of closing all figures at the end of each
3411 # execution (cell), or allowing reuse of active figures across
3411 # execution (cell), or allowing reuse of active figures across
3412 # cells:
3412 # cells:
3413 In [2]: %config InlineBackend.close_figures = False
3413 In [2]: %config InlineBackend.close_figures = False
3414
3414
3415 Parameters
3415 Parameters
3416 ----------
3416 ----------
3417 guiname : optional
3417 guiname : optional
3418 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk',
3418 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk',
3419 'osx' or 'tk'). If given, the corresponding Matplotlib backend is
3419 'osx' or 'tk'). If given, the corresponding Matplotlib backend is
3420 used, otherwise matplotlib's default (which you can override in your
3420 used, otherwise matplotlib's default (which you can override in your
3421 matplotlib config file) is used.
3421 matplotlib config file) is used.
3422
3422
3423 Examples
3423 Examples
3424 --------
3424 --------
3425 In this case, where the MPL default is TkAgg::
3425 In this case, where the MPL default is TkAgg::
3426
3426
3427 In [2]: %pylab
3427 In [2]: %pylab
3428
3428
3429 Welcome to pylab, a matplotlib-based Python environment.
3429 Welcome to pylab, a matplotlib-based Python environment.
3430 Backend in use: TkAgg
3430 Backend in use: TkAgg
3431 For more information, type 'help(pylab)'.
3431 For more information, type 'help(pylab)'.
3432
3432
3433 But you can explicitly request a different backend::
3433 But you can explicitly request a different backend::
3434
3434
3435 In [3]: %pylab qt
3435 In [3]: %pylab qt
3436
3436
3437 Welcome to pylab, a matplotlib-based Python environment.
3437 Welcome to pylab, a matplotlib-based Python environment.
3438 Backend in use: Qt4Agg
3438 Backend in use: Qt4Agg
3439 For more information, type 'help(pylab)'.
3439 For more information, type 'help(pylab)'.
3440 """
3440 """
3441
3441
3442 if Application.initialized():
3442 if Application.initialized():
3443 app = Application.instance()
3443 app = Application.instance()
3444 try:
3444 try:
3445 import_all_status = app.pylab_import_all
3445 import_all_status = app.pylab_import_all
3446 except AttributeError:
3446 except AttributeError:
3447 import_all_status = True
3447 import_all_status = True
3448 else:
3448 else:
3449 import_all_status = True
3449 import_all_status = True
3450
3450
3451 self.shell.enable_pylab(s, import_all=import_all_status)
3451 self.shell.enable_pylab(s, import_all=import_all_status)
3452
3452
3453 def magic_tb(self, s):
3453 def magic_tb(self, s):
3454 """Print the last traceback with the currently active exception mode.
3454 """Print the last traceback with the currently active exception mode.
3455
3455
3456 See %xmode for changing exception reporting modes."""
3456 See %xmode for changing exception reporting modes."""
3457 self.shell.showtraceback()
3457 self.shell.showtraceback()
3458
3458
3459 @skip_doctest
3459 @skip_doctest
3460 def magic_precision(self, s=''):
3460 def magic_precision(self, s=''):
3461 """Set floating point precision for pretty printing.
3461 """Set floating point precision for pretty printing.
3462
3462
3463 Can set either integer precision or a format string.
3463 Can set either integer precision or a format string.
3464
3464
3465 If numpy has been imported and precision is an int,
3465 If numpy has been imported and precision is an int,
3466 numpy display precision will also be set, via ``numpy.set_printoptions``.
3466 numpy display precision will also be set, via ``numpy.set_printoptions``.
3467
3467
3468 If no argument is given, defaults will be restored.
3468 If no argument is given, defaults will be restored.
3469
3469
3470 Examples
3470 Examples
3471 --------
3471 --------
3472 ::
3472 ::
3473
3473
3474 In [1]: from math import pi
3474 In [1]: from math import pi
3475
3475
3476 In [2]: %precision 3
3476 In [2]: %precision 3
3477 Out[2]: u'%.3f'
3477 Out[2]: u'%.3f'
3478
3478
3479 In [3]: pi
3479 In [3]: pi
3480 Out[3]: 3.142
3480 Out[3]: 3.142
3481
3481
3482 In [4]: %precision %i
3482 In [4]: %precision %i
3483 Out[4]: u'%i'
3483 Out[4]: u'%i'
3484
3484
3485 In [5]: pi
3485 In [5]: pi
3486 Out[5]: 3
3486 Out[5]: 3
3487
3487
3488 In [6]: %precision %e
3488 In [6]: %precision %e
3489 Out[6]: u'%e'
3489 Out[6]: u'%e'
3490
3490
3491 In [7]: pi**10
3491 In [7]: pi**10
3492 Out[7]: 9.364805e+04
3492 Out[7]: 9.364805e+04
3493
3493
3494 In [8]: %precision
3494 In [8]: %precision
3495 Out[8]: u'%r'
3495 Out[8]: u'%r'
3496
3496
3497 In [9]: pi**10
3497 In [9]: pi**10
3498 Out[9]: 93648.047476082982
3498 Out[9]: 93648.047476082982
3499
3499
3500 """
3500 """
3501
3501
3502 ptformatter = self.shell.display_formatter.formatters['text/plain']
3502 ptformatter = self.shell.display_formatter.formatters['text/plain']
3503 ptformatter.float_precision = s
3503 ptformatter.float_precision = s
3504 return ptformatter.float_format
3504 return ptformatter.float_format
3505
3505
3506
3506
3507 @magic_arguments.magic_arguments()
3507 @magic_arguments.magic_arguments()
3508 @magic_arguments.argument(
3508 @magic_arguments.argument(
3509 '-e', '--export', action='store_true', default=False,
3509 '-e', '--export', action='store_true', default=False,
3510 help='Export IPython history as a notebook. The filename argument '
3510 help='Export IPython history as a notebook. The filename argument '
3511 'is used to specify the notebook name and format. For example '
3511 'is used to specify the notebook name and format. For example '
3512 'a filename of notebook.ipynb will result in a notebook name '
3512 'a filename of notebook.ipynb will result in a notebook name '
3513 'of "notebook" and a format of "xml". Likewise using a ".json" '
3513 'of "notebook" and a format of "xml". Likewise using a ".json" '
3514 'or ".py" file extension will write the notebook in the json '
3514 'or ".py" file extension will write the notebook in the json '
3515 'or py formats.'
3515 'or py formats.'
3516 )
3516 )
3517 @magic_arguments.argument(
3517 @magic_arguments.argument(
3518 '-f', '--format',
3518 '-f', '--format',
3519 help='Convert an existing IPython notebook to a new format. This option '
3519 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. '
3520 'specifies the new format and can have the values: xml, json, py. '
3521 'The target filename is choosen automatically based on the new '
3521 'The target filename is choosen automatically based on the new '
3522 'format. The filename argument gives the name of the source file.'
3522 'format. The filename argument gives the name of the source file.'
3523 )
3523 )
3524 @magic_arguments.argument(
3524 @magic_arguments.argument(
3525 'filename', type=unicode,
3525 'filename', type=unicode,
3526 help='Notebook name or filename'
3526 help='Notebook name or filename'
3527 )
3527 )
3528 def magic_notebook(self, s):
3528 def magic_notebook(self, s):
3529 """Export and convert IPython notebooks.
3529 """Export and convert IPython notebooks.
3530
3530
3531 This function can export the current IPython history to a notebook file
3531 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
3532 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".
3533 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
3534 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
3535 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
3536 formats include (json/ipynb, py).
3536 formats include (json/ipynb, py).
3537 """
3537 """
3538 args = magic_arguments.parse_argstring(self.magic_notebook, s)
3538 args = magic_arguments.parse_argstring(self.magic_notebook, s)
3539
3539
3540 from IPython.nbformat import current
3540 from IPython.nbformat import current
3541 args.filename = unquote_filename(args.filename)
3541 args.filename = unquote_filename(args.filename)
3542 if args.export:
3542 if args.export:
3543 fname, name, format = current.parse_filename(args.filename)
3543 fname, name, format = current.parse_filename(args.filename)
3544 cells = []
3544 cells = []
3545 hist = list(self.history_manager.get_range())
3545 hist = list(self.history_manager.get_range())
3546 for session, prompt_number, input in hist[:-1]:
3546 for session, prompt_number, input in hist[:-1]:
3547 cells.append(current.new_code_cell(prompt_number=prompt_number, input=input))
3547 cells.append(current.new_code_cell(prompt_number=prompt_number, input=input))
3548 worksheet = current.new_worksheet(cells=cells)
3548 worksheet = current.new_worksheet(cells=cells)
3549 nb = current.new_notebook(name=name,worksheets=[worksheet])
3549 nb = current.new_notebook(name=name,worksheets=[worksheet])
3550 with open(fname, 'w') as f:
3550 with open(fname, 'w') as f:
3551 current.write(nb, f, format);
3551 current.write(nb, f, format);
3552 elif args.format is not None:
3552 elif args.format is not None:
3553 old_fname, old_name, old_format = current.parse_filename(args.filename)
3553 old_fname, old_name, old_format = current.parse_filename(args.filename)
3554 new_format = args.format
3554 new_format = args.format
3555 if new_format == u'xml':
3555 if new_format == u'xml':
3556 raise ValueError('Notebooks cannot be written as xml.')
3556 raise ValueError('Notebooks cannot be written as xml.')
3557 elif new_format == u'ipynb' or new_format == u'json':
3557 elif new_format == u'ipynb' or new_format == u'json':
3558 new_fname = old_name + u'.ipynb'
3558 new_fname = old_name + u'.ipynb'
3559 new_format = u'json'
3559 new_format = u'json'
3560 elif new_format == u'py':
3560 elif new_format == u'py':
3561 new_fname = old_name + u'.py'
3561 new_fname = old_name + u'.py'
3562 else:
3562 else:
3563 raise ValueError('Invalid notebook format: %s' % new_format)
3563 raise ValueError('Invalid notebook format: %s' % new_format)
3564 with open(old_fname, 'r') as f:
3564 with open(old_fname, 'r') as f:
3565 s = f.read()
3565 s = f.read()
3566 try:
3566 try:
3567 nb = current.reads(s, old_format)
3567 nb = current.reads(s, old_format)
3568 except:
3568 except:
3569 nb = current.reads(s, u'xml')
3569 nb = current.reads(s, u'xml')
3570 with open(new_fname, 'w') as f:
3570 with open(new_fname, 'w') as f:
3571 current.write(nb, f, new_format)
3571 current.write(nb, f, new_format)
3572
3572
3573 def magic_config(self, s):
3573 def magic_config(self, s):
3574 """configure IPython
3574 """configure IPython
3575
3575
3576 %config Class[.trait=value]
3576 %config Class[.trait=value]
3577
3577
3578 This magic exposes most of the IPython config system. Any
3578 This magic exposes most of the IPython config system. Any
3579 Configurable class should be able to be configured with the simple
3579 Configurable class should be able to be configured with the simple
3580 line::
3580 line::
3581
3581
3582 %config Class.trait=value
3582 %config Class.trait=value
3583
3583
3584 Where `value` will be resolved in the user's namespace, if it is an
3584 Where `value` will be resolved in the user's namespace, if it is an
3585 expression or variable name.
3585 expression or variable name.
3586
3586
3587 Examples
3587 Examples
3588 --------
3588 --------
3589
3589
3590 To see what classes are availabe for config, pass no arguments::
3590 To see what classes are availabe for config, pass no arguments::
3591
3591
3592 In [1]: %config
3592 In [1]: %config
3593 Available objects for config:
3593 Available objects for config:
3594 TerminalInteractiveShell
3594 TerminalInteractiveShell
3595 HistoryManager
3595 HistoryManager
3596 PrefilterManager
3596 PrefilterManager
3597 AliasManager
3597 AliasManager
3598 IPCompleter
3598 IPCompleter
3599 PromptManager
3599 PromptManager
3600 DisplayFormatter
3600 DisplayFormatter
3601
3601
3602 To view what is configurable on a given class, just pass the class name::
3602 To view what is configurable on a given class, just pass the class name::
3603
3603
3604 In [2]: %config IPCompleter
3604 In [2]: %config IPCompleter
3605 IPCompleter options
3605 IPCompleter options
3606 -----------------
3606 -----------------
3607 IPCompleter.omit__names=<Enum>
3607 IPCompleter.omit__names=<Enum>
3608 Current: 2
3608 Current: 2
3609 Choices: (0, 1, 2)
3609 Choices: (0, 1, 2)
3610 Instruct the completer to omit private method names
3610 Instruct the completer to omit private method names
3611 Specifically, when completing on ``object.<tab>``.
3611 Specifically, when completing on ``object.<tab>``.
3612 When 2 [default]: all names that start with '_' will be excluded.
3612 When 2 [default]: all names that start with '_' will be excluded.
3613 When 1: all 'magic' names (``__foo__``) will be excluded.
3613 When 1: all 'magic' names (``__foo__``) will be excluded.
3614 When 0: nothing will be excluded.
3614 When 0: nothing will be excluded.
3615 IPCompleter.merge_completions=<CBool>
3615 IPCompleter.merge_completions=<CBool>
3616 Current: True
3616 Current: True
3617 Whether to merge completion results into a single list
3617 Whether to merge completion results into a single list
3618 If False, only the completion results from the first non-empty completer
3618 If False, only the completion results from the first non-empty completer
3619 will be returned.
3619 will be returned.
3620 IPCompleter.greedy=<CBool>
3620 IPCompleter.greedy=<CBool>
3621 Current: False
3621 Current: False
3622 Activate greedy completion
3622 Activate greedy completion
3623 This will enable completion on elements of lists, results of function calls,
3623 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.
3624 etc., but can be unsafe because the code is actually evaluated on TAB.
3625
3625
3626 but the real use is in setting values::
3626 but the real use is in setting values::
3627
3627
3628 In [3]: %config IPCompleter.greedy = True
3628 In [3]: %config IPCompleter.greedy = True
3629
3629
3630 and these values are read from the user_ns if they are variables::
3630 and these values are read from the user_ns if they are variables::
3631
3631
3632 In [4]: feeling_greedy=False
3632 In [4]: feeling_greedy=False
3633
3633
3634 In [5]: %config IPCompleter.greedy = feeling_greedy
3634 In [5]: %config IPCompleter.greedy = feeling_greedy
3635
3635
3636 """
3636 """
3637 from IPython.config.loader import Config
3637 from IPython.config.loader import Config
3638 # some IPython objects are Configurable, but do not yet have
3638 # some IPython objects are Configurable, but do not yet have
3639 # any configurable traits. Exclude them from the effects of
3639 # any configurable traits. Exclude them from the effects of
3640 # this magic, as their presence is just noise:
3640 # this magic, as their presence is just noise:
3641 configurables = [ c for c in self.configurables if c.__class__.class_traits(config=True) ]
3641 configurables = [ c for c in self.configurables if c.__class__.class_traits(config=True) ]
3642 classnames = [ c.__class__.__name__ for c in configurables ]
3642 classnames = [ c.__class__.__name__ for c in configurables ]
3643
3643
3644 line = s.strip()
3644 line = s.strip()
3645 if not line:
3645 if not line:
3646 # print available configurable names
3646 # print available configurable names
3647 print "Available objects for config:"
3647 print "Available objects for config:"
3648 for name in classnames:
3648 for name in classnames:
3649 print " ", name
3649 print " ", name
3650 return
3650 return
3651 elif line in classnames:
3651 elif line in classnames:
3652 # `%config TerminalInteractiveShell` will print trait info for
3652 # `%config TerminalInteractiveShell` will print trait info for
3653 # TerminalInteractiveShell
3653 # TerminalInteractiveShell
3654 c = configurables[classnames.index(line)]
3654 c = configurables[classnames.index(line)]
3655 cls = c.__class__
3655 cls = c.__class__
3656 help = cls.class_get_help(c)
3656 help = cls.class_get_help(c)
3657 # strip leading '--' from cl-args:
3657 # strip leading '--' from cl-args:
3658 help = re.sub(re.compile(r'^--', re.MULTILINE), '', help)
3658 help = re.sub(re.compile(r'^--', re.MULTILINE), '', help)
3659 print help
3659 print help
3660 return
3660 return
3661 elif '=' not in line:
3661 elif '=' not in line:
3662 raise UsageError("Invalid config statement: %r, should be Class.trait = value" % line)
3662 raise UsageError("Invalid config statement: %r, should be Class.trait = value" % line)
3663
3663
3664
3664
3665 # otherwise, assume we are setting configurables.
3665 # otherwise, assume we are setting configurables.
3666 # leave quotes on args when splitting, because we want
3666 # leave quotes on args when splitting, because we want
3667 # unquoted args to eval in user_ns
3667 # unquoted args to eval in user_ns
3668 cfg = Config()
3668 cfg = Config()
3669 exec "cfg."+line in locals(), self.user_ns
3669 exec "cfg."+line in locals(), self.user_ns
3670
3670
3671 for configurable in configurables:
3671 for configurable in configurables:
3672 try:
3672 try:
3673 configurable.update_config(cfg)
3673 configurable.update_config(cfg)
3674 except Exception as e:
3674 except Exception as e:
3675 error(e)
3675 error(e)
3676
3676
3677 # end Magic
3677 # end Magic
General Comments 0
You need to be logged in to leave comments. Login now