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