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