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