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