##// END OF EJS Templates
updated old scipy.org links, other minor doc fixes
Paul Ivanov -
Show More
@@ -1,3588 +1,3588 b''
1 # encoding: utf-8
1 # encoding: utf-8
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3 """
3 """
4
4
5 #-----------------------------------------------------------------------------
5 #-----------------------------------------------------------------------------
6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001-2007 Fernando Perez <fperez@colorado.edu>
7 # Copyright (C) 2001-2007 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2008-2009 The IPython Development Team
8 # Copyright (C) 2008-2009 The IPython Development Team
9
9
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #-----------------------------------------------------------------------------
12 #-----------------------------------------------------------------------------
13
13
14 #-----------------------------------------------------------------------------
14 #-----------------------------------------------------------------------------
15 # Imports
15 # Imports
16 #-----------------------------------------------------------------------------
16 #-----------------------------------------------------------------------------
17
17
18 import __builtin__ as builtin_mod
18 import __builtin__ as builtin_mod
19 import __future__
19 import __future__
20 import bdb
20 import bdb
21 import inspect
21 import inspect
22 import os
22 import os
23 import sys
23 import sys
24 import shutil
24 import shutil
25 import re
25 import re
26 import time
26 import time
27 import textwrap
27 import textwrap
28 from StringIO import StringIO
28 from StringIO import StringIO
29 from getopt import getopt,GetoptError
29 from getopt import getopt,GetoptError
30 from pprint import pformat
30 from pprint import pformat
31 from xmlrpclib import ServerProxy
31 from xmlrpclib import ServerProxy
32
32
33 # cProfile was added in Python2.5
33 # cProfile was added in Python2.5
34 try:
34 try:
35 import cProfile as profile
35 import cProfile as profile
36 import pstats
36 import pstats
37 except ImportError:
37 except ImportError:
38 # profile isn't bundled by default in Debian for license reasons
38 # profile isn't bundled by default in Debian for license reasons
39 try:
39 try:
40 import profile,pstats
40 import profile,pstats
41 except ImportError:
41 except ImportError:
42 profile = pstats = None
42 profile = pstats = None
43
43
44 import IPython
44 import IPython
45 from IPython.core import debugger, oinspect
45 from IPython.core import debugger, oinspect
46 from IPython.core.error import TryNext
46 from IPython.core.error import TryNext
47 from IPython.core.error import UsageError
47 from IPython.core.error import UsageError
48 from IPython.core.fakemodule import FakeModule
48 from IPython.core.fakemodule import FakeModule
49 from IPython.core.profiledir import ProfileDir
49 from IPython.core.profiledir import ProfileDir
50 from IPython.core.macro import Macro
50 from IPython.core.macro import Macro
51 from IPython.core import magic_arguments, page
51 from IPython.core import magic_arguments, page
52 from IPython.core.prefilter import ESC_MAGIC
52 from IPython.core.prefilter import ESC_MAGIC
53 from IPython.lib.pylabtools import mpl_runner
53 from IPython.lib.pylabtools import mpl_runner
54 from IPython.testing.skipdoctest import skip_doctest
54 from IPython.testing.skipdoctest import skip_doctest
55 from IPython.utils import py3compat
55 from IPython.utils import py3compat
56 from IPython.utils.io import file_read, nlprint
56 from IPython.utils.io import file_read, nlprint
57 from IPython.utils.path import get_py_filename, unquote_filename
57 from IPython.utils.path import get_py_filename, unquote_filename
58 from IPython.utils.process import arg_split, abbrev_cwd
58 from IPython.utils.process import arg_split, abbrev_cwd
59 from IPython.utils.terminal import set_term_title
59 from IPython.utils.terminal import set_term_title
60 from IPython.utils.text import LSString, SList, format_screen
60 from IPython.utils.text import LSString, SList, format_screen
61 from IPython.utils.timing import clock, clock2
61 from IPython.utils.timing import clock, clock2
62 from IPython.utils.warn import warn, error
62 from IPython.utils.warn import warn, error
63 from IPython.utils.ipstruct import Struct
63 from IPython.utils.ipstruct import Struct
64 from IPython.config.application import Application
64 from IPython.config.application import Application
65
65
66 #-----------------------------------------------------------------------------
66 #-----------------------------------------------------------------------------
67 # Utility functions
67 # Utility functions
68 #-----------------------------------------------------------------------------
68 #-----------------------------------------------------------------------------
69
69
70 def on_off(tag):
70 def on_off(tag):
71 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
71 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
72 return ['OFF','ON'][tag]
72 return ['OFF','ON'][tag]
73
73
74 class Bunch: pass
74 class Bunch: pass
75
75
76 def compress_dhist(dh):
76 def compress_dhist(dh):
77 head, tail = dh[:-10], dh[-10:]
77 head, tail = dh[:-10], dh[-10:]
78
78
79 newhead = []
79 newhead = []
80 done = set()
80 done = set()
81 for h in head:
81 for h in head:
82 if h in done:
82 if h in done:
83 continue
83 continue
84 newhead.append(h)
84 newhead.append(h)
85 done.add(h)
85 done.add(h)
86
86
87 return newhead + tail
87 return newhead + tail
88
88
89 def needs_local_scope(func):
89 def needs_local_scope(func):
90 """Decorator to mark magic functions which need to local scope to run."""
90 """Decorator to mark magic functions which need to local scope to run."""
91 func.needs_local_scope = True
91 func.needs_local_scope = True
92 return func
92 return func
93
93
94 # Used for exception handling in magic_edit
94 # Used for exception handling in magic_edit
95 class MacroToEdit(ValueError): pass
95 class MacroToEdit(ValueError): pass
96
96
97 #***************************************************************************
97 #***************************************************************************
98 # Main class implementing Magic functionality
98 # Main class implementing Magic functionality
99
99
100 # XXX - for some odd reason, if Magic is made a new-style class, we get errors
100 # XXX - for some odd reason, if Magic is made a new-style class, we get errors
101 # on construction of the main InteractiveShell object. Something odd is going
101 # on construction of the main InteractiveShell object. Something odd is going
102 # on with super() calls, Configurable and the MRO... For now leave it as-is, but
102 # on with super() calls, Configurable and the MRO... For now leave it as-is, but
103 # eventually this needs to be clarified.
103 # eventually this needs to be clarified.
104 # BG: This is because InteractiveShell inherits from this, but is itself a
104 # BG: This is because InteractiveShell inherits from this, but is itself a
105 # Configurable. This messes up the MRO in some way. The fix is that we need to
105 # Configurable. This messes up the MRO in some way. The fix is that we need to
106 # make Magic a configurable that InteractiveShell does not subclass.
106 # make Magic a configurable that InteractiveShell does not subclass.
107
107
108 class Magic:
108 class Magic:
109 """Magic functions for InteractiveShell.
109 """Magic functions for InteractiveShell.
110
110
111 Shell functions which can be reached as %function_name. All magic
111 Shell functions which can be reached as %function_name. All magic
112 functions should accept a string, which they can parse for their own
112 functions should accept a string, which they can parse for their own
113 needs. This can make some functions easier to type, eg `%cd ../`
113 needs. This can make some functions easier to type, eg `%cd ../`
114 vs. `%cd("../")`
114 vs. `%cd("../")`
115
115
116 ALL definitions MUST begin with the prefix magic_. The user won't need it
116 ALL definitions MUST begin with the prefix magic_. The user won't need it
117 at the command line, but it is is needed in the definition. """
117 at the command line, but it is is needed in the definition. """
118
118
119 # class globals
119 # class globals
120 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
120 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
121 'Automagic is ON, % prefix NOT needed for magic functions.']
121 'Automagic is ON, % prefix NOT needed for magic functions.']
122
122
123 #......................................................................
123 #......................................................................
124 # some utility functions
124 # some utility functions
125
125
126 def __init__(self,shell):
126 def __init__(self,shell):
127
127
128 self.options_table = {}
128 self.options_table = {}
129 if profile is None:
129 if profile is None:
130 self.magic_prun = self.profile_missing_notice
130 self.magic_prun = self.profile_missing_notice
131 self.shell = shell
131 self.shell = shell
132
132
133 # namespace for holding state we may need
133 # namespace for holding state we may need
134 self._magic_state = Bunch()
134 self._magic_state = Bunch()
135
135
136 def profile_missing_notice(self, *args, **kwargs):
136 def profile_missing_notice(self, *args, **kwargs):
137 error("""\
137 error("""\
138 The profile module could not be found. It has been removed from the standard
138 The profile module could not be found. It has been removed from the standard
139 python packages because of its non-free license. To use profiling, install the
139 python packages because of its non-free license. To use profiling, install the
140 python-profiler package from non-free.""")
140 python-profiler package from non-free.""")
141
141
142 def default_option(self,fn,optstr):
142 def default_option(self,fn,optstr):
143 """Make an entry in the options_table for fn, with value optstr"""
143 """Make an entry in the options_table for fn, with value optstr"""
144
144
145 if fn not in self.lsmagic():
145 if fn not in self.lsmagic():
146 error("%s is not a magic function" % fn)
146 error("%s is not a magic function" % fn)
147 self.options_table[fn] = optstr
147 self.options_table[fn] = optstr
148
148
149 def lsmagic(self):
149 def lsmagic(self):
150 """Return a list of currently available magic functions.
150 """Return a list of currently available magic functions.
151
151
152 Gives a list of the bare names after mangling (['ls','cd', ...], not
152 Gives a list of the bare names after mangling (['ls','cd', ...], not
153 ['magic_ls','magic_cd',...]"""
153 ['magic_ls','magic_cd',...]"""
154
154
155 # FIXME. This needs a cleanup, in the way the magics list is built.
155 # FIXME. This needs a cleanup, in the way the magics list is built.
156
156
157 # magics in class definition
157 # magics in class definition
158 class_magic = lambda fn: fn.startswith('magic_') and \
158 class_magic = lambda fn: fn.startswith('magic_') and \
159 callable(Magic.__dict__[fn])
159 callable(Magic.__dict__[fn])
160 # in instance namespace (run-time user additions)
160 # in instance namespace (run-time user additions)
161 inst_magic = lambda fn: fn.startswith('magic_') and \
161 inst_magic = lambda fn: fn.startswith('magic_') and \
162 callable(self.__dict__[fn])
162 callable(self.__dict__[fn])
163 # and bound magics by user (so they can access self):
163 # and bound magics by user (so they can access self):
164 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
164 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
165 callable(self.__class__.__dict__[fn])
165 callable(self.__class__.__dict__[fn])
166 magics = filter(class_magic,Magic.__dict__.keys()) + \
166 magics = filter(class_magic,Magic.__dict__.keys()) + \
167 filter(inst_magic,self.__dict__.keys()) + \
167 filter(inst_magic,self.__dict__.keys()) + \
168 filter(inst_bound_magic,self.__class__.__dict__.keys())
168 filter(inst_bound_magic,self.__class__.__dict__.keys())
169 out = []
169 out = []
170 for fn in set(magics):
170 for fn in set(magics):
171 out.append(fn.replace('magic_','',1))
171 out.append(fn.replace('magic_','',1))
172 out.sort()
172 out.sort()
173 return out
173 return out
174
174
175 def extract_input_lines(self, range_str, raw=False):
175 def extract_input_lines(self, range_str, raw=False):
176 """Return as a string a set of input history slices.
176 """Return as a string a set of input history slices.
177
177
178 Inputs:
178 Inputs:
179
179
180 - range_str: the set of slices is given as a string, like
180 - range_str: the set of slices is given as a string, like
181 "~5/6-~4/2 4:8 9", since this function is for use by magic functions
181 "~5/6-~4/2 4:8 9", since this function is for use by magic functions
182 which get their arguments as strings. The number before the / is the
182 which get their arguments as strings. The number before the / is the
183 session number: ~n goes n back from the current session.
183 session number: ~n goes n back from the current session.
184
184
185 Optional inputs:
185 Optional inputs:
186
186
187 - raw(False): by default, the processed input is used. If this is
187 - raw(False): by default, the processed input is used. If this is
188 true, the raw input history is used instead.
188 true, the raw input history is used instead.
189
189
190 Note that slices can be called with two notations:
190 Note that slices can be called with two notations:
191
191
192 N:M -> standard python form, means including items N...(M-1).
192 N:M -> standard python form, means including items N...(M-1).
193
193
194 N-M -> include items N..M (closed endpoint)."""
194 N-M -> include items N..M (closed endpoint)."""
195 lines = self.shell.history_manager.\
195 lines = self.shell.history_manager.\
196 get_range_by_str(range_str, raw=raw)
196 get_range_by_str(range_str, raw=raw)
197 return "\n".join(x for _, _, x in lines)
197 return "\n".join(x for _, _, x in lines)
198
198
199 def arg_err(self,func):
199 def arg_err(self,func):
200 """Print docstring if incorrect arguments were passed"""
200 """Print docstring if incorrect arguments were passed"""
201 print 'Error in arguments:'
201 print 'Error in arguments:'
202 print oinspect.getdoc(func)
202 print oinspect.getdoc(func)
203
203
204 def format_latex(self,strng):
204 def format_latex(self,strng):
205 """Format a string for latex inclusion."""
205 """Format a string for latex inclusion."""
206
206
207 # Characters that need to be escaped for latex:
207 # Characters that need to be escaped for latex:
208 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
208 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
209 # Magic command names as headers:
209 # Magic command names as headers:
210 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
210 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
211 re.MULTILINE)
211 re.MULTILINE)
212 # Magic commands
212 # Magic commands
213 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
213 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
214 re.MULTILINE)
214 re.MULTILINE)
215 # Paragraph continue
215 # Paragraph continue
216 par_re = re.compile(r'\\$',re.MULTILINE)
216 par_re = re.compile(r'\\$',re.MULTILINE)
217
217
218 # The "\n" symbol
218 # The "\n" symbol
219 newline_re = re.compile(r'\\n')
219 newline_re = re.compile(r'\\n')
220
220
221 # Now build the string for output:
221 # Now build the string for output:
222 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
222 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
223 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
223 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
224 strng)
224 strng)
225 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
225 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
226 strng = par_re.sub(r'\\\\',strng)
226 strng = par_re.sub(r'\\\\',strng)
227 strng = escape_re.sub(r'\\\1',strng)
227 strng = escape_re.sub(r'\\\1',strng)
228 strng = newline_re.sub(r'\\textbackslash{}n',strng)
228 strng = newline_re.sub(r'\\textbackslash{}n',strng)
229 return strng
229 return strng
230
230
231 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
231 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
232 """Parse options passed to an argument string.
232 """Parse options passed to an argument string.
233
233
234 The interface is similar to that of getopt(), but it returns back a
234 The interface is similar to that of getopt(), but it returns back a
235 Struct with the options as keys and the stripped argument string still
235 Struct with the options as keys and the stripped argument string still
236 as a string.
236 as a string.
237
237
238 arg_str is quoted as a true sys.argv vector by using shlex.split.
238 arg_str is quoted as a true sys.argv vector by using shlex.split.
239 This allows us to easily expand variables, glob files, quote
239 This allows us to easily expand variables, glob files, quote
240 arguments, etc.
240 arguments, etc.
241
241
242 Options:
242 Options:
243 -mode: default 'string'. If given as 'list', the argument string is
243 -mode: default 'string'. If given as 'list', the argument string is
244 returned as a list (split on whitespace) instead of a string.
244 returned as a list (split on whitespace) instead of a string.
245
245
246 -list_all: put all option values in lists. Normally only options
246 -list_all: put all option values in lists. Normally only options
247 appearing more than once are put in a list.
247 appearing more than once are put in a list.
248
248
249 -posix (True): whether to split the input line in POSIX mode or not,
249 -posix (True): whether to split the input line in POSIX mode or not,
250 as per the conventions outlined in the shlex module from the
250 as per the conventions outlined in the shlex module from the
251 standard library."""
251 standard library."""
252
252
253 # inject default options at the beginning of the input line
253 # inject default options at the beginning of the input line
254 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
254 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
255 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
255 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
256
256
257 mode = kw.get('mode','string')
257 mode = kw.get('mode','string')
258 if mode not in ['string','list']:
258 if mode not in ['string','list']:
259 raise ValueError,'incorrect mode given: %s' % mode
259 raise ValueError,'incorrect mode given: %s' % mode
260 # Get options
260 # Get options
261 list_all = kw.get('list_all',0)
261 list_all = kw.get('list_all',0)
262 posix = kw.get('posix', os.name == 'posix')
262 posix = kw.get('posix', os.name == 'posix')
263
263
264 # Check if we have more than one argument to warrant extra processing:
264 # Check if we have more than one argument to warrant extra processing:
265 odict = {} # Dictionary with options
265 odict = {} # Dictionary with options
266 args = arg_str.split()
266 args = arg_str.split()
267 if len(args) >= 1:
267 if len(args) >= 1:
268 # If the list of inputs only has 0 or 1 thing in it, there's no
268 # If the list of inputs only has 0 or 1 thing in it, there's no
269 # need to look for options
269 # need to look for options
270 argv = arg_split(arg_str,posix)
270 argv = arg_split(arg_str,posix)
271 # Do regular option processing
271 # Do regular option processing
272 try:
272 try:
273 opts,args = getopt(argv,opt_str,*long_opts)
273 opts,args = getopt(argv,opt_str,*long_opts)
274 except GetoptError,e:
274 except GetoptError,e:
275 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
275 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
276 " ".join(long_opts)))
276 " ".join(long_opts)))
277 for o,a in opts:
277 for o,a in opts:
278 if o.startswith('--'):
278 if o.startswith('--'):
279 o = o[2:]
279 o = o[2:]
280 else:
280 else:
281 o = o[1:]
281 o = o[1:]
282 try:
282 try:
283 odict[o].append(a)
283 odict[o].append(a)
284 except AttributeError:
284 except AttributeError:
285 odict[o] = [odict[o],a]
285 odict[o] = [odict[o],a]
286 except KeyError:
286 except KeyError:
287 if list_all:
287 if list_all:
288 odict[o] = [a]
288 odict[o] = [a]
289 else:
289 else:
290 odict[o] = a
290 odict[o] = a
291
291
292 # Prepare opts,args for return
292 # Prepare opts,args for return
293 opts = Struct(odict)
293 opts = Struct(odict)
294 if mode == 'string':
294 if mode == 'string':
295 args = ' '.join(args)
295 args = ' '.join(args)
296
296
297 return opts,args
297 return opts,args
298
298
299 #......................................................................
299 #......................................................................
300 # And now the actual magic functions
300 # And now the actual magic functions
301
301
302 # Functions for IPython shell work (vars,funcs, config, etc)
302 # Functions for IPython shell work (vars,funcs, config, etc)
303 def magic_lsmagic(self, parameter_s = ''):
303 def magic_lsmagic(self, parameter_s = ''):
304 """List currently available magic functions."""
304 """List currently available magic functions."""
305 mesc = ESC_MAGIC
305 mesc = ESC_MAGIC
306 print 'Available magic functions:\n'+mesc+\
306 print 'Available magic functions:\n'+mesc+\
307 (' '+mesc).join(self.lsmagic())
307 (' '+mesc).join(self.lsmagic())
308 print '\n' + Magic.auto_status[self.shell.automagic]
308 print '\n' + Magic.auto_status[self.shell.automagic]
309 return None
309 return None
310
310
311 def magic_magic(self, parameter_s = ''):
311 def magic_magic(self, parameter_s = ''):
312 """Print information about the magic function system.
312 """Print information about the magic function system.
313
313
314 Supported formats: -latex, -brief, -rest
314 Supported formats: -latex, -brief, -rest
315 """
315 """
316
316
317 mode = ''
317 mode = ''
318 try:
318 try:
319 if parameter_s.split()[0] == '-latex':
319 if parameter_s.split()[0] == '-latex':
320 mode = 'latex'
320 mode = 'latex'
321 if parameter_s.split()[0] == '-brief':
321 if parameter_s.split()[0] == '-brief':
322 mode = 'brief'
322 mode = 'brief'
323 if parameter_s.split()[0] == '-rest':
323 if parameter_s.split()[0] == '-rest':
324 mode = 'rest'
324 mode = 'rest'
325 rest_docs = []
325 rest_docs = []
326 except:
326 except:
327 pass
327 pass
328
328
329 magic_docs = []
329 magic_docs = []
330 for fname in self.lsmagic():
330 for fname in self.lsmagic():
331 mname = 'magic_' + fname
331 mname = 'magic_' + fname
332 for space in (Magic,self,self.__class__):
332 for space in (Magic,self,self.__class__):
333 try:
333 try:
334 fn = space.__dict__[mname]
334 fn = space.__dict__[mname]
335 except KeyError:
335 except KeyError:
336 pass
336 pass
337 else:
337 else:
338 break
338 break
339 if mode == 'brief':
339 if mode == 'brief':
340 # only first line
340 # only first line
341 if fn.__doc__:
341 if fn.__doc__:
342 fndoc = fn.__doc__.split('\n',1)[0]
342 fndoc = fn.__doc__.split('\n',1)[0]
343 else:
343 else:
344 fndoc = 'No documentation'
344 fndoc = 'No documentation'
345 else:
345 else:
346 if fn.__doc__:
346 if fn.__doc__:
347 fndoc = fn.__doc__.rstrip()
347 fndoc = fn.__doc__.rstrip()
348 else:
348 else:
349 fndoc = 'No documentation'
349 fndoc = 'No documentation'
350
350
351
351
352 if mode == 'rest':
352 if mode == 'rest':
353 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(ESC_MAGIC,
353 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(ESC_MAGIC,
354 fname,fndoc))
354 fname,fndoc))
355
355
356 else:
356 else:
357 magic_docs.append('%s%s:\n\t%s\n' %(ESC_MAGIC,
357 magic_docs.append('%s%s:\n\t%s\n' %(ESC_MAGIC,
358 fname,fndoc))
358 fname,fndoc))
359
359
360 magic_docs = ''.join(magic_docs)
360 magic_docs = ''.join(magic_docs)
361
361
362 if mode == 'rest':
362 if mode == 'rest':
363 return "".join(rest_docs)
363 return "".join(rest_docs)
364
364
365 if mode == 'latex':
365 if mode == 'latex':
366 print self.format_latex(magic_docs)
366 print self.format_latex(magic_docs)
367 return
367 return
368 else:
368 else:
369 magic_docs = format_screen(magic_docs)
369 magic_docs = format_screen(magic_docs)
370 if mode == 'brief':
370 if mode == 'brief':
371 return magic_docs
371 return magic_docs
372
372
373 outmsg = """
373 outmsg = """
374 IPython's 'magic' functions
374 IPython's 'magic' functions
375 ===========================
375 ===========================
376
376
377 The magic function system provides a series of functions which allow you to
377 The magic function system provides a series of functions which allow you to
378 control the behavior of IPython itself, plus a lot of system-type
378 control the behavior of IPython itself, plus a lot of system-type
379 features. All these functions are prefixed with a % character, but parameters
379 features. All these functions are prefixed with a % character, but parameters
380 are given without parentheses or quotes.
380 are given without parentheses or quotes.
381
381
382 NOTE: If you have 'automagic' enabled (via the command line option or with the
382 NOTE: If you have 'automagic' enabled (via the command line option or with the
383 %automagic function), you don't need to type in the % explicitly. By default,
383 %automagic function), you don't need to type in the % explicitly. By default,
384 IPython ships with automagic on, so you should only rarely need the % escape.
384 IPython ships with automagic on, so you should only rarely need the % escape.
385
385
386 Example: typing '%cd mydir' (without the quotes) changes you working directory
386 Example: typing '%cd mydir' (without the quotes) changes you working directory
387 to 'mydir', if it exists.
387 to 'mydir', if it exists.
388
388
389 For a list of the available magic functions, use %lsmagic. For a description
389 For a list of the available magic functions, use %lsmagic. For a description
390 of any of them, type %magic_name?, e.g. '%cd?'.
390 of any of them, type %magic_name?, e.g. '%cd?'.
391
391
392 Currently the magic system has the following functions:\n"""
392 Currently the magic system has the following functions:\n"""
393
393
394 mesc = ESC_MAGIC
394 mesc = ESC_MAGIC
395 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
395 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
396 "\n\n%s%s\n\n%s" % (outmsg,
396 "\n\n%s%s\n\n%s" % (outmsg,
397 magic_docs,mesc,mesc,
397 magic_docs,mesc,mesc,
398 (' '+mesc).join(self.lsmagic()),
398 (' '+mesc).join(self.lsmagic()),
399 Magic.auto_status[self.shell.automagic] ) )
399 Magic.auto_status[self.shell.automagic] ) )
400 page.page(outmsg)
400 page.page(outmsg)
401
401
402 def magic_automagic(self, parameter_s = ''):
402 def magic_automagic(self, parameter_s = ''):
403 """Make magic functions callable without having to type the initial %.
403 """Make magic functions callable without having to type the initial %.
404
404
405 Without argumentsl toggles on/off (when off, you must call it as
405 Without argumentsl toggles on/off (when off, you must call it as
406 %automagic, of course). With arguments it sets the value, and you can
406 %automagic, of course). With arguments it sets the value, and you can
407 use any of (case insensitive):
407 use any of (case insensitive):
408
408
409 - on,1,True: to activate
409 - on,1,True: to activate
410
410
411 - off,0,False: to deactivate.
411 - off,0,False: to deactivate.
412
412
413 Note that magic functions have lowest priority, so if there's a
413 Note that magic functions have lowest priority, so if there's a
414 variable whose name collides with that of a magic fn, automagic won't
414 variable whose name collides with that of a magic fn, automagic won't
415 work for that function (you get the variable instead). However, if you
415 work for that function (you get the variable instead). However, if you
416 delete the variable (del var), the previously shadowed magic function
416 delete the variable (del var), the previously shadowed magic function
417 becomes visible to automagic again."""
417 becomes visible to automagic again."""
418
418
419 arg = parameter_s.lower()
419 arg = parameter_s.lower()
420 if parameter_s in ('on','1','true'):
420 if parameter_s in ('on','1','true'):
421 self.shell.automagic = True
421 self.shell.automagic = True
422 elif parameter_s in ('off','0','false'):
422 elif parameter_s in ('off','0','false'):
423 self.shell.automagic = False
423 self.shell.automagic = False
424 else:
424 else:
425 self.shell.automagic = not self.shell.automagic
425 self.shell.automagic = not self.shell.automagic
426 print '\n' + Magic.auto_status[self.shell.automagic]
426 print '\n' + Magic.auto_status[self.shell.automagic]
427
427
428 @skip_doctest
428 @skip_doctest
429 def magic_autocall(self, parameter_s = ''):
429 def magic_autocall(self, parameter_s = ''):
430 """Make functions callable without having to type parentheses.
430 """Make functions callable without having to type parentheses.
431
431
432 Usage:
432 Usage:
433
433
434 %autocall [mode]
434 %autocall [mode]
435
435
436 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
436 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
437 value is toggled on and off (remembering the previous state).
437 value is toggled on and off (remembering the previous state).
438
438
439 In more detail, these values mean:
439 In more detail, these values mean:
440
440
441 0 -> fully disabled
441 0 -> fully disabled
442
442
443 1 -> active, but do not apply if there are no arguments on the line.
443 1 -> active, but do not apply if there are no arguments on the line.
444
444
445 In this mode, you get:
445 In this mode, you get:
446
446
447 In [1]: callable
447 In [1]: callable
448 Out[1]: <built-in function callable>
448 Out[1]: <built-in function callable>
449
449
450 In [2]: callable 'hello'
450 In [2]: callable 'hello'
451 ------> callable('hello')
451 ------> callable('hello')
452 Out[2]: False
452 Out[2]: False
453
453
454 2 -> Active always. Even if no arguments are present, the callable
454 2 -> Active always. Even if no arguments are present, the callable
455 object is called:
455 object is called:
456
456
457 In [2]: float
457 In [2]: float
458 ------> float()
458 ------> float()
459 Out[2]: 0.0
459 Out[2]: 0.0
460
460
461 Note that even with autocall off, you can still use '/' at the start of
461 Note that even with autocall off, you can still use '/' at the start of
462 a line to treat the first argument on the command line as a function
462 a line to treat the first argument on the command line as a function
463 and add parentheses to it:
463 and add parentheses to it:
464
464
465 In [8]: /str 43
465 In [8]: /str 43
466 ------> str(43)
466 ------> str(43)
467 Out[8]: '43'
467 Out[8]: '43'
468
468
469 # all-random (note for auto-testing)
469 # all-random (note for auto-testing)
470 """
470 """
471
471
472 if parameter_s:
472 if parameter_s:
473 arg = int(parameter_s)
473 arg = int(parameter_s)
474 else:
474 else:
475 arg = 'toggle'
475 arg = 'toggle'
476
476
477 if not arg in (0,1,2,'toggle'):
477 if not arg in (0,1,2,'toggle'):
478 error('Valid modes: (0->Off, 1->Smart, 2->Full')
478 error('Valid modes: (0->Off, 1->Smart, 2->Full')
479 return
479 return
480
480
481 if arg in (0,1,2):
481 if arg in (0,1,2):
482 self.shell.autocall = arg
482 self.shell.autocall = arg
483 else: # toggle
483 else: # toggle
484 if self.shell.autocall:
484 if self.shell.autocall:
485 self._magic_state.autocall_save = self.shell.autocall
485 self._magic_state.autocall_save = self.shell.autocall
486 self.shell.autocall = 0
486 self.shell.autocall = 0
487 else:
487 else:
488 try:
488 try:
489 self.shell.autocall = self._magic_state.autocall_save
489 self.shell.autocall = self._magic_state.autocall_save
490 except AttributeError:
490 except AttributeError:
491 self.shell.autocall = self._magic_state.autocall_save = 1
491 self.shell.autocall = self._magic_state.autocall_save = 1
492
492
493 print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall]
493 print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall]
494
494
495
495
496 def magic_page(self, parameter_s=''):
496 def magic_page(self, parameter_s=''):
497 """Pretty print the object and display it through a pager.
497 """Pretty print the object and display it through a pager.
498
498
499 %page [options] OBJECT
499 %page [options] OBJECT
500
500
501 If no object is given, use _ (last output).
501 If no object is given, use _ (last output).
502
502
503 Options:
503 Options:
504
504
505 -r: page str(object), don't pretty-print it."""
505 -r: page str(object), don't pretty-print it."""
506
506
507 # After a function contributed by Olivier Aubert, slightly modified.
507 # After a function contributed by Olivier Aubert, slightly modified.
508
508
509 # Process options/args
509 # Process options/args
510 opts,args = self.parse_options(parameter_s,'r')
510 opts,args = self.parse_options(parameter_s,'r')
511 raw = 'r' in opts
511 raw = 'r' in opts
512
512
513 oname = args and args or '_'
513 oname = args and args or '_'
514 info = self._ofind(oname)
514 info = self._ofind(oname)
515 if info['found']:
515 if info['found']:
516 txt = (raw and str or pformat)( info['obj'] )
516 txt = (raw and str or pformat)( info['obj'] )
517 page.page(txt)
517 page.page(txt)
518 else:
518 else:
519 print 'Object `%s` not found' % oname
519 print 'Object `%s` not found' % oname
520
520
521 def magic_profile(self, parameter_s=''):
521 def magic_profile(self, parameter_s=''):
522 """Print your currently active IPython profile."""
522 """Print your currently active IPython profile."""
523 print self.shell.profile
523 print self.shell.profile
524
524
525 def magic_pinfo(self, parameter_s='', namespaces=None):
525 def magic_pinfo(self, parameter_s='', namespaces=None):
526 """Provide detailed information about an object.
526 """Provide detailed information about an object.
527
527
528 '%pinfo object' is just a synonym for object? or ?object."""
528 '%pinfo object' is just a synonym for object? or ?object."""
529
529
530 #print 'pinfo par: <%s>' % parameter_s # dbg
530 #print 'pinfo par: <%s>' % parameter_s # dbg
531
531
532
532
533 # detail_level: 0 -> obj? , 1 -> obj??
533 # detail_level: 0 -> obj? , 1 -> obj??
534 detail_level = 0
534 detail_level = 0
535 # We need to detect if we got called as 'pinfo pinfo foo', which can
535 # We need to detect if we got called as 'pinfo pinfo foo', which can
536 # happen if the user types 'pinfo foo?' at the cmd line.
536 # happen if the user types 'pinfo foo?' at the cmd line.
537 pinfo,qmark1,oname,qmark2 = \
537 pinfo,qmark1,oname,qmark2 = \
538 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
538 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
539 if pinfo or qmark1 or qmark2:
539 if pinfo or qmark1 or qmark2:
540 detail_level = 1
540 detail_level = 1
541 if "*" in oname:
541 if "*" in oname:
542 self.magic_psearch(oname)
542 self.magic_psearch(oname)
543 else:
543 else:
544 self.shell._inspect('pinfo', oname, detail_level=detail_level,
544 self.shell._inspect('pinfo', oname, detail_level=detail_level,
545 namespaces=namespaces)
545 namespaces=namespaces)
546
546
547 def magic_pinfo2(self, parameter_s='', namespaces=None):
547 def magic_pinfo2(self, parameter_s='', namespaces=None):
548 """Provide extra detailed information about an object.
548 """Provide extra detailed information about an object.
549
549
550 '%pinfo2 object' is just a synonym for object?? or ??object."""
550 '%pinfo2 object' is just a synonym for object?? or ??object."""
551 self.shell._inspect('pinfo', parameter_s, detail_level=1,
551 self.shell._inspect('pinfo', parameter_s, detail_level=1,
552 namespaces=namespaces)
552 namespaces=namespaces)
553
553
554 @skip_doctest
554 @skip_doctest
555 def magic_pdef(self, parameter_s='', namespaces=None):
555 def magic_pdef(self, parameter_s='', namespaces=None):
556 """Print the definition header for any callable object.
556 """Print the definition header for any callable object.
557
557
558 If the object is a class, print the constructor information.
558 If the object is a class, print the constructor information.
559
559
560 Examples
560 Examples
561 --------
561 --------
562 ::
562 ::
563
563
564 In [3]: %pdef urllib.urlopen
564 In [3]: %pdef urllib.urlopen
565 urllib.urlopen(url, data=None, proxies=None)
565 urllib.urlopen(url, data=None, proxies=None)
566 """
566 """
567 self._inspect('pdef',parameter_s, namespaces)
567 self._inspect('pdef',parameter_s, namespaces)
568
568
569 def magic_pdoc(self, parameter_s='', namespaces=None):
569 def magic_pdoc(self, parameter_s='', namespaces=None):
570 """Print the docstring for an object.
570 """Print the docstring for an object.
571
571
572 If the given object is a class, it will print both the class and the
572 If the given object is a class, it will print both the class and the
573 constructor docstrings."""
573 constructor docstrings."""
574 self._inspect('pdoc',parameter_s, namespaces)
574 self._inspect('pdoc',parameter_s, namespaces)
575
575
576 def magic_psource(self, parameter_s='', namespaces=None):
576 def magic_psource(self, parameter_s='', namespaces=None):
577 """Print (or run through pager) the source code for an object."""
577 """Print (or run through pager) the source code for an object."""
578 self._inspect('psource',parameter_s, namespaces)
578 self._inspect('psource',parameter_s, namespaces)
579
579
580 def magic_pfile(self, parameter_s=''):
580 def magic_pfile(self, parameter_s=''):
581 """Print (or run through pager) the file where an object is defined.
581 """Print (or run through pager) the file where an object is defined.
582
582
583 The file opens at the line where the object definition begins. IPython
583 The file opens at the line where the object definition begins. IPython
584 will honor the environment variable PAGER if set, and otherwise will
584 will honor the environment variable PAGER if set, and otherwise will
585 do its best to print the file in a convenient form.
585 do its best to print the file in a convenient form.
586
586
587 If the given argument is not an object currently defined, IPython will
587 If the given argument is not an object currently defined, IPython will
588 try to interpret it as a filename (automatically adding a .py extension
588 try to interpret it as a filename (automatically adding a .py extension
589 if needed). You can thus use %pfile as a syntax highlighting code
589 if needed). You can thus use %pfile as a syntax highlighting code
590 viewer."""
590 viewer."""
591
591
592 # first interpret argument as an object name
592 # first interpret argument as an object name
593 out = self._inspect('pfile',parameter_s)
593 out = self._inspect('pfile',parameter_s)
594 # if not, try the input as a filename
594 # if not, try the input as a filename
595 if out == 'not found':
595 if out == 'not found':
596 try:
596 try:
597 filename = get_py_filename(parameter_s)
597 filename = get_py_filename(parameter_s)
598 except IOError,msg:
598 except IOError,msg:
599 print msg
599 print msg
600 return
600 return
601 page.page(self.shell.inspector.format(file(filename).read()))
601 page.page(self.shell.inspector.format(file(filename).read()))
602
602
603 def magic_psearch(self, parameter_s=''):
603 def magic_psearch(self, parameter_s=''):
604 """Search for object in namespaces by wildcard.
604 """Search for object in namespaces by wildcard.
605
605
606 %psearch [options] PATTERN [OBJECT TYPE]
606 %psearch [options] PATTERN [OBJECT TYPE]
607
607
608 Note: ? can be used as a synonym for %psearch, at the beginning or at
608 Note: ? can be used as a synonym for %psearch, at the beginning or at
609 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
609 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
610 rest of the command line must be unchanged (options come first), so
610 rest of the command line must be unchanged (options come first), so
611 for example the following forms are equivalent
611 for example the following forms are equivalent
612
612
613 %psearch -i a* function
613 %psearch -i a* function
614 -i a* function?
614 -i a* function?
615 ?-i a* function
615 ?-i a* function
616
616
617 Arguments:
617 Arguments:
618
618
619 PATTERN
619 PATTERN
620
620
621 where PATTERN is a string containing * as a wildcard similar to its
621 where PATTERN is a string containing * as a wildcard similar to its
622 use in a shell. The pattern is matched in all namespaces on the
622 use in a shell. The pattern is matched in all namespaces on the
623 search path. By default objects starting with a single _ are not
623 search path. By default objects starting with a single _ are not
624 matched, many IPython generated objects have a single
624 matched, many IPython generated objects have a single
625 underscore. The default is case insensitive matching. Matching is
625 underscore. The default is case insensitive matching. Matching is
626 also done on the attributes of objects and not only on the objects
626 also done on the attributes of objects and not only on the objects
627 in a module.
627 in a module.
628
628
629 [OBJECT TYPE]
629 [OBJECT TYPE]
630
630
631 Is the name of a python type from the types module. The name is
631 Is the name of a python type from the types module. The name is
632 given in lowercase without the ending type, ex. StringType is
632 given in lowercase without the ending type, ex. StringType is
633 written string. By adding a type here only objects matching the
633 written string. By adding a type here only objects matching the
634 given type are matched. Using all here makes the pattern match all
634 given type are matched. Using all here makes the pattern match all
635 types (this is the default).
635 types (this is the default).
636
636
637 Options:
637 Options:
638
638
639 -a: makes the pattern match even objects whose names start with a
639 -a: makes the pattern match even objects whose names start with a
640 single underscore. These names are normally ommitted from the
640 single underscore. These names are normally ommitted from the
641 search.
641 search.
642
642
643 -i/-c: make the pattern case insensitive/sensitive. If neither of
643 -i/-c: make the pattern case insensitive/sensitive. If neither of
644 these options are given, the default is read from your configuration
644 these options are given, the default is read from your configuration
645 file, with the option ``InteractiveShell.wildcards_case_sensitive``.
645 file, with the option ``InteractiveShell.wildcards_case_sensitive``.
646 If this option is not specified in your configuration file, IPython's
646 If this option is not specified in your configuration file, IPython's
647 internal default is to do a case sensitive search.
647 internal default is to do a case sensitive search.
648
648
649 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
649 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
650 specifiy can be searched in any of the following namespaces:
650 specifiy can be searched in any of the following namespaces:
651 'builtin', 'user', 'user_global','internal', 'alias', where
651 'builtin', 'user', 'user_global','internal', 'alias', where
652 'builtin' and 'user' are the search defaults. Note that you should
652 'builtin' and 'user' are the search defaults. Note that you should
653 not use quotes when specifying namespaces.
653 not use quotes when specifying namespaces.
654
654
655 'Builtin' contains the python module builtin, 'user' contains all
655 'Builtin' contains the python module builtin, 'user' contains all
656 user data, 'alias' only contain the shell aliases and no python
656 user data, 'alias' only contain the shell aliases and no python
657 objects, 'internal' contains objects used by IPython. The
657 objects, 'internal' contains objects used by IPython. The
658 'user_global' namespace is only used by embedded IPython instances,
658 'user_global' namespace is only used by embedded IPython instances,
659 and it contains module-level globals. You can add namespaces to the
659 and it contains module-level globals. You can add namespaces to the
660 search with -s or exclude them with -e (these options can be given
660 search with -s or exclude them with -e (these options can be given
661 more than once).
661 more than once).
662
662
663 Examples:
663 Examples:
664
664
665 %psearch a* -> objects beginning with an a
665 %psearch a* -> objects beginning with an a
666 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
666 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
667 %psearch a* function -> all functions beginning with an a
667 %psearch a* function -> all functions beginning with an a
668 %psearch re.e* -> objects beginning with an e in module re
668 %psearch re.e* -> objects beginning with an e in module re
669 %psearch r*.e* -> objects that start with e in modules starting in r
669 %psearch r*.e* -> objects that start with e in modules starting in r
670 %psearch r*.* string -> all strings in modules beginning with r
670 %psearch r*.* string -> all strings in modules beginning with r
671
671
672 Case sensitve search:
672 Case sensitve search:
673
673
674 %psearch -c a* list all object beginning with lower case a
674 %psearch -c a* list all object beginning with lower case a
675
675
676 Show objects beginning with a single _:
676 Show objects beginning with a single _:
677
677
678 %psearch -a _* list objects beginning with a single underscore"""
678 %psearch -a _* list objects beginning with a single underscore"""
679 try:
679 try:
680 parameter_s.encode('ascii')
680 parameter_s.encode('ascii')
681 except UnicodeEncodeError:
681 except UnicodeEncodeError:
682 print 'Python identifiers can only contain ascii characters.'
682 print 'Python identifiers can only contain ascii characters.'
683 return
683 return
684
684
685 # default namespaces to be searched
685 # default namespaces to be searched
686 def_search = ['user','builtin']
686 def_search = ['user','builtin']
687
687
688 # Process options/args
688 # Process options/args
689 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
689 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
690 opt = opts.get
690 opt = opts.get
691 shell = self.shell
691 shell = self.shell
692 psearch = shell.inspector.psearch
692 psearch = shell.inspector.psearch
693
693
694 # select case options
694 # select case options
695 if opts.has_key('i'):
695 if opts.has_key('i'):
696 ignore_case = True
696 ignore_case = True
697 elif opts.has_key('c'):
697 elif opts.has_key('c'):
698 ignore_case = False
698 ignore_case = False
699 else:
699 else:
700 ignore_case = not shell.wildcards_case_sensitive
700 ignore_case = not shell.wildcards_case_sensitive
701
701
702 # Build list of namespaces to search from user options
702 # Build list of namespaces to search from user options
703 def_search.extend(opt('s',[]))
703 def_search.extend(opt('s',[]))
704 ns_exclude = ns_exclude=opt('e',[])
704 ns_exclude = ns_exclude=opt('e',[])
705 ns_search = [nm for nm in def_search if nm not in ns_exclude]
705 ns_search = [nm for nm in def_search if nm not in ns_exclude]
706
706
707 # Call the actual search
707 # Call the actual search
708 try:
708 try:
709 psearch(args,shell.ns_table,ns_search,
709 psearch(args,shell.ns_table,ns_search,
710 show_all=opt('a'),ignore_case=ignore_case)
710 show_all=opt('a'),ignore_case=ignore_case)
711 except:
711 except:
712 shell.showtraceback()
712 shell.showtraceback()
713
713
714 @skip_doctest
714 @skip_doctest
715 def magic_who_ls(self, parameter_s=''):
715 def magic_who_ls(self, parameter_s=''):
716 """Return a sorted list of all interactive variables.
716 """Return a sorted list of all interactive variables.
717
717
718 If arguments are given, only variables of types matching these
718 If arguments are given, only variables of types matching these
719 arguments are returned.
719 arguments are returned.
720
720
721 Examples
721 Examples
722 --------
722 --------
723
723
724 Define two variables and list them with who_ls::
724 Define two variables and list them with who_ls::
725
725
726 In [1]: alpha = 123
726 In [1]: alpha = 123
727
727
728 In [2]: beta = 'test'
728 In [2]: beta = 'test'
729
729
730 In [3]: %who_ls
730 In [3]: %who_ls
731 Out[3]: ['alpha', 'beta']
731 Out[3]: ['alpha', 'beta']
732
732
733 In [4]: %who_ls int
733 In [4]: %who_ls int
734 Out[4]: ['alpha']
734 Out[4]: ['alpha']
735
735
736 In [5]: %who_ls str
736 In [5]: %who_ls str
737 Out[5]: ['beta']
737 Out[5]: ['beta']
738 """
738 """
739
739
740 user_ns = self.shell.user_ns
740 user_ns = self.shell.user_ns
741 internal_ns = self.shell.internal_ns
741 internal_ns = self.shell.internal_ns
742 user_ns_hidden = self.shell.user_ns_hidden
742 user_ns_hidden = self.shell.user_ns_hidden
743 out = [ i for i in user_ns
743 out = [ i for i in user_ns
744 if not i.startswith('_') \
744 if not i.startswith('_') \
745 and not (i in internal_ns or i in user_ns_hidden) ]
745 and not (i in internal_ns or i in user_ns_hidden) ]
746
746
747 typelist = parameter_s.split()
747 typelist = parameter_s.split()
748 if typelist:
748 if typelist:
749 typeset = set(typelist)
749 typeset = set(typelist)
750 out = [i for i in out if type(user_ns[i]).__name__ in typeset]
750 out = [i for i in out if type(user_ns[i]).__name__ in typeset]
751
751
752 out.sort()
752 out.sort()
753 return out
753 return out
754
754
755 @skip_doctest
755 @skip_doctest
756 def magic_who(self, parameter_s=''):
756 def magic_who(self, parameter_s=''):
757 """Print all interactive variables, with some minimal formatting.
757 """Print all interactive variables, with some minimal formatting.
758
758
759 If any arguments are given, only variables whose type matches one of
759 If any arguments are given, only variables whose type matches one of
760 these are printed. For example:
760 these are printed. For example:
761
761
762 %who function str
762 %who function str
763
763
764 will only list functions and strings, excluding all other types of
764 will only list functions and strings, excluding all other types of
765 variables. To find the proper type names, simply use type(var) at a
765 variables. To find the proper type names, simply use type(var) at a
766 command line to see how python prints type names. For example:
766 command line to see how python prints type names. For example:
767
767
768 In [1]: type('hello')\\
768 In [1]: type('hello')\\
769 Out[1]: <type 'str'>
769 Out[1]: <type 'str'>
770
770
771 indicates that the type name for strings is 'str'.
771 indicates that the type name for strings is 'str'.
772
772
773 %who always excludes executed names loaded through your configuration
773 %who always excludes executed names loaded through your configuration
774 file and things which are internal to IPython.
774 file and things which are internal to IPython.
775
775
776 This is deliberate, as typically you may load many modules and the
776 This is deliberate, as typically you may load many modules and the
777 purpose of %who is to show you only what you've manually defined.
777 purpose of %who is to show you only what you've manually defined.
778
778
779 Examples
779 Examples
780 --------
780 --------
781
781
782 Define two variables and list them with who::
782 Define two variables and list them with who::
783
783
784 In [1]: alpha = 123
784 In [1]: alpha = 123
785
785
786 In [2]: beta = 'test'
786 In [2]: beta = 'test'
787
787
788 In [3]: %who
788 In [3]: %who
789 alpha beta
789 alpha beta
790
790
791 In [4]: %who int
791 In [4]: %who int
792 alpha
792 alpha
793
793
794 In [5]: %who str
794 In [5]: %who str
795 beta
795 beta
796 """
796 """
797
797
798 varlist = self.magic_who_ls(parameter_s)
798 varlist = self.magic_who_ls(parameter_s)
799 if not varlist:
799 if not varlist:
800 if parameter_s:
800 if parameter_s:
801 print 'No variables match your requested type.'
801 print 'No variables match your requested type.'
802 else:
802 else:
803 print 'Interactive namespace is empty.'
803 print 'Interactive namespace is empty.'
804 return
804 return
805
805
806 # if we have variables, move on...
806 # if we have variables, move on...
807 count = 0
807 count = 0
808 for i in varlist:
808 for i in varlist:
809 print i+'\t',
809 print i+'\t',
810 count += 1
810 count += 1
811 if count > 8:
811 if count > 8:
812 count = 0
812 count = 0
813 print
813 print
814 print
814 print
815
815
816 @skip_doctest
816 @skip_doctest
817 def magic_whos(self, parameter_s=''):
817 def magic_whos(self, parameter_s=''):
818 """Like %who, but gives some extra information about each variable.
818 """Like %who, but gives some extra information about each variable.
819
819
820 The same type filtering of %who can be applied here.
820 The same type filtering of %who can be applied here.
821
821
822 For all variables, the type is printed. Additionally it prints:
822 For all variables, the type is printed. Additionally it prints:
823
823
824 - For {},[],(): their length.
824 - For {},[],(): their length.
825
825
826 - For numpy arrays, a summary with shape, number of
826 - For numpy arrays, a summary with shape, number of
827 elements, typecode and size in memory.
827 elements, typecode and size in memory.
828
828
829 - Everything else: a string representation, snipping their middle if
829 - Everything else: a string representation, snipping their middle if
830 too long.
830 too long.
831
831
832 Examples
832 Examples
833 --------
833 --------
834
834
835 Define two variables and list them with whos::
835 Define two variables and list them with whos::
836
836
837 In [1]: alpha = 123
837 In [1]: alpha = 123
838
838
839 In [2]: beta = 'test'
839 In [2]: beta = 'test'
840
840
841 In [3]: %whos
841 In [3]: %whos
842 Variable Type Data/Info
842 Variable Type Data/Info
843 --------------------------------
843 --------------------------------
844 alpha int 123
844 alpha int 123
845 beta str test
845 beta str test
846 """
846 """
847
847
848 varnames = self.magic_who_ls(parameter_s)
848 varnames = self.magic_who_ls(parameter_s)
849 if not varnames:
849 if not varnames:
850 if parameter_s:
850 if parameter_s:
851 print 'No variables match your requested type.'
851 print 'No variables match your requested type.'
852 else:
852 else:
853 print 'Interactive namespace is empty.'
853 print 'Interactive namespace is empty.'
854 return
854 return
855
855
856 # if we have variables, move on...
856 # if we have variables, move on...
857
857
858 # for these types, show len() instead of data:
858 # for these types, show len() instead of data:
859 seq_types = ['dict', 'list', 'tuple']
859 seq_types = ['dict', 'list', 'tuple']
860
860
861 # for numpy/Numeric arrays, display summary info
861 # for numpy/Numeric arrays, display summary info
862 try:
862 try:
863 import numpy
863 import numpy
864 except ImportError:
864 except ImportError:
865 ndarray_type = None
865 ndarray_type = None
866 else:
866 else:
867 ndarray_type = numpy.ndarray.__name__
867 ndarray_type = numpy.ndarray.__name__
868 try:
868 try:
869 import Numeric
869 import Numeric
870 except ImportError:
870 except ImportError:
871 array_type = None
871 array_type = None
872 else:
872 else:
873 array_type = Numeric.ArrayType.__name__
873 array_type = Numeric.ArrayType.__name__
874
874
875 # Find all variable names and types so we can figure out column sizes
875 # Find all variable names and types so we can figure out column sizes
876 def get_vars(i):
876 def get_vars(i):
877 return self.shell.user_ns[i]
877 return self.shell.user_ns[i]
878
878
879 # some types are well known and can be shorter
879 # some types are well known and can be shorter
880 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
880 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
881 def type_name(v):
881 def type_name(v):
882 tn = type(v).__name__
882 tn = type(v).__name__
883 return abbrevs.get(tn,tn)
883 return abbrevs.get(tn,tn)
884
884
885 varlist = map(get_vars,varnames)
885 varlist = map(get_vars,varnames)
886
886
887 typelist = []
887 typelist = []
888 for vv in varlist:
888 for vv in varlist:
889 tt = type_name(vv)
889 tt = type_name(vv)
890
890
891 if tt=='instance':
891 if tt=='instance':
892 typelist.append( abbrevs.get(str(vv.__class__),
892 typelist.append( abbrevs.get(str(vv.__class__),
893 str(vv.__class__)))
893 str(vv.__class__)))
894 else:
894 else:
895 typelist.append(tt)
895 typelist.append(tt)
896
896
897 # column labels and # of spaces as separator
897 # column labels and # of spaces as separator
898 varlabel = 'Variable'
898 varlabel = 'Variable'
899 typelabel = 'Type'
899 typelabel = 'Type'
900 datalabel = 'Data/Info'
900 datalabel = 'Data/Info'
901 colsep = 3
901 colsep = 3
902 # variable format strings
902 # variable format strings
903 vformat = "{0:<{varwidth}}{1:<{typewidth}}"
903 vformat = "{0:<{varwidth}}{1:<{typewidth}}"
904 aformat = "%s: %s elems, type `%s`, %s bytes"
904 aformat = "%s: %s elems, type `%s`, %s bytes"
905 # find the size of the columns to format the output nicely
905 # find the size of the columns to format the output nicely
906 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
906 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
907 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
907 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
908 # table header
908 # table header
909 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
909 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
910 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
910 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
911 # and the table itself
911 # and the table itself
912 kb = 1024
912 kb = 1024
913 Mb = 1048576 # kb**2
913 Mb = 1048576 # kb**2
914 for vname,var,vtype in zip(varnames,varlist,typelist):
914 for vname,var,vtype in zip(varnames,varlist,typelist):
915 print vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth),
915 print vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth),
916 if vtype in seq_types:
916 if vtype in seq_types:
917 print "n="+str(len(var))
917 print "n="+str(len(var))
918 elif vtype in [array_type,ndarray_type]:
918 elif vtype in [array_type,ndarray_type]:
919 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
919 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
920 if vtype==ndarray_type:
920 if vtype==ndarray_type:
921 # numpy
921 # numpy
922 vsize = var.size
922 vsize = var.size
923 vbytes = vsize*var.itemsize
923 vbytes = vsize*var.itemsize
924 vdtype = var.dtype
924 vdtype = var.dtype
925 else:
925 else:
926 # Numeric
926 # Numeric
927 vsize = Numeric.size(var)
927 vsize = Numeric.size(var)
928 vbytes = vsize*var.itemsize()
928 vbytes = vsize*var.itemsize()
929 vdtype = var.typecode()
929 vdtype = var.typecode()
930
930
931 if vbytes < 100000:
931 if vbytes < 100000:
932 print aformat % (vshape,vsize,vdtype,vbytes)
932 print aformat % (vshape,vsize,vdtype,vbytes)
933 else:
933 else:
934 print aformat % (vshape,vsize,vdtype,vbytes),
934 print aformat % (vshape,vsize,vdtype,vbytes),
935 if vbytes < Mb:
935 if vbytes < Mb:
936 print '(%s kb)' % (vbytes/kb,)
936 print '(%s kb)' % (vbytes/kb,)
937 else:
937 else:
938 print '(%s Mb)' % (vbytes/Mb,)
938 print '(%s Mb)' % (vbytes/Mb,)
939 else:
939 else:
940 try:
940 try:
941 vstr = str(var)
941 vstr = str(var)
942 except UnicodeEncodeError:
942 except UnicodeEncodeError:
943 vstr = unicode(var).encode(sys.getdefaultencoding(),
943 vstr = unicode(var).encode(sys.getdefaultencoding(),
944 'backslashreplace')
944 'backslashreplace')
945 vstr = vstr.replace('\n','\\n')
945 vstr = vstr.replace('\n','\\n')
946 if len(vstr) < 50:
946 if len(vstr) < 50:
947 print vstr
947 print vstr
948 else:
948 else:
949 print vstr[:25] + "<...>" + vstr[-25:]
949 print vstr[:25] + "<...>" + vstr[-25:]
950
950
951 def magic_reset(self, parameter_s=''):
951 def magic_reset(self, parameter_s=''):
952 """Resets the namespace by removing all names defined by the user.
952 """Resets the namespace by removing all names defined by the user.
953
953
954 Parameters
954 Parameters
955 ----------
955 ----------
956 -f : force reset without asking for confirmation.
956 -f : force reset without asking for confirmation.
957
957
958 -s : 'Soft' reset: Only clears your namespace, leaving history intact.
958 -s : 'Soft' reset: Only clears your namespace, leaving history intact.
959 References to objects may be kept. By default (without this option),
959 References to objects may be kept. By default (without this option),
960 we do a 'hard' reset, giving you a new session and removing all
960 we do a 'hard' reset, giving you a new session and removing all
961 references to objects from the current session.
961 references to objects from the current session.
962
962
963 Examples
963 Examples
964 --------
964 --------
965 In [6]: a = 1
965 In [6]: a = 1
966
966
967 In [7]: a
967 In [7]: a
968 Out[7]: 1
968 Out[7]: 1
969
969
970 In [8]: 'a' in _ip.user_ns
970 In [8]: 'a' in _ip.user_ns
971 Out[8]: True
971 Out[8]: True
972
972
973 In [9]: %reset -f
973 In [9]: %reset -f
974
974
975 In [1]: 'a' in _ip.user_ns
975 In [1]: 'a' in _ip.user_ns
976 Out[1]: False
976 Out[1]: False
977 """
977 """
978 opts, args = self.parse_options(parameter_s,'sf')
978 opts, args = self.parse_options(parameter_s,'sf')
979 if 'f' in opts:
979 if 'f' in opts:
980 ans = True
980 ans = True
981 else:
981 else:
982 ans = self.shell.ask_yes_no(
982 ans = self.shell.ask_yes_no(
983 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
983 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
984 if not ans:
984 if not ans:
985 print 'Nothing done.'
985 print 'Nothing done.'
986 return
986 return
987
987
988 if 's' in opts: # Soft reset
988 if 's' in opts: # Soft reset
989 user_ns = self.shell.user_ns
989 user_ns = self.shell.user_ns
990 for i in self.magic_who_ls():
990 for i in self.magic_who_ls():
991 del(user_ns[i])
991 del(user_ns[i])
992
992
993 else: # Hard reset
993 else: # Hard reset
994 self.shell.reset(new_session = False)
994 self.shell.reset(new_session = False)
995
995
996
996
997
997
998 def magic_reset_selective(self, parameter_s=''):
998 def magic_reset_selective(self, parameter_s=''):
999 """Resets the namespace by removing names defined by the user.
999 """Resets the namespace by removing names defined by the user.
1000
1000
1001 Input/Output history are left around in case you need them.
1001 Input/Output history are left around in case you need them.
1002
1002
1003 %reset_selective [-f] regex
1003 %reset_selective [-f] regex
1004
1004
1005 No action is taken if regex is not included
1005 No action is taken if regex is not included
1006
1006
1007 Options
1007 Options
1008 -f : force reset without asking for confirmation.
1008 -f : force reset without asking for confirmation.
1009
1009
1010 Examples
1010 Examples
1011 --------
1011 --------
1012
1012
1013 We first fully reset the namespace so your output looks identical to
1013 We first fully reset the namespace so your output looks identical to
1014 this example for pedagogical reasons; in practice you do not need a
1014 this example for pedagogical reasons; in practice you do not need a
1015 full reset.
1015 full reset.
1016
1016
1017 In [1]: %reset -f
1017 In [1]: %reset -f
1018
1018
1019 Now, with a clean namespace we can make a few variables and use
1019 Now, with a clean namespace we can make a few variables and use
1020 %reset_selective to only delete names that match our regexp:
1020 %reset_selective to only delete names that match our regexp:
1021
1021
1022 In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8
1022 In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8
1023
1023
1024 In [3]: who_ls
1024 In [3]: who_ls
1025 Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c']
1025 Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c']
1026
1026
1027 In [4]: %reset_selective -f b[2-3]m
1027 In [4]: %reset_selective -f b[2-3]m
1028
1028
1029 In [5]: who_ls
1029 In [5]: who_ls
1030 Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1030 Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1031
1031
1032 In [6]: %reset_selective -f d
1032 In [6]: %reset_selective -f d
1033
1033
1034 In [7]: who_ls
1034 In [7]: who_ls
1035 Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1035 Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1036
1036
1037 In [8]: %reset_selective -f c
1037 In [8]: %reset_selective -f c
1038
1038
1039 In [9]: who_ls
1039 In [9]: who_ls
1040 Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m']
1040 Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m']
1041
1041
1042 In [10]: %reset_selective -f b
1042 In [10]: %reset_selective -f b
1043
1043
1044 In [11]: who_ls
1044 In [11]: who_ls
1045 Out[11]: ['a']
1045 Out[11]: ['a']
1046 """
1046 """
1047
1047
1048 opts, regex = self.parse_options(parameter_s,'f')
1048 opts, regex = self.parse_options(parameter_s,'f')
1049
1049
1050 if opts.has_key('f'):
1050 if opts.has_key('f'):
1051 ans = True
1051 ans = True
1052 else:
1052 else:
1053 ans = self.shell.ask_yes_no(
1053 ans = self.shell.ask_yes_no(
1054 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1054 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1055 if not ans:
1055 if not ans:
1056 print 'Nothing done.'
1056 print 'Nothing done.'
1057 return
1057 return
1058 user_ns = self.shell.user_ns
1058 user_ns = self.shell.user_ns
1059 if not regex:
1059 if not regex:
1060 print 'No regex pattern specified. Nothing done.'
1060 print 'No regex pattern specified. Nothing done.'
1061 return
1061 return
1062 else:
1062 else:
1063 try:
1063 try:
1064 m = re.compile(regex)
1064 m = re.compile(regex)
1065 except TypeError:
1065 except TypeError:
1066 raise TypeError('regex must be a string or compiled pattern')
1066 raise TypeError('regex must be a string or compiled pattern')
1067 for i in self.magic_who_ls():
1067 for i in self.magic_who_ls():
1068 if m.search(i):
1068 if m.search(i):
1069 del(user_ns[i])
1069 del(user_ns[i])
1070
1070
1071 def magic_xdel(self, parameter_s=''):
1071 def magic_xdel(self, parameter_s=''):
1072 """Delete a variable, trying to clear it from anywhere that
1072 """Delete a variable, trying to clear it from anywhere that
1073 IPython's machinery has references to it. By default, this uses
1073 IPython's machinery has references to it. By default, this uses
1074 the identity of the named object in the user namespace to remove
1074 the identity of the named object in the user namespace to remove
1075 references held under other names. The object is also removed
1075 references held under other names. The object is also removed
1076 from the output history.
1076 from the output history.
1077
1077
1078 Options
1078 Options
1079 -n : Delete the specified name from all namespaces, without
1079 -n : Delete the specified name from all namespaces, without
1080 checking their identity.
1080 checking their identity.
1081 """
1081 """
1082 opts, varname = self.parse_options(parameter_s,'n')
1082 opts, varname = self.parse_options(parameter_s,'n')
1083 try:
1083 try:
1084 self.shell.del_var(varname, ('n' in opts))
1084 self.shell.del_var(varname, ('n' in opts))
1085 except (NameError, ValueError) as e:
1085 except (NameError, ValueError) as e:
1086 print type(e).__name__ +": "+ str(e)
1086 print type(e).__name__ +": "+ str(e)
1087
1087
1088 def magic_logstart(self,parameter_s=''):
1088 def magic_logstart(self,parameter_s=''):
1089 """Start logging anywhere in a session.
1089 """Start logging anywhere in a session.
1090
1090
1091 %logstart [-o|-r|-t] [log_name [log_mode]]
1091 %logstart [-o|-r|-t] [log_name [log_mode]]
1092
1092
1093 If no name is given, it defaults to a file named 'ipython_log.py' in your
1093 If no name is given, it defaults to a file named 'ipython_log.py' in your
1094 current directory, in 'rotate' mode (see below).
1094 current directory, in 'rotate' mode (see below).
1095
1095
1096 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1096 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1097 history up to that point and then continues logging.
1097 history up to that point and then continues logging.
1098
1098
1099 %logstart takes a second optional parameter: logging mode. This can be one
1099 %logstart takes a second optional parameter: logging mode. This can be one
1100 of (note that the modes are given unquoted):\\
1100 of (note that the modes are given unquoted):\\
1101 append: well, that says it.\\
1101 append: well, that says it.\\
1102 backup: rename (if exists) to name~ and start name.\\
1102 backup: rename (if exists) to name~ and start name.\\
1103 global: single logfile in your home dir, appended to.\\
1103 global: single logfile in your home dir, appended to.\\
1104 over : overwrite existing log.\\
1104 over : overwrite existing log.\\
1105 rotate: create rotating logs name.1~, name.2~, etc.
1105 rotate: create rotating logs name.1~, name.2~, etc.
1106
1106
1107 Options:
1107 Options:
1108
1108
1109 -o: log also IPython's output. In this mode, all commands which
1109 -o: log also IPython's output. In this mode, all commands which
1110 generate an Out[NN] prompt are recorded to the logfile, right after
1110 generate an Out[NN] prompt are recorded to the logfile, right after
1111 their corresponding input line. The output lines are always
1111 their corresponding input line. The output lines are always
1112 prepended with a '#[Out]# ' marker, so that the log remains valid
1112 prepended with a '#[Out]# ' marker, so that the log remains valid
1113 Python code.
1113 Python code.
1114
1114
1115 Since this marker is always the same, filtering only the output from
1115 Since this marker is always the same, filtering only the output from
1116 a log is very easy, using for example a simple awk call:
1116 a log is very easy, using for example a simple awk call:
1117
1117
1118 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1118 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1119
1119
1120 -r: log 'raw' input. Normally, IPython's logs contain the processed
1120 -r: log 'raw' input. Normally, IPython's logs contain the processed
1121 input, so that user lines are logged in their final form, converted
1121 input, so that user lines are logged in their final form, converted
1122 into valid Python. For example, %Exit is logged as
1122 into valid Python. For example, %Exit is logged as
1123 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1123 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1124 exactly as typed, with no transformations applied.
1124 exactly as typed, with no transformations applied.
1125
1125
1126 -t: put timestamps before each input line logged (these are put in
1126 -t: put timestamps before each input line logged (these are put in
1127 comments)."""
1127 comments)."""
1128
1128
1129 opts,par = self.parse_options(parameter_s,'ort')
1129 opts,par = self.parse_options(parameter_s,'ort')
1130 log_output = 'o' in opts
1130 log_output = 'o' in opts
1131 log_raw_input = 'r' in opts
1131 log_raw_input = 'r' in opts
1132 timestamp = 't' in opts
1132 timestamp = 't' in opts
1133
1133
1134 logger = self.shell.logger
1134 logger = self.shell.logger
1135
1135
1136 # if no args are given, the defaults set in the logger constructor by
1136 # if no args are given, the defaults set in the logger constructor by
1137 # ipytohn remain valid
1137 # ipytohn remain valid
1138 if par:
1138 if par:
1139 try:
1139 try:
1140 logfname,logmode = par.split()
1140 logfname,logmode = par.split()
1141 except:
1141 except:
1142 logfname = par
1142 logfname = par
1143 logmode = 'backup'
1143 logmode = 'backup'
1144 else:
1144 else:
1145 logfname = logger.logfname
1145 logfname = logger.logfname
1146 logmode = logger.logmode
1146 logmode = logger.logmode
1147 # put logfname into rc struct as if it had been called on the command
1147 # put logfname into rc struct as if it had been called on the command
1148 # line, so it ends up saved in the log header Save it in case we need
1148 # line, so it ends up saved in the log header Save it in case we need
1149 # to restore it...
1149 # to restore it...
1150 old_logfile = self.shell.logfile
1150 old_logfile = self.shell.logfile
1151 if logfname:
1151 if logfname:
1152 logfname = os.path.expanduser(logfname)
1152 logfname = os.path.expanduser(logfname)
1153 self.shell.logfile = logfname
1153 self.shell.logfile = logfname
1154
1154
1155 loghead = '# IPython log file\n\n'
1155 loghead = '# IPython log file\n\n'
1156 try:
1156 try:
1157 started = logger.logstart(logfname,loghead,logmode,
1157 started = logger.logstart(logfname,loghead,logmode,
1158 log_output,timestamp,log_raw_input)
1158 log_output,timestamp,log_raw_input)
1159 except:
1159 except:
1160 self.shell.logfile = old_logfile
1160 self.shell.logfile = old_logfile
1161 warn("Couldn't start log: %s" % sys.exc_info()[1])
1161 warn("Couldn't start log: %s" % sys.exc_info()[1])
1162 else:
1162 else:
1163 # log input history up to this point, optionally interleaving
1163 # log input history up to this point, optionally interleaving
1164 # output if requested
1164 # output if requested
1165
1165
1166 if timestamp:
1166 if timestamp:
1167 # disable timestamping for the previous history, since we've
1167 # disable timestamping for the previous history, since we've
1168 # lost those already (no time machine here).
1168 # lost those already (no time machine here).
1169 logger.timestamp = False
1169 logger.timestamp = False
1170
1170
1171 if log_raw_input:
1171 if log_raw_input:
1172 input_hist = self.shell.history_manager.input_hist_raw
1172 input_hist = self.shell.history_manager.input_hist_raw
1173 else:
1173 else:
1174 input_hist = self.shell.history_manager.input_hist_parsed
1174 input_hist = self.shell.history_manager.input_hist_parsed
1175
1175
1176 if log_output:
1176 if log_output:
1177 log_write = logger.log_write
1177 log_write = logger.log_write
1178 output_hist = self.shell.history_manager.output_hist
1178 output_hist = self.shell.history_manager.output_hist
1179 for n in range(1,len(input_hist)-1):
1179 for n in range(1,len(input_hist)-1):
1180 log_write(input_hist[n].rstrip() + '\n')
1180 log_write(input_hist[n].rstrip() + '\n')
1181 if n in output_hist:
1181 if n in output_hist:
1182 log_write(repr(output_hist[n]),'output')
1182 log_write(repr(output_hist[n]),'output')
1183 else:
1183 else:
1184 logger.log_write('\n'.join(input_hist[1:]))
1184 logger.log_write('\n'.join(input_hist[1:]))
1185 logger.log_write('\n')
1185 logger.log_write('\n')
1186 if timestamp:
1186 if timestamp:
1187 # re-enable timestamping
1187 # re-enable timestamping
1188 logger.timestamp = True
1188 logger.timestamp = True
1189
1189
1190 print ('Activating auto-logging. '
1190 print ('Activating auto-logging. '
1191 'Current session state plus future input saved.')
1191 'Current session state plus future input saved.')
1192 logger.logstate()
1192 logger.logstate()
1193
1193
1194 def magic_logstop(self,parameter_s=''):
1194 def magic_logstop(self,parameter_s=''):
1195 """Fully stop logging and close log file.
1195 """Fully stop logging and close log file.
1196
1196
1197 In order to start logging again, a new %logstart call needs to be made,
1197 In order to start logging again, a new %logstart call needs to be made,
1198 possibly (though not necessarily) with a new filename, mode and other
1198 possibly (though not necessarily) with a new filename, mode and other
1199 options."""
1199 options."""
1200 self.logger.logstop()
1200 self.logger.logstop()
1201
1201
1202 def magic_logoff(self,parameter_s=''):
1202 def magic_logoff(self,parameter_s=''):
1203 """Temporarily stop logging.
1203 """Temporarily stop logging.
1204
1204
1205 You must have previously started logging."""
1205 You must have previously started logging."""
1206 self.shell.logger.switch_log(0)
1206 self.shell.logger.switch_log(0)
1207
1207
1208 def magic_logon(self,parameter_s=''):
1208 def magic_logon(self,parameter_s=''):
1209 """Restart logging.
1209 """Restart logging.
1210
1210
1211 This function is for restarting logging which you've temporarily
1211 This function is for restarting logging which you've temporarily
1212 stopped with %logoff. For starting logging for the first time, you
1212 stopped with %logoff. For starting logging for the first time, you
1213 must use the %logstart function, which allows you to specify an
1213 must use the %logstart function, which allows you to specify an
1214 optional log filename."""
1214 optional log filename."""
1215
1215
1216 self.shell.logger.switch_log(1)
1216 self.shell.logger.switch_log(1)
1217
1217
1218 def magic_logstate(self,parameter_s=''):
1218 def magic_logstate(self,parameter_s=''):
1219 """Print the status of the logging system."""
1219 """Print the status of the logging system."""
1220
1220
1221 self.shell.logger.logstate()
1221 self.shell.logger.logstate()
1222
1222
1223 def magic_pdb(self, parameter_s=''):
1223 def magic_pdb(self, parameter_s=''):
1224 """Control the automatic calling of the pdb interactive debugger.
1224 """Control the automatic calling of the pdb interactive debugger.
1225
1225
1226 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1226 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1227 argument it works as a toggle.
1227 argument it works as a toggle.
1228
1228
1229 When an exception is triggered, IPython can optionally call the
1229 When an exception is triggered, IPython can optionally call the
1230 interactive pdb debugger after the traceback printout. %pdb toggles
1230 interactive pdb debugger after the traceback printout. %pdb toggles
1231 this feature on and off.
1231 this feature on and off.
1232
1232
1233 The initial state of this feature is set in your configuration
1233 The initial state of this feature is set in your configuration
1234 file (the option is ``InteractiveShell.pdb``).
1234 file (the option is ``InteractiveShell.pdb``).
1235
1235
1236 If you want to just activate the debugger AFTER an exception has fired,
1236 If you want to just activate the debugger AFTER an exception has fired,
1237 without having to type '%pdb on' and rerunning your code, you can use
1237 without having to type '%pdb on' and rerunning your code, you can use
1238 the %debug magic."""
1238 the %debug magic."""
1239
1239
1240 par = parameter_s.strip().lower()
1240 par = parameter_s.strip().lower()
1241
1241
1242 if par:
1242 if par:
1243 try:
1243 try:
1244 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1244 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1245 except KeyError:
1245 except KeyError:
1246 print ('Incorrect argument. Use on/1, off/0, '
1246 print ('Incorrect argument. Use on/1, off/0, '
1247 'or nothing for a toggle.')
1247 'or nothing for a toggle.')
1248 return
1248 return
1249 else:
1249 else:
1250 # toggle
1250 # toggle
1251 new_pdb = not self.shell.call_pdb
1251 new_pdb = not self.shell.call_pdb
1252
1252
1253 # set on the shell
1253 # set on the shell
1254 self.shell.call_pdb = new_pdb
1254 self.shell.call_pdb = new_pdb
1255 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1255 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1256
1256
1257 def magic_debug(self, parameter_s=''):
1257 def magic_debug(self, parameter_s=''):
1258 """Activate the interactive debugger in post-mortem mode.
1258 """Activate the interactive debugger in post-mortem mode.
1259
1259
1260 If an exception has just occurred, this lets you inspect its stack
1260 If an exception has just occurred, this lets you inspect its stack
1261 frames interactively. Note that this will always work only on the last
1261 frames interactively. Note that this will always work only on the last
1262 traceback that occurred, so you must call this quickly after an
1262 traceback that occurred, so you must call this quickly after an
1263 exception that you wish to inspect has fired, because if another one
1263 exception that you wish to inspect has fired, because if another one
1264 occurs, it clobbers the previous one.
1264 occurs, it clobbers the previous one.
1265
1265
1266 If you want IPython to automatically do this on every exception, see
1266 If you want IPython to automatically do this on every exception, see
1267 the %pdb magic for more details.
1267 the %pdb magic for more details.
1268 """
1268 """
1269 self.shell.debugger(force=True)
1269 self.shell.debugger(force=True)
1270
1270
1271 @skip_doctest
1271 @skip_doctest
1272 def magic_prun(self, parameter_s ='',user_mode=1,
1272 def magic_prun(self, parameter_s ='',user_mode=1,
1273 opts=None,arg_lst=None,prog_ns=None):
1273 opts=None,arg_lst=None,prog_ns=None):
1274
1274
1275 """Run a statement through the python code profiler.
1275 """Run a statement through the python code profiler.
1276
1276
1277 Usage:
1277 Usage:
1278 %prun [options] statement
1278 %prun [options] statement
1279
1279
1280 The given statement (which doesn't require quote marks) is run via the
1280 The given statement (which doesn't require quote marks) is run via the
1281 python profiler in a manner similar to the profile.run() function.
1281 python profiler in a manner similar to the profile.run() function.
1282 Namespaces are internally managed to work correctly; profile.run
1282 Namespaces are internally managed to work correctly; profile.run
1283 cannot be used in IPython because it makes certain assumptions about
1283 cannot be used in IPython because it makes certain assumptions about
1284 namespaces which do not hold under IPython.
1284 namespaces which do not hold under IPython.
1285
1285
1286 Options:
1286 Options:
1287
1287
1288 -l <limit>: you can place restrictions on what or how much of the
1288 -l <limit>: you can place restrictions on what or how much of the
1289 profile gets printed. The limit value can be:
1289 profile gets printed. The limit value can be:
1290
1290
1291 * A string: only information for function names containing this string
1291 * A string: only information for function names containing this string
1292 is printed.
1292 is printed.
1293
1293
1294 * An integer: only these many lines are printed.
1294 * An integer: only these many lines are printed.
1295
1295
1296 * A float (between 0 and 1): this fraction of the report is printed
1296 * A float (between 0 and 1): this fraction of the report is printed
1297 (for example, use a limit of 0.4 to see the topmost 40% only).
1297 (for example, use a limit of 0.4 to see the topmost 40% only).
1298
1298
1299 You can combine several limits with repeated use of the option. For
1299 You can combine several limits with repeated use of the option. For
1300 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1300 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1301 information about class constructors.
1301 information about class constructors.
1302
1302
1303 -r: return the pstats.Stats object generated by the profiling. This
1303 -r: return the pstats.Stats object generated by the profiling. This
1304 object has all the information about the profile in it, and you can
1304 object has all the information about the profile in it, and you can
1305 later use it for further analysis or in other functions.
1305 later use it for further analysis or in other functions.
1306
1306
1307 -s <key>: sort profile by given key. You can provide more than one key
1307 -s <key>: sort profile by given key. You can provide more than one key
1308 by using the option several times: '-s key1 -s key2 -s key3...'. The
1308 by using the option several times: '-s key1 -s key2 -s key3...'. The
1309 default sorting key is 'time'.
1309 default sorting key is 'time'.
1310
1310
1311 The following is copied verbatim from the profile documentation
1311 The following is copied verbatim from the profile documentation
1312 referenced below:
1312 referenced below:
1313
1313
1314 When more than one key is provided, additional keys are used as
1314 When more than one key is provided, additional keys are used as
1315 secondary criteria when the there is equality in all keys selected
1315 secondary criteria when the there is equality in all keys selected
1316 before them.
1316 before them.
1317
1317
1318 Abbreviations can be used for any key names, as long as the
1318 Abbreviations can be used for any key names, as long as the
1319 abbreviation is unambiguous. The following are the keys currently
1319 abbreviation is unambiguous. The following are the keys currently
1320 defined:
1320 defined:
1321
1321
1322 Valid Arg Meaning
1322 Valid Arg Meaning
1323 "calls" call count
1323 "calls" call count
1324 "cumulative" cumulative time
1324 "cumulative" cumulative time
1325 "file" file name
1325 "file" file name
1326 "module" file name
1326 "module" file name
1327 "pcalls" primitive call count
1327 "pcalls" primitive call count
1328 "line" line number
1328 "line" line number
1329 "name" function name
1329 "name" function name
1330 "nfl" name/file/line
1330 "nfl" name/file/line
1331 "stdname" standard name
1331 "stdname" standard name
1332 "time" internal time
1332 "time" internal time
1333
1333
1334 Note that all sorts on statistics are in descending order (placing
1334 Note that all sorts on statistics are in descending order (placing
1335 most time consuming items first), where as name, file, and line number
1335 most time consuming items first), where as name, file, and line number
1336 searches are in ascending order (i.e., alphabetical). The subtle
1336 searches are in ascending order (i.e., alphabetical). The subtle
1337 distinction between "nfl" and "stdname" is that the standard name is a
1337 distinction between "nfl" and "stdname" is that the standard name is a
1338 sort of the name as printed, which means that the embedded line
1338 sort of the name as printed, which means that the embedded line
1339 numbers get compared in an odd way. For example, lines 3, 20, and 40
1339 numbers get compared in an odd way. For example, lines 3, 20, and 40
1340 would (if the file names were the same) appear in the string order
1340 would (if the file names were the same) appear in the string order
1341 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1341 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1342 line numbers. In fact, sort_stats("nfl") is the same as
1342 line numbers. In fact, sort_stats("nfl") is the same as
1343 sort_stats("name", "file", "line").
1343 sort_stats("name", "file", "line").
1344
1344
1345 -T <filename>: save profile results as shown on screen to a text
1345 -T <filename>: save profile results as shown on screen to a text
1346 file. The profile is still shown on screen.
1346 file. The profile is still shown on screen.
1347
1347
1348 -D <filename>: save (via dump_stats) profile statistics to given
1348 -D <filename>: save (via dump_stats) profile statistics to given
1349 filename. This data is in a format understod by the pstats module, and
1349 filename. This data is in a format understod by the pstats module, and
1350 is generated by a call to the dump_stats() method of profile
1350 is generated by a call to the dump_stats() method of profile
1351 objects. The profile is still shown on screen.
1351 objects. The profile is still shown on screen.
1352
1352
1353 If you want to run complete programs under the profiler's control, use
1353 If you want to run complete programs under the profiler's control, use
1354 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1354 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1355 contains profiler specific options as described here.
1355 contains profiler specific options as described here.
1356
1356
1357 You can read the complete documentation for the profile module with::
1357 You can read the complete documentation for the profile module with::
1358
1358
1359 In [1]: import profile; profile.help()
1359 In [1]: import profile; profile.help()
1360 """
1360 """
1361
1361
1362 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1362 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1363 # protect user quote marks
1363 # protect user quote marks
1364 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1364 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1365
1365
1366 if user_mode: # regular user call
1366 if user_mode: # regular user call
1367 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1367 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1368 list_all=1)
1368 list_all=1)
1369 namespace = self.shell.user_ns
1369 namespace = self.shell.user_ns
1370 else: # called to run a program by %run -p
1370 else: # called to run a program by %run -p
1371 try:
1371 try:
1372 filename = get_py_filename(arg_lst[0])
1372 filename = get_py_filename(arg_lst[0])
1373 except IOError as e:
1373 except IOError as e:
1374 try:
1374 try:
1375 msg = str(e)
1375 msg = str(e)
1376 except UnicodeError:
1376 except UnicodeError:
1377 msg = e.message
1377 msg = e.message
1378 error(msg)
1378 error(msg)
1379 return
1379 return
1380
1380
1381 arg_str = 'execfile(filename,prog_ns)'
1381 arg_str = 'execfile(filename,prog_ns)'
1382 namespace = locals()
1382 namespace = locals()
1383
1383
1384 opts.merge(opts_def)
1384 opts.merge(opts_def)
1385
1385
1386 prof = profile.Profile()
1386 prof = profile.Profile()
1387 try:
1387 try:
1388 prof = prof.runctx(arg_str,namespace,namespace)
1388 prof = prof.runctx(arg_str,namespace,namespace)
1389 sys_exit = ''
1389 sys_exit = ''
1390 except SystemExit:
1390 except SystemExit:
1391 sys_exit = """*** SystemExit exception caught in code being profiled."""
1391 sys_exit = """*** SystemExit exception caught in code being profiled."""
1392
1392
1393 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1393 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1394
1394
1395 lims = opts.l
1395 lims = opts.l
1396 if lims:
1396 if lims:
1397 lims = [] # rebuild lims with ints/floats/strings
1397 lims = [] # rebuild lims with ints/floats/strings
1398 for lim in opts.l:
1398 for lim in opts.l:
1399 try:
1399 try:
1400 lims.append(int(lim))
1400 lims.append(int(lim))
1401 except ValueError:
1401 except ValueError:
1402 try:
1402 try:
1403 lims.append(float(lim))
1403 lims.append(float(lim))
1404 except ValueError:
1404 except ValueError:
1405 lims.append(lim)
1405 lims.append(lim)
1406
1406
1407 # Trap output.
1407 # Trap output.
1408 stdout_trap = StringIO()
1408 stdout_trap = StringIO()
1409
1409
1410 if hasattr(stats,'stream'):
1410 if hasattr(stats,'stream'):
1411 # In newer versions of python, the stats object has a 'stream'
1411 # In newer versions of python, the stats object has a 'stream'
1412 # attribute to write into.
1412 # attribute to write into.
1413 stats.stream = stdout_trap
1413 stats.stream = stdout_trap
1414 stats.print_stats(*lims)
1414 stats.print_stats(*lims)
1415 else:
1415 else:
1416 # For older versions, we manually redirect stdout during printing
1416 # For older versions, we manually redirect stdout during printing
1417 sys_stdout = sys.stdout
1417 sys_stdout = sys.stdout
1418 try:
1418 try:
1419 sys.stdout = stdout_trap
1419 sys.stdout = stdout_trap
1420 stats.print_stats(*lims)
1420 stats.print_stats(*lims)
1421 finally:
1421 finally:
1422 sys.stdout = sys_stdout
1422 sys.stdout = sys_stdout
1423
1423
1424 output = stdout_trap.getvalue()
1424 output = stdout_trap.getvalue()
1425 output = output.rstrip()
1425 output = output.rstrip()
1426
1426
1427 page.page(output)
1427 page.page(output)
1428 print sys_exit,
1428 print sys_exit,
1429
1429
1430 dump_file = opts.D[0]
1430 dump_file = opts.D[0]
1431 text_file = opts.T[0]
1431 text_file = opts.T[0]
1432 if dump_file:
1432 if dump_file:
1433 dump_file = unquote_filename(dump_file)
1433 dump_file = unquote_filename(dump_file)
1434 prof.dump_stats(dump_file)
1434 prof.dump_stats(dump_file)
1435 print '\n*** Profile stats marshalled to file',\
1435 print '\n*** Profile stats marshalled to file',\
1436 `dump_file`+'.',sys_exit
1436 `dump_file`+'.',sys_exit
1437 if text_file:
1437 if text_file:
1438 text_file = unquote_filename(text_file)
1438 text_file = unquote_filename(text_file)
1439 pfile = file(text_file,'w')
1439 pfile = file(text_file,'w')
1440 pfile.write(output)
1440 pfile.write(output)
1441 pfile.close()
1441 pfile.close()
1442 print '\n*** Profile printout saved to text file',\
1442 print '\n*** Profile printout saved to text file',\
1443 `text_file`+'.',sys_exit
1443 `text_file`+'.',sys_exit
1444
1444
1445 if opts.has_key('r'):
1445 if opts.has_key('r'):
1446 return stats
1446 return stats
1447 else:
1447 else:
1448 return None
1448 return None
1449
1449
1450 @skip_doctest
1450 @skip_doctest
1451 def magic_run(self, parameter_s ='',runner=None,
1451 def magic_run(self, parameter_s ='',runner=None,
1452 file_finder=get_py_filename):
1452 file_finder=get_py_filename):
1453 """Run the named file inside IPython as a program.
1453 """Run the named file inside IPython as a program.
1454
1454
1455 Usage:\\
1455 Usage:\\
1456 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1456 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1457
1457
1458 Parameters after the filename are passed as command-line arguments to
1458 Parameters after the filename are passed as command-line arguments to
1459 the program (put in sys.argv). Then, control returns to IPython's
1459 the program (put in sys.argv). Then, control returns to IPython's
1460 prompt.
1460 prompt.
1461
1461
1462 This is similar to running at a system prompt:\\
1462 This is similar to running at a system prompt:\\
1463 $ python file args\\
1463 $ python file args\\
1464 but with the advantage of giving you IPython's tracebacks, and of
1464 but with the advantage of giving you IPython's tracebacks, and of
1465 loading all variables into your interactive namespace for further use
1465 loading all variables into your interactive namespace for further use
1466 (unless -p is used, see below).
1466 (unless -p is used, see below).
1467
1467
1468 The file is executed in a namespace initially consisting only of
1468 The file is executed in a namespace initially consisting only of
1469 __name__=='__main__' and sys.argv constructed as indicated. It thus
1469 __name__=='__main__' and sys.argv constructed as indicated. It thus
1470 sees its environment as if it were being run as a stand-alone program
1470 sees its environment as if it were being run as a stand-alone program
1471 (except for sharing global objects such as previously imported
1471 (except for sharing global objects such as previously imported
1472 modules). But after execution, the IPython interactive namespace gets
1472 modules). But after execution, the IPython interactive namespace gets
1473 updated with all variables defined in the program (except for __name__
1473 updated with all variables defined in the program (except for __name__
1474 and sys.argv). This allows for very convenient loading of code for
1474 and sys.argv). This allows for very convenient loading of code for
1475 interactive work, while giving each program a 'clean sheet' to run in.
1475 interactive work, while giving each program a 'clean sheet' to run in.
1476
1476
1477 Options:
1477 Options:
1478
1478
1479 -n: __name__ is NOT set to '__main__', but to the running file's name
1479 -n: __name__ is NOT set to '__main__', but to the running file's name
1480 without extension (as python does under import). This allows running
1480 without extension (as python does under import). This allows running
1481 scripts and reloading the definitions in them without calling code
1481 scripts and reloading the definitions in them without calling code
1482 protected by an ' if __name__ == "__main__" ' clause.
1482 protected by an ' if __name__ == "__main__" ' clause.
1483
1483
1484 -i: run the file in IPython's namespace instead of an empty one. This
1484 -i: run the file in IPython's namespace instead of an empty one. This
1485 is useful if you are experimenting with code written in a text editor
1485 is useful if you are experimenting with code written in a text editor
1486 which depends on variables defined interactively.
1486 which depends on variables defined interactively.
1487
1487
1488 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1488 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1489 being run. This is particularly useful if IPython is being used to
1489 being run. This is particularly useful if IPython is being used to
1490 run unittests, which always exit with a sys.exit() call. In such
1490 run unittests, which always exit with a sys.exit() call. In such
1491 cases you are interested in the output of the test results, not in
1491 cases you are interested in the output of the test results, not in
1492 seeing a traceback of the unittest module.
1492 seeing a traceback of the unittest module.
1493
1493
1494 -t: print timing information at the end of the run. IPython will give
1494 -t: print timing information at the end of the run. IPython will give
1495 you an estimated CPU time consumption for your script, which under
1495 you an estimated CPU time consumption for your script, which under
1496 Unix uses the resource module to avoid the wraparound problems of
1496 Unix uses the resource module to avoid the wraparound problems of
1497 time.clock(). Under Unix, an estimate of time spent on system tasks
1497 time.clock(). Under Unix, an estimate of time spent on system tasks
1498 is also given (for Windows platforms this is reported as 0.0).
1498 is also given (for Windows platforms this is reported as 0.0).
1499
1499
1500 If -t is given, an additional -N<N> option can be given, where <N>
1500 If -t is given, an additional -N<N> option can be given, where <N>
1501 must be an integer indicating how many times you want the script to
1501 must be an integer indicating how many times you want the script to
1502 run. The final timing report will include total and per run results.
1502 run. The final timing report will include total and per run results.
1503
1503
1504 For example (testing the script uniq_stable.py):
1504 For example (testing the script uniq_stable.py):
1505
1505
1506 In [1]: run -t uniq_stable
1506 In [1]: run -t uniq_stable
1507
1507
1508 IPython CPU timings (estimated):\\
1508 IPython CPU timings (estimated):\\
1509 User : 0.19597 s.\\
1509 User : 0.19597 s.\\
1510 System: 0.0 s.\\
1510 System: 0.0 s.\\
1511
1511
1512 In [2]: run -t -N5 uniq_stable
1512 In [2]: run -t -N5 uniq_stable
1513
1513
1514 IPython CPU timings (estimated):\\
1514 IPython CPU timings (estimated):\\
1515 Total runs performed: 5\\
1515 Total runs performed: 5\\
1516 Times : Total Per run\\
1516 Times : Total Per run\\
1517 User : 0.910862 s, 0.1821724 s.\\
1517 User : 0.910862 s, 0.1821724 s.\\
1518 System: 0.0 s, 0.0 s.
1518 System: 0.0 s, 0.0 s.
1519
1519
1520 -d: run your program under the control of pdb, the Python debugger.
1520 -d: run your program under the control of pdb, the Python debugger.
1521 This allows you to execute your program step by step, watch variables,
1521 This allows you to execute your program step by step, watch variables,
1522 etc. Internally, what IPython does is similar to calling:
1522 etc. Internally, what IPython does is similar to calling:
1523
1523
1524 pdb.run('execfile("YOURFILENAME")')
1524 pdb.run('execfile("YOURFILENAME")')
1525
1525
1526 with a breakpoint set on line 1 of your file. You can change the line
1526 with a breakpoint set on line 1 of your file. You can change the line
1527 number for this automatic breakpoint to be <N> by using the -bN option
1527 number for this automatic breakpoint to be <N> by using the -bN option
1528 (where N must be an integer). For example:
1528 (where N must be an integer). For example:
1529
1529
1530 %run -d -b40 myscript
1530 %run -d -b40 myscript
1531
1531
1532 will set the first breakpoint at line 40 in myscript.py. Note that
1532 will set the first breakpoint at line 40 in myscript.py. Note that
1533 the first breakpoint must be set on a line which actually does
1533 the first breakpoint must be set on a line which actually does
1534 something (not a comment or docstring) for it to stop execution.
1534 something (not a comment or docstring) for it to stop execution.
1535
1535
1536 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1536 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1537 first enter 'c' (without qoutes) to start execution up to the first
1537 first enter 'c' (without qoutes) to start execution up to the first
1538 breakpoint.
1538 breakpoint.
1539
1539
1540 Entering 'help' gives information about the use of the debugger. You
1540 Entering 'help' gives information about the use of the debugger. You
1541 can easily see pdb's full documentation with "import pdb;pdb.help()"
1541 can easily see pdb's full documentation with "import pdb;pdb.help()"
1542 at a prompt.
1542 at a prompt.
1543
1543
1544 -p: run program under the control of the Python profiler module (which
1544 -p: run program under the control of the Python profiler module (which
1545 prints a detailed report of execution times, function calls, etc).
1545 prints a detailed report of execution times, function calls, etc).
1546
1546
1547 You can pass other options after -p which affect the behavior of the
1547 You can pass other options after -p which affect the behavior of the
1548 profiler itself. See the docs for %prun for details.
1548 profiler itself. See the docs for %prun for details.
1549
1549
1550 In this mode, the program's variables do NOT propagate back to the
1550 In this mode, the program's variables do NOT propagate back to the
1551 IPython interactive namespace (because they remain in the namespace
1551 IPython interactive namespace (because they remain in the namespace
1552 where the profiler executes them).
1552 where the profiler executes them).
1553
1553
1554 Internally this triggers a call to %prun, see its documentation for
1554 Internally this triggers a call to %prun, see its documentation for
1555 details on the options available specifically for profiling.
1555 details on the options available specifically for profiling.
1556
1556
1557 There is one special usage for which the text above doesn't apply:
1557 There is one special usage for which the text above doesn't apply:
1558 if the filename ends with .ipy, the file is run as ipython script,
1558 if the filename ends with .ipy, the file is run as ipython script,
1559 just as if the commands were written on IPython prompt.
1559 just as if the commands were written on IPython prompt.
1560 """
1560 """
1561
1561
1562 # get arguments and set sys.argv for program to be run.
1562 # get arguments and set sys.argv for program to be run.
1563 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1563 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1564 mode='list',list_all=1)
1564 mode='list',list_all=1)
1565
1565
1566 try:
1566 try:
1567 filename = file_finder(arg_lst[0])
1567 filename = file_finder(arg_lst[0])
1568 except IndexError:
1568 except IndexError:
1569 warn('you must provide at least a filename.')
1569 warn('you must provide at least a filename.')
1570 print '\n%run:\n',oinspect.getdoc(self.magic_run)
1570 print '\n%run:\n',oinspect.getdoc(self.magic_run)
1571 return
1571 return
1572 except IOError as e:
1572 except IOError as e:
1573 try:
1573 try:
1574 msg = str(e)
1574 msg = str(e)
1575 except UnicodeError:
1575 except UnicodeError:
1576 msg = e.message
1576 msg = e.message
1577 error(msg)
1577 error(msg)
1578 return
1578 return
1579
1579
1580 if filename.lower().endswith('.ipy'):
1580 if filename.lower().endswith('.ipy'):
1581 self.shell.safe_execfile_ipy(filename)
1581 self.shell.safe_execfile_ipy(filename)
1582 return
1582 return
1583
1583
1584 # Control the response to exit() calls made by the script being run
1584 # Control the response to exit() calls made by the script being run
1585 exit_ignore = opts.has_key('e')
1585 exit_ignore = opts.has_key('e')
1586
1586
1587 # Make sure that the running script gets a proper sys.argv as if it
1587 # Make sure that the running script gets a proper sys.argv as if it
1588 # were run from a system shell.
1588 # were run from a system shell.
1589 save_argv = sys.argv # save it for later restoring
1589 save_argv = sys.argv # save it for later restoring
1590
1590
1591 # simulate shell expansion on arguments, at least tilde expansion
1591 # simulate shell expansion on arguments, at least tilde expansion
1592 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
1592 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
1593
1593
1594 sys.argv = [filename]+ args # put in the proper filename
1594 sys.argv = [filename]+ args # put in the proper filename
1595
1595
1596 if opts.has_key('i'):
1596 if opts.has_key('i'):
1597 # Run in user's interactive namespace
1597 # Run in user's interactive namespace
1598 prog_ns = self.shell.user_ns
1598 prog_ns = self.shell.user_ns
1599 __name__save = self.shell.user_ns['__name__']
1599 __name__save = self.shell.user_ns['__name__']
1600 prog_ns['__name__'] = '__main__'
1600 prog_ns['__name__'] = '__main__'
1601 main_mod = self.shell.new_main_mod(prog_ns)
1601 main_mod = self.shell.new_main_mod(prog_ns)
1602 else:
1602 else:
1603 # Run in a fresh, empty namespace
1603 # Run in a fresh, empty namespace
1604 if opts.has_key('n'):
1604 if opts.has_key('n'):
1605 name = os.path.splitext(os.path.basename(filename))[0]
1605 name = os.path.splitext(os.path.basename(filename))[0]
1606 else:
1606 else:
1607 name = '__main__'
1607 name = '__main__'
1608
1608
1609 main_mod = self.shell.new_main_mod()
1609 main_mod = self.shell.new_main_mod()
1610 prog_ns = main_mod.__dict__
1610 prog_ns = main_mod.__dict__
1611 prog_ns['__name__'] = name
1611 prog_ns['__name__'] = name
1612
1612
1613 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1613 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1614 # set the __file__ global in the script's namespace
1614 # set the __file__ global in the script's namespace
1615 prog_ns['__file__'] = filename
1615 prog_ns['__file__'] = filename
1616
1616
1617 # pickle fix. See interactiveshell for an explanation. But we need to make sure
1617 # pickle fix. See interactiveshell for an explanation. But we need to make sure
1618 # that, if we overwrite __main__, we replace it at the end
1618 # that, if we overwrite __main__, we replace it at the end
1619 main_mod_name = prog_ns['__name__']
1619 main_mod_name = prog_ns['__name__']
1620
1620
1621 if main_mod_name == '__main__':
1621 if main_mod_name == '__main__':
1622 restore_main = sys.modules['__main__']
1622 restore_main = sys.modules['__main__']
1623 else:
1623 else:
1624 restore_main = False
1624 restore_main = False
1625
1625
1626 # This needs to be undone at the end to prevent holding references to
1626 # This needs to be undone at the end to prevent holding references to
1627 # every single object ever created.
1627 # every single object ever created.
1628 sys.modules[main_mod_name] = main_mod
1628 sys.modules[main_mod_name] = main_mod
1629
1629
1630 try:
1630 try:
1631 stats = None
1631 stats = None
1632 with self.readline_no_record:
1632 with self.readline_no_record:
1633 if opts.has_key('p'):
1633 if opts.has_key('p'):
1634 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1634 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1635 else:
1635 else:
1636 if opts.has_key('d'):
1636 if opts.has_key('d'):
1637 deb = debugger.Pdb(self.shell.colors)
1637 deb = debugger.Pdb(self.shell.colors)
1638 # reset Breakpoint state, which is moronically kept
1638 # reset Breakpoint state, which is moronically kept
1639 # in a class
1639 # in a class
1640 bdb.Breakpoint.next = 1
1640 bdb.Breakpoint.next = 1
1641 bdb.Breakpoint.bplist = {}
1641 bdb.Breakpoint.bplist = {}
1642 bdb.Breakpoint.bpbynumber = [None]
1642 bdb.Breakpoint.bpbynumber = [None]
1643 # Set an initial breakpoint to stop execution
1643 # Set an initial breakpoint to stop execution
1644 maxtries = 10
1644 maxtries = 10
1645 bp = int(opts.get('b',[1])[0])
1645 bp = int(opts.get('b',[1])[0])
1646 checkline = deb.checkline(filename,bp)
1646 checkline = deb.checkline(filename,bp)
1647 if not checkline:
1647 if not checkline:
1648 for bp in range(bp+1,bp+maxtries+1):
1648 for bp in range(bp+1,bp+maxtries+1):
1649 if deb.checkline(filename,bp):
1649 if deb.checkline(filename,bp):
1650 break
1650 break
1651 else:
1651 else:
1652 msg = ("\nI failed to find a valid line to set "
1652 msg = ("\nI failed to find a valid line to set "
1653 "a breakpoint\n"
1653 "a breakpoint\n"
1654 "after trying up to line: %s.\n"
1654 "after trying up to line: %s.\n"
1655 "Please set a valid breakpoint manually "
1655 "Please set a valid breakpoint manually "
1656 "with the -b option." % bp)
1656 "with the -b option." % bp)
1657 error(msg)
1657 error(msg)
1658 return
1658 return
1659 # if we find a good linenumber, set the breakpoint
1659 # if we find a good linenumber, set the breakpoint
1660 deb.do_break('%s:%s' % (filename,bp))
1660 deb.do_break('%s:%s' % (filename,bp))
1661 # Start file run
1661 # Start file run
1662 print "NOTE: Enter 'c' at the",
1662 print "NOTE: Enter 'c' at the",
1663 print "%s prompt to start your script." % deb.prompt
1663 print "%s prompt to start your script." % deb.prompt
1664 try:
1664 try:
1665 deb.run('execfile("%s")' % filename,prog_ns)
1665 deb.run('execfile("%s")' % filename,prog_ns)
1666
1666
1667 except:
1667 except:
1668 etype, value, tb = sys.exc_info()
1668 etype, value, tb = sys.exc_info()
1669 # Skip three frames in the traceback: the %run one,
1669 # Skip three frames in the traceback: the %run one,
1670 # one inside bdb.py, and the command-line typed by the
1670 # one inside bdb.py, and the command-line typed by the
1671 # user (run by exec in pdb itself).
1671 # user (run by exec in pdb itself).
1672 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1672 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1673 else:
1673 else:
1674 if runner is None:
1674 if runner is None:
1675 runner = self.shell.safe_execfile
1675 runner = self.shell.safe_execfile
1676 if opts.has_key('t'):
1676 if opts.has_key('t'):
1677 # timed execution
1677 # timed execution
1678 try:
1678 try:
1679 nruns = int(opts['N'][0])
1679 nruns = int(opts['N'][0])
1680 if nruns < 1:
1680 if nruns < 1:
1681 error('Number of runs must be >=1')
1681 error('Number of runs must be >=1')
1682 return
1682 return
1683 except (KeyError):
1683 except (KeyError):
1684 nruns = 1
1684 nruns = 1
1685 twall0 = time.time()
1685 twall0 = time.time()
1686 if nruns == 1:
1686 if nruns == 1:
1687 t0 = clock2()
1687 t0 = clock2()
1688 runner(filename,prog_ns,prog_ns,
1688 runner(filename,prog_ns,prog_ns,
1689 exit_ignore=exit_ignore)
1689 exit_ignore=exit_ignore)
1690 t1 = clock2()
1690 t1 = clock2()
1691 t_usr = t1[0]-t0[0]
1691 t_usr = t1[0]-t0[0]
1692 t_sys = t1[1]-t0[1]
1692 t_sys = t1[1]-t0[1]
1693 print "\nIPython CPU timings (estimated):"
1693 print "\nIPython CPU timings (estimated):"
1694 print " User : %10.2f s." % t_usr
1694 print " User : %10.2f s." % t_usr
1695 print " System : %10.2f s." % t_sys
1695 print " System : %10.2f s." % t_sys
1696 else:
1696 else:
1697 runs = range(nruns)
1697 runs = range(nruns)
1698 t0 = clock2()
1698 t0 = clock2()
1699 for nr in runs:
1699 for nr in runs:
1700 runner(filename,prog_ns,prog_ns,
1700 runner(filename,prog_ns,prog_ns,
1701 exit_ignore=exit_ignore)
1701 exit_ignore=exit_ignore)
1702 t1 = clock2()
1702 t1 = clock2()
1703 t_usr = t1[0]-t0[0]
1703 t_usr = t1[0]-t0[0]
1704 t_sys = t1[1]-t0[1]
1704 t_sys = t1[1]-t0[1]
1705 print "\nIPython CPU timings (estimated):"
1705 print "\nIPython CPU timings (estimated):"
1706 print "Total runs performed:",nruns
1706 print "Total runs performed:",nruns
1707 print " Times : %10.2f %10.2f" % ('Total','Per run')
1707 print " Times : %10.2f %10.2f" % ('Total','Per run')
1708 print " User : %10.2f s, %10.2f s." % (t_usr,t_usr/nruns)
1708 print " User : %10.2f s, %10.2f s." % (t_usr,t_usr/nruns)
1709 print " System : %10.2f s, %10.2f s." % (t_sys,t_sys/nruns)
1709 print " System : %10.2f s, %10.2f s." % (t_sys,t_sys/nruns)
1710 twall1 = time.time()
1710 twall1 = time.time()
1711 print "Wall time: %10.2f s." % (twall1-twall0)
1711 print "Wall time: %10.2f s." % (twall1-twall0)
1712
1712
1713 else:
1713 else:
1714 # regular execution
1714 # regular execution
1715 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1715 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1716
1716
1717 if opts.has_key('i'):
1717 if opts.has_key('i'):
1718 self.shell.user_ns['__name__'] = __name__save
1718 self.shell.user_ns['__name__'] = __name__save
1719 else:
1719 else:
1720 # The shell MUST hold a reference to prog_ns so after %run
1720 # The shell MUST hold a reference to prog_ns so after %run
1721 # exits, the python deletion mechanism doesn't zero it out
1721 # exits, the python deletion mechanism doesn't zero it out
1722 # (leaving dangling references).
1722 # (leaving dangling references).
1723 self.shell.cache_main_mod(prog_ns,filename)
1723 self.shell.cache_main_mod(prog_ns,filename)
1724 # update IPython interactive namespace
1724 # update IPython interactive namespace
1725
1725
1726 # Some forms of read errors on the file may mean the
1726 # Some forms of read errors on the file may mean the
1727 # __name__ key was never set; using pop we don't have to
1727 # __name__ key was never set; using pop we don't have to
1728 # worry about a possible KeyError.
1728 # worry about a possible KeyError.
1729 prog_ns.pop('__name__', None)
1729 prog_ns.pop('__name__', None)
1730
1730
1731 self.shell.user_ns.update(prog_ns)
1731 self.shell.user_ns.update(prog_ns)
1732 finally:
1732 finally:
1733 # It's a bit of a mystery why, but __builtins__ can change from
1733 # It's a bit of a mystery why, but __builtins__ can change from
1734 # being a module to becoming a dict missing some key data after
1734 # being a module to becoming a dict missing some key data after
1735 # %run. As best I can see, this is NOT something IPython is doing
1735 # %run. As best I can see, this is NOT something IPython is doing
1736 # at all, and similar problems have been reported before:
1736 # at all, and similar problems have been reported before:
1737 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1737 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1738 # Since this seems to be done by the interpreter itself, the best
1738 # Since this seems to be done by the interpreter itself, the best
1739 # we can do is to at least restore __builtins__ for the user on
1739 # we can do is to at least restore __builtins__ for the user on
1740 # exit.
1740 # exit.
1741 self.shell.user_ns['__builtins__'] = builtin_mod
1741 self.shell.user_ns['__builtins__'] = builtin_mod
1742
1742
1743 # Ensure key global structures are restored
1743 # Ensure key global structures are restored
1744 sys.argv = save_argv
1744 sys.argv = save_argv
1745 if restore_main:
1745 if restore_main:
1746 sys.modules['__main__'] = restore_main
1746 sys.modules['__main__'] = restore_main
1747 else:
1747 else:
1748 # Remove from sys.modules the reference to main_mod we'd
1748 # Remove from sys.modules the reference to main_mod we'd
1749 # added. Otherwise it will trap references to objects
1749 # added. Otherwise it will trap references to objects
1750 # contained therein.
1750 # contained therein.
1751 del sys.modules[main_mod_name]
1751 del sys.modules[main_mod_name]
1752
1752
1753 return stats
1753 return stats
1754
1754
1755 @skip_doctest
1755 @skip_doctest
1756 def magic_timeit(self, parameter_s =''):
1756 def magic_timeit(self, parameter_s =''):
1757 """Time execution of a Python statement or expression
1757 """Time execution of a Python statement or expression
1758
1758
1759 Usage:\\
1759 Usage:\\
1760 %timeit [-n<N> -r<R> [-t|-c]] statement
1760 %timeit [-n<N> -r<R> [-t|-c]] statement
1761
1761
1762 Time execution of a Python statement or expression using the timeit
1762 Time execution of a Python statement or expression using the timeit
1763 module.
1763 module.
1764
1764
1765 Options:
1765 Options:
1766 -n<N>: execute the given statement <N> times in a loop. If this value
1766 -n<N>: execute the given statement <N> times in a loop. If this value
1767 is not given, a fitting value is chosen.
1767 is not given, a fitting value is chosen.
1768
1768
1769 -r<R>: repeat the loop iteration <R> times and take the best result.
1769 -r<R>: repeat the loop iteration <R> times and take the best result.
1770 Default: 3
1770 Default: 3
1771
1771
1772 -t: use time.time to measure the time, which is the default on Unix.
1772 -t: use time.time to measure the time, which is the default on Unix.
1773 This function measures wall time.
1773 This function measures wall time.
1774
1774
1775 -c: use time.clock to measure the time, which is the default on
1775 -c: use time.clock to measure the time, which is the default on
1776 Windows and measures wall time. On Unix, resource.getrusage is used
1776 Windows and measures wall time. On Unix, resource.getrusage is used
1777 instead and returns the CPU user time.
1777 instead and returns the CPU user time.
1778
1778
1779 -p<P>: use a precision of <P> digits to display the timing result.
1779 -p<P>: use a precision of <P> digits to display the timing result.
1780 Default: 3
1780 Default: 3
1781
1781
1782
1782
1783 Examples:
1783 Examples:
1784
1784
1785 In [1]: %timeit pass
1785 In [1]: %timeit pass
1786 10000000 loops, best of 3: 53.3 ns per loop
1786 10000000 loops, best of 3: 53.3 ns per loop
1787
1787
1788 In [2]: u = None
1788 In [2]: u = None
1789
1789
1790 In [3]: %timeit u is None
1790 In [3]: %timeit u is None
1791 10000000 loops, best of 3: 184 ns per loop
1791 10000000 loops, best of 3: 184 ns per loop
1792
1792
1793 In [4]: %timeit -r 4 u == None
1793 In [4]: %timeit -r 4 u == None
1794 1000000 loops, best of 4: 242 ns per loop
1794 1000000 loops, best of 4: 242 ns per loop
1795
1795
1796 In [5]: import time
1796 In [5]: import time
1797
1797
1798 In [6]: %timeit -n1 time.sleep(2)
1798 In [6]: %timeit -n1 time.sleep(2)
1799 1 loops, best of 3: 2 s per loop
1799 1 loops, best of 3: 2 s per loop
1800
1800
1801
1801
1802 The times reported by %timeit will be slightly higher than those
1802 The times reported by %timeit will be slightly higher than those
1803 reported by the timeit.py script when variables are accessed. This is
1803 reported by the timeit.py script when variables are accessed. This is
1804 due to the fact that %timeit executes the statement in the namespace
1804 due to the fact that %timeit executes the statement in the namespace
1805 of the shell, compared with timeit.py, which uses a single setup
1805 of the shell, compared with timeit.py, which uses a single setup
1806 statement to import function or create variables. Generally, the bias
1806 statement to import function or create variables. Generally, the bias
1807 does not matter as long as results from timeit.py are not mixed with
1807 does not matter as long as results from timeit.py are not mixed with
1808 those from %timeit."""
1808 those from %timeit."""
1809
1809
1810 import timeit
1810 import timeit
1811 import math
1811 import math
1812
1812
1813 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1813 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1814 # certain terminals. Until we figure out a robust way of
1814 # certain terminals. Until we figure out a robust way of
1815 # auto-detecting if the terminal can deal with it, use plain 'us' for
1815 # auto-detecting if the terminal can deal with it, use plain 'us' for
1816 # microseconds. I am really NOT happy about disabling the proper
1816 # microseconds. I am really NOT happy about disabling the proper
1817 # 'micro' prefix, but crashing is worse... If anyone knows what the
1817 # 'micro' prefix, but crashing is worse... If anyone knows what the
1818 # right solution for this is, I'm all ears...
1818 # right solution for this is, I'm all ears...
1819 #
1819 #
1820 # Note: using
1820 # Note: using
1821 #
1821 #
1822 # s = u'\xb5'
1822 # s = u'\xb5'
1823 # s.encode(sys.getdefaultencoding())
1823 # s.encode(sys.getdefaultencoding())
1824 #
1824 #
1825 # is not sufficient, as I've seen terminals where that fails but
1825 # is not sufficient, as I've seen terminals where that fails but
1826 # print s
1826 # print s
1827 #
1827 #
1828 # succeeds
1828 # succeeds
1829 #
1829 #
1830 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1830 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1831
1831
1832 #units = [u"s", u"ms",u'\xb5',"ns"]
1832 #units = [u"s", u"ms",u'\xb5',"ns"]
1833 units = [u"s", u"ms",u'us',"ns"]
1833 units = [u"s", u"ms",u'us',"ns"]
1834
1834
1835 scaling = [1, 1e3, 1e6, 1e9]
1835 scaling = [1, 1e3, 1e6, 1e9]
1836
1836
1837 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1837 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1838 posix=False)
1838 posix=False)
1839 if stmt == "":
1839 if stmt == "":
1840 return
1840 return
1841 timefunc = timeit.default_timer
1841 timefunc = timeit.default_timer
1842 number = int(getattr(opts, "n", 0))
1842 number = int(getattr(opts, "n", 0))
1843 repeat = int(getattr(opts, "r", timeit.default_repeat))
1843 repeat = int(getattr(opts, "r", timeit.default_repeat))
1844 precision = int(getattr(opts, "p", 3))
1844 precision = int(getattr(opts, "p", 3))
1845 if hasattr(opts, "t"):
1845 if hasattr(opts, "t"):
1846 timefunc = time.time
1846 timefunc = time.time
1847 if hasattr(opts, "c"):
1847 if hasattr(opts, "c"):
1848 timefunc = clock
1848 timefunc = clock
1849
1849
1850 timer = timeit.Timer(timer=timefunc)
1850 timer = timeit.Timer(timer=timefunc)
1851 # this code has tight coupling to the inner workings of timeit.Timer,
1851 # this code has tight coupling to the inner workings of timeit.Timer,
1852 # but is there a better way to achieve that the code stmt has access
1852 # but is there a better way to achieve that the code stmt has access
1853 # to the shell namespace?
1853 # to the shell namespace?
1854
1854
1855 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1855 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1856 'setup': "pass"}
1856 'setup': "pass"}
1857 # Track compilation time so it can be reported if too long
1857 # Track compilation time so it can be reported if too long
1858 # Minimum time above which compilation time will be reported
1858 # Minimum time above which compilation time will be reported
1859 tc_min = 0.1
1859 tc_min = 0.1
1860
1860
1861 t0 = clock()
1861 t0 = clock()
1862 code = compile(src, "<magic-timeit>", "exec")
1862 code = compile(src, "<magic-timeit>", "exec")
1863 tc = clock()-t0
1863 tc = clock()-t0
1864
1864
1865 ns = {}
1865 ns = {}
1866 exec code in self.shell.user_ns, ns
1866 exec code in self.shell.user_ns, ns
1867 timer.inner = ns["inner"]
1867 timer.inner = ns["inner"]
1868
1868
1869 if number == 0:
1869 if number == 0:
1870 # determine number so that 0.2 <= total time < 2.0
1870 # determine number so that 0.2 <= total time < 2.0
1871 number = 1
1871 number = 1
1872 for i in range(1, 10):
1872 for i in range(1, 10):
1873 if timer.timeit(number) >= 0.2:
1873 if timer.timeit(number) >= 0.2:
1874 break
1874 break
1875 number *= 10
1875 number *= 10
1876
1876
1877 best = min(timer.repeat(repeat, number)) / number
1877 best = min(timer.repeat(repeat, number)) / number
1878
1878
1879 if best > 0.0 and best < 1000.0:
1879 if best > 0.0 and best < 1000.0:
1880 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1880 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1881 elif best >= 1000.0:
1881 elif best >= 1000.0:
1882 order = 0
1882 order = 0
1883 else:
1883 else:
1884 order = 3
1884 order = 3
1885 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1885 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1886 precision,
1886 precision,
1887 best * scaling[order],
1887 best * scaling[order],
1888 units[order])
1888 units[order])
1889 if tc > tc_min:
1889 if tc > tc_min:
1890 print "Compiler time: %.2f s" % tc
1890 print "Compiler time: %.2f s" % tc
1891
1891
1892 @skip_doctest
1892 @skip_doctest
1893 @needs_local_scope
1893 @needs_local_scope
1894 def magic_time(self,parameter_s = ''):
1894 def magic_time(self,parameter_s = ''):
1895 """Time execution of a Python statement or expression.
1895 """Time execution of a Python statement or expression.
1896
1896
1897 The CPU and wall clock times are printed, and the value of the
1897 The CPU and wall clock times are printed, and the value of the
1898 expression (if any) is returned. Note that under Win32, system time
1898 expression (if any) is returned. Note that under Win32, system time
1899 is always reported as 0, since it can not be measured.
1899 is always reported as 0, since it can not be measured.
1900
1900
1901 This function provides very basic timing functionality. In Python
1901 This function provides very basic timing functionality. In Python
1902 2.3, the timeit module offers more control and sophistication, so this
1902 2.3, the timeit module offers more control and sophistication, so this
1903 could be rewritten to use it (patches welcome).
1903 could be rewritten to use it (patches welcome).
1904
1904
1905 Some examples:
1905 Some examples:
1906
1906
1907 In [1]: time 2**128
1907 In [1]: time 2**128
1908 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1908 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1909 Wall time: 0.00
1909 Wall time: 0.00
1910 Out[1]: 340282366920938463463374607431768211456L
1910 Out[1]: 340282366920938463463374607431768211456L
1911
1911
1912 In [2]: n = 1000000
1912 In [2]: n = 1000000
1913
1913
1914 In [3]: time sum(range(n))
1914 In [3]: time sum(range(n))
1915 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1915 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1916 Wall time: 1.37
1916 Wall time: 1.37
1917 Out[3]: 499999500000L
1917 Out[3]: 499999500000L
1918
1918
1919 In [4]: time print 'hello world'
1919 In [4]: time print 'hello world'
1920 hello world
1920 hello world
1921 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1921 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1922 Wall time: 0.00
1922 Wall time: 0.00
1923
1923
1924 Note that the time needed by Python to compile the given expression
1924 Note that the time needed by Python to compile the given expression
1925 will be reported if it is more than 0.1s. In this example, the
1925 will be reported if it is more than 0.1s. In this example, the
1926 actual exponentiation is done by Python at compilation time, so while
1926 actual exponentiation is done by Python at compilation time, so while
1927 the expression can take a noticeable amount of time to compute, that
1927 the expression can take a noticeable amount of time to compute, that
1928 time is purely due to the compilation:
1928 time is purely due to the compilation:
1929
1929
1930 In [5]: time 3**9999;
1930 In [5]: time 3**9999;
1931 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1931 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1932 Wall time: 0.00 s
1932 Wall time: 0.00 s
1933
1933
1934 In [6]: time 3**999999;
1934 In [6]: time 3**999999;
1935 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1935 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1936 Wall time: 0.00 s
1936 Wall time: 0.00 s
1937 Compiler : 0.78 s
1937 Compiler : 0.78 s
1938 """
1938 """
1939
1939
1940 # fail immediately if the given expression can't be compiled
1940 # fail immediately if the given expression can't be compiled
1941
1941
1942 expr = self.shell.prefilter(parameter_s,False)
1942 expr = self.shell.prefilter(parameter_s,False)
1943
1943
1944 # Minimum time above which compilation time will be reported
1944 # Minimum time above which compilation time will be reported
1945 tc_min = 0.1
1945 tc_min = 0.1
1946
1946
1947 try:
1947 try:
1948 mode = 'eval'
1948 mode = 'eval'
1949 t0 = clock()
1949 t0 = clock()
1950 code = compile(expr,'<timed eval>',mode)
1950 code = compile(expr,'<timed eval>',mode)
1951 tc = clock()-t0
1951 tc = clock()-t0
1952 except SyntaxError:
1952 except SyntaxError:
1953 mode = 'exec'
1953 mode = 'exec'
1954 t0 = clock()
1954 t0 = clock()
1955 code = compile(expr,'<timed exec>',mode)
1955 code = compile(expr,'<timed exec>',mode)
1956 tc = clock()-t0
1956 tc = clock()-t0
1957 # skew measurement as little as possible
1957 # skew measurement as little as possible
1958 glob = self.shell.user_ns
1958 glob = self.shell.user_ns
1959 locs = self._magic_locals
1959 locs = self._magic_locals
1960 clk = clock2
1960 clk = clock2
1961 wtime = time.time
1961 wtime = time.time
1962 # time execution
1962 # time execution
1963 wall_st = wtime()
1963 wall_st = wtime()
1964 if mode=='eval':
1964 if mode=='eval':
1965 st = clk()
1965 st = clk()
1966 out = eval(code, glob, locs)
1966 out = eval(code, glob, locs)
1967 end = clk()
1967 end = clk()
1968 else:
1968 else:
1969 st = clk()
1969 st = clk()
1970 exec code in glob, locs
1970 exec code in glob, locs
1971 end = clk()
1971 end = clk()
1972 out = None
1972 out = None
1973 wall_end = wtime()
1973 wall_end = wtime()
1974 # Compute actual times and report
1974 # Compute actual times and report
1975 wall_time = wall_end-wall_st
1975 wall_time = wall_end-wall_st
1976 cpu_user = end[0]-st[0]
1976 cpu_user = end[0]-st[0]
1977 cpu_sys = end[1]-st[1]
1977 cpu_sys = end[1]-st[1]
1978 cpu_tot = cpu_user+cpu_sys
1978 cpu_tot = cpu_user+cpu_sys
1979 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1979 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1980 (cpu_user,cpu_sys,cpu_tot)
1980 (cpu_user,cpu_sys,cpu_tot)
1981 print "Wall time: %.2f s" % wall_time
1981 print "Wall time: %.2f s" % wall_time
1982 if tc > tc_min:
1982 if tc > tc_min:
1983 print "Compiler : %.2f s" % tc
1983 print "Compiler : %.2f s" % tc
1984 return out
1984 return out
1985
1985
1986 @skip_doctest
1986 @skip_doctest
1987 def magic_macro(self,parameter_s = ''):
1987 def magic_macro(self,parameter_s = ''):
1988 """Define a macro for future re-execution. It accepts ranges of history,
1988 """Define a macro for future re-execution. It accepts ranges of history,
1989 filenames or string objects.
1989 filenames or string objects.
1990
1990
1991 Usage:\\
1991 Usage:\\
1992 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1992 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1993
1993
1994 Options:
1994 Options:
1995
1995
1996 -r: use 'raw' input. By default, the 'processed' history is used,
1996 -r: use 'raw' input. By default, the 'processed' history is used,
1997 so that magics are loaded in their transformed version to valid
1997 so that magics are loaded in their transformed version to valid
1998 Python. If this option is given, the raw input as typed as the
1998 Python. If this option is given, the raw input as typed as the
1999 command line is used instead.
1999 command line is used instead.
2000
2000
2001 This will define a global variable called `name` which is a string
2001 This will define a global variable called `name` which is a string
2002 made of joining the slices and lines you specify (n1,n2,... numbers
2002 made of joining the slices and lines you specify (n1,n2,... numbers
2003 above) from your input history into a single string. This variable
2003 above) from your input history into a single string. This variable
2004 acts like an automatic function which re-executes those lines as if
2004 acts like an automatic function which re-executes those lines as if
2005 you had typed them. You just type 'name' at the prompt and the code
2005 you had typed them. You just type 'name' at the prompt and the code
2006 executes.
2006 executes.
2007
2007
2008 The syntax for indicating input ranges is described in %history.
2008 The syntax for indicating input ranges is described in %history.
2009
2009
2010 Note: as a 'hidden' feature, you can also use traditional python slice
2010 Note: as a 'hidden' feature, you can also use traditional python slice
2011 notation, where N:M means numbers N through M-1.
2011 notation, where N:M means numbers N through M-1.
2012
2012
2013 For example, if your history contains (%hist prints it):
2013 For example, if your history contains (%hist prints it):
2014
2014
2015 44: x=1
2015 44: x=1
2016 45: y=3
2016 45: y=3
2017 46: z=x+y
2017 46: z=x+y
2018 47: print x
2018 47: print x
2019 48: a=5
2019 48: a=5
2020 49: print 'x',x,'y',y
2020 49: print 'x',x,'y',y
2021
2021
2022 you can create a macro with lines 44 through 47 (included) and line 49
2022 you can create a macro with lines 44 through 47 (included) and line 49
2023 called my_macro with:
2023 called my_macro with:
2024
2024
2025 In [55]: %macro my_macro 44-47 49
2025 In [55]: %macro my_macro 44-47 49
2026
2026
2027 Now, typing `my_macro` (without quotes) will re-execute all this code
2027 Now, typing `my_macro` (without quotes) will re-execute all this code
2028 in one pass.
2028 in one pass.
2029
2029
2030 You don't need to give the line-numbers in order, and any given line
2030 You don't need to give the line-numbers in order, and any given line
2031 number can appear multiple times. You can assemble macros with any
2031 number can appear multiple times. You can assemble macros with any
2032 lines from your input history in any order.
2032 lines from your input history in any order.
2033
2033
2034 The macro is a simple object which holds its value in an attribute,
2034 The macro is a simple object which holds its value in an attribute,
2035 but IPython's display system checks for macros and executes them as
2035 but IPython's display system checks for macros and executes them as
2036 code instead of printing them when you type their name.
2036 code instead of printing them when you type their name.
2037
2037
2038 You can view a macro's contents by explicitly printing it with:
2038 You can view a macro's contents by explicitly printing it with:
2039
2039
2040 'print macro_name'.
2040 'print macro_name'.
2041
2041
2042 """
2042 """
2043 opts,args = self.parse_options(parameter_s,'r',mode='list')
2043 opts,args = self.parse_options(parameter_s,'r',mode='list')
2044 if not args: # List existing macros
2044 if not args: # List existing macros
2045 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2045 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2046 isinstance(v, Macro))
2046 isinstance(v, Macro))
2047 if len(args) == 1:
2047 if len(args) == 1:
2048 raise UsageError(
2048 raise UsageError(
2049 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2049 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2050 name, codefrom = args[0], " ".join(args[1:])
2050 name, codefrom = args[0], " ".join(args[1:])
2051
2051
2052 #print 'rng',ranges # dbg
2052 #print 'rng',ranges # dbg
2053 try:
2053 try:
2054 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2054 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2055 except (ValueError, TypeError) as e:
2055 except (ValueError, TypeError) as e:
2056 print e.args[0]
2056 print e.args[0]
2057 return
2057 return
2058 macro = Macro(lines)
2058 macro = Macro(lines)
2059 self.shell.define_macro(name, macro)
2059 self.shell.define_macro(name, macro)
2060 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2060 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2061 print '=== Macro contents: ==='
2061 print '=== Macro contents: ==='
2062 print macro,
2062 print macro,
2063
2063
2064 def magic_save(self,parameter_s = ''):
2064 def magic_save(self,parameter_s = ''):
2065 """Save a set of lines or a macro to a given filename.
2065 """Save a set of lines or a macro to a given filename.
2066
2066
2067 Usage:\\
2067 Usage:\\
2068 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2068 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2069
2069
2070 Options:
2070 Options:
2071
2071
2072 -r: use 'raw' input. By default, the 'processed' history is used,
2072 -r: use 'raw' input. By default, the 'processed' history is used,
2073 so that magics are loaded in their transformed version to valid
2073 so that magics are loaded in their transformed version to valid
2074 Python. If this option is given, the raw input as typed as the
2074 Python. If this option is given, the raw input as typed as the
2075 command line is used instead.
2075 command line is used instead.
2076
2076
2077 This function uses the same syntax as %history for input ranges,
2077 This function uses the same syntax as %history for input ranges,
2078 then saves the lines to the filename you specify.
2078 then saves the lines to the filename you specify.
2079
2079
2080 It adds a '.py' extension to the file if you don't do so yourself, and
2080 It adds a '.py' extension to the file if you don't do so yourself, and
2081 it asks for confirmation before overwriting existing files."""
2081 it asks for confirmation before overwriting existing files."""
2082
2082
2083 opts,args = self.parse_options(parameter_s,'r',mode='list')
2083 opts,args = self.parse_options(parameter_s,'r',mode='list')
2084 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
2084 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
2085 if not fname.endswith('.py'):
2085 if not fname.endswith('.py'):
2086 fname += '.py'
2086 fname += '.py'
2087 if os.path.isfile(fname):
2087 if os.path.isfile(fname):
2088 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2088 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2089 if ans.lower() not in ['y','yes']:
2089 if ans.lower() not in ['y','yes']:
2090 print 'Operation cancelled.'
2090 print 'Operation cancelled.'
2091 return
2091 return
2092 try:
2092 try:
2093 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
2093 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
2094 except (TypeError, ValueError) as e:
2094 except (TypeError, ValueError) as e:
2095 print e.args[0]
2095 print e.args[0]
2096 return
2096 return
2097 with py3compat.open(fname,'w', encoding="utf-8") as f:
2097 with py3compat.open(fname,'w', encoding="utf-8") as f:
2098 f.write(u"# coding: utf-8\n")
2098 f.write(u"# coding: utf-8\n")
2099 f.write(py3compat.cast_unicode(cmds))
2099 f.write(py3compat.cast_unicode(cmds))
2100 print 'The following commands were written to file `%s`:' % fname
2100 print 'The following commands were written to file `%s`:' % fname
2101 print cmds
2101 print cmds
2102
2102
2103 def magic_pastebin(self, parameter_s = ''):
2103 def magic_pastebin(self, parameter_s = ''):
2104 """Upload code to the 'Lodge it' paste bin, returning the URL."""
2104 """Upload code to the 'Lodge it' paste bin, returning the URL."""
2105 try:
2105 try:
2106 code = self.shell.find_user_code(parameter_s)
2106 code = self.shell.find_user_code(parameter_s)
2107 except (ValueError, TypeError) as e:
2107 except (ValueError, TypeError) as e:
2108 print e.args[0]
2108 print e.args[0]
2109 return
2109 return
2110 pbserver = ServerProxy('http://paste.pocoo.org/xmlrpc/')
2110 pbserver = ServerProxy('http://paste.pocoo.org/xmlrpc/')
2111 id = pbserver.pastes.newPaste("python", code)
2111 id = pbserver.pastes.newPaste("python", code)
2112 return "http://paste.pocoo.org/show/" + id
2112 return "http://paste.pocoo.org/show/" + id
2113
2113
2114 def magic_loadpy(self, arg_s):
2114 def magic_loadpy(self, arg_s):
2115 """Load a .py python script into the GUI console.
2115 """Load a .py python script into the GUI console.
2116
2116
2117 This magic command can either take a local filename or a url::
2117 This magic command can either take a local filename or a url::
2118
2118
2119 %loadpy myscript.py
2119 %loadpy myscript.py
2120 %loadpy http://www.example.com/myscript.py
2120 %loadpy http://www.example.com/myscript.py
2121 """
2121 """
2122 arg_s = unquote_filename(arg_s)
2122 arg_s = unquote_filename(arg_s)
2123 if not arg_s.endswith('.py'):
2123 if not arg_s.endswith('.py'):
2124 raise ValueError('%%load only works with .py files: %s' % arg_s)
2124 raise ValueError('%%load only works with .py files: %s' % arg_s)
2125 if arg_s.startswith('http'):
2125 if arg_s.startswith('http'):
2126 import urllib2
2126 import urllib2
2127 response = urllib2.urlopen(arg_s)
2127 response = urllib2.urlopen(arg_s)
2128 content = response.read()
2128 content = response.read()
2129 else:
2129 else:
2130 with open(arg_s) as f:
2130 with open(arg_s) as f:
2131 content = f.read()
2131 content = f.read()
2132 self.set_next_input(content)
2132 self.set_next_input(content)
2133
2133
2134 def _find_edit_target(self, args, opts, last_call):
2134 def _find_edit_target(self, args, opts, last_call):
2135 """Utility method used by magic_edit to find what to edit."""
2135 """Utility method used by magic_edit to find what to edit."""
2136
2136
2137 def make_filename(arg):
2137 def make_filename(arg):
2138 "Make a filename from the given args"
2138 "Make a filename from the given args"
2139 arg = unquote_filename(arg)
2139 arg = unquote_filename(arg)
2140 try:
2140 try:
2141 filename = get_py_filename(arg)
2141 filename = get_py_filename(arg)
2142 except IOError:
2142 except IOError:
2143 # If it ends with .py but doesn't already exist, assume we want
2143 # If it ends with .py but doesn't already exist, assume we want
2144 # a new file.
2144 # a new file.
2145 if arg.endswith('.py'):
2145 if arg.endswith('.py'):
2146 filename = arg
2146 filename = arg
2147 else:
2147 else:
2148 filename = None
2148 filename = None
2149 return filename
2149 return filename
2150
2150
2151 # Set a few locals from the options for convenience:
2151 # Set a few locals from the options for convenience:
2152 opts_prev = 'p' in opts
2152 opts_prev = 'p' in opts
2153 opts_raw = 'r' in opts
2153 opts_raw = 'r' in opts
2154
2154
2155 # custom exceptions
2155 # custom exceptions
2156 class DataIsObject(Exception): pass
2156 class DataIsObject(Exception): pass
2157
2157
2158 # Default line number value
2158 # Default line number value
2159 lineno = opts.get('n',None)
2159 lineno = opts.get('n',None)
2160
2160
2161 if opts_prev:
2161 if opts_prev:
2162 args = '_%s' % last_call[0]
2162 args = '_%s' % last_call[0]
2163 if not self.shell.user_ns.has_key(args):
2163 if not self.shell.user_ns.has_key(args):
2164 args = last_call[1]
2164 args = last_call[1]
2165
2165
2166 # use last_call to remember the state of the previous call, but don't
2166 # use last_call to remember the state of the previous call, but don't
2167 # let it be clobbered by successive '-p' calls.
2167 # let it be clobbered by successive '-p' calls.
2168 try:
2168 try:
2169 last_call[0] = self.shell.displayhook.prompt_count
2169 last_call[0] = self.shell.displayhook.prompt_count
2170 if not opts_prev:
2170 if not opts_prev:
2171 last_call[1] = parameter_s
2171 last_call[1] = parameter_s
2172 except:
2172 except:
2173 pass
2173 pass
2174
2174
2175 # by default this is done with temp files, except when the given
2175 # by default this is done with temp files, except when the given
2176 # arg is a filename
2176 # arg is a filename
2177 use_temp = True
2177 use_temp = True
2178
2178
2179 data = ''
2179 data = ''
2180
2180
2181 # First, see if the arguments should be a filename.
2181 # First, see if the arguments should be a filename.
2182 filename = make_filename(args)
2182 filename = make_filename(args)
2183 if filename:
2183 if filename:
2184 use_temp = False
2184 use_temp = False
2185 elif args:
2185 elif args:
2186 # Mode where user specifies ranges of lines, like in %macro.
2186 # Mode where user specifies ranges of lines, like in %macro.
2187 data = self.extract_input_lines(args, opts_raw)
2187 data = self.extract_input_lines(args, opts_raw)
2188 if not data:
2188 if not data:
2189 try:
2189 try:
2190 # Load the parameter given as a variable. If not a string,
2190 # Load the parameter given as a variable. If not a string,
2191 # process it as an object instead (below)
2191 # process it as an object instead (below)
2192
2192
2193 #print '*** args',args,'type',type(args) # dbg
2193 #print '*** args',args,'type',type(args) # dbg
2194 data = eval(args, self.shell.user_ns)
2194 data = eval(args, self.shell.user_ns)
2195 if not isinstance(data, basestring):
2195 if not isinstance(data, basestring):
2196 raise DataIsObject
2196 raise DataIsObject
2197
2197
2198 except (NameError,SyntaxError):
2198 except (NameError,SyntaxError):
2199 # given argument is not a variable, try as a filename
2199 # given argument is not a variable, try as a filename
2200 filename = make_filename(args)
2200 filename = make_filename(args)
2201 if filename is None:
2201 if filename is None:
2202 warn("Argument given (%s) can't be found as a variable "
2202 warn("Argument given (%s) can't be found as a variable "
2203 "or as a filename." % args)
2203 "or as a filename." % args)
2204 return
2204 return
2205 use_temp = False
2205 use_temp = False
2206
2206
2207 except DataIsObject:
2207 except DataIsObject:
2208 # macros have a special edit function
2208 # macros have a special edit function
2209 if isinstance(data, Macro):
2209 if isinstance(data, Macro):
2210 raise MacroToEdit(data)
2210 raise MacroToEdit(data)
2211
2211
2212 # For objects, try to edit the file where they are defined
2212 # For objects, try to edit the file where they are defined
2213 try:
2213 try:
2214 filename = inspect.getabsfile(data)
2214 filename = inspect.getabsfile(data)
2215 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2215 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2216 # class created by %edit? Try to find source
2216 # class created by %edit? Try to find source
2217 # by looking for method definitions instead, the
2217 # by looking for method definitions instead, the
2218 # __module__ in those classes is FakeModule.
2218 # __module__ in those classes is FakeModule.
2219 attrs = [getattr(data, aname) for aname in dir(data)]
2219 attrs = [getattr(data, aname) for aname in dir(data)]
2220 for attr in attrs:
2220 for attr in attrs:
2221 if not inspect.ismethod(attr):
2221 if not inspect.ismethod(attr):
2222 continue
2222 continue
2223 filename = inspect.getabsfile(attr)
2223 filename = inspect.getabsfile(attr)
2224 if filename and 'fakemodule' not in filename.lower():
2224 if filename and 'fakemodule' not in filename.lower():
2225 # change the attribute to be the edit target instead
2225 # change the attribute to be the edit target instead
2226 data = attr
2226 data = attr
2227 break
2227 break
2228
2228
2229 datafile = 1
2229 datafile = 1
2230 except TypeError:
2230 except TypeError:
2231 filename = make_filename(args)
2231 filename = make_filename(args)
2232 datafile = 1
2232 datafile = 1
2233 warn('Could not find file where `%s` is defined.\n'
2233 warn('Could not find file where `%s` is defined.\n'
2234 'Opening a file named `%s`' % (args,filename))
2234 'Opening a file named `%s`' % (args,filename))
2235 # Now, make sure we can actually read the source (if it was in
2235 # Now, make sure we can actually read the source (if it was in
2236 # a temp file it's gone by now).
2236 # a temp file it's gone by now).
2237 if datafile:
2237 if datafile:
2238 try:
2238 try:
2239 if lineno is None:
2239 if lineno is None:
2240 lineno = inspect.getsourcelines(data)[1]
2240 lineno = inspect.getsourcelines(data)[1]
2241 except IOError:
2241 except IOError:
2242 filename = make_filename(args)
2242 filename = make_filename(args)
2243 if filename is None:
2243 if filename is None:
2244 warn('The file `%s` where `%s` was defined cannot '
2244 warn('The file `%s` where `%s` was defined cannot '
2245 'be read.' % (filename,data))
2245 'be read.' % (filename,data))
2246 return
2246 return
2247 use_temp = False
2247 use_temp = False
2248
2248
2249 if use_temp:
2249 if use_temp:
2250 filename = self.shell.mktempfile(data)
2250 filename = self.shell.mktempfile(data)
2251 print 'IPython will make a temporary file named:',filename
2251 print 'IPython will make a temporary file named:',filename
2252
2252
2253 return filename, lineno, use_temp
2253 return filename, lineno, use_temp
2254
2254
2255 def _edit_macro(self,mname,macro):
2255 def _edit_macro(self,mname,macro):
2256 """open an editor with the macro data in a file"""
2256 """open an editor with the macro data in a file"""
2257 filename = self.shell.mktempfile(macro.value)
2257 filename = self.shell.mktempfile(macro.value)
2258 self.shell.hooks.editor(filename)
2258 self.shell.hooks.editor(filename)
2259
2259
2260 # and make a new macro object, to replace the old one
2260 # and make a new macro object, to replace the old one
2261 mfile = open(filename)
2261 mfile = open(filename)
2262 mvalue = mfile.read()
2262 mvalue = mfile.read()
2263 mfile.close()
2263 mfile.close()
2264 self.shell.user_ns[mname] = Macro(mvalue)
2264 self.shell.user_ns[mname] = Macro(mvalue)
2265
2265
2266 def magic_ed(self,parameter_s=''):
2266 def magic_ed(self,parameter_s=''):
2267 """Alias to %edit."""
2267 """Alias to %edit."""
2268 return self.magic_edit(parameter_s)
2268 return self.magic_edit(parameter_s)
2269
2269
2270 @skip_doctest
2270 @skip_doctest
2271 def magic_edit(self,parameter_s='',last_call=['','']):
2271 def magic_edit(self,parameter_s='',last_call=['','']):
2272 """Bring up an editor and execute the resulting code.
2272 """Bring up an editor and execute the resulting code.
2273
2273
2274 Usage:
2274 Usage:
2275 %edit [options] [args]
2275 %edit [options] [args]
2276
2276
2277 %edit runs IPython's editor hook. The default version of this hook is
2277 %edit runs IPython's editor hook. The default version of this hook is
2278 set to call the editor specified by your $EDITOR environment variable.
2278 set to call the editor specified by your $EDITOR environment variable.
2279 If this isn't found, it will default to vi under Linux/Unix and to
2279 If this isn't found, it will default to vi under Linux/Unix and to
2280 notepad under Windows. See the end of this docstring for how to change
2280 notepad under Windows. See the end of this docstring for how to change
2281 the editor hook.
2281 the editor hook.
2282
2282
2283 You can also set the value of this editor via the
2283 You can also set the value of this editor via the
2284 ``TerminalInteractiveShell.editor`` option in your configuration file.
2284 ``TerminalInteractiveShell.editor`` option in your configuration file.
2285 This is useful if you wish to use a different editor from your typical
2285 This is useful if you wish to use a different editor from your typical
2286 default with IPython (and for Windows users who typically don't set
2286 default with IPython (and for Windows users who typically don't set
2287 environment variables).
2287 environment variables).
2288
2288
2289 This command allows you to conveniently edit multi-line code right in
2289 This command allows you to conveniently edit multi-line code right in
2290 your IPython session.
2290 your IPython session.
2291
2291
2292 If called without arguments, %edit opens up an empty editor with a
2292 If called without arguments, %edit opens up an empty editor with a
2293 temporary file and will execute the contents of this file when you
2293 temporary file and will execute the contents of this file when you
2294 close it (don't forget to save it!).
2294 close it (don't forget to save it!).
2295
2295
2296
2296
2297 Options:
2297 Options:
2298
2298
2299 -n <number>: open the editor at a specified line number. By default,
2299 -n <number>: open the editor at a specified line number. By default,
2300 the IPython editor hook uses the unix syntax 'editor +N filename', but
2300 the IPython editor hook uses the unix syntax 'editor +N filename', but
2301 you can configure this by providing your own modified hook if your
2301 you can configure this by providing your own modified hook if your
2302 favorite editor supports line-number specifications with a different
2302 favorite editor supports line-number specifications with a different
2303 syntax.
2303 syntax.
2304
2304
2305 -p: this will call the editor with the same data as the previous time
2305 -p: this will call the editor with the same data as the previous time
2306 it was used, regardless of how long ago (in your current session) it
2306 it was used, regardless of how long ago (in your current session) it
2307 was.
2307 was.
2308
2308
2309 -r: use 'raw' input. This option only applies to input taken from the
2309 -r: use 'raw' input. This option only applies to input taken from the
2310 user's history. By default, the 'processed' history is used, so that
2310 user's history. By default, the 'processed' history is used, so that
2311 magics are loaded in their transformed version to valid Python. If
2311 magics are loaded in their transformed version to valid Python. If
2312 this option is given, the raw input as typed as the command line is
2312 this option is given, the raw input as typed as the command line is
2313 used instead. When you exit the editor, it will be executed by
2313 used instead. When you exit the editor, it will be executed by
2314 IPython's own processor.
2314 IPython's own processor.
2315
2315
2316 -x: do not execute the edited code immediately upon exit. This is
2316 -x: do not execute the edited code immediately upon exit. This is
2317 mainly useful if you are editing programs which need to be called with
2317 mainly useful if you are editing programs which need to be called with
2318 command line arguments, which you can then do using %run.
2318 command line arguments, which you can then do using %run.
2319
2319
2320
2320
2321 Arguments:
2321 Arguments:
2322
2322
2323 If arguments are given, the following possibilites exist:
2323 If arguments are given, the following possibilites exist:
2324
2324
2325 - If the argument is a filename, IPython will load that into the
2325 - If the argument is a filename, IPython will load that into the
2326 editor. It will execute its contents with execfile() when you exit,
2326 editor. It will execute its contents with execfile() when you exit,
2327 loading any code in the file into your interactive namespace.
2327 loading any code in the file into your interactive namespace.
2328
2328
2329 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
2329 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
2330 The syntax is the same as in the %history magic.
2330 The syntax is the same as in the %history magic.
2331
2331
2332 - If the argument is a string variable, its contents are loaded
2332 - If the argument is a string variable, its contents are loaded
2333 into the editor. You can thus edit any string which contains
2333 into the editor. You can thus edit any string which contains
2334 python code (including the result of previous edits).
2334 python code (including the result of previous edits).
2335
2335
2336 - If the argument is the name of an object (other than a string),
2336 - If the argument is the name of an object (other than a string),
2337 IPython will try to locate the file where it was defined and open the
2337 IPython will try to locate the file where it was defined and open the
2338 editor at the point where it is defined. You can use `%edit function`
2338 editor at the point where it is defined. You can use `%edit function`
2339 to load an editor exactly at the point where 'function' is defined,
2339 to load an editor exactly at the point where 'function' is defined,
2340 edit it and have the file be executed automatically.
2340 edit it and have the file be executed automatically.
2341
2341
2342 - If the object is a macro (see %macro for details), this opens up your
2342 - If the object is a macro (see %macro for details), this opens up your
2343 specified editor with a temporary file containing the macro's data.
2343 specified editor with a temporary file containing the macro's data.
2344 Upon exit, the macro is reloaded with the contents of the file.
2344 Upon exit, the macro is reloaded with the contents of the file.
2345
2345
2346 Note: opening at an exact line is only supported under Unix, and some
2346 Note: opening at an exact line is only supported under Unix, and some
2347 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2347 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2348 '+NUMBER' parameter necessary for this feature. Good editors like
2348 '+NUMBER' parameter necessary for this feature. Good editors like
2349 (X)Emacs, vi, jed, pico and joe all do.
2349 (X)Emacs, vi, jed, pico and joe all do.
2350
2350
2351 After executing your code, %edit will return as output the code you
2351 After executing your code, %edit will return as output the code you
2352 typed in the editor (except when it was an existing file). This way
2352 typed in the editor (except when it was an existing file). This way
2353 you can reload the code in further invocations of %edit as a variable,
2353 you can reload the code in further invocations of %edit as a variable,
2354 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2354 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2355 the output.
2355 the output.
2356
2356
2357 Note that %edit is also available through the alias %ed.
2357 Note that %edit is also available through the alias %ed.
2358
2358
2359 This is an example of creating a simple function inside the editor and
2359 This is an example of creating a simple function inside the editor and
2360 then modifying it. First, start up the editor:
2360 then modifying it. First, start up the editor:
2361
2361
2362 In [1]: ed
2362 In [1]: ed
2363 Editing... done. Executing edited code...
2363 Editing... done. Executing edited code...
2364 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2364 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2365
2365
2366 We can then call the function foo():
2366 We can then call the function foo():
2367
2367
2368 In [2]: foo()
2368 In [2]: foo()
2369 foo() was defined in an editing session
2369 foo() was defined in an editing session
2370
2370
2371 Now we edit foo. IPython automatically loads the editor with the
2371 Now we edit foo. IPython automatically loads the editor with the
2372 (temporary) file where foo() was previously defined:
2372 (temporary) file where foo() was previously defined:
2373
2373
2374 In [3]: ed foo
2374 In [3]: ed foo
2375 Editing... done. Executing edited code...
2375 Editing... done. Executing edited code...
2376
2376
2377 And if we call foo() again we get the modified version:
2377 And if we call foo() again we get the modified version:
2378
2378
2379 In [4]: foo()
2379 In [4]: foo()
2380 foo() has now been changed!
2380 foo() has now been changed!
2381
2381
2382 Here is an example of how to edit a code snippet successive
2382 Here is an example of how to edit a code snippet successive
2383 times. First we call the editor:
2383 times. First we call the editor:
2384
2384
2385 In [5]: ed
2385 In [5]: ed
2386 Editing... done. Executing edited code...
2386 Editing... done. Executing edited code...
2387 hello
2387 hello
2388 Out[5]: "print 'hello'n"
2388 Out[5]: "print 'hello'n"
2389
2389
2390 Now we call it again with the previous output (stored in _):
2390 Now we call it again with the previous output (stored in _):
2391
2391
2392 In [6]: ed _
2392 In [6]: ed _
2393 Editing... done. Executing edited code...
2393 Editing... done. Executing edited code...
2394 hello world
2394 hello world
2395 Out[6]: "print 'hello world'n"
2395 Out[6]: "print 'hello world'n"
2396
2396
2397 Now we call it with the output #8 (stored in _8, also as Out[8]):
2397 Now we call it with the output #8 (stored in _8, also as Out[8]):
2398
2398
2399 In [7]: ed _8
2399 In [7]: ed _8
2400 Editing... done. Executing edited code...
2400 Editing... done. Executing edited code...
2401 hello again
2401 hello again
2402 Out[7]: "print 'hello again'n"
2402 Out[7]: "print 'hello again'n"
2403
2403
2404
2404
2405 Changing the default editor hook:
2405 Changing the default editor hook:
2406
2406
2407 If you wish to write your own editor hook, you can put it in a
2407 If you wish to write your own editor hook, you can put it in a
2408 configuration file which you load at startup time. The default hook
2408 configuration file which you load at startup time. The default hook
2409 is defined in the IPython.core.hooks module, and you can use that as a
2409 is defined in the IPython.core.hooks module, and you can use that as a
2410 starting example for further modifications. That file also has
2410 starting example for further modifications. That file also has
2411 general instructions on how to set a new hook for use once you've
2411 general instructions on how to set a new hook for use once you've
2412 defined it."""
2412 defined it."""
2413 opts,args = self.parse_options(parameter_s,'prxn:')
2413 opts,args = self.parse_options(parameter_s,'prxn:')
2414
2414
2415 try:
2415 try:
2416 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
2416 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
2417 except MacroToEdit as e:
2417 except MacroToEdit as e:
2418 self._edit_macro(args, e.args[0])
2418 self._edit_macro(args, e.args[0])
2419 return
2419 return
2420
2420
2421 # do actual editing here
2421 # do actual editing here
2422 print 'Editing...',
2422 print 'Editing...',
2423 sys.stdout.flush()
2423 sys.stdout.flush()
2424 try:
2424 try:
2425 # Quote filenames that may have spaces in them
2425 # Quote filenames that may have spaces in them
2426 if ' ' in filename:
2426 if ' ' in filename:
2427 filename = "'%s'" % filename
2427 filename = "'%s'" % filename
2428 self.shell.hooks.editor(filename,lineno)
2428 self.shell.hooks.editor(filename,lineno)
2429 except TryNext:
2429 except TryNext:
2430 warn('Could not open editor')
2430 warn('Could not open editor')
2431 return
2431 return
2432
2432
2433 # XXX TODO: should this be generalized for all string vars?
2433 # XXX TODO: should this be generalized for all string vars?
2434 # For now, this is special-cased to blocks created by cpaste
2434 # For now, this is special-cased to blocks created by cpaste
2435 if args.strip() == 'pasted_block':
2435 if args.strip() == 'pasted_block':
2436 self.shell.user_ns['pasted_block'] = file_read(filename)
2436 self.shell.user_ns['pasted_block'] = file_read(filename)
2437
2437
2438 if 'x' in opts: # -x prevents actual execution
2438 if 'x' in opts: # -x prevents actual execution
2439 print
2439 print
2440 else:
2440 else:
2441 print 'done. Executing edited code...'
2441 print 'done. Executing edited code...'
2442 if 'r' in opts: # Untranslated IPython code
2442 if 'r' in opts: # Untranslated IPython code
2443 self.shell.run_cell(file_read(filename),
2443 self.shell.run_cell(file_read(filename),
2444 store_history=False)
2444 store_history=False)
2445 else:
2445 else:
2446 self.shell.safe_execfile(filename,self.shell.user_ns,
2446 self.shell.safe_execfile(filename,self.shell.user_ns,
2447 self.shell.user_ns)
2447 self.shell.user_ns)
2448
2448
2449 if is_temp:
2449 if is_temp:
2450 try:
2450 try:
2451 return open(filename).read()
2451 return open(filename).read()
2452 except IOError,msg:
2452 except IOError,msg:
2453 if msg.filename == filename:
2453 if msg.filename == filename:
2454 warn('File not found. Did you forget to save?')
2454 warn('File not found. Did you forget to save?')
2455 return
2455 return
2456 else:
2456 else:
2457 self.shell.showtraceback()
2457 self.shell.showtraceback()
2458
2458
2459 def magic_xmode(self,parameter_s = ''):
2459 def magic_xmode(self,parameter_s = ''):
2460 """Switch modes for the exception handlers.
2460 """Switch modes for the exception handlers.
2461
2461
2462 Valid modes: Plain, Context and Verbose.
2462 Valid modes: Plain, Context and Verbose.
2463
2463
2464 If called without arguments, acts as a toggle."""
2464 If called without arguments, acts as a toggle."""
2465
2465
2466 def xmode_switch_err(name):
2466 def xmode_switch_err(name):
2467 warn('Error changing %s exception modes.\n%s' %
2467 warn('Error changing %s exception modes.\n%s' %
2468 (name,sys.exc_info()[1]))
2468 (name,sys.exc_info()[1]))
2469
2469
2470 shell = self.shell
2470 shell = self.shell
2471 new_mode = parameter_s.strip().capitalize()
2471 new_mode = parameter_s.strip().capitalize()
2472 try:
2472 try:
2473 shell.InteractiveTB.set_mode(mode=new_mode)
2473 shell.InteractiveTB.set_mode(mode=new_mode)
2474 print 'Exception reporting mode:',shell.InteractiveTB.mode
2474 print 'Exception reporting mode:',shell.InteractiveTB.mode
2475 except:
2475 except:
2476 xmode_switch_err('user')
2476 xmode_switch_err('user')
2477
2477
2478 def magic_colors(self,parameter_s = ''):
2478 def magic_colors(self,parameter_s = ''):
2479 """Switch color scheme for prompts, info system and exception handlers.
2479 """Switch color scheme for prompts, info system and exception handlers.
2480
2480
2481 Currently implemented schemes: NoColor, Linux, LightBG.
2481 Currently implemented schemes: NoColor, Linux, LightBG.
2482
2482
2483 Color scheme names are not case-sensitive.
2483 Color scheme names are not case-sensitive.
2484
2484
2485 Examples
2485 Examples
2486 --------
2486 --------
2487 To get a plain black and white terminal::
2487 To get a plain black and white terminal::
2488
2488
2489 %colors nocolor
2489 %colors nocolor
2490 """
2490 """
2491
2491
2492 def color_switch_err(name):
2492 def color_switch_err(name):
2493 warn('Error changing %s color schemes.\n%s' %
2493 warn('Error changing %s color schemes.\n%s' %
2494 (name,sys.exc_info()[1]))
2494 (name,sys.exc_info()[1]))
2495
2495
2496
2496
2497 new_scheme = parameter_s.strip()
2497 new_scheme = parameter_s.strip()
2498 if not new_scheme:
2498 if not new_scheme:
2499 raise UsageError(
2499 raise UsageError(
2500 "%colors: you must specify a color scheme. See '%colors?'")
2500 "%colors: you must specify a color scheme. See '%colors?'")
2501 return
2501 return
2502 # local shortcut
2502 # local shortcut
2503 shell = self.shell
2503 shell = self.shell
2504
2504
2505 import IPython.utils.rlineimpl as readline
2505 import IPython.utils.rlineimpl as readline
2506
2506
2507 if not shell.colors_force and \
2507 if not shell.colors_force and \
2508 not readline.have_readline and sys.platform == "win32":
2508 not readline.have_readline and sys.platform == "win32":
2509 msg = """\
2509 msg = """\
2510 Proper color support under MS Windows requires the pyreadline library.
2510 Proper color support under MS Windows requires the pyreadline library.
2511 You can find it at:
2511 You can find it at:
2512 http://ipython.scipy.org/moin/PyReadline/Intro
2512 http://ipython.org/pyreadline.html
2513 Gary's readline needs the ctypes module, from:
2513 Gary's readline needs the ctypes module, from:
2514 http://starship.python.net/crew/theller/ctypes
2514 http://starship.python.net/crew/theller/ctypes
2515 (Note that ctypes is already part of Python versions 2.5 and newer).
2515 (Note that ctypes is already part of Python versions 2.5 and newer).
2516
2516
2517 Defaulting color scheme to 'NoColor'"""
2517 Defaulting color scheme to 'NoColor'"""
2518 new_scheme = 'NoColor'
2518 new_scheme = 'NoColor'
2519 warn(msg)
2519 warn(msg)
2520
2520
2521 # readline option is 0
2521 # readline option is 0
2522 if not shell.colors_force and not shell.has_readline:
2522 if not shell.colors_force and not shell.has_readline:
2523 new_scheme = 'NoColor'
2523 new_scheme = 'NoColor'
2524
2524
2525 # Set prompt colors
2525 # Set prompt colors
2526 try:
2526 try:
2527 shell.displayhook.set_colors(new_scheme)
2527 shell.displayhook.set_colors(new_scheme)
2528 except:
2528 except:
2529 color_switch_err('prompt')
2529 color_switch_err('prompt')
2530 else:
2530 else:
2531 shell.colors = \
2531 shell.colors = \
2532 shell.displayhook.color_table.active_scheme_name
2532 shell.displayhook.color_table.active_scheme_name
2533 # Set exception colors
2533 # Set exception colors
2534 try:
2534 try:
2535 shell.InteractiveTB.set_colors(scheme = new_scheme)
2535 shell.InteractiveTB.set_colors(scheme = new_scheme)
2536 shell.SyntaxTB.set_colors(scheme = new_scheme)
2536 shell.SyntaxTB.set_colors(scheme = new_scheme)
2537 except:
2537 except:
2538 color_switch_err('exception')
2538 color_switch_err('exception')
2539
2539
2540 # Set info (for 'object?') colors
2540 # Set info (for 'object?') colors
2541 if shell.color_info:
2541 if shell.color_info:
2542 try:
2542 try:
2543 shell.inspector.set_active_scheme(new_scheme)
2543 shell.inspector.set_active_scheme(new_scheme)
2544 except:
2544 except:
2545 color_switch_err('object inspector')
2545 color_switch_err('object inspector')
2546 else:
2546 else:
2547 shell.inspector.set_active_scheme('NoColor')
2547 shell.inspector.set_active_scheme('NoColor')
2548
2548
2549 def magic_pprint(self, parameter_s=''):
2549 def magic_pprint(self, parameter_s=''):
2550 """Toggle pretty printing on/off."""
2550 """Toggle pretty printing on/off."""
2551 ptformatter = self.shell.display_formatter.formatters['text/plain']
2551 ptformatter = self.shell.display_formatter.formatters['text/plain']
2552 ptformatter.pprint = bool(1 - ptformatter.pprint)
2552 ptformatter.pprint = bool(1 - ptformatter.pprint)
2553 print 'Pretty printing has been turned', \
2553 print 'Pretty printing has been turned', \
2554 ['OFF','ON'][ptformatter.pprint]
2554 ['OFF','ON'][ptformatter.pprint]
2555
2555
2556 #......................................................................
2556 #......................................................................
2557 # Functions to implement unix shell-type things
2557 # Functions to implement unix shell-type things
2558
2558
2559 @skip_doctest
2559 @skip_doctest
2560 def magic_alias(self, parameter_s = ''):
2560 def magic_alias(self, parameter_s = ''):
2561 """Define an alias for a system command.
2561 """Define an alias for a system command.
2562
2562
2563 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2563 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2564
2564
2565 Then, typing 'alias_name params' will execute the system command 'cmd
2565 Then, typing 'alias_name params' will execute the system command 'cmd
2566 params' (from your underlying operating system).
2566 params' (from your underlying operating system).
2567
2567
2568 Aliases have lower precedence than magic functions and Python normal
2568 Aliases have lower precedence than magic functions and Python normal
2569 variables, so if 'foo' is both a Python variable and an alias, the
2569 variables, so if 'foo' is both a Python variable and an alias, the
2570 alias can not be executed until 'del foo' removes the Python variable.
2570 alias can not be executed until 'del foo' removes the Python variable.
2571
2571
2572 You can use the %l specifier in an alias definition to represent the
2572 You can use the %l specifier in an alias definition to represent the
2573 whole line when the alias is called. For example:
2573 whole line when the alias is called. For example:
2574
2574
2575 In [2]: alias bracket echo "Input in brackets: <%l>"
2575 In [2]: alias bracket echo "Input in brackets: <%l>"
2576 In [3]: bracket hello world
2576 In [3]: bracket hello world
2577 Input in brackets: <hello world>
2577 Input in brackets: <hello world>
2578
2578
2579 You can also define aliases with parameters using %s specifiers (one
2579 You can also define aliases with parameters using %s specifiers (one
2580 per parameter):
2580 per parameter):
2581
2581
2582 In [1]: alias parts echo first %s second %s
2582 In [1]: alias parts echo first %s second %s
2583 In [2]: %parts A B
2583 In [2]: %parts A B
2584 first A second B
2584 first A second B
2585 In [3]: %parts A
2585 In [3]: %parts A
2586 Incorrect number of arguments: 2 expected.
2586 Incorrect number of arguments: 2 expected.
2587 parts is an alias to: 'echo first %s second %s'
2587 parts is an alias to: 'echo first %s second %s'
2588
2588
2589 Note that %l and %s are mutually exclusive. You can only use one or
2589 Note that %l and %s are mutually exclusive. You can only use one or
2590 the other in your aliases.
2590 the other in your aliases.
2591
2591
2592 Aliases expand Python variables just like system calls using ! or !!
2592 Aliases expand Python variables just like system calls using ! or !!
2593 do: all expressions prefixed with '$' get expanded. For details of
2593 do: all expressions prefixed with '$' get expanded. For details of
2594 the semantic rules, see PEP-215:
2594 the semantic rules, see PEP-215:
2595 http://www.python.org/peps/pep-0215.html. This is the library used by
2595 http://www.python.org/peps/pep-0215.html. This is the library used by
2596 IPython for variable expansion. If you want to access a true shell
2596 IPython for variable expansion. If you want to access a true shell
2597 variable, an extra $ is necessary to prevent its expansion by IPython:
2597 variable, an extra $ is necessary to prevent its expansion by IPython:
2598
2598
2599 In [6]: alias show echo
2599 In [6]: alias show echo
2600 In [7]: PATH='A Python string'
2600 In [7]: PATH='A Python string'
2601 In [8]: show $PATH
2601 In [8]: show $PATH
2602 A Python string
2602 A Python string
2603 In [9]: show $$PATH
2603 In [9]: show $$PATH
2604 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2604 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2605
2605
2606 You can use the alias facility to acess all of $PATH. See the %rehash
2606 You can use the alias facility to acess all of $PATH. See the %rehash
2607 and %rehashx functions, which automatically create aliases for the
2607 and %rehashx functions, which automatically create aliases for the
2608 contents of your $PATH.
2608 contents of your $PATH.
2609
2609
2610 If called with no parameters, %alias prints the current alias table."""
2610 If called with no parameters, %alias prints the current alias table."""
2611
2611
2612 par = parameter_s.strip()
2612 par = parameter_s.strip()
2613 if not par:
2613 if not par:
2614 stored = self.db.get('stored_aliases', {} )
2614 stored = self.db.get('stored_aliases', {} )
2615 aliases = sorted(self.shell.alias_manager.aliases)
2615 aliases = sorted(self.shell.alias_manager.aliases)
2616 # for k, v in stored:
2616 # for k, v in stored:
2617 # atab.append(k, v[0])
2617 # atab.append(k, v[0])
2618
2618
2619 print "Total number of aliases:", len(aliases)
2619 print "Total number of aliases:", len(aliases)
2620 sys.stdout.flush()
2620 sys.stdout.flush()
2621 return aliases
2621 return aliases
2622
2622
2623 # Now try to define a new one
2623 # Now try to define a new one
2624 try:
2624 try:
2625 alias,cmd = par.split(None, 1)
2625 alias,cmd = par.split(None, 1)
2626 except:
2626 except:
2627 print oinspect.getdoc(self.magic_alias)
2627 print oinspect.getdoc(self.magic_alias)
2628 else:
2628 else:
2629 self.shell.alias_manager.soft_define_alias(alias, cmd)
2629 self.shell.alias_manager.soft_define_alias(alias, cmd)
2630 # end magic_alias
2630 # end magic_alias
2631
2631
2632 def magic_unalias(self, parameter_s = ''):
2632 def magic_unalias(self, parameter_s = ''):
2633 """Remove an alias"""
2633 """Remove an alias"""
2634
2634
2635 aname = parameter_s.strip()
2635 aname = parameter_s.strip()
2636 self.shell.alias_manager.undefine_alias(aname)
2636 self.shell.alias_manager.undefine_alias(aname)
2637 stored = self.db.get('stored_aliases', {} )
2637 stored = self.db.get('stored_aliases', {} )
2638 if aname in stored:
2638 if aname in stored:
2639 print "Removing %stored alias",aname
2639 print "Removing %stored alias",aname
2640 del stored[aname]
2640 del stored[aname]
2641 self.db['stored_aliases'] = stored
2641 self.db['stored_aliases'] = stored
2642
2642
2643 def magic_rehashx(self, parameter_s = ''):
2643 def magic_rehashx(self, parameter_s = ''):
2644 """Update the alias table with all executable files in $PATH.
2644 """Update the alias table with all executable files in $PATH.
2645
2645
2646 This version explicitly checks that every entry in $PATH is a file
2646 This version explicitly checks that every entry in $PATH is a file
2647 with execute access (os.X_OK), so it is much slower than %rehash.
2647 with execute access (os.X_OK), so it is much slower than %rehash.
2648
2648
2649 Under Windows, it checks executability as a match agains a
2649 Under Windows, it checks executability as a match agains a
2650 '|'-separated string of extensions, stored in the IPython config
2650 '|'-separated string of extensions, stored in the IPython config
2651 variable win_exec_ext. This defaults to 'exe|com|bat'.
2651 variable win_exec_ext. This defaults to 'exe|com|bat'.
2652
2652
2653 This function also resets the root module cache of module completer,
2653 This function also resets the root module cache of module completer,
2654 used on slow filesystems.
2654 used on slow filesystems.
2655 """
2655 """
2656 from IPython.core.alias import InvalidAliasError
2656 from IPython.core.alias import InvalidAliasError
2657
2657
2658 # for the benefit of module completer in ipy_completers.py
2658 # for the benefit of module completer in ipy_completers.py
2659 del self.db['rootmodules']
2659 del self.db['rootmodules']
2660
2660
2661 path = [os.path.abspath(os.path.expanduser(p)) for p in
2661 path = [os.path.abspath(os.path.expanduser(p)) for p in
2662 os.environ.get('PATH','').split(os.pathsep)]
2662 os.environ.get('PATH','').split(os.pathsep)]
2663 path = filter(os.path.isdir,path)
2663 path = filter(os.path.isdir,path)
2664
2664
2665 syscmdlist = []
2665 syscmdlist = []
2666 # Now define isexec in a cross platform manner.
2666 # Now define isexec in a cross platform manner.
2667 if os.name == 'posix':
2667 if os.name == 'posix':
2668 isexec = lambda fname:os.path.isfile(fname) and \
2668 isexec = lambda fname:os.path.isfile(fname) and \
2669 os.access(fname,os.X_OK)
2669 os.access(fname,os.X_OK)
2670 else:
2670 else:
2671 try:
2671 try:
2672 winext = os.environ['pathext'].replace(';','|').replace('.','')
2672 winext = os.environ['pathext'].replace(';','|').replace('.','')
2673 except KeyError:
2673 except KeyError:
2674 winext = 'exe|com|bat|py'
2674 winext = 'exe|com|bat|py'
2675 if 'py' not in winext:
2675 if 'py' not in winext:
2676 winext += '|py'
2676 winext += '|py'
2677 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2677 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2678 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2678 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2679 savedir = os.getcwdu()
2679 savedir = os.getcwdu()
2680
2680
2681 # Now walk the paths looking for executables to alias.
2681 # Now walk the paths looking for executables to alias.
2682 try:
2682 try:
2683 # write the whole loop for posix/Windows so we don't have an if in
2683 # write the whole loop for posix/Windows so we don't have an if in
2684 # the innermost part
2684 # the innermost part
2685 if os.name == 'posix':
2685 if os.name == 'posix':
2686 for pdir in path:
2686 for pdir in path:
2687 os.chdir(pdir)
2687 os.chdir(pdir)
2688 for ff in os.listdir(pdir):
2688 for ff in os.listdir(pdir):
2689 if isexec(ff):
2689 if isexec(ff):
2690 try:
2690 try:
2691 # Removes dots from the name since ipython
2691 # Removes dots from the name since ipython
2692 # will assume names with dots to be python.
2692 # will assume names with dots to be python.
2693 self.shell.alias_manager.define_alias(
2693 self.shell.alias_manager.define_alias(
2694 ff.replace('.',''), ff)
2694 ff.replace('.',''), ff)
2695 except InvalidAliasError:
2695 except InvalidAliasError:
2696 pass
2696 pass
2697 else:
2697 else:
2698 syscmdlist.append(ff)
2698 syscmdlist.append(ff)
2699 else:
2699 else:
2700 no_alias = self.shell.alias_manager.no_alias
2700 no_alias = self.shell.alias_manager.no_alias
2701 for pdir in path:
2701 for pdir in path:
2702 os.chdir(pdir)
2702 os.chdir(pdir)
2703 for ff in os.listdir(pdir):
2703 for ff in os.listdir(pdir):
2704 base, ext = os.path.splitext(ff)
2704 base, ext = os.path.splitext(ff)
2705 if isexec(ff) and base.lower() not in no_alias:
2705 if isexec(ff) and base.lower() not in no_alias:
2706 if ext.lower() == '.exe':
2706 if ext.lower() == '.exe':
2707 ff = base
2707 ff = base
2708 try:
2708 try:
2709 # Removes dots from the name since ipython
2709 # Removes dots from the name since ipython
2710 # will assume names with dots to be python.
2710 # will assume names with dots to be python.
2711 self.shell.alias_manager.define_alias(
2711 self.shell.alias_manager.define_alias(
2712 base.lower().replace('.',''), ff)
2712 base.lower().replace('.',''), ff)
2713 except InvalidAliasError:
2713 except InvalidAliasError:
2714 pass
2714 pass
2715 syscmdlist.append(ff)
2715 syscmdlist.append(ff)
2716 db = self.db
2716 db = self.db
2717 db['syscmdlist'] = syscmdlist
2717 db['syscmdlist'] = syscmdlist
2718 finally:
2718 finally:
2719 os.chdir(savedir)
2719 os.chdir(savedir)
2720
2720
2721 @skip_doctest
2721 @skip_doctest
2722 def magic_pwd(self, parameter_s = ''):
2722 def magic_pwd(self, parameter_s = ''):
2723 """Return the current working directory path.
2723 """Return the current working directory path.
2724
2724
2725 Examples
2725 Examples
2726 --------
2726 --------
2727 ::
2727 ::
2728
2728
2729 In [9]: pwd
2729 In [9]: pwd
2730 Out[9]: '/home/tsuser/sprint/ipython'
2730 Out[9]: '/home/tsuser/sprint/ipython'
2731 """
2731 """
2732 return os.getcwdu()
2732 return os.getcwdu()
2733
2733
2734 @skip_doctest
2734 @skip_doctest
2735 def magic_cd(self, parameter_s=''):
2735 def magic_cd(self, parameter_s=''):
2736 """Change the current working directory.
2736 """Change the current working directory.
2737
2737
2738 This command automatically maintains an internal list of directories
2738 This command automatically maintains an internal list of directories
2739 you visit during your IPython session, in the variable _dh. The
2739 you visit during your IPython session, in the variable _dh. The
2740 command %dhist shows this history nicely formatted. You can also
2740 command %dhist shows this history nicely formatted. You can also
2741 do 'cd -<tab>' to see directory history conveniently.
2741 do 'cd -<tab>' to see directory history conveniently.
2742
2742
2743 Usage:
2743 Usage:
2744
2744
2745 cd 'dir': changes to directory 'dir'.
2745 cd 'dir': changes to directory 'dir'.
2746
2746
2747 cd -: changes to the last visited directory.
2747 cd -: changes to the last visited directory.
2748
2748
2749 cd -<n>: changes to the n-th directory in the directory history.
2749 cd -<n>: changes to the n-th directory in the directory history.
2750
2750
2751 cd --foo: change to directory that matches 'foo' in history
2751 cd --foo: change to directory that matches 'foo' in history
2752
2752
2753 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2753 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2754 (note: cd <bookmark_name> is enough if there is no
2754 (note: cd <bookmark_name> is enough if there is no
2755 directory <bookmark_name>, but a bookmark with the name exists.)
2755 directory <bookmark_name>, but a bookmark with the name exists.)
2756 'cd -b <tab>' allows you to tab-complete bookmark names.
2756 'cd -b <tab>' allows you to tab-complete bookmark names.
2757
2757
2758 Options:
2758 Options:
2759
2759
2760 -q: quiet. Do not print the working directory after the cd command is
2760 -q: quiet. Do not print the working directory after the cd command is
2761 executed. By default IPython's cd command does print this directory,
2761 executed. By default IPython's cd command does print this directory,
2762 since the default prompts do not display path information.
2762 since the default prompts do not display path information.
2763
2763
2764 Note that !cd doesn't work for this purpose because the shell where
2764 Note that !cd doesn't work for this purpose because the shell where
2765 !command runs is immediately discarded after executing 'command'.
2765 !command runs is immediately discarded after executing 'command'.
2766
2766
2767 Examples
2767 Examples
2768 --------
2768 --------
2769 ::
2769 ::
2770
2770
2771 In [10]: cd parent/child
2771 In [10]: cd parent/child
2772 /home/tsuser/parent/child
2772 /home/tsuser/parent/child
2773 """
2773 """
2774
2774
2775 parameter_s = parameter_s.strip()
2775 parameter_s = parameter_s.strip()
2776 #bkms = self.shell.persist.get("bookmarks",{})
2776 #bkms = self.shell.persist.get("bookmarks",{})
2777
2777
2778 oldcwd = os.getcwdu()
2778 oldcwd = os.getcwdu()
2779 numcd = re.match(r'(-)(\d+)$',parameter_s)
2779 numcd = re.match(r'(-)(\d+)$',parameter_s)
2780 # jump in directory history by number
2780 # jump in directory history by number
2781 if numcd:
2781 if numcd:
2782 nn = int(numcd.group(2))
2782 nn = int(numcd.group(2))
2783 try:
2783 try:
2784 ps = self.shell.user_ns['_dh'][nn]
2784 ps = self.shell.user_ns['_dh'][nn]
2785 except IndexError:
2785 except IndexError:
2786 print 'The requested directory does not exist in history.'
2786 print 'The requested directory does not exist in history.'
2787 return
2787 return
2788 else:
2788 else:
2789 opts = {}
2789 opts = {}
2790 elif parameter_s.startswith('--'):
2790 elif parameter_s.startswith('--'):
2791 ps = None
2791 ps = None
2792 fallback = None
2792 fallback = None
2793 pat = parameter_s[2:]
2793 pat = parameter_s[2:]
2794 dh = self.shell.user_ns['_dh']
2794 dh = self.shell.user_ns['_dh']
2795 # first search only by basename (last component)
2795 # first search only by basename (last component)
2796 for ent in reversed(dh):
2796 for ent in reversed(dh):
2797 if pat in os.path.basename(ent) and os.path.isdir(ent):
2797 if pat in os.path.basename(ent) and os.path.isdir(ent):
2798 ps = ent
2798 ps = ent
2799 break
2799 break
2800
2800
2801 if fallback is None and pat in ent and os.path.isdir(ent):
2801 if fallback is None and pat in ent and os.path.isdir(ent):
2802 fallback = ent
2802 fallback = ent
2803
2803
2804 # if we have no last part match, pick the first full path match
2804 # if we have no last part match, pick the first full path match
2805 if ps is None:
2805 if ps is None:
2806 ps = fallback
2806 ps = fallback
2807
2807
2808 if ps is None:
2808 if ps is None:
2809 print "No matching entry in directory history"
2809 print "No matching entry in directory history"
2810 return
2810 return
2811 else:
2811 else:
2812 opts = {}
2812 opts = {}
2813
2813
2814
2814
2815 else:
2815 else:
2816 #turn all non-space-escaping backslashes to slashes,
2816 #turn all non-space-escaping backslashes to slashes,
2817 # for c:\windows\directory\names\
2817 # for c:\windows\directory\names\
2818 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2818 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2819 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2819 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2820 # jump to previous
2820 # jump to previous
2821 if ps == '-':
2821 if ps == '-':
2822 try:
2822 try:
2823 ps = self.shell.user_ns['_dh'][-2]
2823 ps = self.shell.user_ns['_dh'][-2]
2824 except IndexError:
2824 except IndexError:
2825 raise UsageError('%cd -: No previous directory to change to.')
2825 raise UsageError('%cd -: No previous directory to change to.')
2826 # jump to bookmark if needed
2826 # jump to bookmark if needed
2827 else:
2827 else:
2828 if not os.path.isdir(ps) or opts.has_key('b'):
2828 if not os.path.isdir(ps) or opts.has_key('b'):
2829 bkms = self.db.get('bookmarks', {})
2829 bkms = self.db.get('bookmarks', {})
2830
2830
2831 if bkms.has_key(ps):
2831 if bkms.has_key(ps):
2832 target = bkms[ps]
2832 target = bkms[ps]
2833 print '(bookmark:%s) -> %s' % (ps,target)
2833 print '(bookmark:%s) -> %s' % (ps,target)
2834 ps = target
2834 ps = target
2835 else:
2835 else:
2836 if opts.has_key('b'):
2836 if opts.has_key('b'):
2837 raise UsageError("Bookmark '%s' not found. "
2837 raise UsageError("Bookmark '%s' not found. "
2838 "Use '%%bookmark -l' to see your bookmarks." % ps)
2838 "Use '%%bookmark -l' to see your bookmarks." % ps)
2839
2839
2840 # strip extra quotes on Windows, because os.chdir doesn't like them
2840 # strip extra quotes on Windows, because os.chdir doesn't like them
2841 ps = unquote_filename(ps)
2841 ps = unquote_filename(ps)
2842 # at this point ps should point to the target dir
2842 # at this point ps should point to the target dir
2843 if ps:
2843 if ps:
2844 try:
2844 try:
2845 os.chdir(os.path.expanduser(ps))
2845 os.chdir(os.path.expanduser(ps))
2846 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2846 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2847 set_term_title('IPython: ' + abbrev_cwd())
2847 set_term_title('IPython: ' + abbrev_cwd())
2848 except OSError:
2848 except OSError:
2849 print sys.exc_info()[1]
2849 print sys.exc_info()[1]
2850 else:
2850 else:
2851 cwd = os.getcwdu()
2851 cwd = os.getcwdu()
2852 dhist = self.shell.user_ns['_dh']
2852 dhist = self.shell.user_ns['_dh']
2853 if oldcwd != cwd:
2853 if oldcwd != cwd:
2854 dhist.append(cwd)
2854 dhist.append(cwd)
2855 self.db['dhist'] = compress_dhist(dhist)[-100:]
2855 self.db['dhist'] = compress_dhist(dhist)[-100:]
2856
2856
2857 else:
2857 else:
2858 os.chdir(self.shell.home_dir)
2858 os.chdir(self.shell.home_dir)
2859 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2859 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2860 set_term_title('IPython: ' + '~')
2860 set_term_title('IPython: ' + '~')
2861 cwd = os.getcwdu()
2861 cwd = os.getcwdu()
2862 dhist = self.shell.user_ns['_dh']
2862 dhist = self.shell.user_ns['_dh']
2863
2863
2864 if oldcwd != cwd:
2864 if oldcwd != cwd:
2865 dhist.append(cwd)
2865 dhist.append(cwd)
2866 self.db['dhist'] = compress_dhist(dhist)[-100:]
2866 self.db['dhist'] = compress_dhist(dhist)[-100:]
2867 if not 'q' in opts and self.shell.user_ns['_dh']:
2867 if not 'q' in opts and self.shell.user_ns['_dh']:
2868 print self.shell.user_ns['_dh'][-1]
2868 print self.shell.user_ns['_dh'][-1]
2869
2869
2870
2870
2871 def magic_env(self, parameter_s=''):
2871 def magic_env(self, parameter_s=''):
2872 """List environment variables."""
2872 """List environment variables."""
2873
2873
2874 return os.environ.data
2874 return os.environ.data
2875
2875
2876 def magic_pushd(self, parameter_s=''):
2876 def magic_pushd(self, parameter_s=''):
2877 """Place the current dir on stack and change directory.
2877 """Place the current dir on stack and change directory.
2878
2878
2879 Usage:\\
2879 Usage:\\
2880 %pushd ['dirname']
2880 %pushd ['dirname']
2881 """
2881 """
2882
2882
2883 dir_s = self.shell.dir_stack
2883 dir_s = self.shell.dir_stack
2884 tgt = os.path.expanduser(unquote_filename(parameter_s))
2884 tgt = os.path.expanduser(unquote_filename(parameter_s))
2885 cwd = os.getcwdu().replace(self.home_dir,'~')
2885 cwd = os.getcwdu().replace(self.home_dir,'~')
2886 if tgt:
2886 if tgt:
2887 self.magic_cd(parameter_s)
2887 self.magic_cd(parameter_s)
2888 dir_s.insert(0,cwd)
2888 dir_s.insert(0,cwd)
2889 return self.magic_dirs()
2889 return self.magic_dirs()
2890
2890
2891 def magic_popd(self, parameter_s=''):
2891 def magic_popd(self, parameter_s=''):
2892 """Change to directory popped off the top of the stack.
2892 """Change to directory popped off the top of the stack.
2893 """
2893 """
2894 if not self.shell.dir_stack:
2894 if not self.shell.dir_stack:
2895 raise UsageError("%popd on empty stack")
2895 raise UsageError("%popd on empty stack")
2896 top = self.shell.dir_stack.pop(0)
2896 top = self.shell.dir_stack.pop(0)
2897 self.magic_cd(top)
2897 self.magic_cd(top)
2898 print "popd ->",top
2898 print "popd ->",top
2899
2899
2900 def magic_dirs(self, parameter_s=''):
2900 def magic_dirs(self, parameter_s=''):
2901 """Return the current directory stack."""
2901 """Return the current directory stack."""
2902
2902
2903 return self.shell.dir_stack
2903 return self.shell.dir_stack
2904
2904
2905 def magic_dhist(self, parameter_s=''):
2905 def magic_dhist(self, parameter_s=''):
2906 """Print your history of visited directories.
2906 """Print your history of visited directories.
2907
2907
2908 %dhist -> print full history\\
2908 %dhist -> print full history\\
2909 %dhist n -> print last n entries only\\
2909 %dhist n -> print last n entries only\\
2910 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2910 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2911
2911
2912 This history is automatically maintained by the %cd command, and
2912 This history is automatically maintained by the %cd command, and
2913 always available as the global list variable _dh. You can use %cd -<n>
2913 always available as the global list variable _dh. You can use %cd -<n>
2914 to go to directory number <n>.
2914 to go to directory number <n>.
2915
2915
2916 Note that most of time, you should view directory history by entering
2916 Note that most of time, you should view directory history by entering
2917 cd -<TAB>.
2917 cd -<TAB>.
2918
2918
2919 """
2919 """
2920
2920
2921 dh = self.shell.user_ns['_dh']
2921 dh = self.shell.user_ns['_dh']
2922 if parameter_s:
2922 if parameter_s:
2923 try:
2923 try:
2924 args = map(int,parameter_s.split())
2924 args = map(int,parameter_s.split())
2925 except:
2925 except:
2926 self.arg_err(Magic.magic_dhist)
2926 self.arg_err(Magic.magic_dhist)
2927 return
2927 return
2928 if len(args) == 1:
2928 if len(args) == 1:
2929 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2929 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2930 elif len(args) == 2:
2930 elif len(args) == 2:
2931 ini,fin = args
2931 ini,fin = args
2932 else:
2932 else:
2933 self.arg_err(Magic.magic_dhist)
2933 self.arg_err(Magic.magic_dhist)
2934 return
2934 return
2935 else:
2935 else:
2936 ini,fin = 0,len(dh)
2936 ini,fin = 0,len(dh)
2937 nlprint(dh,
2937 nlprint(dh,
2938 header = 'Directory history (kept in _dh)',
2938 header = 'Directory history (kept in _dh)',
2939 start=ini,stop=fin)
2939 start=ini,stop=fin)
2940
2940
2941 @skip_doctest
2941 @skip_doctest
2942 def magic_sc(self, parameter_s=''):
2942 def magic_sc(self, parameter_s=''):
2943 """Shell capture - execute a shell command and capture its output.
2943 """Shell capture - execute a shell command and capture its output.
2944
2944
2945 DEPRECATED. Suboptimal, retained for backwards compatibility.
2945 DEPRECATED. Suboptimal, retained for backwards compatibility.
2946
2946
2947 You should use the form 'var = !command' instead. Example:
2947 You should use the form 'var = !command' instead. Example:
2948
2948
2949 "%sc -l myfiles = ls ~" should now be written as
2949 "%sc -l myfiles = ls ~" should now be written as
2950
2950
2951 "myfiles = !ls ~"
2951 "myfiles = !ls ~"
2952
2952
2953 myfiles.s, myfiles.l and myfiles.n still apply as documented
2953 myfiles.s, myfiles.l and myfiles.n still apply as documented
2954 below.
2954 below.
2955
2955
2956 --
2956 --
2957 %sc [options] varname=command
2957 %sc [options] varname=command
2958
2958
2959 IPython will run the given command using commands.getoutput(), and
2959 IPython will run the given command using commands.getoutput(), and
2960 will then update the user's interactive namespace with a variable
2960 will then update the user's interactive namespace with a variable
2961 called varname, containing the value of the call. Your command can
2961 called varname, containing the value of the call. Your command can
2962 contain shell wildcards, pipes, etc.
2962 contain shell wildcards, pipes, etc.
2963
2963
2964 The '=' sign in the syntax is mandatory, and the variable name you
2964 The '=' sign in the syntax is mandatory, and the variable name you
2965 supply must follow Python's standard conventions for valid names.
2965 supply must follow Python's standard conventions for valid names.
2966
2966
2967 (A special format without variable name exists for internal use)
2967 (A special format without variable name exists for internal use)
2968
2968
2969 Options:
2969 Options:
2970
2970
2971 -l: list output. Split the output on newlines into a list before
2971 -l: list output. Split the output on newlines into a list before
2972 assigning it to the given variable. By default the output is stored
2972 assigning it to the given variable. By default the output is stored
2973 as a single string.
2973 as a single string.
2974
2974
2975 -v: verbose. Print the contents of the variable.
2975 -v: verbose. Print the contents of the variable.
2976
2976
2977 In most cases you should not need to split as a list, because the
2977 In most cases you should not need to split as a list, because the
2978 returned value is a special type of string which can automatically
2978 returned value is a special type of string which can automatically
2979 provide its contents either as a list (split on newlines) or as a
2979 provide its contents either as a list (split on newlines) or as a
2980 space-separated string. These are convenient, respectively, either
2980 space-separated string. These are convenient, respectively, either
2981 for sequential processing or to be passed to a shell command.
2981 for sequential processing or to be passed to a shell command.
2982
2982
2983 For example:
2983 For example:
2984
2984
2985 # all-random
2985 # all-random
2986
2986
2987 # Capture into variable a
2987 # Capture into variable a
2988 In [1]: sc a=ls *py
2988 In [1]: sc a=ls *py
2989
2989
2990 # a is a string with embedded newlines
2990 # a is a string with embedded newlines
2991 In [2]: a
2991 In [2]: a
2992 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
2992 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
2993
2993
2994 # which can be seen as a list:
2994 # which can be seen as a list:
2995 In [3]: a.l
2995 In [3]: a.l
2996 Out[3]: ['setup.py', 'win32_manual_post_install.py']
2996 Out[3]: ['setup.py', 'win32_manual_post_install.py']
2997
2997
2998 # or as a whitespace-separated string:
2998 # or as a whitespace-separated string:
2999 In [4]: a.s
2999 In [4]: a.s
3000 Out[4]: 'setup.py win32_manual_post_install.py'
3000 Out[4]: 'setup.py win32_manual_post_install.py'
3001
3001
3002 # a.s is useful to pass as a single command line:
3002 # a.s is useful to pass as a single command line:
3003 In [5]: !wc -l $a.s
3003 In [5]: !wc -l $a.s
3004 146 setup.py
3004 146 setup.py
3005 130 win32_manual_post_install.py
3005 130 win32_manual_post_install.py
3006 276 total
3006 276 total
3007
3007
3008 # while the list form is useful to loop over:
3008 # while the list form is useful to loop over:
3009 In [6]: for f in a.l:
3009 In [6]: for f in a.l:
3010 ...: !wc -l $f
3010 ...: !wc -l $f
3011 ...:
3011 ...:
3012 146 setup.py
3012 146 setup.py
3013 130 win32_manual_post_install.py
3013 130 win32_manual_post_install.py
3014
3014
3015 Similiarly, the lists returned by the -l option are also special, in
3015 Similiarly, the lists returned by the -l option are also special, in
3016 the sense that you can equally invoke the .s attribute on them to
3016 the sense that you can equally invoke the .s attribute on them to
3017 automatically get a whitespace-separated string from their contents:
3017 automatically get a whitespace-separated string from their contents:
3018
3018
3019 In [7]: sc -l b=ls *py
3019 In [7]: sc -l b=ls *py
3020
3020
3021 In [8]: b
3021 In [8]: b
3022 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3022 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3023
3023
3024 In [9]: b.s
3024 In [9]: b.s
3025 Out[9]: 'setup.py win32_manual_post_install.py'
3025 Out[9]: 'setup.py win32_manual_post_install.py'
3026
3026
3027 In summary, both the lists and strings used for ouptut capture have
3027 In summary, both the lists and strings used for ouptut capture have
3028 the following special attributes:
3028 the following special attributes:
3029
3029
3030 .l (or .list) : value as list.
3030 .l (or .list) : value as list.
3031 .n (or .nlstr): value as newline-separated string.
3031 .n (or .nlstr): value as newline-separated string.
3032 .s (or .spstr): value as space-separated string.
3032 .s (or .spstr): value as space-separated string.
3033 """
3033 """
3034
3034
3035 opts,args = self.parse_options(parameter_s,'lv')
3035 opts,args = self.parse_options(parameter_s,'lv')
3036 # Try to get a variable name and command to run
3036 # Try to get a variable name and command to run
3037 try:
3037 try:
3038 # the variable name must be obtained from the parse_options
3038 # the variable name must be obtained from the parse_options
3039 # output, which uses shlex.split to strip options out.
3039 # output, which uses shlex.split to strip options out.
3040 var,_ = args.split('=',1)
3040 var,_ = args.split('=',1)
3041 var = var.strip()
3041 var = var.strip()
3042 # But the the command has to be extracted from the original input
3042 # But the the command has to be extracted from the original input
3043 # parameter_s, not on what parse_options returns, to avoid the
3043 # parameter_s, not on what parse_options returns, to avoid the
3044 # quote stripping which shlex.split performs on it.
3044 # quote stripping which shlex.split performs on it.
3045 _,cmd = parameter_s.split('=',1)
3045 _,cmd = parameter_s.split('=',1)
3046 except ValueError:
3046 except ValueError:
3047 var,cmd = '',''
3047 var,cmd = '',''
3048 # If all looks ok, proceed
3048 # If all looks ok, proceed
3049 split = 'l' in opts
3049 split = 'l' in opts
3050 out = self.shell.getoutput(cmd, split=split)
3050 out = self.shell.getoutput(cmd, split=split)
3051 if opts.has_key('v'):
3051 if opts.has_key('v'):
3052 print '%s ==\n%s' % (var,pformat(out))
3052 print '%s ==\n%s' % (var,pformat(out))
3053 if var:
3053 if var:
3054 self.shell.user_ns.update({var:out})
3054 self.shell.user_ns.update({var:out})
3055 else:
3055 else:
3056 return out
3056 return out
3057
3057
3058 def magic_sx(self, parameter_s=''):
3058 def magic_sx(self, parameter_s=''):
3059 """Shell execute - run a shell command and capture its output.
3059 """Shell execute - run a shell command and capture its output.
3060
3060
3061 %sx command
3061 %sx command
3062
3062
3063 IPython will run the given command using commands.getoutput(), and
3063 IPython will run the given command using commands.getoutput(), and
3064 return the result formatted as a list (split on '\\n'). Since the
3064 return the result formatted as a list (split on '\\n'). Since the
3065 output is _returned_, it will be stored in ipython's regular output
3065 output is _returned_, it will be stored in ipython's regular output
3066 cache Out[N] and in the '_N' automatic variables.
3066 cache Out[N] and in the '_N' automatic variables.
3067
3067
3068 Notes:
3068 Notes:
3069
3069
3070 1) If an input line begins with '!!', then %sx is automatically
3070 1) If an input line begins with '!!', then %sx is automatically
3071 invoked. That is, while:
3071 invoked. That is, while:
3072 !ls
3072 !ls
3073 causes ipython to simply issue system('ls'), typing
3073 causes ipython to simply issue system('ls'), typing
3074 !!ls
3074 !!ls
3075 is a shorthand equivalent to:
3075 is a shorthand equivalent to:
3076 %sx ls
3076 %sx ls
3077
3077
3078 2) %sx differs from %sc in that %sx automatically splits into a list,
3078 2) %sx differs from %sc in that %sx automatically splits into a list,
3079 like '%sc -l'. The reason for this is to make it as easy as possible
3079 like '%sc -l'. The reason for this is to make it as easy as possible
3080 to process line-oriented shell output via further python commands.
3080 to process line-oriented shell output via further python commands.
3081 %sc is meant to provide much finer control, but requires more
3081 %sc is meant to provide much finer control, but requires more
3082 typing.
3082 typing.
3083
3083
3084 3) Just like %sc -l, this is a list with special attributes:
3084 3) Just like %sc -l, this is a list with special attributes:
3085
3085
3086 .l (or .list) : value as list.
3086 .l (or .list) : value as list.
3087 .n (or .nlstr): value as newline-separated string.
3087 .n (or .nlstr): value as newline-separated string.
3088 .s (or .spstr): value as whitespace-separated string.
3088 .s (or .spstr): value as whitespace-separated string.
3089
3089
3090 This is very useful when trying to use such lists as arguments to
3090 This is very useful when trying to use such lists as arguments to
3091 system commands."""
3091 system commands."""
3092
3092
3093 if parameter_s:
3093 if parameter_s:
3094 return self.shell.getoutput(parameter_s)
3094 return self.shell.getoutput(parameter_s)
3095
3095
3096
3096
3097 def magic_bookmark(self, parameter_s=''):
3097 def magic_bookmark(self, parameter_s=''):
3098 """Manage IPython's bookmark system.
3098 """Manage IPython's bookmark system.
3099
3099
3100 %bookmark <name> - set bookmark to current dir
3100 %bookmark <name> - set bookmark to current dir
3101 %bookmark <name> <dir> - set bookmark to <dir>
3101 %bookmark <name> <dir> - set bookmark to <dir>
3102 %bookmark -l - list all bookmarks
3102 %bookmark -l - list all bookmarks
3103 %bookmark -d <name> - remove bookmark
3103 %bookmark -d <name> - remove bookmark
3104 %bookmark -r - remove all bookmarks
3104 %bookmark -r - remove all bookmarks
3105
3105
3106 You can later on access a bookmarked folder with:
3106 You can later on access a bookmarked folder with:
3107 %cd -b <name>
3107 %cd -b <name>
3108 or simply '%cd <name>' if there is no directory called <name> AND
3108 or simply '%cd <name>' if there is no directory called <name> AND
3109 there is such a bookmark defined.
3109 there is such a bookmark defined.
3110
3110
3111 Your bookmarks persist through IPython sessions, but they are
3111 Your bookmarks persist through IPython sessions, but they are
3112 associated with each profile."""
3112 associated with each profile."""
3113
3113
3114 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3114 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3115 if len(args) > 2:
3115 if len(args) > 2:
3116 raise UsageError("%bookmark: too many arguments")
3116 raise UsageError("%bookmark: too many arguments")
3117
3117
3118 bkms = self.db.get('bookmarks',{})
3118 bkms = self.db.get('bookmarks',{})
3119
3119
3120 if opts.has_key('d'):
3120 if opts.has_key('d'):
3121 try:
3121 try:
3122 todel = args[0]
3122 todel = args[0]
3123 except IndexError:
3123 except IndexError:
3124 raise UsageError(
3124 raise UsageError(
3125 "%bookmark -d: must provide a bookmark to delete")
3125 "%bookmark -d: must provide a bookmark to delete")
3126 else:
3126 else:
3127 try:
3127 try:
3128 del bkms[todel]
3128 del bkms[todel]
3129 except KeyError:
3129 except KeyError:
3130 raise UsageError(
3130 raise UsageError(
3131 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3131 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3132
3132
3133 elif opts.has_key('r'):
3133 elif opts.has_key('r'):
3134 bkms = {}
3134 bkms = {}
3135 elif opts.has_key('l'):
3135 elif opts.has_key('l'):
3136 bks = bkms.keys()
3136 bks = bkms.keys()
3137 bks.sort()
3137 bks.sort()
3138 if bks:
3138 if bks:
3139 size = max(map(len,bks))
3139 size = max(map(len,bks))
3140 else:
3140 else:
3141 size = 0
3141 size = 0
3142 fmt = '%-'+str(size)+'s -> %s'
3142 fmt = '%-'+str(size)+'s -> %s'
3143 print 'Current bookmarks:'
3143 print 'Current bookmarks:'
3144 for bk in bks:
3144 for bk in bks:
3145 print fmt % (bk,bkms[bk])
3145 print fmt % (bk,bkms[bk])
3146 else:
3146 else:
3147 if not args:
3147 if not args:
3148 raise UsageError("%bookmark: You must specify the bookmark name")
3148 raise UsageError("%bookmark: You must specify the bookmark name")
3149 elif len(args)==1:
3149 elif len(args)==1:
3150 bkms[args[0]] = os.getcwdu()
3150 bkms[args[0]] = os.getcwdu()
3151 elif len(args)==2:
3151 elif len(args)==2:
3152 bkms[args[0]] = args[1]
3152 bkms[args[0]] = args[1]
3153 self.db['bookmarks'] = bkms
3153 self.db['bookmarks'] = bkms
3154
3154
3155 def magic_pycat(self, parameter_s=''):
3155 def magic_pycat(self, parameter_s=''):
3156 """Show a syntax-highlighted file through a pager.
3156 """Show a syntax-highlighted file through a pager.
3157
3157
3158 This magic is similar to the cat utility, but it will assume the file
3158 This magic is similar to the cat utility, but it will assume the file
3159 to be Python source and will show it with syntax highlighting. """
3159 to be Python source and will show it with syntax highlighting. """
3160
3160
3161 try:
3161 try:
3162 filename = get_py_filename(parameter_s)
3162 filename = get_py_filename(parameter_s)
3163 cont = file_read(filename)
3163 cont = file_read(filename)
3164 except IOError:
3164 except IOError:
3165 try:
3165 try:
3166 cont = eval(parameter_s,self.user_ns)
3166 cont = eval(parameter_s,self.user_ns)
3167 except NameError:
3167 except NameError:
3168 cont = None
3168 cont = None
3169 if cont is None:
3169 if cont is None:
3170 print "Error: no such file or variable"
3170 print "Error: no such file or variable"
3171 return
3171 return
3172
3172
3173 page.page(self.shell.pycolorize(cont))
3173 page.page(self.shell.pycolorize(cont))
3174
3174
3175 def _rerun_pasted(self):
3175 def _rerun_pasted(self):
3176 """ Rerun a previously pasted command.
3176 """ Rerun a previously pasted command.
3177 """
3177 """
3178 b = self.user_ns.get('pasted_block', None)
3178 b = self.user_ns.get('pasted_block', None)
3179 if b is None:
3179 if b is None:
3180 raise UsageError('No previous pasted block available')
3180 raise UsageError('No previous pasted block available')
3181 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3181 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3182 exec b in self.user_ns
3182 exec b in self.user_ns
3183
3183
3184 def _get_pasted_lines(self, sentinel):
3184 def _get_pasted_lines(self, sentinel):
3185 """ Yield pasted lines until the user enters the given sentinel value.
3185 """ Yield pasted lines until the user enters the given sentinel value.
3186 """
3186 """
3187 from IPython.core import interactiveshell
3187 from IPython.core import interactiveshell
3188 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3188 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3189 while True:
3189 while True:
3190 l = self.shell.raw_input_original(':')
3190 l = self.shell.raw_input_original(':')
3191 if l == sentinel:
3191 if l == sentinel:
3192 return
3192 return
3193 else:
3193 else:
3194 yield l
3194 yield l
3195
3195
3196 def _strip_pasted_lines_for_code(self, raw_lines):
3196 def _strip_pasted_lines_for_code(self, raw_lines):
3197 """ Strip non-code parts of a sequence of lines to return a block of
3197 """ Strip non-code parts of a sequence of lines to return a block of
3198 code.
3198 code.
3199 """
3199 """
3200 # Regular expressions that declare text we strip from the input:
3200 # Regular expressions that declare text we strip from the input:
3201 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3201 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3202 r'^\s*(\s?>)+', # Python input prompt
3202 r'^\s*(\s?>)+', # Python input prompt
3203 r'^\s*\.{3,}', # Continuation prompts
3203 r'^\s*\.{3,}', # Continuation prompts
3204 r'^\++',
3204 r'^\++',
3205 ]
3205 ]
3206
3206
3207 strip_from_start = map(re.compile,strip_re)
3207 strip_from_start = map(re.compile,strip_re)
3208
3208
3209 lines = []
3209 lines = []
3210 for l in raw_lines:
3210 for l in raw_lines:
3211 for pat in strip_from_start:
3211 for pat in strip_from_start:
3212 l = pat.sub('',l)
3212 l = pat.sub('',l)
3213 lines.append(l)
3213 lines.append(l)
3214
3214
3215 block = "\n".join(lines) + '\n'
3215 block = "\n".join(lines) + '\n'
3216 #print "block:\n",block
3216 #print "block:\n",block
3217 return block
3217 return block
3218
3218
3219 def _execute_block(self, block, par):
3219 def _execute_block(self, block, par):
3220 """ Execute a block, or store it in a variable, per the user's request.
3220 """ Execute a block, or store it in a variable, per the user's request.
3221 """
3221 """
3222 if not par:
3222 if not par:
3223 b = textwrap.dedent(block)
3223 b = textwrap.dedent(block)
3224 self.user_ns['pasted_block'] = b
3224 self.user_ns['pasted_block'] = b
3225 exec b in self.user_ns
3225 exec b in self.user_ns
3226 else:
3226 else:
3227 self.user_ns[par] = SList(block.splitlines())
3227 self.user_ns[par] = SList(block.splitlines())
3228 print "Block assigned to '%s'" % par
3228 print "Block assigned to '%s'" % par
3229
3229
3230 def magic_quickref(self,arg):
3230 def magic_quickref(self,arg):
3231 """ Show a quick reference sheet """
3231 """ Show a quick reference sheet """
3232 import IPython.core.usage
3232 import IPython.core.usage
3233 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3233 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3234
3234
3235 page.page(qr)
3235 page.page(qr)
3236
3236
3237 def magic_doctest_mode(self,parameter_s=''):
3237 def magic_doctest_mode(self,parameter_s=''):
3238 """Toggle doctest mode on and off.
3238 """Toggle doctest mode on and off.
3239
3239
3240 This mode is intended to make IPython behave as much as possible like a
3240 This mode is intended to make IPython behave as much as possible like a
3241 plain Python shell, from the perspective of how its prompts, exceptions
3241 plain Python shell, from the perspective of how its prompts, exceptions
3242 and output look. This makes it easy to copy and paste parts of a
3242 and output look. This makes it easy to copy and paste parts of a
3243 session into doctests. It does so by:
3243 session into doctests. It does so by:
3244
3244
3245 - Changing the prompts to the classic ``>>>`` ones.
3245 - Changing the prompts to the classic ``>>>`` ones.
3246 - Changing the exception reporting mode to 'Plain'.
3246 - Changing the exception reporting mode to 'Plain'.
3247 - Disabling pretty-printing of output.
3247 - Disabling pretty-printing of output.
3248
3248
3249 Note that IPython also supports the pasting of code snippets that have
3249 Note that IPython also supports the pasting of code snippets that have
3250 leading '>>>' and '...' prompts in them. This means that you can paste
3250 leading '>>>' and '...' prompts in them. This means that you can paste
3251 doctests from files or docstrings (even if they have leading
3251 doctests from files or docstrings (even if they have leading
3252 whitespace), and the code will execute correctly. You can then use
3252 whitespace), and the code will execute correctly. You can then use
3253 '%history -t' to see the translated history; this will give you the
3253 '%history -t' to see the translated history; this will give you the
3254 input after removal of all the leading prompts and whitespace, which
3254 input after removal of all the leading prompts and whitespace, which
3255 can be pasted back into an editor.
3255 can be pasted back into an editor.
3256
3256
3257 With these features, you can switch into this mode easily whenever you
3257 With these features, you can switch into this mode easily whenever you
3258 need to do testing and changes to doctests, without having to leave
3258 need to do testing and changes to doctests, without having to leave
3259 your existing IPython session.
3259 your existing IPython session.
3260 """
3260 """
3261
3261
3262 from IPython.utils.ipstruct import Struct
3262 from IPython.utils.ipstruct import Struct
3263
3263
3264 # Shorthands
3264 # Shorthands
3265 shell = self.shell
3265 shell = self.shell
3266 oc = shell.displayhook
3266 oc = shell.displayhook
3267 meta = shell.meta
3267 meta = shell.meta
3268 disp_formatter = self.shell.display_formatter
3268 disp_formatter = self.shell.display_formatter
3269 ptformatter = disp_formatter.formatters['text/plain']
3269 ptformatter = disp_formatter.formatters['text/plain']
3270 # dstore is a data store kept in the instance metadata bag to track any
3270 # dstore is a data store kept in the instance metadata bag to track any
3271 # changes we make, so we can undo them later.
3271 # changes we make, so we can undo them later.
3272 dstore = meta.setdefault('doctest_mode',Struct())
3272 dstore = meta.setdefault('doctest_mode',Struct())
3273 save_dstore = dstore.setdefault
3273 save_dstore = dstore.setdefault
3274
3274
3275 # save a few values we'll need to recover later
3275 # save a few values we'll need to recover later
3276 mode = save_dstore('mode',False)
3276 mode = save_dstore('mode',False)
3277 save_dstore('rc_pprint',ptformatter.pprint)
3277 save_dstore('rc_pprint',ptformatter.pprint)
3278 save_dstore('xmode',shell.InteractiveTB.mode)
3278 save_dstore('xmode',shell.InteractiveTB.mode)
3279 save_dstore('rc_separate_out',shell.separate_out)
3279 save_dstore('rc_separate_out',shell.separate_out)
3280 save_dstore('rc_separate_out2',shell.separate_out2)
3280 save_dstore('rc_separate_out2',shell.separate_out2)
3281 save_dstore('rc_prompts_pad_left',shell.prompts_pad_left)
3281 save_dstore('rc_prompts_pad_left',shell.prompts_pad_left)
3282 save_dstore('rc_separate_in',shell.separate_in)
3282 save_dstore('rc_separate_in',shell.separate_in)
3283 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
3283 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
3284
3284
3285 if mode == False:
3285 if mode == False:
3286 # turn on
3286 # turn on
3287 oc.prompt1.p_template = '>>> '
3287 oc.prompt1.p_template = '>>> '
3288 oc.prompt2.p_template = '... '
3288 oc.prompt2.p_template = '... '
3289 oc.prompt_out.p_template = ''
3289 oc.prompt_out.p_template = ''
3290
3290
3291 # Prompt separators like plain python
3291 # Prompt separators like plain python
3292 oc.input_sep = oc.prompt1.sep = ''
3292 oc.input_sep = oc.prompt1.sep = ''
3293 oc.output_sep = ''
3293 oc.output_sep = ''
3294 oc.output_sep2 = ''
3294 oc.output_sep2 = ''
3295
3295
3296 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3296 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3297 oc.prompt_out.pad_left = False
3297 oc.prompt_out.pad_left = False
3298
3298
3299 ptformatter.pprint = False
3299 ptformatter.pprint = False
3300 disp_formatter.plain_text_only = True
3300 disp_formatter.plain_text_only = True
3301
3301
3302 shell.magic_xmode('Plain')
3302 shell.magic_xmode('Plain')
3303 else:
3303 else:
3304 # turn off
3304 # turn off
3305 oc.prompt1.p_template = shell.prompt_in1
3305 oc.prompt1.p_template = shell.prompt_in1
3306 oc.prompt2.p_template = shell.prompt_in2
3306 oc.prompt2.p_template = shell.prompt_in2
3307 oc.prompt_out.p_template = shell.prompt_out
3307 oc.prompt_out.p_template = shell.prompt_out
3308
3308
3309 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3309 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3310
3310
3311 oc.output_sep = dstore.rc_separate_out
3311 oc.output_sep = dstore.rc_separate_out
3312 oc.output_sep2 = dstore.rc_separate_out2
3312 oc.output_sep2 = dstore.rc_separate_out2
3313
3313
3314 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3314 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3315 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3315 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3316
3316
3317 ptformatter.pprint = dstore.rc_pprint
3317 ptformatter.pprint = dstore.rc_pprint
3318 disp_formatter.plain_text_only = dstore.rc_plain_text_only
3318 disp_formatter.plain_text_only = dstore.rc_plain_text_only
3319
3319
3320 shell.magic_xmode(dstore.xmode)
3320 shell.magic_xmode(dstore.xmode)
3321
3321
3322 # Store new mode and inform
3322 # Store new mode and inform
3323 dstore.mode = bool(1-int(mode))
3323 dstore.mode = bool(1-int(mode))
3324 mode_label = ['OFF','ON'][dstore.mode]
3324 mode_label = ['OFF','ON'][dstore.mode]
3325 print 'Doctest mode is:', mode_label
3325 print 'Doctest mode is:', mode_label
3326
3326
3327 def magic_gui(self, parameter_s=''):
3327 def magic_gui(self, parameter_s=''):
3328 """Enable or disable IPython GUI event loop integration.
3328 """Enable or disable IPython GUI event loop integration.
3329
3329
3330 %gui [GUINAME]
3330 %gui [GUINAME]
3331
3331
3332 This magic replaces IPython's threaded shells that were activated
3332 This magic replaces IPython's threaded shells that were activated
3333 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3333 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3334 can now be enabled, disabled and changed at runtime and keyboard
3334 can now be enabled, disabled and changed at runtime and keyboard
3335 interrupts should work without any problems. The following toolkits
3335 interrupts should work without any problems. The following toolkits
3336 are supported: wxPython, PyQt4, PyGTK, and Tk::
3336 are supported: wxPython, PyQt4, PyGTK, and Tk::
3337
3337
3338 %gui wx # enable wxPython event loop integration
3338 %gui wx # enable wxPython event loop integration
3339 %gui qt4|qt # enable PyQt4 event loop integration
3339 %gui qt4|qt # enable PyQt4 event loop integration
3340 %gui gtk # enable PyGTK event loop integration
3340 %gui gtk # enable PyGTK event loop integration
3341 %gui tk # enable Tk event loop integration
3341 %gui tk # enable Tk event loop integration
3342 %gui # disable all event loop integration
3342 %gui # disable all event loop integration
3343
3343
3344 WARNING: after any of these has been called you can simply create
3344 WARNING: after any of these has been called you can simply create
3345 an application object, but DO NOT start the event loop yourself, as
3345 an application object, but DO NOT start the event loop yourself, as
3346 we have already handled that.
3346 we have already handled that.
3347 """
3347 """
3348 from IPython.lib.inputhook import enable_gui
3348 from IPython.lib.inputhook import enable_gui
3349 opts, arg = self.parse_options(parameter_s, '')
3349 opts, arg = self.parse_options(parameter_s, '')
3350 if arg=='': arg = None
3350 if arg=='': arg = None
3351 return enable_gui(arg)
3351 return enable_gui(arg)
3352
3352
3353 def magic_load_ext(self, module_str):
3353 def magic_load_ext(self, module_str):
3354 """Load an IPython extension by its module name."""
3354 """Load an IPython extension by its module name."""
3355 return self.extension_manager.load_extension(module_str)
3355 return self.extension_manager.load_extension(module_str)
3356
3356
3357 def magic_unload_ext(self, module_str):
3357 def magic_unload_ext(self, module_str):
3358 """Unload an IPython extension by its module name."""
3358 """Unload an IPython extension by its module name."""
3359 self.extension_manager.unload_extension(module_str)
3359 self.extension_manager.unload_extension(module_str)
3360
3360
3361 def magic_reload_ext(self, module_str):
3361 def magic_reload_ext(self, module_str):
3362 """Reload an IPython extension by its module name."""
3362 """Reload an IPython extension by its module name."""
3363 self.extension_manager.reload_extension(module_str)
3363 self.extension_manager.reload_extension(module_str)
3364
3364
3365 @skip_doctest
3365 @skip_doctest
3366 def magic_install_profiles(self, s):
3366 def magic_install_profiles(self, s):
3367 """Install the default IPython profiles into the .ipython dir.
3367 """Install the default IPython profiles into the .ipython dir.
3368
3368
3369 If the default profiles have already been installed, they will not
3369 If the default profiles have already been installed, they will not
3370 be overwritten. You can force overwriting them by using the ``-o``
3370 be overwritten. You can force overwriting them by using the ``-o``
3371 option::
3371 option::
3372
3372
3373 In [1]: %install_profiles -o
3373 In [1]: %install_profiles -o
3374 """
3374 """
3375 if '-o' in s:
3375 if '-o' in s:
3376 overwrite = True
3376 overwrite = True
3377 else:
3377 else:
3378 overwrite = False
3378 overwrite = False
3379 from IPython.config import profile
3379 from IPython.config import profile
3380 profile_dir = os.path.dirname(profile.__file__)
3380 profile_dir = os.path.dirname(profile.__file__)
3381 ipython_dir = self.ipython_dir
3381 ipython_dir = self.ipython_dir
3382 print "Installing profiles to: %s [overwrite=%s]"%(ipython_dir,overwrite)
3382 print "Installing profiles to: %s [overwrite=%s]"%(ipython_dir,overwrite)
3383 for src in os.listdir(profile_dir):
3383 for src in os.listdir(profile_dir):
3384 if src.startswith('profile_'):
3384 if src.startswith('profile_'):
3385 name = src.replace('profile_', '')
3385 name = src.replace('profile_', '')
3386 print " %s"%name
3386 print " %s"%name
3387 pd = ProfileDir.create_profile_dir_by_name(ipython_dir, name)
3387 pd = ProfileDir.create_profile_dir_by_name(ipython_dir, name)
3388 pd.copy_config_file('ipython_config.py', path=src,
3388 pd.copy_config_file('ipython_config.py', path=src,
3389 overwrite=overwrite)
3389 overwrite=overwrite)
3390
3390
3391 @skip_doctest
3391 @skip_doctest
3392 def magic_install_default_config(self, s):
3392 def magic_install_default_config(self, s):
3393 """Install IPython's default config file into the .ipython dir.
3393 """Install IPython's default config file into the .ipython dir.
3394
3394
3395 If the default config file (:file:`ipython_config.py`) is already
3395 If the default config file (:file:`ipython_config.py`) is already
3396 installed, it will not be overwritten. You can force overwriting
3396 installed, it will not be overwritten. You can force overwriting
3397 by using the ``-o`` option::
3397 by using the ``-o`` option::
3398
3398
3399 In [1]: %install_default_config
3399 In [1]: %install_default_config
3400 """
3400 """
3401 if '-o' in s:
3401 if '-o' in s:
3402 overwrite = True
3402 overwrite = True
3403 else:
3403 else:
3404 overwrite = False
3404 overwrite = False
3405 pd = self.shell.profile_dir
3405 pd = self.shell.profile_dir
3406 print "Installing default config file in: %s" % pd.location
3406 print "Installing default config file in: %s" % pd.location
3407 pd.copy_config_file('ipython_config.py', overwrite=overwrite)
3407 pd.copy_config_file('ipython_config.py', overwrite=overwrite)
3408
3408
3409 # Pylab support: simple wrappers that activate pylab, load gui input
3409 # Pylab support: simple wrappers that activate pylab, load gui input
3410 # handling and modify slightly %run
3410 # handling and modify slightly %run
3411
3411
3412 @skip_doctest
3412 @skip_doctest
3413 def _pylab_magic_run(self, parameter_s=''):
3413 def _pylab_magic_run(self, parameter_s=''):
3414 Magic.magic_run(self, parameter_s,
3414 Magic.magic_run(self, parameter_s,
3415 runner=mpl_runner(self.shell.safe_execfile))
3415 runner=mpl_runner(self.shell.safe_execfile))
3416
3416
3417 _pylab_magic_run.__doc__ = magic_run.__doc__
3417 _pylab_magic_run.__doc__ = magic_run.__doc__
3418
3418
3419 @skip_doctest
3419 @skip_doctest
3420 def magic_pylab(self, s):
3420 def magic_pylab(self, s):
3421 """Load numpy and matplotlib to work interactively.
3421 """Load numpy and matplotlib to work interactively.
3422
3422
3423 %pylab [GUINAME]
3423 %pylab [GUINAME]
3424
3424
3425 This function lets you activate pylab (matplotlib, numpy and
3425 This function lets you activate pylab (matplotlib, numpy and
3426 interactive support) at any point during an IPython session.
3426 interactive support) at any point during an IPython session.
3427
3427
3428 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3428 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3429 pylab and mlab, as well as all names from numpy and pylab.
3429 pylab and mlab, as well as all names from numpy and pylab.
3430
3430
3431 Parameters
3431 Parameters
3432 ----------
3432 ----------
3433 guiname : optional
3433 guiname : optional
3434 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk', 'osx' or
3434 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk', 'osx' or
3435 'tk'). If given, the corresponding Matplotlib backend is used,
3435 'tk'). If given, the corresponding Matplotlib backend is used,
3436 otherwise matplotlib's default (which you can override in your
3436 otherwise matplotlib's default (which you can override in your
3437 matplotlib config file) is used.
3437 matplotlib config file) is used.
3438
3438
3439 Examples
3439 Examples
3440 --------
3440 --------
3441 In this case, where the MPL default is TkAgg:
3441 In this case, where the MPL default is TkAgg:
3442 In [2]: %pylab
3442 In [2]: %pylab
3443
3443
3444 Welcome to pylab, a matplotlib-based Python environment.
3444 Welcome to pylab, a matplotlib-based Python environment.
3445 Backend in use: TkAgg
3445 Backend in use: TkAgg
3446 For more information, type 'help(pylab)'.
3446 For more information, type 'help(pylab)'.
3447
3447
3448 But you can explicitly request a different backend:
3448 But you can explicitly request a different backend:
3449 In [3]: %pylab qt
3449 In [3]: %pylab qt
3450
3450
3451 Welcome to pylab, a matplotlib-based Python environment.
3451 Welcome to pylab, a matplotlib-based Python environment.
3452 Backend in use: Qt4Agg
3452 Backend in use: Qt4Agg
3453 For more information, type 'help(pylab)'.
3453 For more information, type 'help(pylab)'.
3454 """
3454 """
3455
3455
3456 if Application.initialized():
3456 if Application.initialized():
3457 app = Application.instance()
3457 app = Application.instance()
3458 try:
3458 try:
3459 import_all_status = app.pylab_import_all
3459 import_all_status = app.pylab_import_all
3460 except AttributeError:
3460 except AttributeError:
3461 import_all_status = True
3461 import_all_status = True
3462 else:
3462 else:
3463 import_all_status = True
3463 import_all_status = True
3464
3464
3465 self.shell.enable_pylab(s,import_all=import_all_status)
3465 self.shell.enable_pylab(s,import_all=import_all_status)
3466
3466
3467 def magic_tb(self, s):
3467 def magic_tb(self, s):
3468 """Print the last traceback with the currently active exception mode.
3468 """Print the last traceback with the currently active exception mode.
3469
3469
3470 See %xmode for changing exception reporting modes."""
3470 See %xmode for changing exception reporting modes."""
3471 self.shell.showtraceback()
3471 self.shell.showtraceback()
3472
3472
3473 @skip_doctest
3473 @skip_doctest
3474 def magic_precision(self, s=''):
3474 def magic_precision(self, s=''):
3475 """Set floating point precision for pretty printing.
3475 """Set floating point precision for pretty printing.
3476
3476
3477 Can set either integer precision or a format string.
3477 Can set either integer precision or a format string.
3478
3478
3479 If numpy has been imported and precision is an int,
3479 If numpy has been imported and precision is an int,
3480 numpy display precision will also be set, via ``numpy.set_printoptions``.
3480 numpy display precision will also be set, via ``numpy.set_printoptions``.
3481
3481
3482 If no argument is given, defaults will be restored.
3482 If no argument is given, defaults will be restored.
3483
3483
3484 Examples
3484 Examples
3485 --------
3485 --------
3486 ::
3486 ::
3487
3487
3488 In [1]: from math import pi
3488 In [1]: from math import pi
3489
3489
3490 In [2]: %precision 3
3490 In [2]: %precision 3
3491 Out[2]: u'%.3f'
3491 Out[2]: u'%.3f'
3492
3492
3493 In [3]: pi
3493 In [3]: pi
3494 Out[3]: 3.142
3494 Out[3]: 3.142
3495
3495
3496 In [4]: %precision %i
3496 In [4]: %precision %i
3497 Out[4]: u'%i'
3497 Out[4]: u'%i'
3498
3498
3499 In [5]: pi
3499 In [5]: pi
3500 Out[5]: 3
3500 Out[5]: 3
3501
3501
3502 In [6]: %precision %e
3502 In [6]: %precision %e
3503 Out[6]: u'%e'
3503 Out[6]: u'%e'
3504
3504
3505 In [7]: pi**10
3505 In [7]: pi**10
3506 Out[7]: 9.364805e+04
3506 Out[7]: 9.364805e+04
3507
3507
3508 In [8]: %precision
3508 In [8]: %precision
3509 Out[8]: u'%r'
3509 Out[8]: u'%r'
3510
3510
3511 In [9]: pi**10
3511 In [9]: pi**10
3512 Out[9]: 93648.047476082982
3512 Out[9]: 93648.047476082982
3513
3513
3514 """
3514 """
3515
3515
3516 ptformatter = self.shell.display_formatter.formatters['text/plain']
3516 ptformatter = self.shell.display_formatter.formatters['text/plain']
3517 ptformatter.float_precision = s
3517 ptformatter.float_precision = s
3518 return ptformatter.float_format
3518 return ptformatter.float_format
3519
3519
3520
3520
3521 @magic_arguments.magic_arguments()
3521 @magic_arguments.magic_arguments()
3522 @magic_arguments.argument(
3522 @magic_arguments.argument(
3523 '-e', '--export', action='store_true', default=False,
3523 '-e', '--export', action='store_true', default=False,
3524 help='Export IPython history as a notebook. The filename argument '
3524 help='Export IPython history as a notebook. The filename argument '
3525 'is used to specify the notebook name and format. For example '
3525 'is used to specify the notebook name and format. For example '
3526 'a filename of notebook.ipynb will result in a notebook name '
3526 'a filename of notebook.ipynb will result in a notebook name '
3527 'of "notebook" and a format of "xml". Likewise using a ".json" '
3527 'of "notebook" and a format of "xml". Likewise using a ".json" '
3528 'or ".py" file extension will write the notebook in the json '
3528 'or ".py" file extension will write the notebook in the json '
3529 'or py formats.'
3529 'or py formats.'
3530 )
3530 )
3531 @magic_arguments.argument(
3531 @magic_arguments.argument(
3532 '-f', '--format',
3532 '-f', '--format',
3533 help='Convert an existing IPython notebook to a new format. This option '
3533 help='Convert an existing IPython notebook to a new format. This option '
3534 'specifies the new format and can have the values: xml, json, py. '
3534 'specifies the new format and can have the values: xml, json, py. '
3535 'The target filename is choosen automatically based on the new '
3535 'The target filename is choosen automatically based on the new '
3536 'format. The filename argument gives the name of the source file.'
3536 'format. The filename argument gives the name of the source file.'
3537 )
3537 )
3538 @magic_arguments.argument(
3538 @magic_arguments.argument(
3539 'filename', type=unicode,
3539 'filename', type=unicode,
3540 help='Notebook name or filename'
3540 help='Notebook name or filename'
3541 )
3541 )
3542 def magic_notebook(self, s):
3542 def magic_notebook(self, s):
3543 """Export and convert IPython notebooks.
3543 """Export and convert IPython notebooks.
3544
3544
3545 This function can export the current IPython history to a notebook file
3545 This function can export the current IPython history to a notebook file
3546 or can convert an existing notebook file into a different format. For
3546 or can convert an existing notebook file into a different format. For
3547 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
3547 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
3548 To export the history to "foo.py" do "%notebook -e foo.py". To convert
3548 To export the history to "foo.py" do "%notebook -e foo.py". To convert
3549 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
3549 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
3550 formats include (json/ipynb, py).
3550 formats include (json/ipynb, py).
3551 """
3551 """
3552 args = magic_arguments.parse_argstring(self.magic_notebook, s)
3552 args = magic_arguments.parse_argstring(self.magic_notebook, s)
3553
3553
3554 from IPython.nbformat import current
3554 from IPython.nbformat import current
3555 args.filename = unquote_filename(args.filename)
3555 args.filename = unquote_filename(args.filename)
3556 if args.export:
3556 if args.export:
3557 fname, name, format = current.parse_filename(args.filename)
3557 fname, name, format = current.parse_filename(args.filename)
3558 cells = []
3558 cells = []
3559 hist = list(self.history_manager.get_range())
3559 hist = list(self.history_manager.get_range())
3560 for session, prompt_number, input in hist[:-1]:
3560 for session, prompt_number, input in hist[:-1]:
3561 cells.append(current.new_code_cell(prompt_number=prompt_number, input=input))
3561 cells.append(current.new_code_cell(prompt_number=prompt_number, input=input))
3562 worksheet = current.new_worksheet(cells=cells)
3562 worksheet = current.new_worksheet(cells=cells)
3563 nb = current.new_notebook(name=name,worksheets=[worksheet])
3563 nb = current.new_notebook(name=name,worksheets=[worksheet])
3564 with open(fname, 'w') as f:
3564 with open(fname, 'w') as f:
3565 current.write(nb, f, format);
3565 current.write(nb, f, format);
3566 elif args.format is not None:
3566 elif args.format is not None:
3567 old_fname, old_name, old_format = current.parse_filename(args.filename)
3567 old_fname, old_name, old_format = current.parse_filename(args.filename)
3568 new_format = args.format
3568 new_format = args.format
3569 if new_format == u'xml':
3569 if new_format == u'xml':
3570 raise ValueError('Notebooks cannot be written as xml.')
3570 raise ValueError('Notebooks cannot be written as xml.')
3571 elif new_format == u'ipynb' or new_format == u'json':
3571 elif new_format == u'ipynb' or new_format == u'json':
3572 new_fname = old_name + u'.ipynb'
3572 new_fname = old_name + u'.ipynb'
3573 new_format = u'json'
3573 new_format = u'json'
3574 elif new_format == u'py':
3574 elif new_format == u'py':
3575 new_fname = old_name + u'.py'
3575 new_fname = old_name + u'.py'
3576 else:
3576 else:
3577 raise ValueError('Invalid notebook format: %s' % new_format)
3577 raise ValueError('Invalid notebook format: %s' % new_format)
3578 with open(old_fname, 'r') as f:
3578 with open(old_fname, 'r') as f:
3579 s = f.read()
3579 s = f.read()
3580 try:
3580 try:
3581 nb = current.reads(s, old_format)
3581 nb = current.reads(s, old_format)
3582 except:
3582 except:
3583 nb = current.reads(s, u'xml')
3583 nb = current.reads(s, u'xml')
3584 with open(new_fname, 'w') as f:
3584 with open(new_fname, 'w') as f:
3585 current.write(nb, f, new_format)
3585 current.write(nb, f, new_format)
3586
3586
3587
3587
3588 # end Magic
3588 # end Magic
@@ -1,164 +1,164 b''
1 """Descriptor utilities.
1 """Descriptor utilities.
2
2
3 Utilities to support special Python descriptors [1,2], in particular the use of
3 Utilities to support special Python descriptors [1,2], in particular the use of
4 a useful pattern for properties we call 'one time properties'. These are
4 a useful pattern for properties we call 'one time properties'. These are
5 object attributes which are declared as properties, but become regular
5 object attributes which are declared as properties, but become regular
6 attributes once they've been read the first time. They can thus be evaluated
6 attributes once they've been read the first time. They can thus be evaluated
7 later in the object's life cycle, but once evaluated they become normal, static
7 later in the object's life cycle, but once evaluated they become normal, static
8 attributes with no function call overhead on access or any other constraints.
8 attributes with no function call overhead on access or any other constraints.
9
9
10 A special ResetMixin class is provided to add a .reset() method to users who
10 A special ResetMixin class is provided to add a .reset() method to users who
11 may want to have their objects capable of resetting these computed properties
11 may want to have their objects capable of resetting these computed properties
12 to their 'untriggered' state.
12 to their 'untriggered' state.
13
13
14 References
14 References
15 ----------
15 ----------
16 [1] How-To Guide for Descriptors, Raymond
16 [1] How-To Guide for Descriptors, Raymond
17 Hettinger. http://users.rcn.com/python/download/Descriptor.htm
17 Hettinger. http://users.rcn.com/python/download/Descriptor.htm
18
18
19 [2] Python data model, http://docs.python.org/reference/datamodel.html
19 [2] Python data model, http://docs.python.org/reference/datamodel.html
20
20
21 Notes
21 Notes
22 -----
22 -----
23 This module is taken from the NiPy project
23 This module is taken from the NiPy project
24 (http://neuroimaging.scipy.org/site/index.html), and is BSD licensed.
24 (http://nipy.sourceforge.net/nipy/stable/index.html), and is BSD licensed.
25
25
26 Authors
26 Authors
27 -------
27 -------
28 - Fernando Perez.
28 - Fernando Perez.
29 """
29 """
30
30
31 #-----------------------------------------------------------------------------
31 #-----------------------------------------------------------------------------
32 # Classes and Functions
32 # Classes and Functions
33 #-----------------------------------------------------------------------------
33 #-----------------------------------------------------------------------------
34
34
35 class ResetMixin(object):
35 class ResetMixin(object):
36 """A Mixin class to add a .reset() method to users of OneTimeProperty.
36 """A Mixin class to add a .reset() method to users of OneTimeProperty.
37
37
38 By default, auto attributes once computed, become static. If they happen to
38 By default, auto attributes once computed, become static. If they happen to
39 depend on other parts of an object and those parts change, their values may
39 depend on other parts of an object and those parts change, their values may
40 now be invalid.
40 now be invalid.
41
41
42 This class offers a .reset() method that users can call *explicitly* when
42 This class offers a .reset() method that users can call *explicitly* when
43 they know the state of their objects may have changed and they want to
43 they know the state of their objects may have changed and they want to
44 ensure that *all* their special attributes should be invalidated. Once
44 ensure that *all* their special attributes should be invalidated. Once
45 reset() is called, all their auto attributes are reset to their
45 reset() is called, all their auto attributes are reset to their
46 OneTimeProperty descriptors, and their accessor functions will be triggered
46 OneTimeProperty descriptors, and their accessor functions will be triggered
47 again.
47 again.
48
48
49 Example
49 Example
50 -------
50 -------
51
51
52 >>> class A(ResetMixin):
52 >>> class A(ResetMixin):
53 ... def __init__(self,x=1.0):
53 ... def __init__(self,x=1.0):
54 ... self.x = x
54 ... self.x = x
55 ...
55 ...
56 ... @auto_attr
56 ... @auto_attr
57 ... def y(self):
57 ... def y(self):
58 ... print '*** y computation executed ***'
58 ... print '*** y computation executed ***'
59 ... return self.x / 2.0
59 ... return self.x / 2.0
60 ...
60 ...
61
61
62 >>> a = A(10)
62 >>> a = A(10)
63
63
64 About to access y twice, the second time no computation is done:
64 About to access y twice, the second time no computation is done:
65 >>> a.y
65 >>> a.y
66 *** y computation executed ***
66 *** y computation executed ***
67 5.0
67 5.0
68 >>> a.y
68 >>> a.y
69 5.0
69 5.0
70
70
71 Changing x
71 Changing x
72 >>> a.x = 20
72 >>> a.x = 20
73
73
74 a.y doesn't change to 10, since it is a static attribute:
74 a.y doesn't change to 10, since it is a static attribute:
75 >>> a.y
75 >>> a.y
76 5.0
76 5.0
77
77
78 We now reset a, and this will then force all auto attributes to recompute
78 We now reset a, and this will then force all auto attributes to recompute
79 the next time we access them:
79 the next time we access them:
80 >>> a.reset()
80 >>> a.reset()
81
81
82 About to access y twice again after reset():
82 About to access y twice again after reset():
83 >>> a.y
83 >>> a.y
84 *** y computation executed ***
84 *** y computation executed ***
85 10.0
85 10.0
86 >>> a.y
86 >>> a.y
87 10.0
87 10.0
88 """
88 """
89
89
90 def reset(self):
90 def reset(self):
91 """Reset all OneTimeProperty attributes that may have fired already."""
91 """Reset all OneTimeProperty attributes that may have fired already."""
92 instdict = self.__dict__
92 instdict = self.__dict__
93 classdict = self.__class__.__dict__
93 classdict = self.__class__.__dict__
94 # To reset them, we simply remove them from the instance dict. At that
94 # To reset them, we simply remove them from the instance dict. At that
95 # point, it's as if they had never been computed. On the next access,
95 # point, it's as if they had never been computed. On the next access,
96 # the accessor function from the parent class will be called, simply
96 # the accessor function from the parent class will be called, simply
97 # because that's how the python descriptor protocol works.
97 # because that's how the python descriptor protocol works.
98 for mname, mval in classdict.items():
98 for mname, mval in classdict.items():
99 if mname in instdict and isinstance(mval, OneTimeProperty):
99 if mname in instdict and isinstance(mval, OneTimeProperty):
100 delattr(self, mname)
100 delattr(self, mname)
101
101
102
102
103 class OneTimeProperty(object):
103 class OneTimeProperty(object):
104 """A descriptor to make special properties that become normal attributes.
104 """A descriptor to make special properties that become normal attributes.
105
105
106 This is meant to be used mostly by the auto_attr decorator in this module.
106 This is meant to be used mostly by the auto_attr decorator in this module.
107 """
107 """
108 def __init__(self,func):
108 def __init__(self,func):
109 """Create a OneTimeProperty instance.
109 """Create a OneTimeProperty instance.
110
110
111 Parameters
111 Parameters
112 ----------
112 ----------
113 func : method
113 func : method
114
114
115 The method that will be called the first time to compute a value.
115 The method that will be called the first time to compute a value.
116 Afterwards, the method's name will be a standard attribute holding
116 Afterwards, the method's name will be a standard attribute holding
117 the value of this computation.
117 the value of this computation.
118 """
118 """
119 self.getter = func
119 self.getter = func
120 self.name = func.func_name
120 self.name = func.func_name
121
121
122 def __get__(self,obj,type=None):
122 def __get__(self,obj,type=None):
123 """This will be called on attribute access on the class or instance. """
123 """This will be called on attribute access on the class or instance. """
124
124
125 if obj is None:
125 if obj is None:
126 # Being called on the class, return the original function. This way,
126 # Being called on the class, return the original function. This way,
127 # introspection works on the class.
127 # introspection works on the class.
128 #return func
128 #return func
129 return self.getter
129 return self.getter
130
130
131 val = self.getter(obj)
131 val = self.getter(obj)
132 #print "** auto_attr - loading '%s'" % self.name # dbg
132 #print "** auto_attr - loading '%s'" % self.name # dbg
133 setattr(obj, self.name, val)
133 setattr(obj, self.name, val)
134 return val
134 return val
135
135
136
136
137 def auto_attr(func):
137 def auto_attr(func):
138 """Decorator to create OneTimeProperty attributes.
138 """Decorator to create OneTimeProperty attributes.
139
139
140 Parameters
140 Parameters
141 ----------
141 ----------
142 func : method
142 func : method
143 The method that will be called the first time to compute a value.
143 The method that will be called the first time to compute a value.
144 Afterwards, the method's name will be a standard attribute holding the
144 Afterwards, the method's name will be a standard attribute holding the
145 value of this computation.
145 value of this computation.
146
146
147 Examples
147 Examples
148 --------
148 --------
149 >>> class MagicProp(object):
149 >>> class MagicProp(object):
150 ... @auto_attr
150 ... @auto_attr
151 ... def a(self):
151 ... def a(self):
152 ... return 99
152 ... return 99
153 ...
153 ...
154 >>> x = MagicProp()
154 >>> x = MagicProp()
155 >>> 'a' in x.__dict__
155 >>> 'a' in x.__dict__
156 False
156 False
157 >>> x.a
157 >>> x.a
158 99
158 99
159 >>> 'a' in x.__dict__
159 >>> 'a' in x.__dict__
160 True
160 True
161 """
161 """
162 return OneTimeProperty(func)
162 return OneTimeProperty(func)
163
163
164
164
@@ -1,167 +1,167 b''
1 .. _documenting-ipython:
1 .. _documenting-ipython:
2
2
3 =====================
3 =====================
4 Documenting IPython
4 Documenting IPython
5 =====================
5 =====================
6
6
7 When contributing code to IPython, you should strive for clarity and
7 When contributing code to IPython, you should strive for clarity and
8 consistency, without falling prey to a style straitjacket. Basically,
8 consistency, without falling prey to a style straitjacket. Basically,
9 'document everything, try to be consistent, do what makes sense.'
9 'document everything, try to be consistent, do what makes sense.'
10
10
11 By and large we follow existing Python practices in major projects like Python
11 By and large we follow existing Python practices in major projects like Python
12 itself or NumPy, this document provides some additional detail for IPython.
12 itself or NumPy, this document provides some additional detail for IPython.
13
13
14
14
15 Standalone documentation
15 Standalone documentation
16 ========================
16 ========================
17
17
18 All standalone documentation should be written in plain text (``.txt``) files
18 All standalone documentation should be written in plain text (``.txt``) files
19 using reStructuredText [reStructuredText]_ for markup and formatting. All such
19 using reStructuredText [reStructuredText]_ for markup and formatting. All such
20 documentation should be placed in the directory :file:`docs/source` of the
20 documentation should be placed in the directory :file:`docs/source` of the
21 IPython source tree. Or, when appropriate, a suitably named subdirectory
21 IPython source tree. Or, when appropriate, a suitably named subdirectory
22 should be used. The documentation in this location will serve as the main
22 should be used. The documentation in this location will serve as the main
23 source for IPython documentation.
23 source for IPython documentation.
24
24
25 The actual HTML and PDF docs are built using the Sphinx [Sphinx]_
25 The actual HTML and PDF docs are built using the Sphinx [Sphinx]_
26 documentation generation tool. Once you have Sphinx installed, you can build
26 documentation generation tool. Once you have Sphinx installed, you can build
27 the html docs yourself by doing:
27 the html docs yourself by doing:
28
28
29 .. code-block:: bash
29 .. code-block:: bash
30
30
31 $ cd ipython-mybranch/docs
31 $ cd ipython-mybranch/docs
32 $ make html
32 $ make html
33
33
34 Our usage of Sphinx follows that of matplotlib [Matplotlib]_ closely. We are
34 Our usage of Sphinx follows that of matplotlib [Matplotlib]_ closely. We are
35 using a number of Sphinx tools and extensions written by the matplotlib team
35 using a number of Sphinx tools and extensions written by the matplotlib team
36 and will mostly follow their conventions, which are nicely spelled out in
36 and will mostly follow their conventions, which are nicely spelled out in
37 their documentation guide [MatplotlibDocGuide]_. What follows is thus a
37 their documentation guide [MatplotlibDocGuide]_. What follows is thus a
38 abridged version of the matplotlib documentation guide, taken with permission
38 abridged version of the matplotlib documentation guide, taken with permission
39 from the matplotlib team.
39 from the matplotlib team.
40
40
41 If you are reading this in a web browser, you can click on the "Show Source"
41 If you are reading this in a web browser, you can click on the "Show Source"
42 link to see the original reStricturedText for the following examples.
42 link to see the original reStricturedText for the following examples.
43
43
44 A bit of Python code::
44 A bit of Python code::
45
45
46 for i in range(10):
46 for i in range(10):
47 print i,
47 print i,
48 print "A big number:",2**34
48 print "A big number:",2**34
49
49
50 An interactive Python session::
50 An interactive Python session::
51
51
52 >>> from IPython.utils.path import get_ipython_dir
52 >>> from IPython.utils.path import get_ipython_dir
53 >>> get_ipython_dir()
53 >>> get_ipython_dir()
54 '/home/fperez/.config/ipython'
54 '/home/fperez/.config/ipython'
55
55
56 An IPython session:
56 An IPython session:
57
57
58 .. code-block:: ipython
58 .. code-block:: ipython
59
59
60 In [7]: import IPython
60 In [7]: import IPython
61
61
62 In [8]: print "This IPython is version:",IPython.__version__
62 In [8]: print "This IPython is version:",IPython.__version__
63 This IPython is version: 0.9.1
63 This IPython is version: 0.9.1
64
64
65 In [9]: 2+4
65 In [9]: 2+4
66 Out[9]: 6
66 Out[9]: 6
67
67
68
68
69 A bit of shell code:
69 A bit of shell code:
70
70
71 .. code-block:: bash
71 .. code-block:: bash
72
72
73 cd /tmp
73 cd /tmp
74 echo "My home directory is: $HOME"
74 echo "My home directory is: $HOME"
75 ls
75 ls
76
76
77 Docstring format
77 Docstring format
78 ================
78 ================
79
79
80 Good docstrings are very important. Unfortunately, Python itself only provides
80 Good docstrings are very important. Unfortunately, Python itself only provides
81 a rather loose standard for docstrings [PEP257]_, and there is no universally
81 a rather loose standard for docstrings [PEP257]_, and there is no universally
82 accepted convention for all the different parts of a complete docstring.
82 accepted convention for all the different parts of a complete docstring.
83 However, the NumPy project has established a very reasonable standard, and has
83 However, the NumPy project has established a very reasonable standard, and has
84 developed some tools to support the smooth inclusion of such docstrings in
84 developed some tools to support the smooth inclusion of such docstrings in
85 Sphinx-generated manuals. Rather than inventing yet another pseudo-standard,
85 Sphinx-generated manuals. Rather than inventing yet another pseudo-standard,
86 IPython will be henceforth documented using the NumPy conventions; we carry
86 IPython will be henceforth documented using the NumPy conventions; we carry
87 copies of some of the NumPy support tools to remain self-contained, but share
87 copies of some of the NumPy support tools to remain self-contained, but share
88 back upstream with NumPy any improvements or fixes we may make to the tools.
88 back upstream with NumPy any improvements or fixes we may make to the tools.
89
89
90 The NumPy documentation guidelines [NumPyDocGuide]_ contain detailed
90 The NumPy documentation guidelines [NumPyDocGuide]_ contain detailed
91 information on this standard, and for a quick overview, the NumPy example
91 information on this standard, and for a quick overview, the NumPy example
92 docstring [NumPyExampleDocstring]_ is a useful read.
92 docstring [NumPyExampleDocstring]_ is a useful read.
93
93
94
94
95 For user-facing APIs, we try to be fairly strict about following the above
95 For user-facing APIs, we try to be fairly strict about following the above
96 standards (even though they mean more verbose and detailed docstrings).
96 standards (even though they mean more verbose and detailed docstrings).
97 Wherever you can reasonably expect people to do introspection with::
97 Wherever you can reasonably expect people to do introspection with::
98
98
99 In [1]: some_function?
99 In [1]: some_function?
100
100
101 the docstring should follow the NumPy style and be fairly detailed.
101 the docstring should follow the NumPy style and be fairly detailed.
102
102
103 For purely internal methods that are only likely to be read by others extending
103 For purely internal methods that are only likely to be read by others extending
104 IPython itself we are a bit more relaxed, especially for small/short methods
104 IPython itself we are a bit more relaxed, especially for small/short methods
105 and functions whose intent is reasonably obvious. We still expect docstrings
105 and functions whose intent is reasonably obvious. We still expect docstrings
106 to be written, but they can be simpler. For very short functions with a
106 to be written, but they can be simpler. For very short functions with a
107 single-line docstring you can use something like::
107 single-line docstring you can use something like::
108
108
109 def add(a, b):
109 def add(a, b):
110 """The sum of two numbers.
110 """The sum of two numbers.
111 """
111 """
112 code
112 code
113
113
114 and for longer multiline strings::
114 and for longer multiline strings::
115
115
116 def add(a, b):
116 def add(a, b):
117 """The sum of two numbers.
117 """The sum of two numbers.
118
118
119 Here is the rest of the docs.
119 Here is the rest of the docs.
120 """
120 """
121 code
121 code
122
122
123
123
124 Here are two additional PEPs of interest regarding documentation of code.
124 Here are two additional PEPs of interest regarding documentation of code.
125 While both of these were rejected, the ideas therein form much of the basis of
125 While both of these were rejected, the ideas therein form much of the basis of
126 docutils (the machinery to process reStructuredText):
126 docutils (the machinery to process reStructuredText):
127
127
128 * `Docstring Processing System Framework <http://www.python.org/peps/pep-0256.html>`_
128 * `Docstring Processing System Framework <http://www.python.org/peps/pep-0256.html>`_
129 * `Docutils Design Specification <http://www.python.org/peps/pep-0258.html>`_
129 * `Docutils Design Specification <http://www.python.org/peps/pep-0258.html>`_
130
130
131 .. note::
131 .. note::
132
132
133 In the past IPython used epydoc so currently many docstrings still use
133 In the past IPython used epydoc so currently many docstrings still use
134 epydoc conventions. We will update them as we go, but all new code should
134 epydoc conventions. We will update them as we go, but all new code should
135 be documented using the NumPy standard.
135 be documented using the NumPy standard.
136
136
137 Building and uploading
137 Building and uploading
138 ======================
138 ======================
139 The built docs are stored in a separate repository. Through some github magic,
139 The built docs are stored in a separate repository. Through some github magic,
140 they're automatically exposed as a website. It works like this:
140 they're automatically exposed as a website. It works like this:
141
141
142 * You will need to have sphinx and latex installed. In Ubuntu, install
142 * You will need to have sphinx and latex installed. In Ubuntu, install
143 ``texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended``.
143 ``texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended``.
144 Install the latest version of sphinx from PyPI (``pip install sphinx``).
144 Install the latest version of sphinx from PyPI (``pip install sphinx``).
145 * Ensure that the development version of IPython is the first in your system
145 * Ensure that the development version of IPython is the first in your system
146 path. You can either use a virtualenv, or modify your PYTHONPATH.
146 path. You can either use a virtualenv, or modify your PYTHONPATH.
147 * Switch into the docs directory, and run ``make gh-pages``. This will build
147 * Switch into the docs directory, and run ``make gh-pages``. This will build
148 your updated docs as html and pdf, then automatically check out the latest
148 your updated docs as html and pdf, then automatically check out the latest
149 version of the docs repository, copy the built docs into it, and commit your
149 version of the docs repository, copy the built docs into it, and commit your
150 changes.
150 changes.
151 * Open the built docs in a web browser, and check that they're as expected.
151 * Open the built docs in a web browser, and check that they're as expected.
152 * (When building the docs for a new tagged release, you will have to add its link to
152 * (When building the docs for a new tagged release, you will have to add its link to
153 index.rst, then run ``python build_index.py`` to update index.html. Commit the
153 index.rst, then run ``python build_index.py`` to update index.html. Commit the
154 change.)
154 change.)
155 * Upload the docs with ``git push``. This only works if you have write access to
155 * Upload the docs with ``git push``. This only works if you have write access to
156 the docs repository.
156 the docs repository.
157 * If you are building a version that is not the current dev branch, nor a tagged release,
157 * If you are building a version that is not the current dev branch, nor a tagged release,
158 then you must run gh-pages.py directly with ``python gh-pages.py <version>``, and *not*
158 then you must run gh-pages.py directly with ``python gh-pages.py <version>``, and *not*
159 with ``make gh-pages``.
159 with ``make gh-pages``.
160
160
161 .. [reStructuredText] reStructuredText. http://docutils.sourceforge.net/rst.html
161 .. [reStructuredText] reStructuredText. http://docutils.sourceforge.net/rst.html
162 .. [Sphinx] Sphinx. http://sphinx.pocoo.org/
162 .. [Sphinx] Sphinx. http://sphinx.pocoo.org/
163 .. [MatplotlibDocGuide] http://matplotlib.sourceforge.net/devel/documenting_mpl.html
163 .. [MatplotlibDocGuide] http://matplotlib.sourceforge.net/devel/documenting_mpl.html
164 .. [PEP257] PEP 257. http://www.python.org/peps/pep-0257.html
164 .. [PEP257] PEP 257. http://www.python.org/peps/pep-0257.html
165 .. [NumPyDocGuide] NumPy documentation guide. http://projects.scipy.org/numpy/wiki/CodingStyleGuidelines
165 .. [NumPyDocGuide] NumPy documentation guide. https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt
166 .. [NumPyExampleDocstring] NumPy example docstring. http://projects.scipy.org/numpy/browser/trunk/doc/EXAMPLE_DOCSTRING.txt
166 .. [NumPyExampleDocstring] NumPy example docstring. https://raw.github.com/numpy/numpy/master/doc/HOWTO_BUILD_DOCS.rst.txt
167
167
@@ -1,401 +1,401 b''
1 Overview
1 Overview
2 ========
2 ========
3
3
4 This document describes the steps required to install IPython. IPython is
4 This document describes the steps required to install IPython. IPython is
5 organized into a number of subpackages, each of which has its own dependencies.
5 organized into a number of subpackages, each of which has its own dependencies.
6 All of the subpackages come with IPython, so you don't need to download and
6 All of the subpackages come with IPython, so you don't need to download and
7 install them separately. However, to use a given subpackage, you will need to
7 install them separately. However, to use a given subpackage, you will need to
8 install all of its dependencies.
8 install all of its dependencies.
9
9
10
10
11 Please let us know if you have problems installing IPython or any of its
11 Please let us know if you have problems installing IPython or any of its
12 dependencies. Officially, IPython requires Python version 2.6 or 2.7. There
12 dependencies. Officially, IPython requires Python versions 2.6 to 2.7 and 3.1
13 is an experimental port of IPython for Python3 `on GitHub
13 to 3.2.
14 <https://github.com/ipython/ipython-py3k>`_
15
14
16 .. warning::
15 .. warning::
17
16
18 Officially, IPython supports Python versions 2.6 and 2.7.
17 Officially, IPython supports Python versions 2.6 and 2.7.
19
18
20 IPython 0.11 has a hard syntax dependency on 2.6, and will no longer work
19 IPython 0.11 has a hard syntax dependency on 2.6, and will no longer work
21 on Python <= 2.5.
20 on Python <= 2.5.
22
21
23 Some of the installation approaches use the :mod:`setuptools` package and its
22 Some of the installation approaches use the :mod:`setuptools` package and its
24 :command:`easy_install` command line program. In many scenarios, this provides
23 :command:`easy_install` command line program. In many scenarios, this provides
25 the most simple method of installing IPython and its dependencies. It is not
24 the most simple method of installing IPython and its dependencies. It is not
26 required though. More information about :mod:`setuptools` can be found on its
25 required though. More information about :mod:`setuptools` can be found on its
27 website.
26 website.
28
27
29 .. note::
28 .. note::
30
29
31 On Windows, IPython *does* depend on :mod:`setuptools`, and it is recommended
30 On Windows, IPython *does* depend on :mod:`setuptools`, and it is recommended
32 that you install the :mod:`distribute` package, which improves
31 that you install the :mod:`distribute` package, which improves
33 :mod:`setuptools` and fixes various bugs.
32 :mod:`setuptools` and fixes various bugs.
34
33
35 We hope to remove this dependency in 0.12.
34 We hope to remove this dependency in 0.12.
36
35
37 More general information about installing Python packages can be found in
36 More general information about installing Python packages can be found in
38 Python's documentation at http://www.python.org/doc/.
37 Python's documentation at http://www.python.org/doc/.
39
38
40 Quickstart
39 Quickstart
41 ==========
40 ==========
42
41
43 If you have :mod:`setuptools` installed and you are on OS X or Linux (not
42 If you have :mod:`setuptools` installed and you are on OS X or Linux (not
44 Windows), the following will download and install IPython *and* the main
43 Windows), the following will download and install IPython *and* the main
45 optional dependencies:
44 optional dependencies:
46
45
47 .. code-block:: bash
46 .. code-block:: bash
48
47
49 $ easy_install ipython[zmq,test]
48 $ easy_install ipython[zmq,test]
50
49
51 This will get pyzmq, which is needed for
50 This will get pyzmq, which is needed for
52 IPython's parallel computing features as well as the nose package, which will
51 IPython's parallel computing features as well as the nose package, which will
53 enable you to run IPython's test suite.
52 enable you to run IPython's test suite.
54
53
55 To run IPython's test suite, use the :command:`iptest` command:
54 To run IPython's test suite, use the :command:`iptest` command:
56
55
57 .. code-block:: bash
56 .. code-block:: bash
58
57
59 $ iptest
58 $ iptest
60
59
61 Read on for more specific details and instructions for Windows.
60 Read on for more specific details and instructions for Windows.
62
61
63 Installing IPython itself
62 Installing IPython itself
64 =========================
63 =========================
65
64
66 Given a properly built Python, the basic interactive IPython shell will work
65 Given a properly built Python, the basic interactive IPython shell will work
67 with no external dependencies. However, some Python distributions
66 with no external dependencies. However, some Python distributions
68 (particularly on Windows and OS X), don't come with a working :mod:`readline`
67 (particularly on Windows and OS X), don't come with a working :mod:`readline`
69 module. The IPython shell will work without :mod:`readline`, but will lack
68 module. The IPython shell will work without :mod:`readline`, but will lack
70 many features that users depend on, such as tab completion and command line
69 many features that users depend on, such as tab completion and command line
71 editing. If you install IPython with :mod:`setuptools`, (e.g. with `easy_install`),
70 editing. If you install IPython with :mod:`setuptools`, (e.g. with `easy_install`),
72 then the appropriate :mod:`readline` for your platform will be installed.
71 then the appropriate :mod:`readline` for your platform will be installed.
73 See below for details of how to make sure you have a working :mod:`readline`.
72 See below for details of how to make sure you have a working :mod:`readline`.
74
73
75 Installation using easy_install
74 Installation using easy_install
76 -------------------------------
75 -------------------------------
77
76
78 If you have :mod:`setuptools` installed, the easiest way of getting IPython is
77 If you have :mod:`setuptools` installed, the easiest way of getting IPython is
79 to simple use :command:`easy_install`:
78 to simple use :command:`easy_install`:
80
79
81 .. code-block:: bash
80 .. code-block:: bash
82
81
83 $ easy_install ipython
82 $ easy_install ipython
84
83
85 That's it.
84 That's it.
86
85
87 Installation from source
86 Installation from source
88 ------------------------
87 ------------------------
89
88
90 If you don't want to use :command:`easy_install`, or don't have it installed,
89 If you don't want to use :command:`easy_install`, or don't have it installed,
91 just grab the latest stable build of IPython from `here
90 just grab the latest stable build of IPython from `here
92 <https://github.com/ipython/ipython/downloads>`_. Then do the following:
91 <https://github.com/ipython/ipython/downloads>`_. Then do the following:
93
92
94 .. code-block:: bash
93 .. code-block:: bash
95
94
96 $ tar -xzf ipython.tar.gz
95 $ tar -xzf ipython.tar.gz
97 $ cd ipython
96 $ cd ipython
98 $ python setup.py install
97 $ python setup.py install
99
98
100 If you are installing to a location (like ``/usr/local``) that requires higher
99 If you are installing to a location (like ``/usr/local``) that requires higher
101 permissions, you may need to run the last command with :command:`sudo`.
100 permissions, you may need to run the last command with :command:`sudo`.
102
101
103 Windows
102 Windows
104 -------
103 -------
105
104
106 .. note::
105 .. note::
107
106
108 On Windows, IPython requires :mod:`setuptools` or :mod:`distribute`.
107 On Windows, IPython requires :mod:`setuptools` or :mod:`distribute`.
109
108
110 We hope to remove this dependency in 0.12.
109 We hope to remove this dependency in 0.12.
111
110
112 There are a few caveats for Windows users. The main issue is that a basic
111 There are a few caveats for Windows users. The main issue is that a basic
113 ``python setup.py install`` approach won't create ``.bat`` file or Start Menu
112 ``python setup.py install`` approach won't create ``.bat`` file or Start Menu
114 shortcuts, which most users want. To get an installation with these, you can
113 shortcuts, which most users want. To get an installation with these, you can
115 use any of the following alternatives:
114 use any of the following alternatives:
116
115
117 1. Install using :command:`easy_install`.
116 1. Install using :command:`easy_install`.
118
117
119 2. Install using our binary ``.exe`` Windows installer, which can be found
118 2. Install using our binary ``.exe`` Windows installer, which can be found
120 `here <http://ipython.scipy.org/dist/>`_
119 `here <http://ipython.org/download.html>`_
121
120
122 3. Install from source, but using :mod:`setuptools` (``python setupegg.py
121 3. Install from source, but using :mod:`setuptools` (``python setupegg.py
123 install``).
122 install``).
124
123
125 IPython by default runs in a terminal window, but the normal terminal
124 IPython by default runs in a terminal window, but the normal terminal
126 application supplied by Microsoft Windows is very primitive. You may want to
125 application supplied by Microsoft Windows is very primitive. You may want to
127 download the excellent and free Console_ application instead, which is a far
126 download the excellent and free Console_ application instead, which is a far
128 superior tool. You can even configure Console to give you by default an
127 superior tool. You can even configure Console to give you by default an
129 IPython tab, which is very convenient to create new IPython sessions directly
128 IPython tab, which is very convenient to create new IPython sessions directly
130 from the working terminal.
129 from the working terminal.
131
130
132 .. _Console: http://sourceforge.net/projects/console
131 .. _Console: http://sourceforge.net/projects/console
133
132
134 Note for Windows 64 bit users: you may have difficulties with the stock
133 Note for Windows 64 bit users: you may have difficulties with the stock
135 installer on 64 bit systems; in this case (since we currently do not have 64
134 installer on 64 bit systems; in this case (since we currently do not have 64
136 bit builds of the Windows installer) your best bet is to install from source
135 bit builds of the Windows installer) your best bet is to install from source
137 with the setuptools method indicated in #3 above. See `this bug report`_ for
136 with the setuptools method indicated in #3 above. See `this bug report`_ for
138 further details.
137 further details.
139
138
140 .. _this bug report: https://bugs.launchpad.net/ipython/+bug/382214
139 .. _this bug report: https://bugs.launchpad.net/ipython/+bug/382214
141
140
142
141
143 Installing the development version
142 Installing the development version
144 ----------------------------------
143 ----------------------------------
145
144
146 It is also possible to install the development version of IPython from our
145 It is also possible to install the development version of IPython from our
147 `Git <http://git-scm.com/>`_ source code repository. To do this you will
146 `Git <http://git-scm.com/>`_ source code repository. To do this you will
148 need to have Git installed on your system. Then just do:
147 need to have Git installed on your system. Then just do:
149
148
150 .. code-block:: bash
149 .. code-block:: bash
151
150
152 $ git clone https://github.com/ipython/ipython.git
151 $ git clone https://github.com/ipython/ipython.git
153 $ cd ipython
152 $ cd ipython
154 $ python setup.py install
153 $ python setup.py install
155
154
156 Again, this last step on Windows won't create ``.bat`` files or Start Menu
155 Again, this last step on Windows won't create ``.bat`` files or Start Menu
157 shortcuts, so you will have to use one of the other approaches listed above.
156 shortcuts, so you will have to use one of the other approaches listed above.
158
157
159 Some users want to be able to follow the development branch as it changes. If
158 Some users want to be able to follow the development branch as it changes. If
160 you have :mod:`setuptools` installed, this is easy. Simply replace the last
159 you have :mod:`setuptools` installed, this is easy. Simply replace the last
161 step by:
160 step by:
162
161
163 .. code-block:: bash
162 .. code-block:: bash
164
163
165 $ python setupegg.py develop
164 $ python setupegg.py develop
166
165
167 This creates links in the right places and installs the command line script to
166 This creates links in the right places and installs the command line script to
168 the appropriate places. Then, if you want to update your IPython at any time,
167 the appropriate places. Then, if you want to update your IPython at any time,
169 just do:
168 just do:
170
169
171 .. code-block:: bash
170 .. code-block:: bash
172
171
173 $ git pull
172 $ git pull
174
173
175 Basic optional dependencies
174 Basic optional dependencies
176 ===========================
175 ===========================
177
176
178 There are a number of basic optional dependencies that most users will want to
177 There are a number of basic optional dependencies that most users will want to
179 get. These are:
178 get. These are:
180
179
181 * readline (for command line editing, tab completion, etc.)
180 * readline (for command line editing, tab completion, etc.)
182 * nose (to run the IPython test suite)
181 * nose (to run the IPython test suite)
183 * pexpect (to use things like irunner)
182 * pexpect (to use things like irunner)
184
183
185 If you are comfortable installing these things yourself, have at it, otherwise
184 If you are comfortable installing these things yourself, have at it, otherwise
186 read on for more details.
185 read on for more details.
187
186
188 readline
187 readline
189 --------
188 --------
190
189
191 In principle, all Python distributions should come with a working
190 In principle, all Python distributions should come with a working
192 :mod:`readline` module. But, reality is not quite that simple. There are two
191 :mod:`readline` module. But, reality is not quite that simple. There are two
193 common situations where you won't have a working :mod:`readline` module:
192 common situations where you won't have a working :mod:`readline` module:
194
193
195 * If you are using the built-in Python on Mac OS X.
194 * If you are using the built-in Python on Mac OS X.
196
195
197 * If you are running Windows, which doesn't have a :mod:`readline` module.
196 * If you are running Windows, which doesn't have a :mod:`readline` module.
198
197
199 When IPython is installed with :mod:`setuptools`, (e.g. with `easy_install`),
198 When IPython is installed with :mod:`setuptools`, (e.g. with `easy_install`),
200 readline is added as a dependency on OS X, and PyReadline on Windows, and will
199 readline is added as a dependency on OS X, and PyReadline on Windows, and will
201 be installed on your system. However, if you do not use setuptools, you may
200 be installed on your system. However, if you do not use setuptools, you may
202 have to install one of these packages yourself.
201 have to install one of these packages yourself.
203
202
204 On OS X, the built-in Python doesn't not have :mod:`readline` because of
203 On OS X, the built-in Python doesn't not have :mod:`readline` because of
205 license issues. Starting with OS X 10.5 (Leopard), Apple's built-in Python has
204 license issues. Starting with OS X 10.5 (Leopard), Apple's built-in Python has
206 a BSD-licensed not-quite-compatible readline replacement. As of IPython 0.9,
205 a BSD-licensed not-quite-compatible readline replacement. As of IPython 0.9,
207 many of the issues related to the differences between readline and libedit seem
206 many of the issues related to the differences between readline and libedit seem
208 to have been resolved. While you may find libedit sufficient, we have
207 to have been resolved. While you may find libedit sufficient, we have
209 occasional reports of bugs with it and several developers who use OS X as their
208 occasional reports of bugs with it and several developers who use OS X as their
210 main environment consider libedit unacceptable for productive, regular use with
209 main environment consider libedit unacceptable for productive, regular use with
211 IPython.
210 IPython.
212
211
213 Therefore, we *strongly* recommend that on OS X you get the full
212 Therefore, we *strongly* recommend that on OS X you get the full
214 :mod:`readline` module. We will *not* consider completion/history problems to
213 :mod:`readline` module. We will *not* consider completion/history problems to
215 be bugs for IPython if you are using libedit.
214 be bugs for IPython if you are using libedit.
216
215
217 To get a working :mod:`readline` module, just do (with :mod:`setuptools`
216 To get a working :mod:`readline` module, just do (with :mod:`setuptools`
218 installed):
217 installed):
219
218
220 .. code-block:: bash
219 .. code-block:: bash
221
220
222 $ easy_install readline
221 $ easy_install readline
223
222
224 .. note::
223 .. note::
225
224
226 Other Python distributions on OS X (such as fink, MacPorts and the official
225 Other Python distributions on OS X (such as fink, MacPorts and the official
227 python.org binaries) already have readline installed so you likely don't
226 python.org binaries) already have readline installed so you likely don't
228 have to do this step.
227 have to do this step.
229
228
230 If needed, the readline egg can be build and installed from source (see the
229 If needed, the readline egg can be build and installed from source (see the
231 wiki page at http://ipython.scipy.org/moin/InstallationOSXLeopard).
230 wiki page at
231 http://web.archive.org/web/20090614162410/ipython.scipy.org/moin/InstallationOSXLeopard).
232
232
233 On Windows, you will need the PyReadline module. PyReadline is a separate,
233 On Windows, you will need the PyReadline module. PyReadline is a separate,
234 Windows only implementation of readline that uses native Windows calls through
234 Windows only implementation of readline that uses native Windows calls through
235 :mod:`ctypes`. The easiest way of installing PyReadline is you use the binary
235 :mod:`ctypes`. The easiest way of installing PyReadline is you use the binary
236 installer available `here <https://launchpad.net/pyreadline/+download>`_.
236 installer available `here <https://launchpad.net/pyreadline/+download>`_.
237
237
238 nose
238 nose
239 ----
239 ----
240
240
241 To run the IPython test suite you will need the :mod:`nose` package. Nose
241 To run the IPython test suite you will need the :mod:`nose` package. Nose
242 provides a great way of sniffing out and running all of the IPython tests. The
242 provides a great way of sniffing out and running all of the IPython tests. The
243 simplest way of getting nose, is to use :command:`easy_install`:
243 simplest way of getting nose, is to use :command:`easy_install`:
244
244
245 .. code-block:: bash
245 .. code-block:: bash
246
246
247 $ easy_install nose
247 $ easy_install nose
248
248
249 Another way of getting this is to do:
249 Another way of getting this is to do:
250
250
251 .. code-block:: bash
251 .. code-block:: bash
252
252
253 $ easy_install ipython[test]
253 $ easy_install ipython[test]
254
254
255 For more installation options, see the `nose website
255 For more installation options, see the `nose website
256 <http://somethingaboutorange.com/mrl/projects/nose/>`_.
256 <http://somethingaboutorange.com/mrl/projects/nose/>`_.
257
257
258 Once you have nose installed, you can run IPython's test suite using the
258 Once you have nose installed, you can run IPython's test suite using the
259 iptest command:
259 iptest command:
260
260
261 .. code-block:: bash
261 .. code-block:: bash
262
262
263 $ iptest
263 $ iptest
264
264
265 pexpect
265 pexpect
266 -------
266 -------
267
267
268 The pexpect_ package is used in IPython's :command:`irunner` script, as well as
268 The pexpect_ package is used in IPython's :command:`irunner` script, as well as
269 for managing subprocesses. IPython now includes a version of pexpect in
269 for managing subprocesses. IPython now includes a version of pexpect in
270 :mod:`IPython.external`, but if you have installed pexpect, IPython will use
270 :mod:`IPython.external`, but if you have installed pexpect, IPython will use
271 that instead. On Unix platforms (including OS X), just do:
271 that instead. On Unix platforms (including OS X), just do:
272
272
273 .. code-block:: bash
273 .. code-block:: bash
274
274
275 $ easy_install pexpect
275 $ easy_install pexpect
276
276
277 Windows users are out of luck as pexpect does not run there.
277 Windows users are out of luck as pexpect does not run there.
278
278
279 Dependencies for IPython.parallel (parallel computing)
279 Dependencies for IPython.parallel (parallel computing)
280 ======================================================
280 ======================================================
281
281
282 :mod:`IPython.kernel` has been replaced by :mod:`IPython.parallel`,
282 :mod:`IPython.kernel` has been replaced by :mod:`IPython.parallel`,
283 which uses ZeroMQ for all communication.
283 which uses ZeroMQ for all communication.
284
284
285 IPython.parallel provides a nice architecture for parallel computing. The
285 IPython.parallel provides a nice architecture for parallel computing. The
286 main focus of this architecture is on interactive parallel computing. These
286 main focus of this architecture is on interactive parallel computing. These
287 features require just one package: PyZMQ. See the next section for PyZMQ
287 features require just one package: PyZMQ. See the next section for PyZMQ
288 details.
288 details.
289
289
290 On a Unix style platform (including OS X), if you want to use
290 On a Unix style platform (including OS X), if you want to use
291 :mod:`setuptools`, you can just do:
291 :mod:`setuptools`, you can just do:
292
292
293 .. code-block:: bash
293 .. code-block:: bash
294
294
295 $ easy_install ipython[zmq] # will include pyzmq
295 $ easy_install ipython[zmq] # will include pyzmq
296
296
297 Security in IPython.parallel is provided by SSH tunnels. By default, Linux
297 Security in IPython.parallel is provided by SSH tunnels. By default, Linux
298 and OSX clients will use the shell ssh command, but on Windows, we also
298 and OSX clients will use the shell ssh command, but on Windows, we also
299 support tunneling with paramiko_.
299 support tunneling with paramiko_.
300
300
301 Dependencies for IPython.zmq
301 Dependencies for IPython.zmq
302 ============================
302 ============================
303
303
304 pyzmq
304 pyzmq
305 -----
305 -----
306
306
307 IPython 0.11 introduced some new functionality, including a two-process
307 IPython 0.11 introduced some new functionality, including a two-process
308 execution model using ZeroMQ_ for communication. The Python bindings to ZeroMQ
308 execution model using ZeroMQ_ for communication. The Python bindings to ZeroMQ
309 are found in the PyZMQ_ project, which is easy_install-able once you have
309 are found in the PyZMQ_ project, which is easy_install-able once you have
310 ZeroMQ installed. If you are on Python 2.6 or 2.7 on OSX, or 2.7 on Windows,
310 ZeroMQ installed. If you are on Python 2.6 or 2.7 on OSX, or 2.7 on Windows,
311 pyzmq has eggs that include ZeroMQ itself.
311 pyzmq has eggs that include ZeroMQ itself.
312
312
313 IPython.zmq depends on pyzmq >= 2.1.4.
313 IPython.zmq depends on pyzmq >= 2.1.4.
314
314
315 Dependencies for the IPython QT console
315 Dependencies for the IPython QT console
316 =======================================
316 =======================================
317
317
318 pyzmq
318 pyzmq
319 -----
319 -----
320
320
321 Like the :mod:`IPython.parallel` package, the QT Console requires ZeroMQ and
321 Like the :mod:`IPython.parallel` package, the QT Console requires ZeroMQ and
322 PyZMQ.
322 PyZMQ.
323
323
324 Qt
324 Qt
325 --
325 --
326
326
327 Also with 0.11, a new GUI was added using the work in :mod:`IPython.zmq`, which
327 Also with 0.11, a new GUI was added using the work in :mod:`IPython.zmq`, which
328 can be launched with ``ipython qtconsole``. The GUI is built on Qt, and works
328 can be launched with ``ipython qtconsole``. The GUI is built on Qt, and works
329 with either PyQt, which can be installed from the `PyQt website
329 with either PyQt, which can be installed from the `PyQt website
330 <http://www.riverbankcomputing.co.uk/>`_, or `PySide
330 <http://www.riverbankcomputing.co.uk/>`_, or `PySide
331 <http://www.pyside.org/>`_, from Nokia.
331 <http://www.pyside.org/>`_, from Nokia.
332
332
333 pygments
333 pygments
334 --------
334 --------
335
335
336 The syntax-highlighting in ``ipython qtconsole`` is done with the pygments_
336 The syntax-highlighting in ``ipython qtconsole`` is done with the pygments_
337 project, which is easy_install-able.
337 project, which is easy_install-able.
338
338
339 .. _installnotebook:
339 .. _installnotebook:
340
340
341 Dependencies for the IPython HTML notebook
341 Dependencies for the IPython HTML notebook
342 ==========================================
342 ==========================================
343
343
344 The IPython notebook is a notebook-style web interface to IPython and can be
344 The IPython notebook is a notebook-style web interface to IPython and can be
345 started withe command ``ipython notebook``.
345 started withe command ``ipython notebook``.
346
346
347 pyzmq
347 pyzmq
348 -----
348 -----
349
349
350 Like the :mod:`IPython.parallel` and :mod:`IPython.frontend.qt.console` packages,
350 Like the :mod:`IPython.parallel` and :mod:`IPython.frontend.qt.console` packages,
351 the HTML notebook requires ZeroMQ and PyZMQ.
351 the HTML notebook requires ZeroMQ and PyZMQ.
352
352
353 Tornado
353 Tornado
354 -------
354 -------
355
355
356 The IPython notebook uses the Tornado_ project for its HTTP server. Tornado 2.1
356 The IPython notebook uses the Tornado_ project for its HTTP server. Tornado 2.1
357 is required, in order to support current versions of browsers, due to an update
357 is required, in order to support current versions of browsers, due to an update
358 to the websocket protocol.
358 to the websocket protocol.
359
359
360
360
361 MathJax
361 MathJax
362 -------
362 -------
363
363
364 The IPython notebook uses the MathJax_ Javascript library for rendering LaTeX
364 The IPython notebook uses the MathJax_ Javascript library for rendering LaTeX
365 in web browsers. Because MathJax is large, we don't include it with
365 in web browsers. Because MathJax is large, we don't include it with
366 IPython. Normally IPython will load MathJax from a CDN, but if you have a slow
366 IPython. Normally IPython will load MathJax from a CDN, but if you have a slow
367 network connection, or want to use LaTeX without an internet connection at all,
367 network connection, or want to use LaTeX without an internet connection at all,
368 we do include a utility to aid in downloading MathJax and installing it into
368 we do include a utility to aid in downloading MathJax and installing it into
369 the proper location::
369 the proper location::
370
370
371 from IPython.external.mathjax import install_mathjax
371 from IPython.external.mathjax import install_mathjax
372 install_mathjax()
372 install_mathjax()
373
373
374 This function does require write access to the IPython install directory, so if you
374 This function does require write access to the IPython install directory, so if you
375 have a system-wide Python install, it may need to be done from a ``sudo python`` session.
375 have a system-wide Python install, it may need to be done from a ``sudo python`` session.
376
376
377 Browser Compatibility
377 Browser Compatibility
378 ---------------------
378 ---------------------
379
379
380 The notebook uses WebSockets and the flexible box model. These features are
380 The notebook uses WebSockets and the flexible box model. These features are
381 available in the following browsers:
381 available in the following browsers:
382
382
383 * Chrome.
383 * Chrome.
384 * Safari.
384 * Safari.
385 * Firefox 4 and 5. These browsers have WebSocket support, but it is disabled by
385 * Firefox 4 and 5. These browsers have WebSocket support, but it is disabled by
386 default. You can enable it by entering ``about:config`` in the URL bar and then
386 default. You can enable it by entering ``about:config`` in the URL bar and then
387 setting ``network.websocket.enabled`` and ``network.websocket.override-security-block``
387 setting ``network.websocket.enabled`` and ``network.websocket.override-security-block``
388 to ``true``.
388 to ``true``.
389 * Firefox 6. Starting with version 6, Firefox has WebSocket support enabled by default.
389 * Firefox 6. Starting with version 6, Firefox has WebSocket support enabled by default.
390
390
391 Internet Explorer 9 does not support WebSockets or the flexible box model, but
391 Internet Explorer 9 does not support WebSockets or the flexible box model, but
392 these features should appear in Internet Explorer 10.
392 these features should appear in Internet Explorer 10.
393
393
394
394
395 .. _ZeroMQ: http://www.zeromq.org
395 .. _ZeroMQ: http://www.zeromq.org
396 .. _PyZMQ: https://github.com/zeromq/pyzmq
396 .. _PyZMQ: https://github.com/zeromq/pyzmq
397 .. _paramiko: https://github.com/robey/paramiko
397 .. _paramiko: https://github.com/robey/paramiko
398 .. _pygments: http://pygments.org
398 .. _pygments: http://pygments.org
399 .. _pexpect: http://www.noah.org/wiki/Pexpect
399 .. _pexpect: http://www.noah.org/wiki/Pexpect
400 .. _Tornado: http://www.tornadoweb.org
400 .. _Tornado: http://www.tornadoweb.org
401 .. _MathJax: http://www.mathjax.org
401 .. _MathJax: http://www.mathjax.org
@@ -1,217 +1,218 b''
1 .. _htmlnotebook:
1 .. _htmlnotebook:
2
2
3 =========================
3 =========================
4 An HTML Notebook IPython
4 An HTML Notebook IPython
5 =========================
5 =========================
6
6
7 .. seealso::
7 .. seealso::
8
8
9 :ref:`Installation requirements <installnotebook>` for the Notebook.
9 :ref:`Installation requirements <installnotebook>` for the Notebook.
10
10
11 The IPython Notebook consists of two related components:
11 The IPython Notebook consists of two related components:
12
12
13 * An JSON based Notebook document format for recording and distributing
13 * An JSON based Notebook document format for recording and distributing
14 Python code and rich text.
14 Python code and rich text.
15 * A web-based user interface for authoring and running notebook documents.
15 * A web-based user interface for authoring and running notebook documents.
16
16
17 The Notebook can be used by starting the Notebook server with the
17 The Notebook can be used by starting the Notebook server with the
18 command::
18 command::
19
19
20 $ ipython notebook
20 $ ipython notebook
21
21
22 Note that by default, the notebook doesn't load pylab, it's just a normal
22 Note that by default, the notebook doesn't load pylab, it's just a normal
23 IPython session like any other. If you want pylab support, you must use::
23 IPython session like any other. If you want pylab support, you must use::
24
24
25 $ ipython notebook --pylab
25 $ ipython notebook --pylab
26
26
27 which will behave similar to the terminal and Qt console versions, using your
27 which will behave similar to the terminal and Qt console versions, using your
28 default matplotlib backend and providing floating interactive plot windows. If
28 default matplotlib backend and providing floating interactive plot windows. If
29 you want inline figures, you must manually select the ``inline`` backend::
29 you want inline figures, you must manually select the ``inline`` backend::
30
30
31 $ ipython notebook --pylab=inline
31 $ ipython notebook --pylab=inline
32
32
33 You can start the notebook to communicate via a secure protocol mode using a
33 You can start the notebook to communicate via a secure protocol mode using a
34 self-signed certificate by typing::
34 self-signed certificate by typing::
35
35
36 $ ipython notebook --certfile=mycert.pem
36 $ ipython notebook --certfile=mycert.pem
37
37
38 .. note::
38 .. note::
39
39
40 A self-signed certificate can be generated with openssl. For example:
40 A self-signed certificate can be generated with openssl. For example:
41
41
42 openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
42 openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
43
43
44 This server uses the same ZeroMQ-based two process kernel architecture as
44 This server uses the same ZeroMQ-based two process kernel architecture as
45 the QT Console as well Tornado for serving HTTP/S requests. Some of the main
45 the QT Console as well Tornado for serving HTTP/S requests. Some of the main
46 features of the Notebook include:
46 features of the Notebook include:
47
47
48 * Display rich data (png/html/latex/svg) in the browser as a result of
48 * Display rich data (png/html/latex/svg) in the browser as a result of
49 computations.
49 computations.
50 * Compose text cells using HTML and Markdown.
50 * Compose text cells using HTML and Markdown.
51 * Import and export notebook documents in range of formats (.ipynb, .py).
51 * Import and export notebook documents in range of formats (.ipynb, .py).
52 * In browser syntax highlighting, tab completion and autoindentation.
52 * In browser syntax highlighting, tab completion and autoindentation.
53 * Inline matplotlib plots that can be stored in Notebook documents and opened
53 * Inline matplotlib plots that can be stored in Notebook documents and opened
54 later.
54 later.
55
55
56 See :ref:`our installation documentation <install_index>` for directions on
56 See :ref:`our installation documentation <install_index>` for directions on
57 how to install the notebook and its dependencies.
57 how to install the notebook and its dependencies.
58
58
59 .. note::
59 .. note::
60
60
61 You can start more than one notebook server at the same time, if you want to
61 You can start more than one notebook server at the same time, if you want to
62 work on notebooks in different directories. By default the first notebook
62 work on notebooks in different directories. By default the first notebook
63 server starts in port 8888, later notebooks search for random ports near
63 server starts in port 8888, later notebooks search for random ports near
64 that one. You can also manually specify the port with the ``--port``
64 that one. You can also manually specify the port with the ``--port``
65 option.
65 option.
66
66
67
67
68 Basic Usage
68 Basic Usage
69 ===========
69 ===========
70
70
71 The landing page of the notebook server application, which we call the IPython
71 The landing page of the notebook server application, which we call the IPython
72 Notebook *dashboard*, shows the notebooks currently available in the directory
72 Notebook *dashboard*, shows the notebooks currently available in the directory
73 in which the application was started, and allows you to create new notebooks.
73 in which the application was started, and allows you to create new notebooks.
74
74
75 A notebook is a combination of two things:
75 A notebook is a combination of two things:
76
76
77 1. An interactive session connected to an IPython kernel, controlled by a web
77 1. An interactive session connected to an IPython kernel, controlled by a web
78 application that can send input to the console and display many types of output
78 application that can send input to the console and display many types of output
79 (text, graphics, mathematics and more). This is the same kernel used by the
79 (text, graphics, mathematics and more). This is the same kernel used by the
80 :ref:`Qt console <qtconsole>`, but in this case the web console sends input in
80 :ref:`Qt console <qtconsole>`, but in this case the web console sends input in
81 persistent cells that you can edit in-place instead of the vertically scrolling
81 persistent cells that you can edit in-place instead of the vertically scrolling
82 terminal style used by the Qt console.
82 terminal style used by the Qt console.
83
83
84 2. A document that can save the inputs and outputs of the session as well as
84 2. A document that can save the inputs and outputs of the session as well as
85 additional text that accompanies the code but is not meant for execution. In
85 additional text that accompanies the code but is not meant for execution. In
86 this way, notebook files serve as a complete computational record of a session
86 this way, notebook files serve as a complete computational record of a session
87 including explanatory text and mathematics, code and resulting figures. These
87 including explanatory text and mathematics, code and resulting figures. These
88 documents are internally JSON files and are saved with the ``.ipynb``
88 documents are internally JSON files and are saved with the ``.ipynb``
89 extension.
89 extension.
90
90
91 If you have ever used the Mathematica or Sage notebooks (the latter is also
91 If you have ever used the Mathematica or Sage notebooks (the latter is also
92 web-based__) you should feel right at home. If you have not, you should be
92 web-based__) you should feel right at home. If you have not, you should be
93 able to learn how to use it in just a few minutes.
93 able to learn how to use it in just a few minutes.
94
94
95 .. __: http://sagenb.org
95 .. __: http://sagenb.org
96
96
97
97
98 Creating and editing notebooks
98 Creating and editing notebooks
99 ------------------------------
99 ------------------------------
100
100
101 You can create new notebooks from the dashboard with the ``New Notebook``
101 You can create new notebooks from the dashboard with the ``New Notebook``
102 button or open existing ones by clicking on their name. Once in a notebook,
102 button or open existing ones by clicking on their name. Once in a notebook,
103 your browser tab will reflect the name of that notebook (prefixed with "IPy:").
103 your browser tab will reflect the name of that notebook (prefixed with "IPy:").
104 The URL for that notebook is not meant to be human-readable and is *not*
104 The URL for that notebook is not meant to be human-readable and is *not*
105 persistent across invocations of the notebook server.
105 persistent across invocations of the notebook server.
106
106
107 You can also drag and drop into the area listing files any python file: it
107 You can also drag and drop into the area listing files any python file: it
108 will be imported into a notebook with the same name (but ``.ipynb`` extension)
108 will be imported into a notebook with the same name (but ``.ipynb`` extension)
109 located in the directory where the notebook server was started. This notebook
109 located in the directory where the notebook server was started. This notebook
110 will consist of a single cell with all the code in the file, which you can
110 will consist of a single cell with all the code in the file, which you can
111 later manually partition into individual cells for gradual execution, add text
111 later manually partition into individual cells for gradual execution, add text
112 and graphics, etc.
112 and graphics, etc.
113
113
114 Workflow and limitations
114 Workflow and limitations
115 ------------------------
115 ------------------------
116
116
117 The normal workflow in a notebook is quite similar to a normal IPython session,
117 The normal workflow in a notebook is quite similar to a normal IPython session,
118 with the difference that you can edit a cell in-place multiple times until you
118 with the difference that you can edit a cell in-place multiple times until you
119 obtain the desired results rather than having to rerun separate scripts with
119 obtain the desired results rather than having to rerun separate scripts with
120 the ``%run`` magic (though magics also work in the notebook). Typically
120 the ``%run`` magic (though magics also work in the notebook). Typically
121 you'll work on a problem in pieces, organizing related pieces into cells and
121 you'll work on a problem in pieces, organizing related pieces into cells and
122 moving forward as previous parts work correctly. This is much more convenient
122 moving forward as previous parts work correctly. This is much more convenient
123 for interactive exploration than breaking up a computation into scripts that
123 for interactive exploration than breaking up a computation into scripts that
124 must be executed together, especially if parts of them take a long time to run
124 must be executed together, especially if parts of them take a long time to run
125 (you can use tricks with namespaces and ``%run -i``, but we think the notebook
125 (In the traditional terminal-based IPython, you can use tricks with namespaces
126 is a more natural solution for that kind of problem).
126 and ``%run -i`` to achieve this capability, but we think the notebook is a more
127 natural solution for that kind of problem).
127
128
128 The only significant limitation the notebook currently has, compared to the qt
129 The only significant limitation the notebook currently has, compared to the qt
129 console, is that it can not run any code that expects input from the kernel
130 console, is that it can not run any code that expects input from the kernel
130 (such as scripts that call :func:`raw_input`). Very importantly, this means
131 (such as scripts that call :func:`raw_input`). Very importantly, this means
131 that the ``%debug`` magic does *not* work in the notebook! We intend to
132 that the ``%debug`` magic does *not* work in the notebook! We intend to
132 correct this limitation, but in the meantime, there is a way to debug problems
133 correct this limitation, but in the meantime, there is a way to debug problems
133 in the notebook: you can attach a Qt console to your existing notebook kernel,
134 in the notebook: you can attach a Qt console to your existing notebook kernel,
134 and run ``%debug`` from the Qt console. Simply look for the lines in the
135 and run ``%debug`` from the Qt console. Simply look for the lines in the
135 terminal where you started the kernel that read something like::
136 terminal where you started the kernel that read something like::
136
137
137 [IPKernelApp] To connect another client to this kernel, use:
138 [IPKernelApp] To connect another client to this kernel, use:
138 [IPKernelApp] --existing --shell=53328 --iopub=53817 --stdin=34736 --hb=45543
139 [IPKernelApp] --existing --shell=53328 --iopub=53817 --stdin=34736 --hb=45543
139
140
140 and then start a qt console pointing to that kernel::
141 and then start a qt console pointing to that kernel::
141
142
142 ipython qtconsole --existing --shell=53328 --iopub=53817 --stdin=34736 --hb=45543
143 ipython qtconsole --existing --shell=53328 --iopub=53817 --stdin=34736 --hb=45543
143
144
144
145
145 Text input
146 Text input
146 ----------
147 ----------
147
148
148 In addition to code cells and the output they procude (such as figures), you
149 In addition to code cells and the output they produce (such as figures), you
149 can also type text not meant for execution. To type text, change the type of a
150 can also type text not meant for execution. To type text, change the type of a
150 cell from ``Code`` to ``Markdown`` by using the button or the :kbd:`Ctrl-m m`
151 cell from ``Code`` to ``Markdown`` by using the button or the :kbd:`Ctrl-m m`
151 keybinding (see below). You can then type any text in Markdown_ syntax, as
152 keybinding (see below). You can then type any text in Markdown_ syntax, as
152 well as mathematical expressions if you use ``$...$`` for inline math or
153 well as mathematical expressions if you use ``$...$`` for inline math or
153 ``$$...$$`` for displayed math.
154 ``$$...$$`` for displayed math.
154
155
155 Exporting a notebook
156 Exporting a notebook
156 --------------------
157 --------------------
157
158
158 If you want to provide others with a static HTML or PDF view of your notebook,
159 If you want to provide others with a static HTML or PDF view of your notebook,
159 use the ``Print`` button. This opens a static view of the document, which you
160 use the ``Print`` button. This opens a static view of the document, which you
160 can print to PDF using your operating system's facilities, or save to a file
161 can print to PDF using your operating system's facilities, or save to a file
161 with your web browser's 'Save' option (note that typically, this will create
162 with your web browser's 'Save' option (note that typically, this will create
162 both an html file *and* a directory called `notebook_name_files` next to it
163 both an html file *and* a directory called `notebook_name_files` next to it
163 that contains all the necessary style information, so if you intend to share
164 that contains all the necessary style information, so if you intend to share
164 this, you must send the directory along with the main html file).
165 this, you must send the directory along with the main html file).
165
166
166 The `Download` button lets you save a notebook file to the Download area
167 The `Download` button lets you save a notebook file to the Download area
167 configured by your web browser (particularly useful if you are running the
168 configured by your web browser (particularly useful if you are running the
168 notebook server on a remote host and need a file locally). The notebook is
169 notebook server on a remote host and need a file locally). The notebook is
169 saved by default with the ``.ipynb`` extension and the files contain JSON data
170 saved by default with the ``.ipynb`` extension and the files contain JSON data
170 that is not meant for human editing or consumption. But you can always export
171 that is not meant for human editing or consumption. But you can always export
171 the input part of a notebook to a plain python script by choosing Python format
172 the input part of a notebook to a plain python script by choosing Python format
172 in the `Download` drop list. This removes all output and saves the text cells
173 in the `Download` drop list. This removes all output and saves the text cells
173 in comment areas.
174 in comment areas.
174
175
175 .. warning::
176 .. warning::
176
177
177 While in simple cases you can roundtrip a notebook to Python, edit the
178 While in simple cases you can roundtrip a notebook to Python, edit the
178 python file and import it back without loss, this is in general *not
179 python file and import it back without loss, this is in general *not
179 guaranteed to work at all*. As the notebook format evolves in complexity,
180 guaranteed to work at all*. As the notebook format evolves in complexity,
180 there will be attributes of the notebook that will not survive a roundtrip
181 there will be attributes of the notebook that will not survive a roundtrip
181 through the Python form. You should think of the Python format as a way to
182 through the Python form. You should think of the Python format as a way to
182 output a script version of a notebook and the import capabilities as a way
183 output a script version of a notebook and the import capabilities as a way
183 to load existing code to get a notebook started. But the Python version is
184 to load existing code to get a notebook started. But the Python version is
184 *not* an alternate notebook format.
185 *not* an alternate notebook format.
185
186
186
187
187 Keyboard use
188 Keyboard use
188 ------------
189 ------------
189
190
190 All actions in the notebook can be achieved with the mouse, but we have also
191 All actions in the notebook can be achieved with the mouse, but we have also
191 added keyboard shortcuts for the most common ones, so that productive use of
192 added keyboard shortcuts for the most common ones, so that productive use of
192 the notebook can be achieved with minimal mouse intervention. The main
193 the notebook can be achieved with minimal mouse intervention. The main
193 key bindings you need to remember are:
194 key bindings you need to remember are:
194
195
195 * :kbd:`Shift-Enter`: execute the current cell (similar to the Qt console),
196 * :kbd:`Shift-Enter`: execute the current cell (similar to the Qt console),
196 show output (if any) and create a new cell below. Note that in the notebook,
197 show output (if any) and create a new cell below. Note that in the notebook,
197 simply using :kbd:`Enter` *never* forces execution, it simply inserts a new
198 simply using :kbd:`Enter` *never* forces execution, it simply inserts a new
198 line in the current cell. Therefore, in the notebook you must always use
199 line in the current cell. Therefore, in the notebook you must always use
199 :kbd:`Shift-Enter` to get execution (or use the mouse and click on the ``Run
200 :kbd:`Shift-Enter` to get execution (or use the mouse and click on the ``Run
200 Selected`` button).
201 Selected`` button).
201
202
202 * :kbd:`Ctrl-Enter`: execute the current cell in "terminal mode", where any
203 * :kbd:`Ctrl-Enter`: execute the current cell in "terminal mode", where any
203 output is shown but the cursor cursor stays in the current cell, whose input
204 output is shown but the cursor stays in the current cell, whose input
204 area is flushed empty. This is convenient to do quick in-place experiments
205 area is flushed empty. This is convenient to do quick in-place experiments
205 or query things like filesystem content without creating additional cells you
206 or query things like filesystem content without creating additional cells you
206 may not want saved in your notebook.
207 may not want saved in your notebook.
207
208
208 * :kbd:`Ctrl-m`: this is the prefix for all other keybindings, which consist
209 * :kbd:`Ctrl-m`: this is the prefix for all other keybindings, which consist
209 of an additional single letter. Type :kbd:`Ctrl-m h` (that is, the sole
210 of an additional single letter. Type :kbd:`Ctrl-m h` (that is, the sole
210 letter :kbd:`h` after :kbd:`Ctrl-m`) and IPython will show you the remaining
211 letter :kbd:`h` after :kbd:`Ctrl-m`) and IPython will show you the remaining
211 available keybindings.
212 available keybindings.
212
213
213
214
214 Notebook document format
215 Notebook document format
215 ========================
216 ========================
216
217
217
218
@@ -1,100 +1,100 b''
1 .. _tips:
1 .. _tips:
2
2
3 =====================
3 =====================
4 IPython Tips & Tricks
4 IPython Tips & Tricks
5 =====================
5 =====================
6
6
7 The `IPython cookbook <http://ipython.scipy.org/moin/Cookbook>`_ details more
7 The `IPython cookbook <http://wiki.ipython.org/index.php?title=Cookbook>`_ details more
8 things you can do with IPython.
8 things you can do with IPython.
9
9
10 .. This is not in the current version:
10 .. This is not in the current version:
11
11
12
12
13 Embed IPython in your programs
13 Embed IPython in your programs
14 ------------------------------
14 ------------------------------
15
15
16 A few lines of code are enough to load a complete IPython inside your own
16 A few lines of code are enough to load a complete IPython inside your own
17 programs, giving you the ability to work with your data interactively after
17 programs, giving you the ability to work with your data interactively after
18 automatic processing has been completed. See :ref:`the embedding section <embedding>`.
18 automatic processing has been completed. See :ref:`the embedding section <embedding>`.
19
19
20 Run doctests
20 Run doctests
21 ------------
21 ------------
22
22
23 Run your doctests from within IPython for development and debugging. The
23 Run your doctests from within IPython for development and debugging. The
24 special %doctest_mode command toggles a mode where the prompt, output and
24 special %doctest_mode command toggles a mode where the prompt, output and
25 exceptions display matches as closely as possible that of the default Python
25 exceptions display matches as closely as possible that of the default Python
26 interpreter. In addition, this mode allows you to directly paste in code that
26 interpreter. In addition, this mode allows you to directly paste in code that
27 contains leading '>>>' prompts, even if they have extra leading whitespace
27 contains leading '>>>' prompts, even if they have extra leading whitespace
28 (as is common in doctest files). This combined with the ``%history -t`` call
28 (as is common in doctest files). This combined with the ``%history -t`` call
29 to see your translated history allows for an easy doctest workflow, where you
29 to see your translated history allows for an easy doctest workflow, where you
30 can go from doctest to interactive execution to pasting into valid Python code
30 can go from doctest to interactive execution to pasting into valid Python code
31 as needed.
31 as needed.
32
32
33 Use IPython to present interactive demos
33 Use IPython to present interactive demos
34 ----------------------------------------
34 ----------------------------------------
35
35
36 Use the :class:`IPython.lib.demo.Demo` class to load any Python script as an interactive
36 Use the :class:`IPython.lib.demo.Demo` class to load any Python script as an interactive
37 demo. With a minimal amount of simple markup, you can control the execution of
37 demo. With a minimal amount of simple markup, you can control the execution of
38 the script, stopping as needed. See :ref:`here <interactive_demos>` for more.
38 the script, stopping as needed. See :ref:`here <interactive_demos>` for more.
39
39
40 Suppress output
40 Suppress output
41 ---------------
41 ---------------
42
42
43 Put a ';' at the end of a line to suppress the printing of output. This is
43 Put a ';' at the end of a line to suppress the printing of output. This is
44 useful when doing calculations which generate long output you are not
44 useful when doing calculations which generate long output you are not
45 interested in seeing.
45 interested in seeing.
46
46
47 Lightweight 'version control'
47 Lightweight 'version control'
48 -----------------------------
48 -----------------------------
49
49
50 When you call ``%edit`` with no arguments, IPython opens an empty editor
50 When you call ``%edit`` with no arguments, IPython opens an empty editor
51 with a temporary file, and it returns the contents of your editing
51 with a temporary file, and it returns the contents of your editing
52 session as a string variable. Thanks to IPython's output caching
52 session as a string variable. Thanks to IPython's output caching
53 mechanism, this is automatically stored::
53 mechanism, this is automatically stored::
54
54
55 In [1]: %edit
55 In [1]: %edit
56
56
57 IPython will make a temporary file named: /tmp/ipython_edit_yR-HCN.py
57 IPython will make a temporary file named: /tmp/ipython_edit_yR-HCN.py
58
58
59 Editing... done. Executing edited code...
59 Editing... done. Executing edited code...
60
60
61 hello - this is a temporary file
61 hello - this is a temporary file
62
62
63 Out[1]: "print 'hello - this is a temporary file'\n"
63 Out[1]: "print 'hello - this is a temporary file'\n"
64
64
65 Now, if you call ``%edit -p``, IPython tries to open an editor with the
65 Now, if you call ``%edit -p``, IPython tries to open an editor with the
66 same data as the last time you used %edit. So if you haven't used %edit
66 same data as the last time you used %edit. So if you haven't used %edit
67 in the meantime, this same contents will reopen; however, it will be
67 in the meantime, this same contents will reopen; however, it will be
68 done in a new file. This means that if you make changes and you later
68 done in a new file. This means that if you make changes and you later
69 want to find an old version, you can always retrieve it by using its
69 want to find an old version, you can always retrieve it by using its
70 output number, via '%edit _NN', where NN is the number of the output
70 output number, via '%edit _NN', where NN is the number of the output
71 prompt.
71 prompt.
72
72
73 Continuing with the example above, this should illustrate this idea::
73 Continuing with the example above, this should illustrate this idea::
74
74
75 In [2]: edit -p
75 In [2]: edit -p
76
76
77 IPython will make a temporary file named: /tmp/ipython_edit_nA09Qk.py
77 IPython will make a temporary file named: /tmp/ipython_edit_nA09Qk.py
78
78
79 Editing... done. Executing edited code...
79 Editing... done. Executing edited code...
80
80
81 hello - now I made some changes
81 hello - now I made some changes
82
82
83 Out[2]: "print 'hello - now I made some changes'\n"
83 Out[2]: "print 'hello - now I made some changes'\n"
84
84
85 In [3]: edit _1
85 In [3]: edit _1
86
86
87 IPython will make a temporary file named: /tmp/ipython_edit_gy6-zD.py
87 IPython will make a temporary file named: /tmp/ipython_edit_gy6-zD.py
88
88
89 Editing... done. Executing edited code...
89 Editing... done. Executing edited code...
90
90
91 hello - this is a temporary file
91 hello - this is a temporary file
92
92
93 IPython version control at work :)
93 IPython version control at work :)
94
94
95 Out[3]: "print 'hello - this is a temporary file'\nprint 'IPython version control at work :)'\n"
95 Out[3]: "print 'hello - this is a temporary file'\nprint 'IPython version control at work :)'\n"
96
96
97
97
98 This section was written after a contribution by Alexander Belchenko on
98 This section was written after a contribution by Alexander Belchenko on
99 the IPython user list.
99 the IPython user list.
100
100
@@ -1,145 +1,145 b''
1 .. _tutorial:
1 .. _tutorial:
2
2
3 ======================
3 ======================
4 Introducing IPython
4 Introducing IPython
5 ======================
5 ======================
6
6
7 You don't need to know anything beyond Python to start using IPython – just type
7 You don't need to know anything beyond Python to start using IPython – just type
8 commands as you would at the standard Python prompt. But IPython can do much
8 commands as you would at the standard Python prompt. But IPython can do much
9 more than the standard prompt. Some key features are described here. For more
9 more than the standard prompt. Some key features are described here. For more
10 information, check the :ref:`tips page <tips>`, or look at examples in the
10 information, check the :ref:`tips page <tips>`, or look at examples in the
11 `IPython cookbook <http://ipython.scipy.org/moin/Cookbook>`_.
11 `IPython cookbook <http://wiki.ipython.org/index.php?title=Cookbook>`_.
12
12
13 If you've never used Python before, you might want to look at `the official
13 If you've never used Python before, you might want to look at `the official
14 tutorial <http://docs.python.org/tutorial/>`_ or an alternative, `Dive into
14 tutorial <http://docs.python.org/tutorial/>`_ or an alternative, `Dive into
15 Python <http://diveintopython.org/toc/index.html>`_.
15 Python <http://diveintopython.org/toc/index.html>`_.
16
16
17 Tab completion
17 Tab completion
18 ==============
18 ==============
19
19
20 Tab completion, especially for attributes, is a convenient way to explore the
20 Tab completion, especially for attributes, is a convenient way to explore the
21 structure of any object you're dealing with. Simply type ``object_name.<TAB>``
21 structure of any object you're dealing with. Simply type ``object_name.<TAB>``
22 to view the object's attributes (see :ref:`the readline section <readline>` for
22 to view the object's attributes (see :ref:`the readline section <readline>` for
23 more). Besides Python objects and keywords, tab completion also works on file
23 more). Besides Python objects and keywords, tab completion also works on file
24 and directory names.
24 and directory names.
25
25
26 Exploring your objects
26 Exploring your objects
27 ======================
27 ======================
28
28
29 Typing ``object_name?`` will print all sorts of details about any object,
29 Typing ``object_name?`` will print all sorts of details about any object,
30 including docstrings, function definition lines (for call arguments) and
30 including docstrings, function definition lines (for call arguments) and
31 constructor details for classes. To get specific information on an object, you
31 constructor details for classes. To get specific information on an object, you
32 can use the magic commands ``%pdoc``, ``%pdef``, ``%psource`` and ``%pfile``
32 can use the magic commands ``%pdoc``, ``%pdef``, ``%psource`` and ``%pfile``
33
33
34 Magic functions
34 Magic functions
35 ===============
35 ===============
36
36
37 IPython has a set of predefined 'magic functions' that you can call with a
37 IPython has a set of predefined 'magic functions' that you can call with a
38 command line style syntax. These include:
38 command line style syntax. These include:
39
39
40 - Functions that work with code: ``%run``, ``%edit``, ``%save``, ``%macro``,
40 - Functions that work with code: ``%run``, ``%edit``, ``%save``, ``%macro``,
41 ``%recall``, etc.
41 ``%recall``, etc.
42 - Functions which affect the shell: ``%colors``, ``%xmode``, ``%autoindent``, etc.
42 - Functions which affect the shell: ``%colors``, ``%xmode``, ``%autoindent``, etc.
43 - Other functions such as ``%reset``, ``%timeit`` or ``%paste``.
43 - Other functions such as ``%reset``, ``%timeit`` or ``%paste``.
44
44
45 You can always call these using the % prefix, and if you're typing one on a line
45 You can always call these using the % prefix, and if you're typing one on a line
46 by itself, you can omit even that::
46 by itself, you can omit even that::
47
47
48 run thescript.py
48 run thescript.py
49
49
50 For more details on any magic function, call ``%somemagic?`` to read its
50 For more details on any magic function, call ``%somemagic?`` to read its
51 docstring. To see all the available magic functions, call ``%lsmagic``.
51 docstring. To see all the available magic functions, call ``%lsmagic``.
52
52
53 Running and Editing
53 Running and Editing
54 -------------------
54 -------------------
55
55
56 The %run magic command allows you to run any python script and load all of its
56 The %run magic command allows you to run any python script and load all of its
57 data directly into the interactive namespace. Since the file is re-read from
57 data directly into the interactive namespace. Since the file is re-read from
58 disk each time, changes you make to it are reflected immediately (unlike
58 disk each time, changes you make to it are reflected immediately (unlike
59 imported modules, which have to be specifically reloaded). IPython also includes
59 imported modules, which have to be specifically reloaded). IPython also includes
60 :ref:`dreload <dreload>`, a recursive reload function.
60 :ref:`dreload <dreload>`, a recursive reload function.
61
61
62 %run has special flags for timing the execution of your scripts (-t), or for
62 %run has special flags for timing the execution of your scripts (-t), or for
63 running them under the control of either Python's pdb debugger (-d) or
63 running them under the control of either Python's pdb debugger (-d) or
64 profiler (-p).
64 profiler (-p).
65
65
66 The %edit command gives a reasonable approximation of multiline editing,
66 The %edit command gives a reasonable approximation of multiline editing,
67 by invoking your favorite editor on the spot. IPython will execute the
67 by invoking your favorite editor on the spot. IPython will execute the
68 code you type in there as if it were typed interactively.
68 code you type in there as if it were typed interactively.
69
69
70 Debugging
70 Debugging
71 ---------
71 ---------
72
72
73 After an exception occurs, you can call ``%debug`` to jump into the Python
73 After an exception occurs, you can call ``%debug`` to jump into the Python
74 debugger (pdb) and examine the problem. Alternatively, if you call ``%pdb``,
74 debugger (pdb) and examine the problem. Alternatively, if you call ``%pdb``,
75 IPython will automatically start the debugger on any uncaught exception. You can
75 IPython will automatically start the debugger on any uncaught exception. You can
76 print variables, see code, execute statements and even walk up and down the
76 print variables, see code, execute statements and even walk up and down the
77 call stack to track down the true source of the problem. Running programs with
77 call stack to track down the true source of the problem. Running programs with
78 %run and pdb active can be an efficient way to develop and debug code, in many
78 %run and pdb active can be an efficient way to develop and debug code, in many
79 cases eliminating the need for print statements or external debugging tools.
79 cases eliminating the need for print statements or external debugging tools.
80
80
81 You can also step through a program from the beginning by calling
81 You can also step through a program from the beginning by calling
82 ``%run -d theprogram.py``.
82 ``%run -d theprogram.py``.
83
83
84 History
84 History
85 =======
85 =======
86
86
87 IPython stores both the commands you enter, and the results it produces. You
87 IPython stores both the commands you enter, and the results it produces. You
88 can easily go through previous commands with the up- and down-arrow keys, or
88 can easily go through previous commands with the up- and down-arrow keys, or
89 access your history in more sophisticated ways.
89 access your history in more sophisticated ways.
90
90
91 Input and output history are kept in variables called ``In`` and ``Out``, which
91 Input and output history are kept in variables called ``In`` and ``Out``, which
92 can both be indexed by the prompt number on which they occurred, e.g. ``In[4]``.
92 can both be indexed by the prompt number on which they occurred, e.g. ``In[4]``.
93 The last three objects in output history are also kept in variables named ``_``,
93 The last three objects in output history are also kept in variables named ``_``,
94 ``__`` and ``___``.
94 ``__`` and ``___``.
95
95
96 You can use the ``%history`` magic function to examine past input and output.
96 You can use the ``%history`` magic function to examine past input and output.
97 Input history from previous sessions is saved in a database, and IPython can be
97 Input history from previous sessions is saved in a database, and IPython can be
98 configured to save output history.
98 configured to save output history.
99
99
100 Several other magic functions can use your input history, including ``%edit``,
100 Several other magic functions can use your input history, including ``%edit``,
101 ``%rerun``, ``%recall``, ``%macro``, ``%save`` and ``%pastebin``. You can use a
101 ``%rerun``, ``%recall``, ``%macro``, ``%save`` and ``%pastebin``. You can use a
102 standard format to refer to lines::
102 standard format to refer to lines::
103
103
104 %pastebin 3 18-20 ~1/1-5
104 %pastebin 3 18-20 ~1/1-5
105
105
106 This will take line 3 and lines 18 to 20 from the current session, and lines
106 This will take line 3 and lines 18 to 20 from the current session, and lines
107 1-5 from the previous session.
107 1-5 from the previous session.
108
108
109 System shell commands
109 System shell commands
110 =====================
110 =====================
111
111
112 To run any command at the system shell, simply prefix it with !, e.g.::
112 To run any command at the system shell, simply prefix it with !, e.g.::
113
113
114 !ping www.bbc.co.uk
114 !ping www.bbc.co.uk
115
115
116 You can capture the output into a Python list, e.g.: ``files = !ls``. To pass
116 You can capture the output into a Python list, e.g.: ``files = !ls``. To pass
117 the values of Python variables or expressions to system commands, prefix them
117 the values of Python variables or expressions to system commands, prefix them
118 with $: ``!grep -rF $pattern ipython/*``. See :ref:`our shell section
118 with $: ``!grep -rF $pattern ipython/*``. See :ref:`our shell section
119 <system_shell_access>` for more details.
119 <system_shell_access>` for more details.
120
120
121 Define your own system aliases
121 Define your own system aliases
122 ------------------------------
122 ------------------------------
123
123
124 It's convenient to have aliases to the system commands you use most often.
124 It's convenient to have aliases to the system commands you use most often.
125 This allows you to work seamlessly from inside IPython with the same commands
125 This allows you to work seamlessly from inside IPython with the same commands
126 you are used to in your system shell. IPython comes with some pre-defined
126 you are used to in your system shell. IPython comes with some pre-defined
127 aliases and a complete system for changing directories, both via a stack (see
127 aliases and a complete system for changing directories, both via a stack (see
128 %pushd, %popd and %dhist) and via direct %cd. The latter keeps a history of
128 %pushd, %popd and %dhist) and via direct %cd. The latter keeps a history of
129 visited directories and allows you to go to any previously visited one.
129 visited directories and allows you to go to any previously visited one.
130
130
131
131
132 Configuration
132 Configuration
133 =============
133 =============
134
134
135 Much of IPython can be tweaked through configuration. To get started, use the
135 Much of IPython can be tweaked through configuration. To get started, use the
136 command ``ipython profile create`` to produce the default config files. These
136 command ``ipython profile create`` to produce the default config files. These
137 will be placed in :file:`~/.ipython/profile_default` or
137 will be placed in :file:`~/.ipython/profile_default` or
138 :file:`~/.config/ipython/profile_default`, and contain comments explaining what
138 :file:`~/.config/ipython/profile_default`, and contain comments explaining what
139 the various options do.
139 the various options do.
140
140
141 Profiles allow you to use IPython for different tasks, keeping separate config
141 Profiles allow you to use IPython for different tasks, keeping separate config
142 files and history for each one. More details in :ref:`the profiles section
142 files and history for each one. More details in :ref:`the profiles section
143 <profiles>`.
143 <profiles>`.
144
144
145
145
@@ -1,75 +1,75 b''
1 .. This (-*- rst -*-) format file contains commonly used link targets
1 .. This (-*- rst -*-) format file contains commonly used link targets
2 and name substitutions. It may be included in many files,
2 and name substitutions. It may be included in many files,
3 therefore it should only contain link targets and name
3 therefore it should only contain link targets and name
4 substitutions. Try grepping for "^\.\. _" to find plausible
4 substitutions. Try grepping for "^\.\. _" to find plausible
5 candidates for this list.
5 candidates for this list.
6
6
7 NOTE: this file must have an extension *opposite* to that of the main reST
7 NOTE: this file must have an extension *opposite* to that of the main reST
8 files in the manuals, so that we can include it with ".. include::"
8 files in the manuals, so that we can include it with ".. include::"
9 directives, but without triggering warnings from Sphinx for not being listed
9 directives, but without triggering warnings from Sphinx for not being listed
10 in any toctree. Since IPython uses .txt for the main files, this wone will
10 in any toctree. Since IPython uses .txt for the main files, this wone will
11 use .rst.
11 use .rst.
12
12
13 NOTE: reST targets are
13 NOTE: reST targets are
14 __not_case_sensitive__, so only one target definition is needed for
14 __not_case_sensitive__, so only one target definition is needed for
15 ipython, IPython, etc.
15 ipython, IPython, etc.
16
16
17 NOTE: Some of these were taken from the nipy links compendium.
17 NOTE: Some of these were taken from the nipy links compendium.
18
18
19 .. Main IPython links
19 .. Main IPython links
20 .. _ipython: http://ipython.org
20 .. _ipython: http://ipython.org
21 .. _`ipython manual`: http://ipython.org/documentation.html
21 .. _`ipython manual`: http://ipython.org/documentation.html
22 .. _ipython_github: http://github.com/ipython/ipython/
22 .. _ipython_github: http://github.com/ipython/ipython/
23 .. _ipython_github_repo: http://github.com/ipython/ipython/
23 .. _ipython_github_repo: http://github.com/ipython/ipython/
24 .. _ipython_downloads: http://ipython.scipy.org/dist
24 .. _ipython_downloads: http://ipython.org/download.html
25 .. _ipython_pypi: http://pypi.python.org/pypi/ipython
25 .. _ipython_pypi: http://pypi.python.org/pypi/ipython
26
26
27 .. _ZeroMQ: http://zeromq.org
27 .. _ZeroMQ: http://zeromq.org
28
28
29 .. Documentation tools and related links
29 .. Documentation tools and related links
30 .. _graphviz: http://www.graphviz.org
30 .. _graphviz: http://www.graphviz.org
31 .. _Sphinx: http://sphinx.pocoo.org
31 .. _Sphinx: http://sphinx.pocoo.org
32 .. _`Sphinx reST`: http://sphinx.pocoo.org/rest.html
32 .. _`Sphinx reST`: http://sphinx.pocoo.org/rest.html
33 .. _sampledoc: http://matplotlib.sourceforge.net/sampledoc
33 .. _sampledoc: http://matplotlib.sourceforge.net/sampledoc
34 .. _reST: http://docutils.sourceforge.net/rst.html
34 .. _reST: http://docutils.sourceforge.net/rst.html
35 .. _docutils: http://docutils.sourceforge.net
35 .. _docutils: http://docutils.sourceforge.net
36 .. _lyx: http://www.lyx.org
36 .. _lyx: http://www.lyx.org
37 .. _pep8: http://www.python.org/dev/peps/pep-0008
37 .. _pep8: http://www.python.org/dev/peps/pep-0008
38 .. _numpy_coding_guide: http://projects.scipy.org/numpy/wiki/CodingStyleGuidelines
38 .. _numpy_coding_guide: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt
39
39
40 .. Licenses
40 .. Licenses
41 .. _GPL: http://www.gnu.org/licenses/gpl.html
41 .. _GPL: http://www.gnu.org/licenses/gpl.html
42 .. _BSD: http://www.opensource.org/licenses/bsd-license.php
42 .. _BSD: http://www.opensource.org/licenses/bsd-license.php
43 .. _LGPL: http://www.gnu.org/copyleft/lesser.html
43 .. _LGPL: http://www.gnu.org/copyleft/lesser.html
44
44
45 .. Other python projects
45 .. Other python projects
46 .. _numpy: http://numpy.scipy.org
46 .. _numpy: http://numpy.scipy.org
47 .. _scipy: http://www.scipy.org
47 .. _scipy: http://www.scipy.org
48 .. _scipy_conference: http://conference.scipy.org
48 .. _scipy_conference: http://conference.scipy.org
49 .. _matplotlib: http://matplotlib.sourceforge.net
49 .. _matplotlib: http://matplotlib.sourceforge.net
50 .. _pythonxy: http://www.pythonxy.com
50 .. _pythonxy: http://www.pythonxy.com
51 .. _ETS: http://code.enthought.com/projects/tool-suite.php
51 .. _ETS: http://code.enthought.com/projects/tool-suite.php
52 .. _EPD: http://www.enthought.com/products/epd.php
52 .. _EPD: http://www.enthought.com/products/epd.php
53 .. _python: http://www.python.org
53 .. _python: http://www.python.org
54 .. _mayavi: http://code.enthought.com/projects/mayavi
54 .. _mayavi: http://code.enthought.com/projects/mayavi
55 .. _sympy: http://code.google.com/p/sympy
55 .. _sympy: http://code.google.com/p/sympy
56 .. _sage: http://sagemath.org
56 .. _sage: http://sagemath.org
57 .. _pydy: http://code.google.com/p/pydy
57 .. _pydy: http://code.google.com/p/pydy
58 .. _vpython: http://vpython.org
58 .. _vpython: http://vpython.org
59 .. _cython: http://cython.org
59 .. _cython: http://cython.org
60 .. _software carpentry: http://software-carpentry.org
60 .. _software carpentry: http://software-carpentry.org
61
61
62 .. Not so python scientific computing tools
62 .. Not so python scientific computing tools
63 .. _matlab: http://www.mathworks.com
63 .. _matlab: http://www.mathworks.com
64 .. _VTK: http://vtk.org
64 .. _VTK: http://vtk.org
65
65
66 .. Other organizations
66 .. Other organizations
67 .. _enthought: http://www.enthought.com
67 .. _enthought: http://www.enthought.com
68 .. _kitware: http://www.kitware.com
68 .. _kitware: http://www.kitware.com
69 .. _netlib: http://netlib.org
69 .. _netlib: http://netlib.org
70
70
71 .. Other tools and projects
71 .. Other tools and projects
72 .. _indefero: http://www.indefero.net
72 .. _indefero: http://www.indefero.net
73 .. _git: http://git-scm.com
73 .. _git: http://git-scm.com
74 .. _github: http://github.com
74 .. _github: http://github.com
75 .. _MarkDown: http://daringfireball.net/projects/markdown/
75 .. _MarkDown: http://daringfireball.net/projects/markdown/
@@ -1,360 +1,360 b''
1 =============
1 =============
2 0.10 series
2 0.10 series
3 =============
3 =============
4
4
5 Release 0.10.2
5 Release 0.10.2
6 ==============
6 ==============
7
7
8 IPython 0.10.2 was released April 9, 2011. This is a minor bugfix release that
8 IPython 0.10.2 was released April 9, 2011. This is a minor bugfix release that
9 preserves backward compatibility. At this point, all IPython development
9 preserves backward compatibility. At this point, all IPython development
10 resources are focused on the 0.11 series that includes a complete architectural
10 resources are focused on the 0.11 series that includes a complete architectural
11 restructuring of the project as well as many new capabilities, so this is
11 restructuring of the project as well as many new capabilities, so this is
12 likely to be the last release of the 0.10.x series. We have tried to fix all
12 likely to be the last release of the 0.10.x series. We have tried to fix all
13 major bugs in this series so that it remains a viable platform for those not
13 major bugs in this series so that it remains a viable platform for those not
14 ready yet to transition to the 0.11 and newer codebase (since that will require
14 ready yet to transition to the 0.11 and newer codebase (since that will require
15 some porting effort, as a number of APIs have changed).
15 some porting effort, as a number of APIs have changed).
16
16
17 Thus, we are not opening a 0.10.3 active development branch yet, but if the
17 Thus, we are not opening a 0.10.3 active development branch yet, but if the
18 user community requires new patches and is willing to maintain/release such a
18 user community requires new patches and is willing to maintain/release such a
19 branch, we'll be happy to host it on the IPython github repositories.
19 branch, we'll be happy to host it on the IPython github repositories.
20
20
21 Highlights of this release:
21 Highlights of this release:
22
22
23 - The main one is the closing of github ticket #185, a major regression we had
23 - The main one is the closing of github ticket #185, a major regression we had
24 in 0.10.1 where pylab mode with GTK (or gthread) was not working correctly,
24 in 0.10.1 where pylab mode with GTK (or gthread) was not working correctly,
25 hence plots were blocking with GTK. Since this is the default matplotlib
25 hence plots were blocking with GTK. Since this is the default matplotlib
26 backend on Unix systems, this was a major annoyance for many users. Many
26 backend on Unix systems, this was a major annoyance for many users. Many
27 thanks to Paul Ivanov for helping resolve this issue.
27 thanks to Paul Ivanov for helping resolve this issue.
28
28
29 - Fix IOError bug on Windows when used with -gthread.
29 - Fix IOError bug on Windows when used with -gthread.
30 - Work robustly if $HOME is missing from environment.
30 - Work robustly if $HOME is missing from environment.
31 - Better POSIX support in ssh scripts (remove bash-specific idioms).
31 - Better POSIX support in ssh scripts (remove bash-specific idioms).
32 - Improved support for non-ascii characters in log files.
32 - Improved support for non-ascii characters in log files.
33 - Work correctly in environments where GTK can be imported but not started
33 - Work correctly in environments where GTK can be imported but not started
34 (such as a linux text console without X11).
34 (such as a linux text console without X11).
35
35
36 For this release we merged 24 commits, contributed by the following people
36 For this release we merged 24 commits, contributed by the following people
37 (please let us know if we ommitted your name and we'll gladly fix this in the
37 (please let us know if we ommitted your name and we'll gladly fix this in the
38 notes for the future):
38 notes for the future):
39
39
40 * Fernando Perez
40 * Fernando Perez
41 * MinRK
41 * MinRK
42 * Paul Ivanov
42 * Paul Ivanov
43 * Pieter Cristiaan de Groot
43 * Pieter Cristiaan de Groot
44 * TvrtkoM
44 * TvrtkoM
45
45
46 Release 0.10.1
46 Release 0.10.1
47 ==============
47 ==============
48
48
49 IPython 0.10.1 was released October 11, 2010, over a year after version 0.10.
49 IPython 0.10.1 was released October 11, 2010, over a year after version 0.10.
50 This is mostly a bugfix release, since after version 0.10 was released, the
50 This is mostly a bugfix release, since after version 0.10 was released, the
51 development team's energy has been focused on the 0.11 series. We have
51 development team's energy has been focused on the 0.11 series. We have
52 nonetheless tried to backport what fixes we could into 0.10.1, as it remains
52 nonetheless tried to backport what fixes we could into 0.10.1, as it remains
53 the stable series that many users have in production systems they rely on.
53 the stable series that many users have in production systems they rely on.
54
54
55 Since the 0.11 series changes many APIs in backwards-incompatible ways, we are
55 Since the 0.11 series changes many APIs in backwards-incompatible ways, we are
56 willing to continue maintaining the 0.10.x series. We don't really have time
56 willing to continue maintaining the 0.10.x series. We don't really have time
57 to actively write new code for 0.10.x, but we are happy to accept patches and
57 to actively write new code for 0.10.x, but we are happy to accept patches and
58 pull requests on the IPython `github site`_. If sufficient contributions are
58 pull requests on the IPython `github site`_. If sufficient contributions are
59 made that improve 0.10.1, we will roll them into future releases. For this
59 made that improve 0.10.1, we will roll them into future releases. For this
60 purpose, we will have a branch called 0.10.2 on github, on which you can base
60 purpose, we will have a branch called 0.10.2 on github, on which you can base
61 your contributions.
61 your contributions.
62
62
63 .. _github site: http://github.com/ipython
63 .. _github site: http://github.com/ipython
64
64
65 For this release, we applied approximately 60 commits totaling a diff of over
65 For this release, we applied approximately 60 commits totaling a diff of over
66 7000 lines::
66 7000 lines::
67
67
68 (0.10.1)amirbar[dist]> git diff --oneline rel-0.10.. | wc -l
68 (0.10.1)amirbar[dist]> git diff --oneline rel-0.10.. | wc -l
69 7296
69 7296
70
70
71 Highlights of this release:
71 Highlights of this release:
72
72
73 - The only significant new feature is that IPython's parallel computing
73 - The only significant new feature is that IPython's parallel computing
74 machinery now supports natively the Sun Grid Engine and LSF schedulers. This
74 machinery now supports natively the Sun Grid Engine and LSF schedulers. This
75 work was a joint contribution from Justin Riley, Satra Ghosh and Matthieu
75 work was a joint contribution from Justin Riley, Satra Ghosh and Matthieu
76 Brucher, who put a lot of work into it. We also improved traceback handling
76 Brucher, who put a lot of work into it. We also improved traceback handling
77 in remote tasks, as well as providing better control for remote task IDs.
77 in remote tasks, as well as providing better control for remote task IDs.
78
78
79 - New IPython Sphinx directive contributed by John Hunter. You can use this
79 - New IPython Sphinx directive contributed by John Hunter. You can use this
80 directive to mark blocks in reSructuredText documents as containing IPython
80 directive to mark blocks in reSructuredText documents as containing IPython
81 syntax (including figures) and the will be executed during the build:
81 syntax (including figures) and the will be executed during the build:
82
82
83 .. sourcecode:: ipython
83 .. sourcecode:: ipython
84
84
85 In [2]: plt.figure() # ensure a fresh figure
85 In [2]: plt.figure() # ensure a fresh figure
86
86
87 @savefig psimple.png width=4in
87 @savefig psimple.png width=4in
88 In [3]: plt.plot([1,2,3])
88 In [3]: plt.plot([1,2,3])
89 Out[3]: [<matplotlib.lines.Line2D object at 0x9b74d8c>]
89 Out[3]: [<matplotlib.lines.Line2D object at 0x9b74d8c>]
90
90
91 - Various fixes to the standalone ipython-wx application.
91 - Various fixes to the standalone ipython-wx application.
92
92
93 - We now ship internally the excellent argparse library, graciously licensed
93 - We now ship internally the excellent argparse library, graciously licensed
94 under BSD terms by Steven Bethard. Now (2010) that argparse has become part
94 under BSD terms by Steven Bethard. Now (2010) that argparse has become part
95 of Python 2.7 this will be less of an issue, but Steven's relicensing allowed
95 of Python 2.7 this will be less of an issue, but Steven's relicensing allowed
96 us to start updating IPython to using argparse well before Python 2.7. Many
96 us to start updating IPython to using argparse well before Python 2.7. Many
97 thanks!
97 thanks!
98
98
99 - Robustness improvements so that IPython doesn't crash if the readline library
99 - Robustness improvements so that IPython doesn't crash if the readline library
100 is absent (though obviously a lot of functionality that requires readline
100 is absent (though obviously a lot of functionality that requires readline
101 will not be available).
101 will not be available).
102
102
103 - Improvements to tab completion in Emacs with Python 2.6.
103 - Improvements to tab completion in Emacs with Python 2.6.
104
104
105 - Logging now supports timestamps (see ``%logstart?`` for full details).
105 - Logging now supports timestamps (see ``%logstart?`` for full details).
106
106
107 - A long-standing and quite annoying bug where parentheses would be added to
107 - A long-standing and quite annoying bug where parentheses would be added to
108 ``print`` statements, under Python 2.5 and 2.6, was finally fixed.
108 ``print`` statements, under Python 2.5 and 2.6, was finally fixed.
109
109
110 - Improved handling of libreadline on Apple OSX.
110 - Improved handling of libreadline on Apple OSX.
111
111
112 - Fix ``reload`` method of IPython demos, which was broken.
112 - Fix ``reload`` method of IPython demos, which was broken.
113
113
114 - Fixes for the ipipe/ibrowse system on OSX.
114 - Fixes for the ipipe/ibrowse system on OSX.
115
115
116 - Fixes for Zope profile.
116 - Fixes for Zope profile.
117
117
118 - Fix %timeit reporting when the time is longer than 1000s.
118 - Fix %timeit reporting when the time is longer than 1000s.
119
119
120 - Avoid lockups with ? or ?? in SunOS, due to a bug in termios.
120 - Avoid lockups with ? or ?? in SunOS, due to a bug in termios.
121
121
122 - The usual assortment of miscellaneous bug fixes and small improvements.
122 - The usual assortment of miscellaneous bug fixes and small improvements.
123
123
124 The following people contributed to this release (please let us know if we
124 The following people contributed to this release (please let us know if we
125 omitted your name and we'll gladly fix this in the notes for the future):
125 omitted your name and we'll gladly fix this in the notes for the future):
126
126
127 * Beni Cherniavsky
127 * Beni Cherniavsky
128 * Boyd Waters.
128 * Boyd Waters.
129 * David Warde-Farley
129 * David Warde-Farley
130 * Fernando Perez
130 * Fernando Perez
131 * GΓΆkhan Sever
131 * GΓΆkhan Sever
132 * John Hunter
132 * John Hunter
133 * Justin Riley
133 * Justin Riley
134 * Kiorky
134 * Kiorky
135 * Laurent Dufrechou
135 * Laurent Dufrechou
136 * Mark E. Smith
136 * Mark E. Smith
137 * Matthieu Brucher
137 * Matthieu Brucher
138 * Satrajit Ghosh
138 * Satrajit Ghosh
139 * Sebastian Busch
139 * Sebastian Busch
140 * VΓ‘clav Ε milauer
140 * VΓ‘clav Ε milauer
141
141
142 Release 0.10
142 Release 0.10
143 ============
143 ============
144
144
145 This release brings months of slow but steady development, and will be the last
145 This release brings months of slow but steady development, and will be the last
146 before a major restructuring and cleanup of IPython's internals that is already
146 before a major restructuring and cleanup of IPython's internals that is already
147 under way. For this reason, we hope that 0.10 will be a stable and robust
147 under way. For this reason, we hope that 0.10 will be a stable and robust
148 release so that while users adapt to some of the API changes that will come
148 release so that while users adapt to some of the API changes that will come
149 with the refactoring that will become IPython 0.11, they can safely use 0.10 in
149 with the refactoring that will become IPython 0.11, they can safely use 0.10 in
150 all existing projects with minimal changes (if any).
150 all existing projects with minimal changes (if any).
151
151
152 IPython 0.10 is now a medium-sized project, with roughly (as reported by David
152 IPython 0.10 is now a medium-sized project, with roughly (as reported by David
153 Wheeler's :command:`sloccount` utility) 40750 lines of Python code, and a diff
153 Wheeler's :command:`sloccount` utility) 40750 lines of Python code, and a diff
154 between 0.9.1 and this release that contains almost 28000 lines of code and
154 between 0.9.1 and this release that contains almost 28000 lines of code and
155 documentation. Our documentation, in PDF format, is a 495-page long PDF
155 documentation. Our documentation, in PDF format, is a 495-page long PDF
156 document (also available in HTML format, both generated from the same sources).
156 document (also available in HTML format, both generated from the same sources).
157
157
158 Many users and developers contributed code, features, bug reports and ideas to
158 Many users and developers contributed code, features, bug reports and ideas to
159 this release. Please do not hesitate in contacting us if we've failed to
159 this release. Please do not hesitate in contacting us if we've failed to
160 acknowledge your contribution here. In particular, for this release we have
160 acknowledge your contribution here. In particular, for this release we have
161 contribution from the following people, a mix of new and regular names (in
161 contribution from the following people, a mix of new and regular names (in
162 alphabetical order by first name):
162 alphabetical order by first name):
163
163
164 * Alexander Clausen: fix #341726.
164 * Alexander Clausen: fix #341726.
165 * Brian Granger: lots of work everywhere (features, bug fixes, etc).
165 * Brian Granger: lots of work everywhere (features, bug fixes, etc).
166 * Daniel Ashbrook: bug report on MemoryError during compilation, now fixed.
166 * Daniel Ashbrook: bug report on MemoryError during compilation, now fixed.
167 * Darren Dale: improvements to documentation build system, feedback, design
167 * Darren Dale: improvements to documentation build system, feedback, design
168 ideas.
168 ideas.
169 * Fernando Perez: various places.
169 * Fernando Perez: various places.
170 * GaΓ«l Varoquaux: core code, ipythonx GUI, design discussions, etc. Lots...
170 * GaΓ«l Varoquaux: core code, ipythonx GUI, design discussions, etc. Lots...
171 * John Hunter: suggestions, bug fixes, feedback.
171 * John Hunter: suggestions, bug fixes, feedback.
172 * Jorgen Stenarson: work on many fronts, tests, fixes, win32 support, etc.
172 * Jorgen Stenarson: work on many fronts, tests, fixes, win32 support, etc.
173 * Laurent DufrΓ©chou: many improvements to ipython-wx standalone app.
173 * Laurent DufrΓ©chou: many improvements to ipython-wx standalone app.
174 * Lukasz Pankowski: prefilter, `%edit`, demo improvements.
174 * Lukasz Pankowski: prefilter, `%edit`, demo improvements.
175 * Matt Foster: TextMate support in `%edit`.
175 * Matt Foster: TextMate support in `%edit`.
176 * Nathaniel Smith: fix #237073.
176 * Nathaniel Smith: fix #237073.
177 * Pauli Virtanen: fixes and improvements to extensions, documentation.
177 * Pauli Virtanen: fixes and improvements to extensions, documentation.
178 * Prabhu Ramachandran: improvements to `%timeit`.
178 * Prabhu Ramachandran: improvements to `%timeit`.
179 * Robert Kern: several extensions.
179 * Robert Kern: several extensions.
180 * Sameer D'Costa: help on critical bug #269966.
180 * Sameer D'Costa: help on critical bug #269966.
181 * Stephan Peijnik: feedback on Debian compliance and many man pages.
181 * Stephan Peijnik: feedback on Debian compliance and many man pages.
182 * Steven Bethard: we are now shipping his :mod:`argparse` module.
182 * Steven Bethard: we are now shipping his :mod:`argparse` module.
183 * Tom Fetherston: many improvements to :mod:`IPython.demo` module.
183 * Tom Fetherston: many improvements to :mod:`IPython.demo` module.
184 * Ville Vainio: lots of work everywhere (features, bug fixes, etc).
184 * Ville Vainio: lots of work everywhere (features, bug fixes, etc).
185 * Vishal Vasta: ssh support in ipcluster.
185 * Vishal Vasta: ssh support in ipcluster.
186 * Walter Doerwald: work on the :mod:`IPython.ipipe` system.
186 * Walter Doerwald: work on the :mod:`IPython.ipipe` system.
187
187
188 Below we give an overview of new features, bug fixes and backwards-incompatible
188 Below we give an overview of new features, bug fixes and backwards-incompatible
189 changes. For a detailed account of every change made, feel free to view the
189 changes. For a detailed account of every change made, feel free to view the
190 project log with :command:`bzr log`.
190 project log with :command:`bzr log`.
191
191
192 New features
192 New features
193 ------------
193 ------------
194
194
195 * New `%paste` magic automatically extracts current contents of clipboard and
195 * New `%paste` magic automatically extracts current contents of clipboard and
196 pastes it directly, while correctly handling code that is indented or
196 pastes it directly, while correctly handling code that is indented or
197 prepended with `>>>` or `...` python prompt markers. A very useful new
197 prepended with `>>>` or `...` python prompt markers. A very useful new
198 feature contributed by Robert Kern.
198 feature contributed by Robert Kern.
199
199
200 * IPython 'demos', created with the :mod:`IPython.demo` module, can now be
200 * IPython 'demos', created with the :mod:`IPython.demo` module, can now be
201 created from files on disk or strings in memory. Other fixes and
201 created from files on disk or strings in memory. Other fixes and
202 improvements to the demo system, by Tom Fetherston.
202 improvements to the demo system, by Tom Fetherston.
203
203
204 * Added :func:`find_cmd` function to :mod:`IPython.platutils` module, to find
204 * Added :func:`find_cmd` function to :mod:`IPython.platutils` module, to find
205 commands in a cross-platform manner.
205 commands in a cross-platform manner.
206
206
207 * Many improvements and fixes to GaΓ«l Varoquaux's :command:`ipythonx`, a
207 * Many improvements and fixes to GaΓ«l Varoquaux's :command:`ipythonx`, a
208 WX-based lightweight IPython instance that can be easily embedded in other WX
208 WX-based lightweight IPython instance that can be easily embedded in other WX
209 applications. These improvements have made it possible to now have an
209 applications. These improvements have made it possible to now have an
210 embedded IPython in Mayavi and other tools.
210 embedded IPython in Mayavi and other tools.
211
211
212 * :class:`MultiengineClient` objects now have a :meth:`benchmark` method.
212 * :class:`MultiengineClient` objects now have a :meth:`benchmark` method.
213
213
214 * The manual now includes a full set of auto-generated API documents from the
214 * The manual now includes a full set of auto-generated API documents from the
215 code sources, using Sphinx and some of our own support code. We are now
215 code sources, using Sphinx and some of our own support code. We are now
216 using the `Numpy Documentation Standard`_ for all docstrings, and we have
216 using the `Numpy Documentation Standard`_ for all docstrings, and we have
217 tried to update as many existing ones as possible to this format.
217 tried to update as many existing ones as possible to this format.
218
218
219 * The new :mod:`IPython.Extensions.ipy_pretty` extension by Robert Kern
219 * The new :mod:`IPython.Extensions.ipy_pretty` extension by Robert Kern
220 provides configurable pretty-printing.
220 provides configurable pretty-printing.
221
221
222 * Many improvements to the :command:`ipython-wx` standalone WX-based IPython
222 * Many improvements to the :command:`ipython-wx` standalone WX-based IPython
223 application by Laurent DufrΓ©chou. It can optionally run in a thread, and
223 application by Laurent DufrΓ©chou. It can optionally run in a thread, and
224 this can be toggled at runtime (allowing the loading of Matplotlib in a
224 this can be toggled at runtime (allowing the loading of Matplotlib in a
225 running session without ill effects).
225 running session without ill effects).
226
226
227 * IPython includes a copy of Steven Bethard's argparse_ in the
227 * IPython includes a copy of Steven Bethard's argparse_ in the
228 :mod:`IPython.external` package, so we can use it internally and it is also
228 :mod:`IPython.external` package, so we can use it internally and it is also
229 available to any IPython user. By installing it in this manner, we ensure
229 available to any IPython user. By installing it in this manner, we ensure
230 zero conflicts with any system-wide installation you may already have while
230 zero conflicts with any system-wide installation you may already have while
231 minimizing external dependencies for new users. In IPython 0.10, We ship
231 minimizing external dependencies for new users. In IPython 0.10, We ship
232 argparse version 1.0.
232 argparse version 1.0.
233
233
234 * An improved and much more robust test suite, that runs groups of tests in
234 * An improved and much more robust test suite, that runs groups of tests in
235 separate subprocesses using either Nose or Twisted's :command:`trial` runner
235 separate subprocesses using either Nose or Twisted's :command:`trial` runner
236 to ensure proper management of Twisted-using code. The test suite degrades
236 to ensure proper management of Twisted-using code. The test suite degrades
237 gracefully if optional dependencies are not available, so that the
237 gracefully if optional dependencies are not available, so that the
238 :command:`iptest` command can be run with only Nose installed and nothing
238 :command:`iptest` command can be run with only Nose installed and nothing
239 else. We also have more and cleaner test decorators to better select tests
239 else. We also have more and cleaner test decorators to better select tests
240 depending on runtime conditions, do setup/teardown, etc.
240 depending on runtime conditions, do setup/teardown, etc.
241
241
242 * The new ipcluster now has a fully working ssh mode that should work on
242 * The new ipcluster now has a fully working ssh mode that should work on
243 Linux, Unix and OS X. Thanks to Vishal Vatsa for implementing this!
243 Linux, Unix and OS X. Thanks to Vishal Vatsa for implementing this!
244
244
245 * The wonderful TextMate editor can now be used with %edit on OS X. Thanks
245 * The wonderful TextMate editor can now be used with %edit on OS X. Thanks
246 to Matt Foster for this patch.
246 to Matt Foster for this patch.
247
247
248 * The documentation regarding parallel uses of IPython, including MPI and PBS,
248 * The documentation regarding parallel uses of IPython, including MPI and PBS,
249 has been significantly updated and improved.
249 has been significantly updated and improved.
250
250
251 * The developer guidelines in the documentation have been updated to explain
251 * The developer guidelines in the documentation have been updated to explain
252 our workflow using :command:`bzr` and Launchpad.
252 our workflow using :command:`bzr` and Launchpad.
253
253
254 * Fully refactored :command:`ipcluster` command line program for starting
254 * Fully refactored :command:`ipcluster` command line program for starting
255 IPython clusters. This new version is a complete rewrite and 1) is fully
255 IPython clusters. This new version is a complete rewrite and 1) is fully
256 cross platform (we now use Twisted's process management), 2) has much
256 cross platform (we now use Twisted's process management), 2) has much
257 improved performance, 3) uses subcommands for different types of clusters, 4)
257 improved performance, 3) uses subcommands for different types of clusters, 4)
258 uses argparse for parsing command line options, 5) has better support for
258 uses argparse for parsing command line options, 5) has better support for
259 starting clusters using :command:`mpirun`, 6) has experimental support for
259 starting clusters using :command:`mpirun`, 6) has experimental support for
260 starting engines using PBS. It can also reuse FURL files, by appropriately
260 starting engines using PBS. It can also reuse FURL files, by appropriately
261 passing options to its subcommands. However, this new version of ipcluster
261 passing options to its subcommands. However, this new version of ipcluster
262 should be considered a technology preview. We plan on changing the API in
262 should be considered a technology preview. We plan on changing the API in
263 significant ways before it is final.
263 significant ways before it is final.
264
264
265 * Full description of the security model added to the docs.
265 * Full description of the security model added to the docs.
266
266
267 * cd completer: show bookmarks if no other completions are available.
267 * cd completer: show bookmarks if no other completions are available.
268
268
269 * sh profile: easy way to give 'title' to prompt: assign to variable
269 * sh profile: easy way to give 'title' to prompt: assign to variable
270 '_prompt_title'. It looks like this::
270 '_prompt_title'. It looks like this::
271
271
272 [~]|1> _prompt_title = 'sudo!'
272 [~]|1> _prompt_title = 'sudo!'
273 sudo![~]|2>
273 sudo![~]|2>
274
274
275 * %edit: If you do '%edit pasted_block', pasted_block variable gets updated
275 * %edit: If you do '%edit pasted_block', pasted_block variable gets updated
276 with new data (so repeated editing makes sense)
276 with new data (so repeated editing makes sense)
277
277
278 .. _Numpy Documentation Standard: http://projects.scipy.org/numpy/wiki/CodingStyleGuidelines#docstring-standard
278 .. _Numpy Documentation Standard: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt#docstring-standard
279
279
280 .. _argparse: http://code.google.com/p/argparse/
280 .. _argparse: http://code.google.com/p/argparse/
281
281
282 Bug fixes
282 Bug fixes
283 ---------
283 ---------
284
284
285 * Fix #368719, removed top-level debian/ directory to make the job of Debian
285 * Fix #368719, removed top-level debian/ directory to make the job of Debian
286 packagers easier.
286 packagers easier.
287
287
288 * Fix #291143 by including man pages contributed by Stephan Peijnik from the
288 * Fix #291143 by including man pages contributed by Stephan Peijnik from the
289 Debian project.
289 Debian project.
290
290
291 * Fix #358202, effectively a race condition, by properly synchronizing file
291 * Fix #358202, effectively a race condition, by properly synchronizing file
292 creation at cluster startup time.
292 creation at cluster startup time.
293
293
294 * `%timeit` now handles correctly functions that take a long time to execute
294 * `%timeit` now handles correctly functions that take a long time to execute
295 even the first time, by not repeating them.
295 even the first time, by not repeating them.
296
296
297 * Fix #239054, releasing of references after exiting.
297 * Fix #239054, releasing of references after exiting.
298
298
299 * Fix #341726, thanks to Alexander Clausen.
299 * Fix #341726, thanks to Alexander Clausen.
300
300
301 * Fix #269966. This long-standing and very difficult bug (which is actually a
301 * Fix #269966. This long-standing and very difficult bug (which is actually a
302 problem in Python itself) meant long-running sessions would inevitably grow
302 problem in Python itself) meant long-running sessions would inevitably grow
303 in memory size, often with catastrophic consequences if users had large
303 in memory size, often with catastrophic consequences if users had large
304 objects in their scripts. Now, using `%run` repeatedly should not cause any
304 objects in their scripts. Now, using `%run` repeatedly should not cause any
305 memory leaks. Special thanks to John Hunter and Sameer D'Costa for their
305 memory leaks. Special thanks to John Hunter and Sameer D'Costa for their
306 help with this bug.
306 help with this bug.
307
307
308 * Fix #295371, bug in `%history`.
308 * Fix #295371, bug in `%history`.
309
309
310 * Improved support for py2exe.
310 * Improved support for py2exe.
311
311
312 * Fix #270856: IPython hangs with PyGTK
312 * Fix #270856: IPython hangs with PyGTK
313
313
314 * Fix #270998: A magic with no docstring breaks the '%magic magic'
314 * Fix #270998: A magic with no docstring breaks the '%magic magic'
315
315
316 * fix #271684: -c startup commands screw up raw vs. native history
316 * fix #271684: -c startup commands screw up raw vs. native history
317
317
318 * Numerous bugs on Windows with the new ipcluster have been fixed.
318 * Numerous bugs on Windows with the new ipcluster have been fixed.
319
319
320 * The ipengine and ipcontroller scripts now handle missing furl files
320 * The ipengine and ipcontroller scripts now handle missing furl files
321 more gracefully by giving better error messages.
321 more gracefully by giving better error messages.
322
322
323 * %rehashx: Aliases no longer contain dots. python3.0 binary
323 * %rehashx: Aliases no longer contain dots. python3.0 binary
324 will create alias python30. Fixes:
324 will create alias python30. Fixes:
325 #259716 "commands with dots in them don't work"
325 #259716 "commands with dots in them don't work"
326
326
327 * %cpaste: %cpaste -r repeats the last pasted block.
327 * %cpaste: %cpaste -r repeats the last pasted block.
328 The block is assigned to pasted_block even if code
328 The block is assigned to pasted_block even if code
329 raises exception.
329 raises exception.
330
330
331 * Bug #274067 'The code in get_home_dir is broken for py2exe' was
331 * Bug #274067 'The code in get_home_dir is broken for py2exe' was
332 fixed.
332 fixed.
333
333
334 * Many other small bug fixes not listed here by number (see the bzr log for
334 * Many other small bug fixes not listed here by number (see the bzr log for
335 more info).
335 more info).
336
336
337 Backwards incompatible changes
337 Backwards incompatible changes
338 ------------------------------
338 ------------------------------
339
339
340 * `ipykit` and related files were unmaintained and have been removed.
340 * `ipykit` and related files were unmaintained and have been removed.
341
341
342 * The :func:`IPython.genutils.doctest_reload` does not actually call
342 * The :func:`IPython.genutils.doctest_reload` does not actually call
343 `reload(doctest)` anymore, as this was causing many problems with the test
343 `reload(doctest)` anymore, as this was causing many problems with the test
344 suite. It still resets `doctest.master` to None.
344 suite. It still resets `doctest.master` to None.
345
345
346 * While we have not deliberately broken Python 2.4 compatibility, only minor
346 * While we have not deliberately broken Python 2.4 compatibility, only minor
347 testing was done with Python 2.4, while 2.5 and 2.6 were fully tested. But
347 testing was done with Python 2.4, while 2.5 and 2.6 were fully tested. But
348 if you encounter problems with 2.4, please do report them as bugs.
348 if you encounter problems with 2.4, please do report them as bugs.
349
349
350 * The :command:`ipcluster` now requires a mode argument; for example to start a
350 * The :command:`ipcluster` now requires a mode argument; for example to start a
351 cluster on the local machine with 4 engines, you must now type::
351 cluster on the local machine with 4 engines, you must now type::
352
352
353 $ ipcluster local -n 4
353 $ ipcluster local -n 4
354
354
355 * The controller now has a ``-r`` flag that needs to be used if you want to
355 * The controller now has a ``-r`` flag that needs to be used if you want to
356 reuse existing furl files. Otherwise they are deleted (the default).
356 reuse existing furl files. Otherwise they are deleted (the default).
357
357
358 * Remove ipy_leo.py. You can use :command:`easy_install ipython-extension` to
358 * Remove ipy_leo.py. You can use :command:`easy_install ipython-extension` to
359 get it. (done to decouple it from ipython release cycle)
359 get it. (done to decouple it from ipython release cycle)
360
360
General Comments 0
You need to be logged in to leave comments. Login now