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