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