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