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