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