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