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