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