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