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