##// END OF EJS Templates
- Add numpy support to %whos...
fperez -
Show More

The requested changes are too big and content was truncated. Show full diff

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