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