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

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

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