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