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