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