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