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