##// END OF EJS Templates
- fix missing __file__ for scripts run via %run....
fperez -
Show More
@@ -1,286 +1,296 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 Pdb debugger class.
3 Pdb debugger class.
4
4
5 Modified from the standard pdb.Pdb class to avoid including readline, so that
5 Modified from the standard pdb.Pdb class to avoid including readline, so that
6 the command line completion of other programs which include this isn't
6 the command line completion of other programs which include this isn't
7 damaged.
7 damaged.
8
8
9 In the future, this class will be expanded with improvements over the standard
9 In the future, this class will be expanded with improvements over the standard
10 pdb.
10 pdb.
11
11
12 The code in this file is mainly lifted out of cmd.py in Python 2.2, with minor
12 The code in this file is mainly lifted out of cmd.py in Python 2.2, with minor
13 changes. Licensing should therefore be under the standard Python terms. For
13 changes. Licensing should therefore be under the standard Python terms. For
14 details on the PSF (Python Software Foundation) standard license, see:
14 details on the PSF (Python Software Foundation) standard license, see:
15
15
16 http://www.python.org/2.2.3/license.html
16 http://www.python.org/2.2.3/license.html
17
17
18 $Id: Debugger.py 994 2006-01-08 08:29:44Z fperez $"""
18 $Id: Debugger.py 1029 2006-01-18 07:33:38Z fperez $"""
19
19
20 #*****************************************************************************
20 #*****************************************************************************
21 #
21 #
22 # Since this file is essentially a modified copy of the pdb module which is
22 # Since this file is essentially a modified copy of the pdb module which is
23 # part of the standard Python distribution, I assume that the proper procedure
23 # part of the standard Python distribution, I assume that the proper procedure
24 # is to maintain its copyright as belonging to the Python Software Foundation
24 # is to maintain its copyright as belonging to the Python Software Foundation
25 # (in addition to my own, for all new code).
25 # (in addition to my own, for all new code).
26 #
26 #
27 # Copyright (C) 2001 Python Software Foundation, www.python.org
27 # Copyright (C) 2001 Python Software Foundation, www.python.org
28 # Copyright (C) 2005-2006 Fernando Perez. <fperez@colorado.edu>
28 # Copyright (C) 2005-2006 Fernando Perez. <fperez@colorado.edu>
29 #
29 #
30 # Distributed under the terms of the BSD License. The full license is in
30 # Distributed under the terms of the BSD License. The full license is in
31 # the file COPYING, distributed as part of this software.
31 # the file COPYING, distributed as part of this software.
32 #
32 #
33 #*****************************************************************************
33 #*****************************************************************************
34
34
35
35
36 from IPython import Release
36 from IPython import Release
37 __author__ = '%s <%s>' % Release.authors['Fernando']
37 __author__ = '%s <%s>' % Release.authors['Fernando']
38 __license__ = 'Python'
38 __license__ = 'Python'
39
39
40 import bdb
40 import bdb
41 import cmd
41 import cmd
42 import linecache
42 import linecache
43 import os
43 import os
44 import pdb
44 import pdb
45 import sys
45 import sys
46
46
47 from IPython import PyColorize, ColorANSI
47 from IPython import PyColorize, ColorANSI
48 from IPython.genutils import Term
48 from IPython.genutils import Term
49 from IPython.excolors import ExceptionColors
49 from IPython.excolors import ExceptionColors
50
50
51 def _file_lines(fname):
51 def _file_lines(fname):
52 """Return the contents of a named file as a list of lines.
52 """Return the contents of a named file as a list of lines.
53
53
54 This function never raises an IOError exception: if the file can't be
54 This function never raises an IOError exception: if the file can't be
55 read, it simply returns an empty list."""
55 read, it simply returns an empty list."""
56
56
57 try:
57 try:
58 outfile = open(fname)
58 outfile = open(fname)
59 except IOError:
59 except IOError:
60 return []
60 return []
61 else:
61 else:
62 out = outfile.readlines()
62 out = outfile.readlines()
63 outfile.close()
63 outfile.close()
64 return out
64 return out
65
65
66
66
67 class Pdb(pdb.Pdb):
67 class Pdb(pdb.Pdb):
68 """Modified Pdb class, does not load readline."""
68 """Modified Pdb class, does not load readline."""
69
70 # Ugly hack: we can't call the parent constructor, because it binds
71 # readline and breaks tab-completion. This means we have to COPY the
72 # constructor here, and that requires tracking various python versions.
73
69 def __init__(self,color_scheme='NoColor'):
74 def __init__(self,color_scheme='NoColor'):
70 bdb.Bdb.__init__(self)
75 bdb.Bdb.__init__(self)
71 cmd.Cmd.__init__(self,completekey=None) # don't load readline
76 cmd.Cmd.__init__(self,completekey=None) # don't load readline
72 self.prompt = 'ipdb> ' # The default prompt is '(Pdb)'
77 self.prompt = 'ipdb> ' # The default prompt is '(Pdb)'
73 self.aliases = {}
78 self.aliases = {}
74
79
80 # These two lines are part of the py2.4 constructor, let's put them
81 # unconditionally here as they won't cause any problems in 2.3.
82 self.mainpyfile = ''
83 self._wait_for_mainpyfile = 0
84
75 # Read $HOME/.pdbrc and ./.pdbrc
85 # Read $HOME/.pdbrc and ./.pdbrc
76 try:
86 try:
77 self.rcLines = _file_lines(os.path.join(os.environ['HOME'],
87 self.rcLines = _file_lines(os.path.join(os.environ['HOME'],
78 ".pdbrc"))
88 ".pdbrc"))
79 except KeyError:
89 except KeyError:
80 self.rcLines = []
90 self.rcLines = []
81 self.rcLines.extend(_file_lines(".pdbrc"))
91 self.rcLines.extend(_file_lines(".pdbrc"))
82
92
83 # Create color table: we copy the default one from the traceback
93 # Create color table: we copy the default one from the traceback
84 # module and add a few attributes needed for debugging
94 # module and add a few attributes needed for debugging
85 self.color_scheme_table = ExceptionColors.copy()
95 self.color_scheme_table = ExceptionColors.copy()
86
96
87 # shorthands
97 # shorthands
88 C = ColorANSI.TermColors
98 C = ColorANSI.TermColors
89 cst = self.color_scheme_table
99 cst = self.color_scheme_table
90
100
91 cst['NoColor'].colors.breakpoint_enabled = C.NoColor
101 cst['NoColor'].colors.breakpoint_enabled = C.NoColor
92 cst['NoColor'].colors.breakpoint_disabled = C.NoColor
102 cst['NoColor'].colors.breakpoint_disabled = C.NoColor
93
103
94 cst['Linux'].colors.breakpoint_enabled = C.LightRed
104 cst['Linux'].colors.breakpoint_enabled = C.LightRed
95 cst['Linux'].colors.breakpoint_disabled = C.Red
105 cst['Linux'].colors.breakpoint_disabled = C.Red
96
106
97 cst['LightBG'].colors.breakpoint_enabled = C.LightRed
107 cst['LightBG'].colors.breakpoint_enabled = C.LightRed
98 cst['LightBG'].colors.breakpoint_disabled = C.Red
108 cst['LightBG'].colors.breakpoint_disabled = C.Red
99
109
100 self.set_colors(color_scheme)
110 self.set_colors(color_scheme)
101
111
102 def set_colors(self, scheme):
112 def set_colors(self, scheme):
103 """Shorthand access to the color table scheme selector method."""
113 """Shorthand access to the color table scheme selector method."""
104 self.color_scheme_table.set_active_scheme(scheme)
114 self.color_scheme_table.set_active_scheme(scheme)
105
115
106
116
107 def interaction(self, frame, traceback):
117 def interaction(self, frame, traceback):
108 __IPYTHON__.set_completer_frame(frame)
118 __IPYTHON__.set_completer_frame(frame)
109 pdb.Pdb.interaction(self, frame, traceback)
119 pdb.Pdb.interaction(self, frame, traceback)
110
120
111
121
112 def do_up(self, arg):
122 def do_up(self, arg):
113 pdb.Pdb.do_up(self, arg)
123 pdb.Pdb.do_up(self, arg)
114 __IPYTHON__.set_completer_frame(self.curframe)
124 __IPYTHON__.set_completer_frame(self.curframe)
115 do_u = do_up
125 do_u = do_up
116
126
117
127
118 def do_down(self, arg):
128 def do_down(self, arg):
119 pdb.Pdb.do_down(self, arg)
129 pdb.Pdb.do_down(self, arg)
120 __IPYTHON__.set_completer_frame(self.curframe)
130 __IPYTHON__.set_completer_frame(self.curframe)
121 do_d = do_down
131 do_d = do_down
122
132
123
133
124 def postloop(self):
134 def postloop(self):
125 __IPYTHON__.set_completer_frame(None)
135 __IPYTHON__.set_completer_frame(None)
126
136
127
137
128 def print_stack_trace(self):
138 def print_stack_trace(self):
129 try:
139 try:
130 for frame_lineno in self.stack:
140 for frame_lineno in self.stack:
131 self.print_stack_entry(frame_lineno, context = 5)
141 self.print_stack_entry(frame_lineno, context = 5)
132 except KeyboardInterrupt:
142 except KeyboardInterrupt:
133 pass
143 pass
134
144
135
145
136 def print_stack_entry(self,frame_lineno,prompt_prefix='\n-> ',
146 def print_stack_entry(self,frame_lineno,prompt_prefix='\n-> ',
137 context = 3):
147 context = 3):
138 frame, lineno = frame_lineno
148 frame, lineno = frame_lineno
139 print >>Term.cout, self.format_stack_entry(frame_lineno, '', context)
149 print >>Term.cout, self.format_stack_entry(frame_lineno, '', context)
140
150
141
151
142 def format_stack_entry(self, frame_lineno, lprefix=': ', context = 3):
152 def format_stack_entry(self, frame_lineno, lprefix=': ', context = 3):
143 import linecache, repr
153 import linecache, repr
144
154
145 ret = ""
155 ret = ""
146
156
147 Colors = self.color_scheme_table.active_colors
157 Colors = self.color_scheme_table.active_colors
148 ColorsNormal = Colors.Normal
158 ColorsNormal = Colors.Normal
149 tpl_link = '%s%%s%s' % (Colors.filenameEm, ColorsNormal)
159 tpl_link = '%s%%s%s' % (Colors.filenameEm, ColorsNormal)
150 tpl_call = 'in %s%%s%s%%s%s' % (Colors.vName, Colors.valEm, ColorsNormal)
160 tpl_call = 'in %s%%s%s%%s%s' % (Colors.vName, Colors.valEm, ColorsNormal)
151 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
161 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
152 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line,
162 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line,
153 ColorsNormal)
163 ColorsNormal)
154
164
155 frame, lineno = frame_lineno
165 frame, lineno = frame_lineno
156
166
157 return_value = ''
167 return_value = ''
158 if '__return__' in frame.f_locals:
168 if '__return__' in frame.f_locals:
159 rv = frame.f_locals['__return__']
169 rv = frame.f_locals['__return__']
160 #return_value += '->'
170 #return_value += '->'
161 return_value += repr.repr(rv) + '\n'
171 return_value += repr.repr(rv) + '\n'
162 ret += return_value
172 ret += return_value
163
173
164 #s = filename + '(' + `lineno` + ')'
174 #s = filename + '(' + `lineno` + ')'
165 filename = self.canonic(frame.f_code.co_filename)
175 filename = self.canonic(frame.f_code.co_filename)
166 link = tpl_link % filename
176 link = tpl_link % filename
167
177
168 if frame.f_code.co_name:
178 if frame.f_code.co_name:
169 func = frame.f_code.co_name
179 func = frame.f_code.co_name
170 else:
180 else:
171 func = "<lambda>"
181 func = "<lambda>"
172
182
173 call = ''
183 call = ''
174 if func != '?':
184 if func != '?':
175 if '__args__' in frame.f_locals:
185 if '__args__' in frame.f_locals:
176 args = repr.repr(frame.f_locals['__args__'])
186 args = repr.repr(frame.f_locals['__args__'])
177 else:
187 else:
178 args = '()'
188 args = '()'
179 call = tpl_call % (func, args)
189 call = tpl_call % (func, args)
180
190
181 level = '%s %s\n' % (link, call)
191 level = '%s %s\n' % (link, call)
182 ret += level
192 ret += level
183
193
184 start = lineno - 1 - context//2
194 start = lineno - 1 - context//2
185 lines = linecache.getlines(filename)
195 lines = linecache.getlines(filename)
186 start = max(start, 0)
196 start = max(start, 0)
187 start = min(start, len(lines) - context)
197 start = min(start, len(lines) - context)
188 lines = lines[start : start + context]
198 lines = lines[start : start + context]
189
199
190 for i in range(len(lines)):
200 for i in range(len(lines)):
191 line = lines[i]
201 line = lines[i]
192 if start + 1 + i == lineno:
202 if start + 1 + i == lineno:
193 ret += self.__format_line(tpl_line_em, filename, start + 1 + i, line, arrow = True)
203 ret += self.__format_line(tpl_line_em, filename, start + 1 + i, line, arrow = True)
194 else:
204 else:
195 ret += self.__format_line(tpl_line, filename, start + 1 + i, line, arrow = False)
205 ret += self.__format_line(tpl_line, filename, start + 1 + i, line, arrow = False)
196
206
197 return ret
207 return ret
198
208
199
209
200 def __format_line(self, tpl_line, filename, lineno, line, arrow = False):
210 def __format_line(self, tpl_line, filename, lineno, line, arrow = False):
201 bp_mark = ""
211 bp_mark = ""
202 bp_mark_color = ""
212 bp_mark_color = ""
203
213
204 bp = None
214 bp = None
205 if lineno in self.get_file_breaks(filename):
215 if lineno in self.get_file_breaks(filename):
206 bps = self.get_breaks(filename, lineno)
216 bps = self.get_breaks(filename, lineno)
207 bp = bps[-1]
217 bp = bps[-1]
208
218
209 if bp:
219 if bp:
210 Colors = self.color_scheme_table.active_colors
220 Colors = self.color_scheme_table.active_colors
211 bp_mark = str(bp.number)
221 bp_mark = str(bp.number)
212 bp_mark_color = Colors.breakpoint_enabled
222 bp_mark_color = Colors.breakpoint_enabled
213 if not bp.enabled:
223 if not bp.enabled:
214 bp_mark_color = Colors.breakpoint_disabled
224 bp_mark_color = Colors.breakpoint_disabled
215
225
216 numbers_width = 7
226 numbers_width = 7
217 if arrow:
227 if arrow:
218 # This is the line with the error
228 # This is the line with the error
219 pad = numbers_width - len(str(lineno)) - len(bp_mark)
229 pad = numbers_width - len(str(lineno)) - len(bp_mark)
220 if pad >= 3:
230 if pad >= 3:
221 marker = '-'*(pad-3) + '-> '
231 marker = '-'*(pad-3) + '-> '
222 elif pad == 2:
232 elif pad == 2:
223 marker = '> '
233 marker = '> '
224 elif pad == 1:
234 elif pad == 1:
225 marker = '>'
235 marker = '>'
226 else:
236 else:
227 marker = ''
237 marker = ''
228 num = '%s%s' % (marker, str(lineno))
238 num = '%s%s' % (marker, str(lineno))
229 line = tpl_line % (bp_mark_color + bp_mark, num, line)
239 line = tpl_line % (bp_mark_color + bp_mark, num, line)
230 else:
240 else:
231 num = '%*s' % (numbers_width - len(bp_mark), str(lineno))
241 num = '%*s' % (numbers_width - len(bp_mark), str(lineno))
232 line = tpl_line % (bp_mark_color + bp_mark, num, line)
242 line = tpl_line % (bp_mark_color + bp_mark, num, line)
233
243
234 return line
244 return line
235
245
236
246
237 def do_list(self, arg):
247 def do_list(self, arg):
238 self.lastcmd = 'list'
248 self.lastcmd = 'list'
239 last = None
249 last = None
240 if arg:
250 if arg:
241 try:
251 try:
242 x = eval(arg, {}, {})
252 x = eval(arg, {}, {})
243 if type(x) == type(()):
253 if type(x) == type(()):
244 first, last = x
254 first, last = x
245 first = int(first)
255 first = int(first)
246 last = int(last)
256 last = int(last)
247 if last < first:
257 if last < first:
248 # Assume it's a count
258 # Assume it's a count
249 last = first + last
259 last = first + last
250 else:
260 else:
251 first = max(1, int(x) - 5)
261 first = max(1, int(x) - 5)
252 except:
262 except:
253 print '*** Error in argument:', `arg`
263 print '*** Error in argument:', `arg`
254 return
264 return
255 elif self.lineno is None:
265 elif self.lineno is None:
256 first = max(1, self.curframe.f_lineno - 5)
266 first = max(1, self.curframe.f_lineno - 5)
257 else:
267 else:
258 first = self.lineno + 1
268 first = self.lineno + 1
259 if last is None:
269 if last is None:
260 last = first + 10
270 last = first + 10
261 filename = self.curframe.f_code.co_filename
271 filename = self.curframe.f_code.co_filename
262 try:
272 try:
263 Colors = self.color_scheme_table.active_colors
273 Colors = self.color_scheme_table.active_colors
264 ColorsNormal = Colors.Normal
274 ColorsNormal = Colors.Normal
265 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
275 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
266 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, ColorsNormal)
276 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, ColorsNormal)
267 src = []
277 src = []
268 for lineno in range(first, last+1):
278 for lineno in range(first, last+1):
269 line = linecache.getline(filename, lineno)
279 line = linecache.getline(filename, lineno)
270 if not line:
280 if not line:
271 break
281 break
272
282
273 if lineno == self.curframe.f_lineno:
283 if lineno == self.curframe.f_lineno:
274 line = self.__format_line(tpl_line_em, filename, lineno, line, arrow = True)
284 line = self.__format_line(tpl_line_em, filename, lineno, line, arrow = True)
275 else:
285 else:
276 line = self.__format_line(tpl_line, filename, lineno, line, arrow = False)
286 line = self.__format_line(tpl_line, filename, lineno, line, arrow = False)
277
287
278 src.append(line)
288 src.append(line)
279 self.lineno = lineno
289 self.lineno = lineno
280
290
281 print >>Term.cout, ''.join(src)
291 print >>Term.cout, ''.join(src)
282
292
283 except KeyboardInterrupt:
293 except KeyboardInterrupt:
284 pass
294 pass
285
295
286 do_l = do_list
296 do_l = do_list
@@ -1,2750 +1,2754 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3
3
4 $Id: Magic.py 1023 2006-01-16 19:11:21Z vivainio $"""
4 $Id: Magic.py 1029 2006-01-18 07:33:38Z fperez $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import sys
29 import sys
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 import cPickle as pickle
34 from cStringIO import StringIO
34 from cStringIO import StringIO
35 from getopt import getopt
35 from getopt import getopt
36 from pprint import pprint, pformat
36 from pprint import pprint, pformat
37
37
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 # Homebrewed
44 # Homebrewed
45 from IPython import Debugger, OInspect, wildcard
45 from IPython import Debugger, OInspect, wildcard
46 from IPython.FakeModule import FakeModule
46 from IPython.FakeModule import FakeModule
47 from IPython.Itpl import Itpl, itpl, printpl,itplns
47 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.PyColorize import Parser
48 from IPython.PyColorize import Parser
49 from IPython.ipstruct import Struct
49 from IPython.ipstruct import Struct
50 from IPython.macro import Macro
50 from IPython.macro import Macro
51 from IPython.genutils import *
51 from IPython.genutils import *
52 from IPython import platutils
52 from IPython import platutils
53 #***************************************************************************
53 #***************************************************************************
54 # Utility functions
54 # Utility functions
55 def on_off(tag):
55 def on_off(tag):
56 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
56 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
57 return ['OFF','ON'][tag]
57 return ['OFF','ON'][tag]
58
58
59 class Bunch: pass
59 class Bunch: pass
60
60
61 #***************************************************************************
61 #***************************************************************************
62 # Main class implementing Magic functionality
62 # Main class implementing Magic functionality
63 class Magic:
63 class Magic:
64 """Magic functions for InteractiveShell.
64 """Magic functions for InteractiveShell.
65
65
66 Shell functions which can be reached as %function_name. All magic
66 Shell functions which can be reached as %function_name. All magic
67 functions should accept a string, which they can parse for their own
67 functions should accept a string, which they can parse for their own
68 needs. This can make some functions easier to type, eg `%cd ../`
68 needs. This can make some functions easier to type, eg `%cd ../`
69 vs. `%cd("../")`
69 vs. `%cd("../")`
70
70
71 ALL definitions MUST begin with the prefix magic_. The user won't need it
71 ALL definitions MUST begin with the prefix magic_. The user won't need it
72 at the command line, but it is is needed in the definition. """
72 at the command line, but it is is needed in the definition. """
73
73
74 # class globals
74 # class globals
75 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
75 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
76 'Automagic is ON, % prefix NOT needed for magic functions.']
76 'Automagic is ON, % prefix NOT needed for magic functions.']
77
77
78 #......................................................................
78 #......................................................................
79 # some utility functions
79 # some utility functions
80
80
81 def __init__(self,shell):
81 def __init__(self,shell):
82
82
83 self.options_table = {}
83 self.options_table = {}
84 if profile is None:
84 if profile is None:
85 self.magic_prun = self.profile_missing_notice
85 self.magic_prun = self.profile_missing_notice
86 self.shell = shell
86 self.shell = shell
87
87
88 # namespace for holding state we may need
88 # namespace for holding state we may need
89 self._magic_state = Bunch()
89 self._magic_state = Bunch()
90
90
91 def profile_missing_notice(self, *args, **kwargs):
91 def profile_missing_notice(self, *args, **kwargs):
92 error("""\
92 error("""\
93 The profile module could not be found. If you are a Debian user,
93 The profile module could not be found. If you are a Debian user,
94 it has been removed from the standard Debian package because of its non-free
94 it has been removed from the standard Debian package because of its non-free
95 license. To use profiling, please install"python2.3-profiler" from non-free.""")
95 license. To use profiling, please install"python2.3-profiler" from non-free.""")
96
96
97 def default_option(self,fn,optstr):
97 def default_option(self,fn,optstr):
98 """Make an entry in the options_table for fn, with value optstr"""
98 """Make an entry in the options_table for fn, with value optstr"""
99
99
100 if fn not in self.lsmagic():
100 if fn not in self.lsmagic():
101 error("%s is not a magic function" % fn)
101 error("%s is not a magic function" % fn)
102 self.options_table[fn] = optstr
102 self.options_table[fn] = optstr
103
103
104 def lsmagic(self):
104 def lsmagic(self):
105 """Return a list of currently available magic functions.
105 """Return a list of currently available magic functions.
106
106
107 Gives a list of the bare names after mangling (['ls','cd', ...], not
107 Gives a list of the bare names after mangling (['ls','cd', ...], not
108 ['magic_ls','magic_cd',...]"""
108 ['magic_ls','magic_cd',...]"""
109
109
110 # FIXME. This needs a cleanup, in the way the magics list is built.
110 # FIXME. This needs a cleanup, in the way the magics list is built.
111
111
112 # magics in class definition
112 # magics in class definition
113 class_magic = lambda fn: fn.startswith('magic_') and \
113 class_magic = lambda fn: fn.startswith('magic_') and \
114 callable(Magic.__dict__[fn])
114 callable(Magic.__dict__[fn])
115 # in instance namespace (run-time user additions)
115 # in instance namespace (run-time user additions)
116 inst_magic = lambda fn: fn.startswith('magic_') and \
116 inst_magic = lambda fn: fn.startswith('magic_') and \
117 callable(self.__dict__[fn])
117 callable(self.__dict__[fn])
118 # and bound magics by user (so they can access self):
118 # and bound magics by user (so they can access self):
119 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
119 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
120 callable(self.__class__.__dict__[fn])
120 callable(self.__class__.__dict__[fn])
121 magics = filter(class_magic,Magic.__dict__.keys()) + \
121 magics = filter(class_magic,Magic.__dict__.keys()) + \
122 filter(inst_magic,self.__dict__.keys()) + \
122 filter(inst_magic,self.__dict__.keys()) + \
123 filter(inst_bound_magic,self.__class__.__dict__.keys())
123 filter(inst_bound_magic,self.__class__.__dict__.keys())
124 out = []
124 out = []
125 for fn in magics:
125 for fn in magics:
126 out.append(fn.replace('magic_','',1))
126 out.append(fn.replace('magic_','',1))
127 out.sort()
127 out.sort()
128 return out
128 return out
129
129
130 def extract_input_slices(self,slices):
130 def extract_input_slices(self,slices):
131 """Return as a string a set of input history slices.
131 """Return as a string a set of input history slices.
132
132
133 The set of slices is given as a list of strings (like ['1','4:8','9'],
133 The set of slices is given as a list of strings (like ['1','4:8','9'],
134 since this function is for use by magic functions which get their
134 since this function is for use by magic functions which get their
135 arguments as strings.
135 arguments as strings.
136
136
137 Note that slices can be called with two notations:
137 Note that slices can be called with two notations:
138
138
139 N:M -> standard python form, means including items N...(M-1).
139 N:M -> standard python form, means including items N...(M-1).
140
140
141 N-M -> include items N..M (closed endpoint)."""
141 N-M -> include items N..M (closed endpoint)."""
142
142
143 cmds = []
143 cmds = []
144 for chunk in slices:
144 for chunk in slices:
145 if ':' in chunk:
145 if ':' in chunk:
146 ini,fin = map(int,chunk.split(':'))
146 ini,fin = map(int,chunk.split(':'))
147 elif '-' in chunk:
147 elif '-' in chunk:
148 ini,fin = map(int,chunk.split('-'))
148 ini,fin = map(int,chunk.split('-'))
149 fin += 1
149 fin += 1
150 else:
150 else:
151 ini = int(chunk)
151 ini = int(chunk)
152 fin = ini+1
152 fin = ini+1
153 cmds.append(self.shell.input_hist[ini:fin])
153 cmds.append(self.shell.input_hist[ini:fin])
154 return cmds
154 return cmds
155
155
156 def _ofind(self,oname):
156 def _ofind(self,oname):
157 """Find an object in the available namespaces.
157 """Find an object in the available namespaces.
158
158
159 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
159 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
160
160
161 Has special code to detect magic functions.
161 Has special code to detect magic functions.
162 """
162 """
163
163
164 oname = oname.strip()
164 oname = oname.strip()
165
165
166 # Namespaces to search in:
166 # Namespaces to search in:
167 user_ns = self.shell.user_ns
167 user_ns = self.shell.user_ns
168 internal_ns = self.shell.internal_ns
168 internal_ns = self.shell.internal_ns
169 builtin_ns = __builtin__.__dict__
169 builtin_ns = __builtin__.__dict__
170 alias_ns = self.shell.alias_table
170 alias_ns = self.shell.alias_table
171
171
172 # Put them in a list. The order is important so that we find things in
172 # Put them in a list. The order is important so that we find things in
173 # the same order that Python finds them.
173 # the same order that Python finds them.
174 namespaces = [ ('Interactive',user_ns),
174 namespaces = [ ('Interactive',user_ns),
175 ('IPython internal',internal_ns),
175 ('IPython internal',internal_ns),
176 ('Python builtin',builtin_ns),
176 ('Python builtin',builtin_ns),
177 ('Alias',alias_ns),
177 ('Alias',alias_ns),
178 ]
178 ]
179
179
180 # initialize results to 'null'
180 # initialize results to 'null'
181 found = 0; obj = None; ospace = None; ds = None;
181 found = 0; obj = None; ospace = None; ds = None;
182 ismagic = 0; isalias = 0
182 ismagic = 0; isalias = 0
183
183
184 # Look for the given name by splitting it in parts. If the head is
184 # Look for the given name by splitting it in parts. If the head is
185 # found, then we look for all the remaining parts as members, and only
185 # found, then we look for all the remaining parts as members, and only
186 # declare success if we can find them all.
186 # declare success if we can find them all.
187 oname_parts = oname.split('.')
187 oname_parts = oname.split('.')
188 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
188 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
189 for nsname,ns in namespaces:
189 for nsname,ns in namespaces:
190 try:
190 try:
191 obj = ns[oname_head]
191 obj = ns[oname_head]
192 except KeyError:
192 except KeyError:
193 continue
193 continue
194 else:
194 else:
195 for part in oname_rest:
195 for part in oname_rest:
196 try:
196 try:
197 obj = getattr(obj,part)
197 obj = getattr(obj,part)
198 except:
198 except:
199 # Blanket except b/c some badly implemented objects
199 # Blanket except b/c some badly implemented objects
200 # allow __getattr__ to raise exceptions other than
200 # allow __getattr__ to raise exceptions other than
201 # AttributeError, which then crashes IPython.
201 # AttributeError, which then crashes IPython.
202 break
202 break
203 else:
203 else:
204 # If we finish the for loop (no break), we got all members
204 # If we finish the for loop (no break), we got all members
205 found = 1
205 found = 1
206 ospace = nsname
206 ospace = nsname
207 if ns == alias_ns:
207 if ns == alias_ns:
208 isalias = 1
208 isalias = 1
209 break # namespace loop
209 break # namespace loop
210
210
211 # Try to see if it's magic
211 # Try to see if it's magic
212 if not found:
212 if not found:
213 if oname.startswith(self.shell.ESC_MAGIC):
213 if oname.startswith(self.shell.ESC_MAGIC):
214 oname = oname[1:]
214 oname = oname[1:]
215 obj = getattr(self,'magic_'+oname,None)
215 obj = getattr(self,'magic_'+oname,None)
216 if obj is not None:
216 if obj is not None:
217 found = 1
217 found = 1
218 ospace = 'IPython internal'
218 ospace = 'IPython internal'
219 ismagic = 1
219 ismagic = 1
220
220
221 # Last try: special-case some literals like '', [], {}, etc:
221 # Last try: special-case some literals like '', [], {}, etc:
222 if not found and oname_head in ["''",'""','[]','{}','()']:
222 if not found and oname_head in ["''",'""','[]','{}','()']:
223 obj = eval(oname_head)
223 obj = eval(oname_head)
224 found = 1
224 found = 1
225 ospace = 'Interactive'
225 ospace = 'Interactive'
226
226
227 return {'found':found, 'obj':obj, 'namespace':ospace,
227 return {'found':found, 'obj':obj, 'namespace':ospace,
228 'ismagic':ismagic, 'isalias':isalias}
228 'ismagic':ismagic, 'isalias':isalias}
229
229
230 def arg_err(self,func):
230 def arg_err(self,func):
231 """Print docstring if incorrect arguments were passed"""
231 """Print docstring if incorrect arguments were passed"""
232 print 'Error in arguments:'
232 print 'Error in arguments:'
233 print OInspect.getdoc(func)
233 print OInspect.getdoc(func)
234
234
235 def format_latex(self,strng):
235 def format_latex(self,strng):
236 """Format a string for latex inclusion."""
236 """Format a string for latex inclusion."""
237
237
238 # Characters that need to be escaped for latex:
238 # Characters that need to be escaped for latex:
239 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
239 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
240 # Magic command names as headers:
240 # Magic command names as headers:
241 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
241 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
242 re.MULTILINE)
242 re.MULTILINE)
243 # Magic commands
243 # Magic commands
244 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
244 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
245 re.MULTILINE)
245 re.MULTILINE)
246 # Paragraph continue
246 # Paragraph continue
247 par_re = re.compile(r'\\$',re.MULTILINE)
247 par_re = re.compile(r'\\$',re.MULTILINE)
248
248
249 # The "\n" symbol
249 # The "\n" symbol
250 newline_re = re.compile(r'\\n')
250 newline_re = re.compile(r'\\n')
251
251
252 # Now build the string for output:
252 # Now build the string for output:
253 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
253 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
254 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
254 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
255 strng)
255 strng)
256 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
256 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
257 strng = par_re.sub(r'\\\\',strng)
257 strng = par_re.sub(r'\\\\',strng)
258 strng = escape_re.sub(r'\\\1',strng)
258 strng = escape_re.sub(r'\\\1',strng)
259 strng = newline_re.sub(r'\\textbackslash{}n',strng)
259 strng = newline_re.sub(r'\\textbackslash{}n',strng)
260 return strng
260 return strng
261
261
262 def format_screen(self,strng):
262 def format_screen(self,strng):
263 """Format a string for screen printing.
263 """Format a string for screen printing.
264
264
265 This removes some latex-type format codes."""
265 This removes some latex-type format codes."""
266 # Paragraph continue
266 # Paragraph continue
267 par_re = re.compile(r'\\$',re.MULTILINE)
267 par_re = re.compile(r'\\$',re.MULTILINE)
268 strng = par_re.sub('',strng)
268 strng = par_re.sub('',strng)
269 return strng
269 return strng
270
270
271 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
271 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
272 """Parse options passed to an argument string.
272 """Parse options passed to an argument string.
273
273
274 The interface is similar to that of getopt(), but it returns back a
274 The interface is similar to that of getopt(), but it returns back a
275 Struct with the options as keys and the stripped argument string still
275 Struct with the options as keys and the stripped argument string still
276 as a string.
276 as a string.
277
277
278 arg_str is quoted as a true sys.argv vector by using shlex.split.
278 arg_str is quoted as a true sys.argv vector by using shlex.split.
279 This allows us to easily expand variables, glob files, quote
279 This allows us to easily expand variables, glob files, quote
280 arguments, etc.
280 arguments, etc.
281
281
282 Options:
282 Options:
283 -mode: default 'string'. If given as 'list', the argument string is
283 -mode: default 'string'. If given as 'list', the argument string is
284 returned as a list (split on whitespace) instead of a string.
284 returned as a list (split on whitespace) instead of a string.
285
285
286 -list_all: put all option values in lists. Normally only options
286 -list_all: put all option values in lists. Normally only options
287 appearing more than once are put in a list."""
287 appearing more than once are put in a list."""
288
288
289 # inject default options at the beginning of the input line
289 # inject default options at the beginning of the input line
290 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
290 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
291 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
291 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
292
292
293 mode = kw.get('mode','string')
293 mode = kw.get('mode','string')
294 if mode not in ['string','list']:
294 if mode not in ['string','list']:
295 raise ValueError,'incorrect mode given: %s' % mode
295 raise ValueError,'incorrect mode given: %s' % mode
296 # Get options
296 # Get options
297 list_all = kw.get('list_all',0)
297 list_all = kw.get('list_all',0)
298
298
299 # Check if we have more than one argument to warrant extra processing:
299 # Check if we have more than one argument to warrant extra processing:
300 odict = {} # Dictionary with options
300 odict = {} # Dictionary with options
301 args = arg_str.split()
301 args = arg_str.split()
302 if len(args) >= 1:
302 if len(args) >= 1:
303 # If the list of inputs only has 0 or 1 thing in it, there's no
303 # If the list of inputs only has 0 or 1 thing in it, there's no
304 # need to look for options
304 # need to look for options
305 argv = shlex_split(arg_str)
305 argv = shlex_split(arg_str)
306 # Do regular option processing
306 # Do regular option processing
307 opts,args = getopt(argv,opt_str,*long_opts)
307 opts,args = getopt(argv,opt_str,*long_opts)
308 for o,a in opts:
308 for o,a in opts:
309 if o.startswith('--'):
309 if o.startswith('--'):
310 o = o[2:]
310 o = o[2:]
311 else:
311 else:
312 o = o[1:]
312 o = o[1:]
313 try:
313 try:
314 odict[o].append(a)
314 odict[o].append(a)
315 except AttributeError:
315 except AttributeError:
316 odict[o] = [odict[o],a]
316 odict[o] = [odict[o],a]
317 except KeyError:
317 except KeyError:
318 if list_all:
318 if list_all:
319 odict[o] = [a]
319 odict[o] = [a]
320 else:
320 else:
321 odict[o] = a
321 odict[o] = a
322
322
323 # Prepare opts,args for return
323 # Prepare opts,args for return
324 opts = Struct(odict)
324 opts = Struct(odict)
325 if mode == 'string':
325 if mode == 'string':
326 args = ' '.join(args)
326 args = ' '.join(args)
327
327
328 return opts,args
328 return opts,args
329
329
330 #......................................................................
330 #......................................................................
331 # And now the actual magic functions
331 # And now the actual magic functions
332
332
333 # Functions for IPython shell work (vars,funcs, config, etc)
333 # Functions for IPython shell work (vars,funcs, config, etc)
334 def magic_lsmagic(self, parameter_s = ''):
334 def magic_lsmagic(self, parameter_s = ''):
335 """List currently available magic functions."""
335 """List currently available magic functions."""
336 mesc = self.shell.ESC_MAGIC
336 mesc = self.shell.ESC_MAGIC
337 print 'Available magic functions:\n'+mesc+\
337 print 'Available magic functions:\n'+mesc+\
338 (' '+mesc).join(self.lsmagic())
338 (' '+mesc).join(self.lsmagic())
339 print '\n' + Magic.auto_status[self.shell.rc.automagic]
339 print '\n' + Magic.auto_status[self.shell.rc.automagic]
340 return None
340 return None
341
341
342 def magic_magic(self, parameter_s = ''):
342 def magic_magic(self, parameter_s = ''):
343 """Print information about the magic function system."""
343 """Print information about the magic function system."""
344
344
345 mode = ''
345 mode = ''
346 try:
346 try:
347 if parameter_s.split()[0] == '-latex':
347 if parameter_s.split()[0] == '-latex':
348 mode = 'latex'
348 mode = 'latex'
349 except:
349 except:
350 pass
350 pass
351
351
352 magic_docs = []
352 magic_docs = []
353 for fname in self.lsmagic():
353 for fname in self.lsmagic():
354 mname = 'magic_' + fname
354 mname = 'magic_' + fname
355 for space in (Magic,self,self.__class__):
355 for space in (Magic,self,self.__class__):
356 try:
356 try:
357 fn = space.__dict__[mname]
357 fn = space.__dict__[mname]
358 except KeyError:
358 except KeyError:
359 pass
359 pass
360 else:
360 else:
361 break
361 break
362 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
362 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
363 fname,fn.__doc__))
363 fname,fn.__doc__))
364 magic_docs = ''.join(magic_docs)
364 magic_docs = ''.join(magic_docs)
365
365
366 if mode == 'latex':
366 if mode == 'latex':
367 print self.format_latex(magic_docs)
367 print self.format_latex(magic_docs)
368 return
368 return
369 else:
369 else:
370 magic_docs = self.format_screen(magic_docs)
370 magic_docs = self.format_screen(magic_docs)
371
371
372 outmsg = """
372 outmsg = """
373 IPython's 'magic' functions
373 IPython's 'magic' functions
374 ===========================
374 ===========================
375
375
376 The magic function system provides a series of functions which allow you to
376 The magic function system provides a series of functions which allow you to
377 control the behavior of IPython itself, plus a lot of system-type
377 control the behavior of IPython itself, plus a lot of system-type
378 features. All these functions are prefixed with a % character, but parameters
378 features. All these functions are prefixed with a % character, but parameters
379 are given without parentheses or quotes.
379 are given without parentheses or quotes.
380
380
381 NOTE: If you have 'automagic' enabled (via the command line option or with the
381 NOTE: If you have 'automagic' enabled (via the command line option or with the
382 %automagic function), you don't need to type in the % explicitly. By default,
382 %automagic function), you don't need to type in the % explicitly. By default,
383 IPython ships with automagic on, so you should only rarely need the % escape.
383 IPython ships with automagic on, so you should only rarely need the % escape.
384
384
385 Example: typing '%cd mydir' (without the quotes) changes you working directory
385 Example: typing '%cd mydir' (without the quotes) changes you working directory
386 to 'mydir', if it exists.
386 to 'mydir', if it exists.
387
387
388 You can define your own magic functions to extend the system. See the supplied
388 You can define your own magic functions to extend the system. See the supplied
389 ipythonrc and example-magic.py files for details (in your ipython
389 ipythonrc and example-magic.py files for details (in your ipython
390 configuration directory, typically $HOME/.ipython/).
390 configuration directory, typically $HOME/.ipython/).
391
391
392 You can also define your own aliased names for magic functions. In your
392 You can also define your own aliased names for magic functions. In your
393 ipythonrc file, placing a line like:
393 ipythonrc file, placing a line like:
394
394
395 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
395 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
396
396
397 will define %pf as a new name for %profile.
397 will define %pf as a new name for %profile.
398
398
399 You can also call magics in code using the ipmagic() function, which IPython
399 You can also call magics in code using the ipmagic() function, which IPython
400 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
400 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
401
401
402 For a list of the available magic functions, use %lsmagic. For a description
402 For a list of the available magic functions, use %lsmagic. For a description
403 of any of them, type %magic_name?, e.g. '%cd?'.
403 of any of them, type %magic_name?, e.g. '%cd?'.
404
404
405 Currently the magic system has the following functions:\n"""
405 Currently the magic system has the following functions:\n"""
406
406
407 mesc = self.shell.ESC_MAGIC
407 mesc = self.shell.ESC_MAGIC
408 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
408 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
409 "\n\n%s%s\n\n%s" % (outmsg,
409 "\n\n%s%s\n\n%s" % (outmsg,
410 magic_docs,mesc,mesc,
410 magic_docs,mesc,mesc,
411 (' '+mesc).join(self.lsmagic()),
411 (' '+mesc).join(self.lsmagic()),
412 Magic.auto_status[self.shell.rc.automagic] ) )
412 Magic.auto_status[self.shell.rc.automagic] ) )
413
413
414 page(outmsg,screen_lines=self.shell.rc.screen_length)
414 page(outmsg,screen_lines=self.shell.rc.screen_length)
415
415
416 def magic_automagic(self, parameter_s = ''):
416 def magic_automagic(self, parameter_s = ''):
417 """Make magic functions callable without having to type the initial %.
417 """Make magic functions callable without having to type the initial %.
418
418
419 Toggles on/off (when off, you must call it as %automagic, of
419 Toggles on/off (when off, you must call it as %automagic, of
420 course). Note that magic functions have lowest priority, so if there's
420 course). Note that magic functions have lowest priority, so if there's
421 a variable whose name collides with that of a magic fn, automagic
421 a variable whose name collides with that of a magic fn, automagic
422 won't work for that function (you get the variable instead). However,
422 won't work for that function (you get the variable instead). However,
423 if you delete the variable (del var), the previously shadowed magic
423 if you delete the variable (del var), the previously shadowed magic
424 function becomes visible to automagic again."""
424 function becomes visible to automagic again."""
425
425
426 rc = self.shell.rc
426 rc = self.shell.rc
427 rc.automagic = not rc.automagic
427 rc.automagic = not rc.automagic
428 print '\n' + Magic.auto_status[rc.automagic]
428 print '\n' + Magic.auto_status[rc.automagic]
429
429
430 def magic_autocall(self, parameter_s = ''):
430 def magic_autocall(self, parameter_s = ''):
431 """Make functions callable without having to type parentheses.
431 """Make functions callable without having to type parentheses.
432
432
433 Usage:
433 Usage:
434
434
435 %autocall [mode]
435 %autocall [mode]
436
436
437 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
437 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
438 value is toggled on and off (remembering the previous state)."""
438 value is toggled on and off (remembering the previous state)."""
439
439
440 rc = self.shell.rc
440 rc = self.shell.rc
441
441
442 if parameter_s:
442 if parameter_s:
443 arg = int(parameter_s)
443 arg = int(parameter_s)
444 else:
444 else:
445 arg = 'toggle'
445 arg = 'toggle'
446
446
447 if not arg in (0,1,2,'toggle'):
447 if not arg in (0,1,2,'toggle'):
448 error('Valid modes: (0->Off, 1->Smart, 2->Full')
448 error('Valid modes: (0->Off, 1->Smart, 2->Full')
449 return
449 return
450
450
451 if arg in (0,1,2):
451 if arg in (0,1,2):
452 rc.autocall = arg
452 rc.autocall = arg
453 else: # toggle
453 else: # toggle
454 if rc.autocall:
454 if rc.autocall:
455 self._magic_state.autocall_save = rc.autocall
455 self._magic_state.autocall_save = rc.autocall
456 rc.autocall = 0
456 rc.autocall = 0
457 else:
457 else:
458 try:
458 try:
459 rc.autocall = self._magic_state.autocall_save
459 rc.autocall = self._magic_state.autocall_save
460 except AttributeError:
460 except AttributeError:
461 rc.autocall = self._magic_state.autocall_save = 1
461 rc.autocall = self._magic_state.autocall_save = 1
462
462
463 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
463 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
464
464
465 def magic_autoindent(self, parameter_s = ''):
465 def magic_autoindent(self, parameter_s = ''):
466 """Toggle autoindent on/off (if available)."""
466 """Toggle autoindent on/off (if available)."""
467
467
468 self.shell.set_autoindent()
468 self.shell.set_autoindent()
469 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
469 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
470
470
471 def magic_system_verbose(self, parameter_s = ''):
471 def magic_system_verbose(self, parameter_s = ''):
472 """Toggle verbose printing of system calls on/off."""
472 """Toggle verbose printing of system calls on/off."""
473
473
474 self.shell.rc_set_toggle('system_verbose')
474 self.shell.rc_set_toggle('system_verbose')
475 print "System verbose printing is:",\
475 print "System verbose printing is:",\
476 ['OFF','ON'][self.shell.rc.system_verbose]
476 ['OFF','ON'][self.shell.rc.system_verbose]
477
477
478 def magic_history(self, parameter_s = ''):
478 def magic_history(self, parameter_s = ''):
479 """Print input history (_i<n> variables), with most recent last.
479 """Print input history (_i<n> variables), with most recent last.
480
480
481 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
481 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
482 %history [-n] n -> print at most n inputs\\
482 %history [-n] n -> print at most n inputs\\
483 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
483 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
484
484
485 Each input's number <n> is shown, and is accessible as the
485 Each input's number <n> is shown, and is accessible as the
486 automatically generated variable _i<n>. Multi-line statements are
486 automatically generated variable _i<n>. Multi-line statements are
487 printed starting at a new line for easy copy/paste.
487 printed starting at a new line for easy copy/paste.
488
488
489 If option -n is used, input numbers are not printed. This is useful if
489 If option -n is used, input numbers are not printed. This is useful if
490 you want to get a printout of many lines which can be directly pasted
490 you want to get a printout of many lines which can be directly pasted
491 into a text editor.
491 into a text editor.
492
492
493 This feature is only available if numbered prompts are in use."""
493 This feature is only available if numbered prompts are in use."""
494
494
495 shell = self.shell
495 shell = self.shell
496 if not shell.outputcache.do_full_cache:
496 if not shell.outputcache.do_full_cache:
497 print 'This feature is only available if numbered prompts are in use.'
497 print 'This feature is only available if numbered prompts are in use.'
498 return
498 return
499 opts,args = self.parse_options(parameter_s,'n',mode='list')
499 opts,args = self.parse_options(parameter_s,'n',mode='list')
500
500
501 input_hist = shell.input_hist
501 input_hist = shell.input_hist
502 default_length = 40
502 default_length = 40
503 if len(args) == 0:
503 if len(args) == 0:
504 final = len(input_hist)
504 final = len(input_hist)
505 init = max(1,final-default_length)
505 init = max(1,final-default_length)
506 elif len(args) == 1:
506 elif len(args) == 1:
507 final = len(input_hist)
507 final = len(input_hist)
508 init = max(1,final-int(args[0]))
508 init = max(1,final-int(args[0]))
509 elif len(args) == 2:
509 elif len(args) == 2:
510 init,final = map(int,args)
510 init,final = map(int,args)
511 else:
511 else:
512 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
512 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
513 print self.magic_hist.__doc__
513 print self.magic_hist.__doc__
514 return
514 return
515 width = len(str(final))
515 width = len(str(final))
516 line_sep = ['','\n']
516 line_sep = ['','\n']
517 print_nums = not opts.has_key('n')
517 print_nums = not opts.has_key('n')
518 for in_num in range(init,final):
518 for in_num in range(init,final):
519 inline = input_hist[in_num]
519 inline = input_hist[in_num]
520 multiline = int(inline.count('\n') > 1)
520 multiline = int(inline.count('\n') > 1)
521 if print_nums:
521 if print_nums:
522 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
522 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
523 print inline,
523 print inline,
524
524
525 def magic_hist(self, parameter_s=''):
525 def magic_hist(self, parameter_s=''):
526 """Alternate name for %history."""
526 """Alternate name for %history."""
527 return self.magic_history(parameter_s)
527 return self.magic_history(parameter_s)
528
528
529 def magic_p(self, parameter_s=''):
529 def magic_p(self, parameter_s=''):
530 """Just a short alias for Python's 'print'."""
530 """Just a short alias for Python's 'print'."""
531 exec 'print ' + parameter_s in self.shell.user_ns
531 exec 'print ' + parameter_s in self.shell.user_ns
532
532
533 def magic_r(self, parameter_s=''):
533 def magic_r(self, parameter_s=''):
534 """Repeat previous input.
534 """Repeat previous input.
535
535
536 If given an argument, repeats the previous command which starts with
536 If given an argument, repeats the previous command which starts with
537 the same string, otherwise it just repeats the previous input.
537 the same string, otherwise it just repeats the previous input.
538
538
539 Shell escaped commands (with ! as first character) are not recognized
539 Shell escaped commands (with ! as first character) are not recognized
540 by this system, only pure python code and magic commands.
540 by this system, only pure python code and magic commands.
541 """
541 """
542
542
543 start = parameter_s.strip()
543 start = parameter_s.strip()
544 esc_magic = self.shell.ESC_MAGIC
544 esc_magic = self.shell.ESC_MAGIC
545 # Identify magic commands even if automagic is on (which means
545 # Identify magic commands even if automagic is on (which means
546 # the in-memory version is different from that typed by the user).
546 # the in-memory version is different from that typed by the user).
547 if self.shell.rc.automagic:
547 if self.shell.rc.automagic:
548 start_magic = esc_magic+start
548 start_magic = esc_magic+start
549 else:
549 else:
550 start_magic = start
550 start_magic = start
551 # Look through the input history in reverse
551 # Look through the input history in reverse
552 for n in range(len(self.shell.input_hist)-2,0,-1):
552 for n in range(len(self.shell.input_hist)-2,0,-1):
553 input = self.shell.input_hist[n]
553 input = self.shell.input_hist[n]
554 # skip plain 'r' lines so we don't recurse to infinity
554 # skip plain 'r' lines so we don't recurse to infinity
555 if input != 'ipmagic("r")\n' and \
555 if input != 'ipmagic("r")\n' and \
556 (input.startswith(start) or input.startswith(start_magic)):
556 (input.startswith(start) or input.startswith(start_magic)):
557 #print 'match',`input` # dbg
557 #print 'match',`input` # dbg
558 print 'Executing:',input,
558 print 'Executing:',input,
559 self.shell.runlines(input)
559 self.shell.runlines(input)
560 return
560 return
561 print 'No previous input matching `%s` found.' % start
561 print 'No previous input matching `%s` found.' % start
562
562
563 def magic_page(self, parameter_s=''):
563 def magic_page(self, parameter_s=''):
564 """Pretty print the object and display it through a pager.
564 """Pretty print the object and display it through a pager.
565
565
566 If no parameter is given, use _ (last output)."""
566 If no parameter is given, use _ (last output)."""
567 # After a function contributed by Olivier Aubert, slightly modified.
567 # After a function contributed by Olivier Aubert, slightly modified.
568
568
569 oname = parameter_s and parameter_s or '_'
569 oname = parameter_s and parameter_s or '_'
570 info = self._ofind(oname)
570 info = self._ofind(oname)
571 if info['found']:
571 if info['found']:
572 page(pformat(info['obj']))
572 page(pformat(info['obj']))
573 else:
573 else:
574 print 'Object `%s` not found' % oname
574 print 'Object `%s` not found' % oname
575
575
576 def magic_profile(self, parameter_s=''):
576 def magic_profile(self, parameter_s=''):
577 """Print your currently active IPyhton profile."""
577 """Print your currently active IPyhton profile."""
578 if self.shell.rc.profile:
578 if self.shell.rc.profile:
579 printpl('Current IPython profile: $self.shell.rc.profile.')
579 printpl('Current IPython profile: $self.shell.rc.profile.')
580 else:
580 else:
581 print 'No profile active.'
581 print 'No profile active.'
582
582
583 def _inspect(self,meth,oname,**kw):
583 def _inspect(self,meth,oname,**kw):
584 """Generic interface to the inspector system.
584 """Generic interface to the inspector system.
585
585
586 This function is meant to be called by pdef, pdoc & friends."""
586 This function is meant to be called by pdef, pdoc & friends."""
587
587
588 oname = oname.strip()
588 oname = oname.strip()
589 info = Struct(self._ofind(oname))
589 info = Struct(self._ofind(oname))
590 if info.found:
590 if info.found:
591 pmethod = getattr(self.shell.inspector,meth)
591 pmethod = getattr(self.shell.inspector,meth)
592 formatter = info.ismagic and self.format_screen or None
592 formatter = info.ismagic and self.format_screen or None
593 if meth == 'pdoc':
593 if meth == 'pdoc':
594 pmethod(info.obj,oname,formatter)
594 pmethod(info.obj,oname,formatter)
595 elif meth == 'pinfo':
595 elif meth == 'pinfo':
596 pmethod(info.obj,oname,formatter,info,**kw)
596 pmethod(info.obj,oname,formatter,info,**kw)
597 else:
597 else:
598 pmethod(info.obj,oname)
598 pmethod(info.obj,oname)
599 else:
599 else:
600 print 'Object `%s` not found.' % oname
600 print 'Object `%s` not found.' % oname
601 return 'not found' # so callers can take other action
601 return 'not found' # so callers can take other action
602
602
603 def magic_pdef(self, parameter_s=''):
603 def magic_pdef(self, parameter_s=''):
604 """Print the definition header for any callable object.
604 """Print the definition header for any callable object.
605
605
606 If the object is a class, print the constructor information."""
606 If the object is a class, print the constructor information."""
607 self._inspect('pdef',parameter_s)
607 self._inspect('pdef',parameter_s)
608
608
609 def magic_pdoc(self, parameter_s=''):
609 def magic_pdoc(self, parameter_s=''):
610 """Print the docstring for an object.
610 """Print the docstring for an object.
611
611
612 If the given object is a class, it will print both the class and the
612 If the given object is a class, it will print both the class and the
613 constructor docstrings."""
613 constructor docstrings."""
614 self._inspect('pdoc',parameter_s)
614 self._inspect('pdoc',parameter_s)
615
615
616 def magic_psource(self, parameter_s=''):
616 def magic_psource(self, parameter_s=''):
617 """Print (or run through pager) the source code for an object."""
617 """Print (or run through pager) the source code for an object."""
618 self._inspect('psource',parameter_s)
618 self._inspect('psource',parameter_s)
619
619
620 def magic_pfile(self, parameter_s=''):
620 def magic_pfile(self, parameter_s=''):
621 """Print (or run through pager) the file where an object is defined.
621 """Print (or run through pager) the file where an object is defined.
622
622
623 The file opens at the line where the object definition begins. IPython
623 The file opens at the line where the object definition begins. IPython
624 will honor the environment variable PAGER if set, and otherwise will
624 will honor the environment variable PAGER if set, and otherwise will
625 do its best to print the file in a convenient form.
625 do its best to print the file in a convenient form.
626
626
627 If the given argument is not an object currently defined, IPython will
627 If the given argument is not an object currently defined, IPython will
628 try to interpret it as a filename (automatically adding a .py extension
628 try to interpret it as a filename (automatically adding a .py extension
629 if needed). You can thus use %pfile as a syntax highlighting code
629 if needed). You can thus use %pfile as a syntax highlighting code
630 viewer."""
630 viewer."""
631
631
632 # first interpret argument as an object name
632 # first interpret argument as an object name
633 out = self._inspect('pfile',parameter_s)
633 out = self._inspect('pfile',parameter_s)
634 # if not, try the input as a filename
634 # if not, try the input as a filename
635 if out == 'not found':
635 if out == 'not found':
636 try:
636 try:
637 filename = get_py_filename(parameter_s)
637 filename = get_py_filename(parameter_s)
638 except IOError,msg:
638 except IOError,msg:
639 print msg
639 print msg
640 return
640 return
641 page(self.shell.inspector.format(file(filename).read()))
641 page(self.shell.inspector.format(file(filename).read()))
642
642
643 def magic_pinfo(self, parameter_s=''):
643 def magic_pinfo(self, parameter_s=''):
644 """Provide detailed information about an object.
644 """Provide detailed information about an object.
645
645
646 '%pinfo object' is just a synonym for object? or ?object."""
646 '%pinfo object' is just a synonym for object? or ?object."""
647
647
648 #print 'pinfo par: <%s>' % parameter_s # dbg
648 #print 'pinfo par: <%s>' % parameter_s # dbg
649
649
650 # detail_level: 0 -> obj? , 1 -> obj??
650 # detail_level: 0 -> obj? , 1 -> obj??
651 detail_level = 0
651 detail_level = 0
652 # We need to detect if we got called as 'pinfo pinfo foo', which can
652 # We need to detect if we got called as 'pinfo pinfo foo', which can
653 # happen if the user types 'pinfo foo?' at the cmd line.
653 # happen if the user types 'pinfo foo?' at the cmd line.
654 pinfo,qmark1,oname,qmark2 = \
654 pinfo,qmark1,oname,qmark2 = \
655 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
655 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
656 if pinfo or qmark1 or qmark2:
656 if pinfo or qmark1 or qmark2:
657 detail_level = 1
657 detail_level = 1
658 if "*" in oname:
658 if "*" in oname:
659 self.magic_psearch(oname)
659 self.magic_psearch(oname)
660 else:
660 else:
661 self._inspect('pinfo',oname,detail_level=detail_level)
661 self._inspect('pinfo',oname,detail_level=detail_level)
662
662
663 def magic_psearch(self, parameter_s=''):
663 def magic_psearch(self, parameter_s=''):
664 """Search for object in namespaces by wildcard.
664 """Search for object in namespaces by wildcard.
665
665
666 %psearch [options] PATTERN [OBJECT TYPE]
666 %psearch [options] PATTERN [OBJECT TYPE]
667
667
668 Note: ? can be used as a synonym for %psearch, at the beginning or at
668 Note: ? can be used as a synonym for %psearch, at the beginning or at
669 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
669 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
670 rest of the command line must be unchanged (options come first), so
670 rest of the command line must be unchanged (options come first), so
671 for example the following forms are equivalent
671 for example the following forms are equivalent
672
672
673 %psearch -i a* function
673 %psearch -i a* function
674 -i a* function?
674 -i a* function?
675 ?-i a* function
675 ?-i a* function
676
676
677 Arguments:
677 Arguments:
678
678
679 PATTERN
679 PATTERN
680
680
681 where PATTERN is a string containing * as a wildcard similar to its
681 where PATTERN is a string containing * as a wildcard similar to its
682 use in a shell. The pattern is matched in all namespaces on the
682 use in a shell. The pattern is matched in all namespaces on the
683 search path. By default objects starting with a single _ are not
683 search path. By default objects starting with a single _ are not
684 matched, many IPython generated objects have a single
684 matched, many IPython generated objects have a single
685 underscore. The default is case insensitive matching. Matching is
685 underscore. The default is case insensitive matching. Matching is
686 also done on the attributes of objects and not only on the objects
686 also done on the attributes of objects and not only on the objects
687 in a module.
687 in a module.
688
688
689 [OBJECT TYPE]
689 [OBJECT TYPE]
690
690
691 Is the name of a python type from the types module. The name is
691 Is the name of a python type from the types module. The name is
692 given in lowercase without the ending type, ex. StringType is
692 given in lowercase without the ending type, ex. StringType is
693 written string. By adding a type here only objects matching the
693 written string. By adding a type here only objects matching the
694 given type are matched. Using all here makes the pattern match all
694 given type are matched. Using all here makes the pattern match all
695 types (this is the default).
695 types (this is the default).
696
696
697 Options:
697 Options:
698
698
699 -a: makes the pattern match even objects whose names start with a
699 -a: makes the pattern match even objects whose names start with a
700 single underscore. These names are normally ommitted from the
700 single underscore. These names are normally ommitted from the
701 search.
701 search.
702
702
703 -i/-c: make the pattern case insensitive/sensitive. If neither of
703 -i/-c: make the pattern case insensitive/sensitive. If neither of
704 these options is given, the default is read from your ipythonrc
704 these options is given, the default is read from your ipythonrc
705 file. The option name which sets this value is
705 file. The option name which sets this value is
706 'wildcards_case_sensitive'. If this option is not specified in your
706 'wildcards_case_sensitive'. If this option is not specified in your
707 ipythonrc file, IPython's internal default is to do a case sensitive
707 ipythonrc file, IPython's internal default is to do a case sensitive
708 search.
708 search.
709
709
710 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
710 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
711 specifiy can be searched in any of the following namespaces:
711 specifiy can be searched in any of the following namespaces:
712 'builtin', 'user', 'user_global','internal', 'alias', where
712 'builtin', 'user', 'user_global','internal', 'alias', where
713 'builtin' and 'user' are the search defaults. Note that you should
713 'builtin' and 'user' are the search defaults. Note that you should
714 not use quotes when specifying namespaces.
714 not use quotes when specifying namespaces.
715
715
716 'Builtin' contains the python module builtin, 'user' contains all
716 'Builtin' contains the python module builtin, 'user' contains all
717 user data, 'alias' only contain the shell aliases and no python
717 user data, 'alias' only contain the shell aliases and no python
718 objects, 'internal' contains objects used by IPython. The
718 objects, 'internal' contains objects used by IPython. The
719 'user_global' namespace is only used by embedded IPython instances,
719 'user_global' namespace is only used by embedded IPython instances,
720 and it contains module-level globals. You can add namespaces to the
720 and it contains module-level globals. You can add namespaces to the
721 search with -s or exclude them with -e (these options can be given
721 search with -s or exclude them with -e (these options can be given
722 more than once).
722 more than once).
723
723
724 Examples:
724 Examples:
725
725
726 %psearch a* -> objects beginning with an a
726 %psearch a* -> objects beginning with an a
727 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
727 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
728 %psearch a* function -> all functions beginning with an a
728 %psearch a* function -> all functions beginning with an a
729 %psearch re.e* -> objects beginning with an e in module re
729 %psearch re.e* -> objects beginning with an e in module re
730 %psearch r*.e* -> objects that start with e in modules starting in r
730 %psearch r*.e* -> objects that start with e in modules starting in r
731 %psearch r*.* string -> all strings in modules beginning with r
731 %psearch r*.* string -> all strings in modules beginning with r
732
732
733 Case sensitve search:
733 Case sensitve search:
734
734
735 %psearch -c a* list all object beginning with lower case a
735 %psearch -c a* list all object beginning with lower case a
736
736
737 Show objects beginning with a single _:
737 Show objects beginning with a single _:
738
738
739 %psearch -a _* list objects beginning with a single underscore"""
739 %psearch -a _* list objects beginning with a single underscore"""
740
740
741 # default namespaces to be searched
741 # default namespaces to be searched
742 def_search = ['user','builtin']
742 def_search = ['user','builtin']
743
743
744 # Process options/args
744 # Process options/args
745 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
745 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
746 opt = opts.get
746 opt = opts.get
747 shell = self.shell
747 shell = self.shell
748 psearch = shell.inspector.psearch
748 psearch = shell.inspector.psearch
749
749
750 # select case options
750 # select case options
751 if opts.has_key('i'):
751 if opts.has_key('i'):
752 ignore_case = True
752 ignore_case = True
753 elif opts.has_key('c'):
753 elif opts.has_key('c'):
754 ignore_case = False
754 ignore_case = False
755 else:
755 else:
756 ignore_case = not shell.rc.wildcards_case_sensitive
756 ignore_case = not shell.rc.wildcards_case_sensitive
757
757
758 # Build list of namespaces to search from user options
758 # Build list of namespaces to search from user options
759 def_search.extend(opt('s',[]))
759 def_search.extend(opt('s',[]))
760 ns_exclude = ns_exclude=opt('e',[])
760 ns_exclude = ns_exclude=opt('e',[])
761 ns_search = [nm for nm in def_search if nm not in ns_exclude]
761 ns_search = [nm for nm in def_search if nm not in ns_exclude]
762
762
763 # Call the actual search
763 # Call the actual search
764 try:
764 try:
765 psearch(args,shell.ns_table,ns_search,
765 psearch(args,shell.ns_table,ns_search,
766 show_all=opt('a'),ignore_case=ignore_case)
766 show_all=opt('a'),ignore_case=ignore_case)
767 except:
767 except:
768 shell.showtraceback()
768 shell.showtraceback()
769
769
770 def magic_who_ls(self, parameter_s=''):
770 def magic_who_ls(self, parameter_s=''):
771 """Return a sorted list of all interactive variables.
771 """Return a sorted list of all interactive variables.
772
772
773 If arguments are given, only variables of types matching these
773 If arguments are given, only variables of types matching these
774 arguments are returned."""
774 arguments are returned."""
775
775
776 user_ns = self.shell.user_ns
776 user_ns = self.shell.user_ns
777 internal_ns = self.shell.internal_ns
777 internal_ns = self.shell.internal_ns
778 user_config_ns = self.shell.user_config_ns
778 user_config_ns = self.shell.user_config_ns
779 out = []
779 out = []
780 typelist = parameter_s.split()
780 typelist = parameter_s.split()
781
781
782 for i in user_ns:
782 for i in user_ns:
783 if not (i.startswith('_') or i.startswith('_i')) \
783 if not (i.startswith('_') or i.startswith('_i')) \
784 and not (i in internal_ns or i in user_config_ns):
784 and not (i in internal_ns or i in user_config_ns):
785 if typelist:
785 if typelist:
786 if type(user_ns[i]).__name__ in typelist:
786 if type(user_ns[i]).__name__ in typelist:
787 out.append(i)
787 out.append(i)
788 else:
788 else:
789 out.append(i)
789 out.append(i)
790 out.sort()
790 out.sort()
791 return out
791 return out
792
792
793 def magic_who(self, parameter_s=''):
793 def magic_who(self, parameter_s=''):
794 """Print all interactive variables, with some minimal formatting.
794 """Print all interactive variables, with some minimal formatting.
795
795
796 If any arguments are given, only variables whose type matches one of
796 If any arguments are given, only variables whose type matches one of
797 these are printed. For example:
797 these are printed. For example:
798
798
799 %who function str
799 %who function str
800
800
801 will only list functions and strings, excluding all other types of
801 will only list functions and strings, excluding all other types of
802 variables. To find the proper type names, simply use type(var) at a
802 variables. To find the proper type names, simply use type(var) at a
803 command line to see how python prints type names. For example:
803 command line to see how python prints type names. For example:
804
804
805 In [1]: type('hello')\\
805 In [1]: type('hello')\\
806 Out[1]: <type 'str'>
806 Out[1]: <type 'str'>
807
807
808 indicates that the type name for strings is 'str'.
808 indicates that the type name for strings is 'str'.
809
809
810 %who always excludes executed names loaded through your configuration
810 %who always excludes executed names loaded through your configuration
811 file and things which are internal to IPython.
811 file and things which are internal to IPython.
812
812
813 This is deliberate, as typically you may load many modules and the
813 This is deliberate, as typically you may load many modules and the
814 purpose of %who is to show you only what you've manually defined."""
814 purpose of %who is to show you only what you've manually defined."""
815
815
816 varlist = self.magic_who_ls(parameter_s)
816 varlist = self.magic_who_ls(parameter_s)
817 if not varlist:
817 if not varlist:
818 print 'Interactive namespace is empty.'
818 print 'Interactive namespace is empty.'
819 return
819 return
820
820
821 # if we have variables, move on...
821 # if we have variables, move on...
822
822
823 # stupid flushing problem: when prompts have no separators, stdout is
823 # stupid flushing problem: when prompts have no separators, stdout is
824 # getting lost. I'm starting to think this is a python bug. I'm having
824 # getting lost. I'm starting to think this is a python bug. I'm having
825 # to force a flush with a print because even a sys.stdout.flush
825 # to force a flush with a print because even a sys.stdout.flush
826 # doesn't seem to do anything!
826 # doesn't seem to do anything!
827
827
828 count = 0
828 count = 0
829 for i in varlist:
829 for i in varlist:
830 print i+'\t',
830 print i+'\t',
831 count += 1
831 count += 1
832 if count > 8:
832 if count > 8:
833 count = 0
833 count = 0
834 print
834 print
835 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
835 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
836
836
837 print # well, this does force a flush at the expense of an extra \n
837 print # well, this does force a flush at the expense of an extra \n
838
838
839 def magic_whos(self, parameter_s=''):
839 def magic_whos(self, parameter_s=''):
840 """Like %who, but gives some extra information about each variable.
840 """Like %who, but gives some extra information about each variable.
841
841
842 The same type filtering of %who can be applied here.
842 The same type filtering of %who can be applied here.
843
843
844 For all variables, the type is printed. Additionally it prints:
844 For all variables, the type is printed. Additionally it prints:
845
845
846 - For {},[],(): their length.
846 - For {},[],(): their length.
847
847
848 - For Numeric arrays, a summary with shape, number of elements,
848 - For Numeric arrays, a summary with shape, number of elements,
849 typecode and size in memory.
849 typecode and size in memory.
850
850
851 - Everything else: a string representation, snipping their middle if
851 - Everything else: a string representation, snipping their middle if
852 too long."""
852 too long."""
853
853
854 varnames = self.magic_who_ls(parameter_s)
854 varnames = self.magic_who_ls(parameter_s)
855 if not varnames:
855 if not varnames:
856 print 'Interactive namespace is empty.'
856 print 'Interactive namespace is empty.'
857 return
857 return
858
858
859 # if we have variables, move on...
859 # if we have variables, move on...
860
860
861 # for these types, show len() instead of data:
861 # for these types, show len() instead of data:
862 seq_types = [types.DictType,types.ListType,types.TupleType]
862 seq_types = [types.DictType,types.ListType,types.TupleType]
863
863
864 # for Numeric arrays, display summary info
864 # for Numeric arrays, display summary info
865 try:
865 try:
866 import Numeric
866 import Numeric
867 except ImportError:
867 except ImportError:
868 array_type = None
868 array_type = None
869 else:
869 else:
870 array_type = Numeric.ArrayType.__name__
870 array_type = Numeric.ArrayType.__name__
871
871
872 # Find all variable names and types so we can figure out column sizes
872 # Find all variable names and types so we can figure out column sizes
873 get_vars = lambda i: self.shell.user_ns[i]
873 get_vars = lambda i: self.shell.user_ns[i]
874 type_name = lambda v: type(v).__name__
874 type_name = lambda v: type(v).__name__
875 varlist = map(get_vars,varnames)
875 varlist = map(get_vars,varnames)
876
876
877 typelist = []
877 typelist = []
878 for vv in varlist:
878 for vv in varlist:
879 tt = type_name(vv)
879 tt = type_name(vv)
880 if tt=='instance':
880 if tt=='instance':
881 typelist.append(str(vv.__class__))
881 typelist.append(str(vv.__class__))
882 else:
882 else:
883 typelist.append(tt)
883 typelist.append(tt)
884
884
885 # column labels and # of spaces as separator
885 # column labels and # of spaces as separator
886 varlabel = 'Variable'
886 varlabel = 'Variable'
887 typelabel = 'Type'
887 typelabel = 'Type'
888 datalabel = 'Data/Info'
888 datalabel = 'Data/Info'
889 colsep = 3
889 colsep = 3
890 # variable format strings
890 # variable format strings
891 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
891 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
892 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
892 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
893 aformat = "%s: %s elems, type `%s`, %s bytes"
893 aformat = "%s: %s elems, type `%s`, %s bytes"
894 # find the size of the columns to format the output nicely
894 # find the size of the columns to format the output nicely
895 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
895 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
896 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
896 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
897 # table header
897 # table header
898 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
898 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
899 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
899 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
900 # and the table itself
900 # and the table itself
901 kb = 1024
901 kb = 1024
902 Mb = 1048576 # kb**2
902 Mb = 1048576 # kb**2
903 for vname,var,vtype in zip(varnames,varlist,typelist):
903 for vname,var,vtype in zip(varnames,varlist,typelist):
904 print itpl(vformat),
904 print itpl(vformat),
905 if vtype in seq_types:
905 if vtype in seq_types:
906 print len(var)
906 print len(var)
907 elif vtype==array_type:
907 elif vtype==array_type:
908 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
908 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
909 vsize = Numeric.size(var)
909 vsize = Numeric.size(var)
910 vbytes = vsize*var.itemsize()
910 vbytes = vsize*var.itemsize()
911 if vbytes < 100000:
911 if vbytes < 100000:
912 print aformat % (vshape,vsize,var.typecode(),vbytes)
912 print aformat % (vshape,vsize,var.typecode(),vbytes)
913 else:
913 else:
914 print aformat % (vshape,vsize,var.typecode(),vbytes),
914 print aformat % (vshape,vsize,var.typecode(),vbytes),
915 if vbytes < Mb:
915 if vbytes < Mb:
916 print '(%s kb)' % (vbytes/kb,)
916 print '(%s kb)' % (vbytes/kb,)
917 else:
917 else:
918 print '(%s Mb)' % (vbytes/Mb,)
918 print '(%s Mb)' % (vbytes/Mb,)
919 else:
919 else:
920 vstr = str(var).replace('\n','\\n')
920 vstr = str(var).replace('\n','\\n')
921 if len(vstr) < 50:
921 if len(vstr) < 50:
922 print vstr
922 print vstr
923 else:
923 else:
924 printpl(vfmt_short)
924 printpl(vfmt_short)
925
925
926 def magic_reset(self, parameter_s=''):
926 def magic_reset(self, parameter_s=''):
927 """Resets the namespace by removing all names defined by the user.
927 """Resets the namespace by removing all names defined by the user.
928
928
929 Input/Output history are left around in case you need them."""
929 Input/Output history are left around in case you need them."""
930
930
931 ans = raw_input(
931 ans = raw_input(
932 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
932 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
933 if not ans.lower() == 'y':
933 if not ans.lower() == 'y':
934 print 'Nothing done.'
934 print 'Nothing done.'
935 return
935 return
936 user_ns = self.shell.user_ns
936 user_ns = self.shell.user_ns
937 for i in self.magic_who_ls():
937 for i in self.magic_who_ls():
938 del(user_ns[i])
938 del(user_ns[i])
939
939
940 def magic_config(self,parameter_s=''):
940 def magic_config(self,parameter_s=''):
941 """Show IPython's internal configuration."""
941 """Show IPython's internal configuration."""
942
942
943 page('Current configuration structure:\n'+
943 page('Current configuration structure:\n'+
944 pformat(self.shell.rc.dict()))
944 pformat(self.shell.rc.dict()))
945
945
946 def magic_logstart(self,parameter_s=''):
946 def magic_logstart(self,parameter_s=''):
947 """Start logging anywhere in a session.
947 """Start logging anywhere in a session.
948
948
949 %logstart [-o|-t] [log_name [log_mode]]
949 %logstart [-o|-t] [log_name [log_mode]]
950
950
951 If no name is given, it defaults to a file named 'ipython_log.py' in your
951 If no name is given, it defaults to a file named 'ipython_log.py' in your
952 current directory, in 'rotate' mode (see below).
952 current directory, in 'rotate' mode (see below).
953
953
954 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
954 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
955 history up to that point and then continues logging.
955 history up to that point and then continues logging.
956
956
957 %logstart takes a second optional parameter: logging mode. This can be one
957 %logstart takes a second optional parameter: logging mode. This can be one
958 of (note that the modes are given unquoted):\\
958 of (note that the modes are given unquoted):\\
959 append: well, that says it.\\
959 append: well, that says it.\\
960 backup: rename (if exists) to name~ and start name.\\
960 backup: rename (if exists) to name~ and start name.\\
961 global: single logfile in your home dir, appended to.\\
961 global: single logfile in your home dir, appended to.\\
962 over : overwrite existing log.\\
962 over : overwrite existing log.\\
963 rotate: create rotating logs name.1~, name.2~, etc.
963 rotate: create rotating logs name.1~, name.2~, etc.
964
964
965 Options:
965 Options:
966
966
967 -o: log also IPython's output. In this mode, all commands which
967 -o: log also IPython's output. In this mode, all commands which
968 generate an Out[NN] prompt are recorded to the logfile, right after
968 generate an Out[NN] prompt are recorded to the logfile, right after
969 their corresponding input line. The output lines are always
969 their corresponding input line. The output lines are always
970 prepended with a '#[Out]# ' marker, so that the log remains valid
970 prepended with a '#[Out]# ' marker, so that the log remains valid
971 Python code.
971 Python code.
972
972
973 Since this marker is always the same, filtering only the output from
973 Since this marker is always the same, filtering only the output from
974 a log is very easy, using for example a simple awk call:
974 a log is very easy, using for example a simple awk call:
975
975
976 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
976 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
977
977
978 -t: put timestamps before each input line logged (these are put in
978 -t: put timestamps before each input line logged (these are put in
979 comments)."""
979 comments)."""
980
980
981 opts,par = self.parse_options(parameter_s,'ot')
981 opts,par = self.parse_options(parameter_s,'ot')
982 log_output = 'o' in opts
982 log_output = 'o' in opts
983 timestamp = 't' in opts
983 timestamp = 't' in opts
984
984
985 rc = self.shell.rc
985 rc = self.shell.rc
986 logger = self.shell.logger
986 logger = self.shell.logger
987
987
988 # if no args are given, the defaults set in the logger constructor by
988 # if no args are given, the defaults set in the logger constructor by
989 # ipytohn remain valid
989 # ipytohn remain valid
990 if par:
990 if par:
991 try:
991 try:
992 logfname,logmode = par.split()
992 logfname,logmode = par.split()
993 except:
993 except:
994 logfname = par
994 logfname = par
995 logmode = 'backup'
995 logmode = 'backup'
996 else:
996 else:
997 logfname = logger.logfname
997 logfname = logger.logfname
998 logmode = logger.logmode
998 logmode = logger.logmode
999 # put logfname into rc struct as if it had been called on the command
999 # put logfname into rc struct as if it had been called on the command
1000 # line, so it ends up saved in the log header Save it in case we need
1000 # line, so it ends up saved in the log header Save it in case we need
1001 # to restore it...
1001 # to restore it...
1002 old_logfile = rc.opts.get('logfile','')
1002 old_logfile = rc.opts.get('logfile','')
1003 if logfname:
1003 if logfname:
1004 logfname = os.path.expanduser(logfname)
1004 logfname = os.path.expanduser(logfname)
1005 rc.opts.logfile = logfname
1005 rc.opts.logfile = logfname
1006 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1006 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1007 try:
1007 try:
1008 started = logger.logstart(logfname,loghead,logmode,
1008 started = logger.logstart(logfname,loghead,logmode,
1009 log_output,timestamp)
1009 log_output,timestamp)
1010 except:
1010 except:
1011 rc.opts.logfile = old_logfile
1011 rc.opts.logfile = old_logfile
1012 warn("Couldn't start log: %s" % sys.exc_info()[1])
1012 warn("Couldn't start log: %s" % sys.exc_info()[1])
1013 else:
1013 else:
1014 # log input history up to this point, optionally interleaving
1014 # log input history up to this point, optionally interleaving
1015 # output if requested
1015 # output if requested
1016
1016
1017 if timestamp:
1017 if timestamp:
1018 # disable timestamping for the previous history, since we've
1018 # disable timestamping for the previous history, since we've
1019 # lost those already (no time machine here).
1019 # lost those already (no time machine here).
1020 logger.timestamp = False
1020 logger.timestamp = False
1021 if log_output:
1021 if log_output:
1022 log_write = logger.log_write
1022 log_write = logger.log_write
1023 input_hist = self.shell.input_hist
1023 input_hist = self.shell.input_hist
1024 output_hist = self.shell.output_hist
1024 output_hist = self.shell.output_hist
1025 for n in range(1,len(input_hist)-1):
1025 for n in range(1,len(input_hist)-1):
1026 log_write(input_hist[n].rstrip())
1026 log_write(input_hist[n].rstrip())
1027 if n in output_hist:
1027 if n in output_hist:
1028 log_write(repr(output_hist[n]),'output')
1028 log_write(repr(output_hist[n]),'output')
1029 else:
1029 else:
1030 logger.log_write(self.shell.input_hist[1:])
1030 logger.log_write(self.shell.input_hist[1:])
1031 if timestamp:
1031 if timestamp:
1032 # re-enable timestamping
1032 # re-enable timestamping
1033 logger.timestamp = True
1033 logger.timestamp = True
1034
1034
1035 print ('Activating auto-logging. '
1035 print ('Activating auto-logging. '
1036 'Current session state plus future input saved.')
1036 'Current session state plus future input saved.')
1037 logger.logstate()
1037 logger.logstate()
1038
1038
1039 def magic_logoff(self,parameter_s=''):
1039 def magic_logoff(self,parameter_s=''):
1040 """Temporarily stop logging.
1040 """Temporarily stop logging.
1041
1041
1042 You must have previously started logging."""
1042 You must have previously started logging."""
1043 self.shell.logger.switch_log(0)
1043 self.shell.logger.switch_log(0)
1044
1044
1045 def magic_logon(self,parameter_s=''):
1045 def magic_logon(self,parameter_s=''):
1046 """Restart logging.
1046 """Restart logging.
1047
1047
1048 This function is for restarting logging which you've temporarily
1048 This function is for restarting logging which you've temporarily
1049 stopped with %logoff. For starting logging for the first time, you
1049 stopped with %logoff. For starting logging for the first time, you
1050 must use the %logstart function, which allows you to specify an
1050 must use the %logstart function, which allows you to specify an
1051 optional log filename."""
1051 optional log filename."""
1052
1052
1053 self.shell.logger.switch_log(1)
1053 self.shell.logger.switch_log(1)
1054
1054
1055 def magic_logstate(self,parameter_s=''):
1055 def magic_logstate(self,parameter_s=''):
1056 """Print the status of the logging system."""
1056 """Print the status of the logging system."""
1057
1057
1058 self.shell.logger.logstate()
1058 self.shell.logger.logstate()
1059
1059
1060 def magic_pdb(self, parameter_s=''):
1060 def magic_pdb(self, parameter_s=''):
1061 """Control the calling of the pdb interactive debugger.
1061 """Control the calling of the pdb interactive debugger.
1062
1062
1063 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1063 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1064 argument it works as a toggle.
1064 argument it works as a toggle.
1065
1065
1066 When an exception is triggered, IPython can optionally call the
1066 When an exception is triggered, IPython can optionally call the
1067 interactive pdb debugger after the traceback printout. %pdb toggles
1067 interactive pdb debugger after the traceback printout. %pdb toggles
1068 this feature on and off."""
1068 this feature on and off."""
1069
1069
1070 par = parameter_s.strip().lower()
1070 par = parameter_s.strip().lower()
1071
1071
1072 if par:
1072 if par:
1073 try:
1073 try:
1074 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1074 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1075 except KeyError:
1075 except KeyError:
1076 print ('Incorrect argument. Use on/1, off/0, '
1076 print ('Incorrect argument. Use on/1, off/0, '
1077 'or nothing for a toggle.')
1077 'or nothing for a toggle.')
1078 return
1078 return
1079 else:
1079 else:
1080 # toggle
1080 # toggle
1081 new_pdb = not self.shell.InteractiveTB.call_pdb
1081 new_pdb = not self.shell.InteractiveTB.call_pdb
1082
1082
1083 # set on the shell
1083 # set on the shell
1084 self.shell.call_pdb = new_pdb
1084 self.shell.call_pdb = new_pdb
1085 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1085 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1086
1086
1087 def magic_prun(self, parameter_s ='',user_mode=1,
1087 def magic_prun(self, parameter_s ='',user_mode=1,
1088 opts=None,arg_lst=None,prog_ns=None):
1088 opts=None,arg_lst=None,prog_ns=None):
1089
1089
1090 """Run a statement through the python code profiler.
1090 """Run a statement through the python code profiler.
1091
1091
1092 Usage:\\
1092 Usage:\\
1093 %prun [options] statement
1093 %prun [options] statement
1094
1094
1095 The given statement (which doesn't require quote marks) is run via the
1095 The given statement (which doesn't require quote marks) is run via the
1096 python profiler in a manner similar to the profile.run() function.
1096 python profiler in a manner similar to the profile.run() function.
1097 Namespaces are internally managed to work correctly; profile.run
1097 Namespaces are internally managed to work correctly; profile.run
1098 cannot be used in IPython because it makes certain assumptions about
1098 cannot be used in IPython because it makes certain assumptions about
1099 namespaces which do not hold under IPython.
1099 namespaces which do not hold under IPython.
1100
1100
1101 Options:
1101 Options:
1102
1102
1103 -l <limit>: you can place restrictions on what or how much of the
1103 -l <limit>: you can place restrictions on what or how much of the
1104 profile gets printed. The limit value can be:
1104 profile gets printed. The limit value can be:
1105
1105
1106 * A string: only information for function names containing this string
1106 * A string: only information for function names containing this string
1107 is printed.
1107 is printed.
1108
1108
1109 * An integer: only these many lines are printed.
1109 * An integer: only these many lines are printed.
1110
1110
1111 * A float (between 0 and 1): this fraction of the report is printed
1111 * A float (between 0 and 1): this fraction of the report is printed
1112 (for example, use a limit of 0.4 to see the topmost 40% only).
1112 (for example, use a limit of 0.4 to see the topmost 40% only).
1113
1113
1114 You can combine several limits with repeated use of the option. For
1114 You can combine several limits with repeated use of the option. For
1115 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1115 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1116 information about class constructors.
1116 information about class constructors.
1117
1117
1118 -r: return the pstats.Stats object generated by the profiling. This
1118 -r: return the pstats.Stats object generated by the profiling. This
1119 object has all the information about the profile in it, and you can
1119 object has all the information about the profile in it, and you can
1120 later use it for further analysis or in other functions.
1120 later use it for further analysis or in other functions.
1121
1121
1122 Since magic functions have a particular form of calling which prevents
1122 Since magic functions have a particular form of calling which prevents
1123 you from writing something like:\\
1123 you from writing something like:\\
1124 In [1]: p = %prun -r print 4 # invalid!\\
1124 In [1]: p = %prun -r print 4 # invalid!\\
1125 you must instead use IPython's automatic variables to assign this:\\
1125 you must instead use IPython's automatic variables to assign this:\\
1126 In [1]: %prun -r print 4 \\
1126 In [1]: %prun -r print 4 \\
1127 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1127 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1128 In [2]: stats = _
1128 In [2]: stats = _
1129
1129
1130 If you really need to assign this value via an explicit function call,
1130 If you really need to assign this value via an explicit function call,
1131 you can always tap directly into the true name of the magic function
1131 you can always tap directly into the true name of the magic function
1132 by using the ipmagic function (which IPython automatically adds to the
1132 by using the ipmagic function (which IPython automatically adds to the
1133 builtins):\\
1133 builtins):\\
1134 In [3]: stats = ipmagic('prun','-r print 4')
1134 In [3]: stats = ipmagic('prun','-r print 4')
1135
1135
1136 You can type ipmagic? for more details on ipmagic.
1136 You can type ipmagic? for more details on ipmagic.
1137
1137
1138 -s <key>: sort profile by given key. You can provide more than one key
1138 -s <key>: sort profile by given key. You can provide more than one key
1139 by using the option several times: '-s key1 -s key2 -s key3...'. The
1139 by using the option several times: '-s key1 -s key2 -s key3...'. The
1140 default sorting key is 'time'.
1140 default sorting key is 'time'.
1141
1141
1142 The following is copied verbatim from the profile documentation
1142 The following is copied verbatim from the profile documentation
1143 referenced below:
1143 referenced below:
1144
1144
1145 When more than one key is provided, additional keys are used as
1145 When more than one key is provided, additional keys are used as
1146 secondary criteria when the there is equality in all keys selected
1146 secondary criteria when the there is equality in all keys selected
1147 before them.
1147 before them.
1148
1148
1149 Abbreviations can be used for any key names, as long as the
1149 Abbreviations can be used for any key names, as long as the
1150 abbreviation is unambiguous. The following are the keys currently
1150 abbreviation is unambiguous. The following are the keys currently
1151 defined:
1151 defined:
1152
1152
1153 Valid Arg Meaning\\
1153 Valid Arg Meaning\\
1154 "calls" call count\\
1154 "calls" call count\\
1155 "cumulative" cumulative time\\
1155 "cumulative" cumulative time\\
1156 "file" file name\\
1156 "file" file name\\
1157 "module" file name\\
1157 "module" file name\\
1158 "pcalls" primitive call count\\
1158 "pcalls" primitive call count\\
1159 "line" line number\\
1159 "line" line number\\
1160 "name" function name\\
1160 "name" function name\\
1161 "nfl" name/file/line\\
1161 "nfl" name/file/line\\
1162 "stdname" standard name\\
1162 "stdname" standard name\\
1163 "time" internal time
1163 "time" internal time
1164
1164
1165 Note that all sorts on statistics are in descending order (placing
1165 Note that all sorts on statistics are in descending order (placing
1166 most time consuming items first), where as name, file, and line number
1166 most time consuming items first), where as name, file, and line number
1167 searches are in ascending order (i.e., alphabetical). The subtle
1167 searches are in ascending order (i.e., alphabetical). The subtle
1168 distinction between "nfl" and "stdname" is that the standard name is a
1168 distinction between "nfl" and "stdname" is that the standard name is a
1169 sort of the name as printed, which means that the embedded line
1169 sort of the name as printed, which means that the embedded line
1170 numbers get compared in an odd way. For example, lines 3, 20, and 40
1170 numbers get compared in an odd way. For example, lines 3, 20, and 40
1171 would (if the file names were the same) appear in the string order
1171 would (if the file names were the same) appear in the string order
1172 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1172 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1173 line numbers. In fact, sort_stats("nfl") is the same as
1173 line numbers. In fact, sort_stats("nfl") is the same as
1174 sort_stats("name", "file", "line").
1174 sort_stats("name", "file", "line").
1175
1175
1176 -T <filename>: save profile results as shown on screen to a text
1176 -T <filename>: save profile results as shown on screen to a text
1177 file. The profile is still shown on screen.
1177 file. The profile is still shown on screen.
1178
1178
1179 -D <filename>: save (via dump_stats) profile statistics to given
1179 -D <filename>: save (via dump_stats) profile statistics to given
1180 filename. This data is in a format understod by the pstats module, and
1180 filename. This data is in a format understod by the pstats module, and
1181 is generated by a call to the dump_stats() method of profile
1181 is generated by a call to the dump_stats() method of profile
1182 objects. The profile is still shown on screen.
1182 objects. The profile is still shown on screen.
1183
1183
1184 If you want to run complete programs under the profiler's control, use
1184 If you want to run complete programs under the profiler's control, use
1185 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1185 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1186 contains profiler specific options as described here.
1186 contains profiler specific options as described here.
1187
1187
1188 You can read the complete documentation for the profile module with:\\
1188 You can read the complete documentation for the profile module with:\\
1189 In [1]: import profile; profile.help() """
1189 In [1]: import profile; profile.help() """
1190
1190
1191 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1191 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1192 # protect user quote marks
1192 # protect user quote marks
1193 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1193 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1194
1194
1195 if user_mode: # regular user call
1195 if user_mode: # regular user call
1196 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1196 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1197 list_all=1)
1197 list_all=1)
1198 namespace = self.shell.user_ns
1198 namespace = self.shell.user_ns
1199 else: # called to run a program by %run -p
1199 else: # called to run a program by %run -p
1200 try:
1200 try:
1201 filename = get_py_filename(arg_lst[0])
1201 filename = get_py_filename(arg_lst[0])
1202 except IOError,msg:
1202 except IOError,msg:
1203 error(msg)
1203 error(msg)
1204 return
1204 return
1205
1205
1206 arg_str = 'execfile(filename,prog_ns)'
1206 arg_str = 'execfile(filename,prog_ns)'
1207 namespace = locals()
1207 namespace = locals()
1208
1208
1209 opts.merge(opts_def)
1209 opts.merge(opts_def)
1210
1210
1211 prof = profile.Profile()
1211 prof = profile.Profile()
1212 try:
1212 try:
1213 prof = prof.runctx(arg_str,namespace,namespace)
1213 prof = prof.runctx(arg_str,namespace,namespace)
1214 sys_exit = ''
1214 sys_exit = ''
1215 except SystemExit:
1215 except SystemExit:
1216 sys_exit = """*** SystemExit exception caught in code being profiled."""
1216 sys_exit = """*** SystemExit exception caught in code being profiled."""
1217
1217
1218 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1218 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1219
1219
1220 lims = opts.l
1220 lims = opts.l
1221 if lims:
1221 if lims:
1222 lims = [] # rebuild lims with ints/floats/strings
1222 lims = [] # rebuild lims with ints/floats/strings
1223 for lim in opts.l:
1223 for lim in opts.l:
1224 try:
1224 try:
1225 lims.append(int(lim))
1225 lims.append(int(lim))
1226 except ValueError:
1226 except ValueError:
1227 try:
1227 try:
1228 lims.append(float(lim))
1228 lims.append(float(lim))
1229 except ValueError:
1229 except ValueError:
1230 lims.append(lim)
1230 lims.append(lim)
1231
1231
1232 # trap output
1232 # trap output
1233 sys_stdout = sys.stdout
1233 sys_stdout = sys.stdout
1234 stdout_trap = StringIO()
1234 stdout_trap = StringIO()
1235 try:
1235 try:
1236 sys.stdout = stdout_trap
1236 sys.stdout = stdout_trap
1237 stats.print_stats(*lims)
1237 stats.print_stats(*lims)
1238 finally:
1238 finally:
1239 sys.stdout = sys_stdout
1239 sys.stdout = sys_stdout
1240 output = stdout_trap.getvalue()
1240 output = stdout_trap.getvalue()
1241 output = output.rstrip()
1241 output = output.rstrip()
1242
1242
1243 page(output,screen_lines=self.shell.rc.screen_length)
1243 page(output,screen_lines=self.shell.rc.screen_length)
1244 print sys_exit,
1244 print sys_exit,
1245
1245
1246 dump_file = opts.D[0]
1246 dump_file = opts.D[0]
1247 text_file = opts.T[0]
1247 text_file = opts.T[0]
1248 if dump_file:
1248 if dump_file:
1249 prof.dump_stats(dump_file)
1249 prof.dump_stats(dump_file)
1250 print '\n*** Profile stats marshalled to file',\
1250 print '\n*** Profile stats marshalled to file',\
1251 `dump_file`+'.',sys_exit
1251 `dump_file`+'.',sys_exit
1252 if text_file:
1252 if text_file:
1253 file(text_file,'w').write(output)
1253 file(text_file,'w').write(output)
1254 print '\n*** Profile printout saved to text file',\
1254 print '\n*** Profile printout saved to text file',\
1255 `text_file`+'.',sys_exit
1255 `text_file`+'.',sys_exit
1256
1256
1257 if opts.has_key('r'):
1257 if opts.has_key('r'):
1258 return stats
1258 return stats
1259 else:
1259 else:
1260 return None
1260 return None
1261
1261
1262 def magic_run(self, parameter_s ='',runner=None):
1262 def magic_run(self, parameter_s ='',runner=None):
1263 """Run the named file inside IPython as a program.
1263 """Run the named file inside IPython as a program.
1264
1264
1265 Usage:\\
1265 Usage:\\
1266 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1266 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1267
1267
1268 Parameters after the filename are passed as command-line arguments to
1268 Parameters after the filename are passed as command-line arguments to
1269 the program (put in sys.argv). Then, control returns to IPython's
1269 the program (put in sys.argv). Then, control returns to IPython's
1270 prompt.
1270 prompt.
1271
1271
1272 This is similar to running at a system prompt:\\
1272 This is similar to running at a system prompt:\\
1273 $ python file args\\
1273 $ python file args\\
1274 but with the advantage of giving you IPython's tracebacks, and of
1274 but with the advantage of giving you IPython's tracebacks, and of
1275 loading all variables into your interactive namespace for further use
1275 loading all variables into your interactive namespace for further use
1276 (unless -p is used, see below).
1276 (unless -p is used, see below).
1277
1277
1278 The file is executed in a namespace initially consisting only of
1278 The file is executed in a namespace initially consisting only of
1279 __name__=='__main__' and sys.argv constructed as indicated. It thus
1279 __name__=='__main__' and sys.argv constructed as indicated. It thus
1280 sees its environment as if it were being run as a stand-alone
1280 sees its environment as if it were being run as a stand-alone
1281 program. But after execution, the IPython interactive namespace gets
1281 program. But after execution, the IPython interactive namespace gets
1282 updated with all variables defined in the program (except for __name__
1282 updated with all variables defined in the program (except for __name__
1283 and sys.argv). This allows for very convenient loading of code for
1283 and sys.argv). This allows for very convenient loading of code for
1284 interactive work, while giving each program a 'clean sheet' to run in.
1284 interactive work, while giving each program a 'clean sheet' to run in.
1285
1285
1286 Options:
1286 Options:
1287
1287
1288 -n: __name__ is NOT set to '__main__', but to the running file's name
1288 -n: __name__ is NOT set to '__main__', but to the running file's name
1289 without extension (as python does under import). This allows running
1289 without extension (as python does under import). This allows running
1290 scripts and reloading the definitions in them without calling code
1290 scripts and reloading the definitions in them without calling code
1291 protected by an ' if __name__ == "__main__" ' clause.
1291 protected by an ' if __name__ == "__main__" ' clause.
1292
1292
1293 -i: run the file in IPython's namespace instead of an empty one. This
1293 -i: run the file in IPython's namespace instead of an empty one. This
1294 is useful if you are experimenting with code written in a text editor
1294 is useful if you are experimenting with code written in a text editor
1295 which depends on variables defined interactively.
1295 which depends on variables defined interactively.
1296
1296
1297 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1297 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1298 being run. This is particularly useful if IPython is being used to
1298 being run. This is particularly useful if IPython is being used to
1299 run unittests, which always exit with a sys.exit() call. In such
1299 run unittests, which always exit with a sys.exit() call. In such
1300 cases you are interested in the output of the test results, not in
1300 cases you are interested in the output of the test results, not in
1301 seeing a traceback of the unittest module.
1301 seeing a traceback of the unittest module.
1302
1302
1303 -t: print timing information at the end of the run. IPython will give
1303 -t: print timing information at the end of the run. IPython will give
1304 you an estimated CPU time consumption for your script, which under
1304 you an estimated CPU time consumption for your script, which under
1305 Unix uses the resource module to avoid the wraparound problems of
1305 Unix uses the resource module to avoid the wraparound problems of
1306 time.clock(). Under Unix, an estimate of time spent on system tasks
1306 time.clock(). Under Unix, an estimate of time spent on system tasks
1307 is also given (for Windows platforms this is reported as 0.0).
1307 is also given (for Windows platforms this is reported as 0.0).
1308
1308
1309 If -t is given, an additional -N<N> option can be given, where <N>
1309 If -t is given, an additional -N<N> option can be given, where <N>
1310 must be an integer indicating how many times you want the script to
1310 must be an integer indicating how many times you want the script to
1311 run. The final timing report will include total and per run results.
1311 run. The final timing report will include total and per run results.
1312
1312
1313 For example (testing the script uniq_stable.py):
1313 For example (testing the script uniq_stable.py):
1314
1314
1315 In [1]: run -t uniq_stable
1315 In [1]: run -t uniq_stable
1316
1316
1317 IPython CPU timings (estimated):\\
1317 IPython CPU timings (estimated):\\
1318 User : 0.19597 s.\\
1318 User : 0.19597 s.\\
1319 System: 0.0 s.\\
1319 System: 0.0 s.\\
1320
1320
1321 In [2]: run -t -N5 uniq_stable
1321 In [2]: run -t -N5 uniq_stable
1322
1322
1323 IPython CPU timings (estimated):\\
1323 IPython CPU timings (estimated):\\
1324 Total runs performed: 5\\
1324 Total runs performed: 5\\
1325 Times : Total Per run\\
1325 Times : Total Per run\\
1326 User : 0.910862 s, 0.1821724 s.\\
1326 User : 0.910862 s, 0.1821724 s.\\
1327 System: 0.0 s, 0.0 s.
1327 System: 0.0 s, 0.0 s.
1328
1328
1329 -d: run your program under the control of pdb, the Python debugger.
1329 -d: run your program under the control of pdb, the Python debugger.
1330 This allows you to execute your program step by step, watch variables,
1330 This allows you to execute your program step by step, watch variables,
1331 etc. Internally, what IPython does is similar to calling:
1331 etc. Internally, what IPython does is similar to calling:
1332
1332
1333 pdb.run('execfile("YOURFILENAME")')
1333 pdb.run('execfile("YOURFILENAME")')
1334
1334
1335 with a breakpoint set on line 1 of your file. You can change the line
1335 with a breakpoint set on line 1 of your file. You can change the line
1336 number for this automatic breakpoint to be <N> by using the -bN option
1336 number for this automatic breakpoint to be <N> by using the -bN option
1337 (where N must be an integer). For example:
1337 (where N must be an integer). For example:
1338
1338
1339 %run -d -b40 myscript
1339 %run -d -b40 myscript
1340
1340
1341 will set the first breakpoint at line 40 in myscript.py. Note that
1341 will set the first breakpoint at line 40 in myscript.py. Note that
1342 the first breakpoint must be set on a line which actually does
1342 the first breakpoint must be set on a line which actually does
1343 something (not a comment or docstring) for it to stop execution.
1343 something (not a comment or docstring) for it to stop execution.
1344
1344
1345 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1345 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1346 first enter 'c' (without qoutes) to start execution up to the first
1346 first enter 'c' (without qoutes) to start execution up to the first
1347 breakpoint.
1347 breakpoint.
1348
1348
1349 Entering 'help' gives information about the use of the debugger. You
1349 Entering 'help' gives information about the use of the debugger. You
1350 can easily see pdb's full documentation with "import pdb;pdb.help()"
1350 can easily see pdb's full documentation with "import pdb;pdb.help()"
1351 at a prompt.
1351 at a prompt.
1352
1352
1353 -p: run program under the control of the Python profiler module (which
1353 -p: run program under the control of the Python profiler module (which
1354 prints a detailed report of execution times, function calls, etc).
1354 prints a detailed report of execution times, function calls, etc).
1355
1355
1356 You can pass other options after -p which affect the behavior of the
1356 You can pass other options after -p which affect the behavior of the
1357 profiler itself. See the docs for %prun for details.
1357 profiler itself. See the docs for %prun for details.
1358
1358
1359 In this mode, the program's variables do NOT propagate back to the
1359 In this mode, the program's variables do NOT propagate back to the
1360 IPython interactive namespace (because they remain in the namespace
1360 IPython interactive namespace (because they remain in the namespace
1361 where the profiler executes them).
1361 where the profiler executes them).
1362
1362
1363 Internally this triggers a call to %prun, see its documentation for
1363 Internally this triggers a call to %prun, see its documentation for
1364 details on the options available specifically for profiling."""
1364 details on the options available specifically for profiling."""
1365
1365
1366 # get arguments and set sys.argv for program to be run.
1366 # get arguments and set sys.argv for program to be run.
1367 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1367 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1368 mode='list',list_all=1)
1368 mode='list',list_all=1)
1369
1369
1370 try:
1370 try:
1371 filename = get_py_filename(arg_lst[0])
1371 filename = get_py_filename(arg_lst[0])
1372 except IndexError:
1372 except IndexError:
1373 warn('you must provide at least a filename.')
1373 warn('you must provide at least a filename.')
1374 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1374 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1375 return
1375 return
1376 except IOError,msg:
1376 except IOError,msg:
1377 error(msg)
1377 error(msg)
1378 return
1378 return
1379
1379
1380 # Control the response to exit() calls made by the script being run
1380 # Control the response to exit() calls made by the script being run
1381 exit_ignore = opts.has_key('e')
1381 exit_ignore = opts.has_key('e')
1382
1382
1383 # Make sure that the running script gets a proper sys.argv as if it
1383 # Make sure that the running script gets a proper sys.argv as if it
1384 # were run from a system shell.
1384 # were run from a system shell.
1385 save_argv = sys.argv # save it for later restoring
1385 save_argv = sys.argv # save it for later restoring
1386 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1386 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1387
1387
1388 if opts.has_key('i'):
1388 if opts.has_key('i'):
1389 prog_ns = self.shell.user_ns
1389 prog_ns = self.shell.user_ns
1390 __name__save = self.shell.user_ns['__name__']
1390 __name__save = self.shell.user_ns['__name__']
1391 prog_ns['__name__'] = '__main__'
1391 prog_ns['__name__'] = '__main__'
1392 else:
1392 else:
1393 if opts.has_key('n'):
1393 if opts.has_key('n'):
1394 name = os.path.splitext(os.path.basename(filename))[0]
1394 name = os.path.splitext(os.path.basename(filename))[0]
1395 else:
1395 else:
1396 name = '__main__'
1396 name = '__main__'
1397 prog_ns = {'__name__':name}
1397 prog_ns = {'__name__':name}
1398
1398
1399 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1400 # set the __file__ global in the script's namespace
1401 prog_ns['__file__'] = filename
1402
1399 # pickle fix. See iplib for an explanation. But we need to make sure
1403 # pickle fix. See iplib for an explanation. But we need to make sure
1400 # that, if we overwrite __main__, we replace it at the end
1404 # that, if we overwrite __main__, we replace it at the end
1401 if prog_ns['__name__'] == '__main__':
1405 if prog_ns['__name__'] == '__main__':
1402 restore_main = sys.modules['__main__']
1406 restore_main = sys.modules['__main__']
1403 else:
1407 else:
1404 restore_main = False
1408 restore_main = False
1405
1409
1406 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1410 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1407
1411
1408 stats = None
1412 stats = None
1409 try:
1413 try:
1410 if opts.has_key('p'):
1414 if opts.has_key('p'):
1411 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1415 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1412 else:
1416 else:
1413 if opts.has_key('d'):
1417 if opts.has_key('d'):
1414 deb = Debugger.Pdb(self.shell.rc.colors)
1418 deb = Debugger.Pdb(self.shell.rc.colors)
1415 # reset Breakpoint state, which is moronically kept
1419 # reset Breakpoint state, which is moronically kept
1416 # in a class
1420 # in a class
1417 bdb.Breakpoint.next = 1
1421 bdb.Breakpoint.next = 1
1418 bdb.Breakpoint.bplist = {}
1422 bdb.Breakpoint.bplist = {}
1419 bdb.Breakpoint.bpbynumber = [None]
1423 bdb.Breakpoint.bpbynumber = [None]
1420 # Set an initial breakpoint to stop execution
1424 # Set an initial breakpoint to stop execution
1421 maxtries = 10
1425 maxtries = 10
1422 bp = int(opts.get('b',[1])[0])
1426 bp = int(opts.get('b',[1])[0])
1423 checkline = deb.checkline(filename,bp)
1427 checkline = deb.checkline(filename,bp)
1424 if not checkline:
1428 if not checkline:
1425 for bp in range(bp+1,bp+maxtries+1):
1429 for bp in range(bp+1,bp+maxtries+1):
1426 if deb.checkline(filename,bp):
1430 if deb.checkline(filename,bp):
1427 break
1431 break
1428 else:
1432 else:
1429 msg = ("\nI failed to find a valid line to set "
1433 msg = ("\nI failed to find a valid line to set "
1430 "a breakpoint\n"
1434 "a breakpoint\n"
1431 "after trying up to line: %s.\n"
1435 "after trying up to line: %s.\n"
1432 "Please set a valid breakpoint manually "
1436 "Please set a valid breakpoint manually "
1433 "with the -b option." % bp)
1437 "with the -b option." % bp)
1434 error(msg)
1438 error(msg)
1435 return
1439 return
1436 # if we find a good linenumber, set the breakpoint
1440 # if we find a good linenumber, set the breakpoint
1437 deb.do_break('%s:%s' % (filename,bp))
1441 deb.do_break('%s:%s' % (filename,bp))
1438 # Start file run
1442 # Start file run
1439 print "NOTE: Enter 'c' at the",
1443 print "NOTE: Enter 'c' at the",
1440 print "ipdb> prompt to start your script."
1444 print "ipdb> prompt to start your script."
1441 try:
1445 try:
1442 deb.run('execfile("%s")' % filename,prog_ns)
1446 deb.run('execfile("%s")' % filename,prog_ns)
1443 except:
1447 except:
1444 etype, value, tb = sys.exc_info()
1448 etype, value, tb = sys.exc_info()
1445 # Skip three frames in the traceback: the %run one,
1449 # Skip three frames in the traceback: the %run one,
1446 # one inside bdb.py, and the command-line typed by the
1450 # one inside bdb.py, and the command-line typed by the
1447 # user (run by exec in pdb itself).
1451 # user (run by exec in pdb itself).
1448 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1452 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1449 else:
1453 else:
1450 if runner is None:
1454 if runner is None:
1451 runner = self.shell.safe_execfile
1455 runner = self.shell.safe_execfile
1452 if opts.has_key('t'):
1456 if opts.has_key('t'):
1453 try:
1457 try:
1454 nruns = int(opts['N'][0])
1458 nruns = int(opts['N'][0])
1455 if nruns < 1:
1459 if nruns < 1:
1456 error('Number of runs must be >=1')
1460 error('Number of runs must be >=1')
1457 return
1461 return
1458 except (KeyError):
1462 except (KeyError):
1459 nruns = 1
1463 nruns = 1
1460 if nruns == 1:
1464 if nruns == 1:
1461 t0 = clock2()
1465 t0 = clock2()
1462 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1466 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1463 t1 = clock2()
1467 t1 = clock2()
1464 t_usr = t1[0]-t0[0]
1468 t_usr = t1[0]-t0[0]
1465 t_sys = t1[1]-t1[1]
1469 t_sys = t1[1]-t1[1]
1466 print "\nIPython CPU timings (estimated):"
1470 print "\nIPython CPU timings (estimated):"
1467 print " User : %10s s." % t_usr
1471 print " User : %10s s." % t_usr
1468 print " System: %10s s." % t_sys
1472 print " System: %10s s." % t_sys
1469 else:
1473 else:
1470 runs = range(nruns)
1474 runs = range(nruns)
1471 t0 = clock2()
1475 t0 = clock2()
1472 for nr in runs:
1476 for nr in runs:
1473 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1477 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1474 t1 = clock2()
1478 t1 = clock2()
1475 t_usr = t1[0]-t0[0]
1479 t_usr = t1[0]-t0[0]
1476 t_sys = t1[1]-t1[1]
1480 t_sys = t1[1]-t1[1]
1477 print "\nIPython CPU timings (estimated):"
1481 print "\nIPython CPU timings (estimated):"
1478 print "Total runs performed:",nruns
1482 print "Total runs performed:",nruns
1479 print " Times : %10s %10s" % ('Total','Per run')
1483 print " Times : %10s %10s" % ('Total','Per run')
1480 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1484 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1481 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1485 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1482
1486
1483 else:
1487 else:
1484 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1488 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1485 if opts.has_key('i'):
1489 if opts.has_key('i'):
1486 self.shell.user_ns['__name__'] = __name__save
1490 self.shell.user_ns['__name__'] = __name__save
1487 else:
1491 else:
1488 # update IPython interactive namespace
1492 # update IPython interactive namespace
1489 del prog_ns['__name__']
1493 del prog_ns['__name__']
1490 self.shell.user_ns.update(prog_ns)
1494 self.shell.user_ns.update(prog_ns)
1491 finally:
1495 finally:
1492 sys.argv = save_argv
1496 sys.argv = save_argv
1493 if restore_main:
1497 if restore_main:
1494 sys.modules['__main__'] = restore_main
1498 sys.modules['__main__'] = restore_main
1495 return stats
1499 return stats
1496
1500
1497 def magic_runlog(self, parameter_s =''):
1501 def magic_runlog(self, parameter_s =''):
1498 """Run files as logs.
1502 """Run files as logs.
1499
1503
1500 Usage:\\
1504 Usage:\\
1501 %runlog file1 file2 ...
1505 %runlog file1 file2 ...
1502
1506
1503 Run the named files (treating them as log files) in sequence inside
1507 Run the named files (treating them as log files) in sequence inside
1504 the interpreter, and return to the prompt. This is much slower than
1508 the interpreter, and return to the prompt. This is much slower than
1505 %run because each line is executed in a try/except block, but it
1509 %run because each line is executed in a try/except block, but it
1506 allows running files with syntax errors in them.
1510 allows running files with syntax errors in them.
1507
1511
1508 Normally IPython will guess when a file is one of its own logfiles, so
1512 Normally IPython will guess when a file is one of its own logfiles, so
1509 you can typically use %run even for logs. This shorthand allows you to
1513 you can typically use %run even for logs. This shorthand allows you to
1510 force any file to be treated as a log file."""
1514 force any file to be treated as a log file."""
1511
1515
1512 for f in parameter_s.split():
1516 for f in parameter_s.split():
1513 self.shell.safe_execfile(f,self.shell.user_ns,
1517 self.shell.safe_execfile(f,self.shell.user_ns,
1514 self.shell.user_ns,islog=1)
1518 self.shell.user_ns,islog=1)
1515
1519
1516 def magic_time(self,parameter_s = ''):
1520 def magic_time(self,parameter_s = ''):
1517 """Time execution of a Python statement or expression.
1521 """Time execution of a Python statement or expression.
1518
1522
1519 The CPU and wall clock times are printed, and the value of the
1523 The CPU and wall clock times are printed, and the value of the
1520 expression (if any) is returned. Note that under Win32, system time
1524 expression (if any) is returned. Note that under Win32, system time
1521 is always reported as 0, since it can not be measured.
1525 is always reported as 0, since it can not be measured.
1522
1526
1523 This function provides very basic timing functionality. In Python
1527 This function provides very basic timing functionality. In Python
1524 2.3, the timeit module offers more control and sophistication, but for
1528 2.3, the timeit module offers more control and sophistication, but for
1525 now IPython supports Python 2.2, so we can not rely on timeit being
1529 now IPython supports Python 2.2, so we can not rely on timeit being
1526 present.
1530 present.
1527
1531
1528 Some examples:
1532 Some examples:
1529
1533
1530 In [1]: time 2**128
1534 In [1]: time 2**128
1531 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1535 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1532 Wall time: 0.00
1536 Wall time: 0.00
1533 Out[1]: 340282366920938463463374607431768211456L
1537 Out[1]: 340282366920938463463374607431768211456L
1534
1538
1535 In [2]: n = 1000000
1539 In [2]: n = 1000000
1536
1540
1537 In [3]: time sum(range(n))
1541 In [3]: time sum(range(n))
1538 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1542 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1539 Wall time: 1.37
1543 Wall time: 1.37
1540 Out[3]: 499999500000L
1544 Out[3]: 499999500000L
1541
1545
1542 In [4]: time print 'hello world'
1546 In [4]: time print 'hello world'
1543 hello world
1547 hello world
1544 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1548 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1545 Wall time: 0.00
1549 Wall time: 0.00
1546 """
1550 """
1547
1551
1548 # fail immediately if the given expression can't be compiled
1552 # fail immediately if the given expression can't be compiled
1549 try:
1553 try:
1550 mode = 'eval'
1554 mode = 'eval'
1551 code = compile(parameter_s,'<timed eval>',mode)
1555 code = compile(parameter_s,'<timed eval>',mode)
1552 except SyntaxError:
1556 except SyntaxError:
1553 mode = 'exec'
1557 mode = 'exec'
1554 code = compile(parameter_s,'<timed exec>',mode)
1558 code = compile(parameter_s,'<timed exec>',mode)
1555 # skew measurement as little as possible
1559 # skew measurement as little as possible
1556 glob = self.shell.user_ns
1560 glob = self.shell.user_ns
1557 clk = clock2
1561 clk = clock2
1558 wtime = time.time
1562 wtime = time.time
1559 # time execution
1563 # time execution
1560 wall_st = wtime()
1564 wall_st = wtime()
1561 if mode=='eval':
1565 if mode=='eval':
1562 st = clk()
1566 st = clk()
1563 out = eval(code,glob)
1567 out = eval(code,glob)
1564 end = clk()
1568 end = clk()
1565 else:
1569 else:
1566 st = clk()
1570 st = clk()
1567 exec code in glob
1571 exec code in glob
1568 end = clk()
1572 end = clk()
1569 out = None
1573 out = None
1570 wall_end = wtime()
1574 wall_end = wtime()
1571 # Compute actual times and report
1575 # Compute actual times and report
1572 wall_time = wall_end-wall_st
1576 wall_time = wall_end-wall_st
1573 cpu_user = end[0]-st[0]
1577 cpu_user = end[0]-st[0]
1574 cpu_sys = end[1]-st[1]
1578 cpu_sys = end[1]-st[1]
1575 cpu_tot = cpu_user+cpu_sys
1579 cpu_tot = cpu_user+cpu_sys
1576 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1580 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1577 (cpu_user,cpu_sys,cpu_tot)
1581 (cpu_user,cpu_sys,cpu_tot)
1578 print "Wall time: %.2f" % wall_time
1582 print "Wall time: %.2f" % wall_time
1579 return out
1583 return out
1580
1584
1581 def magic_macro(self,parameter_s = ''):
1585 def magic_macro(self,parameter_s = ''):
1582 """Define a set of input lines as a macro for future re-execution.
1586 """Define a set of input lines as a macro for future re-execution.
1583
1587
1584 Usage:\\
1588 Usage:\\
1585 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1589 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1586
1590
1587 This will define a global variable called `name` which is a string
1591 This will define a global variable called `name` which is a string
1588 made of joining the slices and lines you specify (n1,n2,... numbers
1592 made of joining the slices and lines you specify (n1,n2,... numbers
1589 above) from your input history into a single string. This variable
1593 above) from your input history into a single string. This variable
1590 acts like an automatic function which re-executes those lines as if
1594 acts like an automatic function which re-executes those lines as if
1591 you had typed them. You just type 'name' at the prompt and the code
1595 you had typed them. You just type 'name' at the prompt and the code
1592 executes.
1596 executes.
1593
1597
1594 The notation for indicating number ranges is: n1-n2 means 'use line
1598 The notation for indicating number ranges is: n1-n2 means 'use line
1595 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1599 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1596 using the lines numbered 5,6 and 7.
1600 using the lines numbered 5,6 and 7.
1597
1601
1598 Note: as a 'hidden' feature, you can also use traditional python slice
1602 Note: as a 'hidden' feature, you can also use traditional python slice
1599 notation, where N:M means numbers N through M-1.
1603 notation, where N:M means numbers N through M-1.
1600
1604
1601 For example, if your history contains (%hist prints it):
1605 For example, if your history contains (%hist prints it):
1602
1606
1603 44: x=1\\
1607 44: x=1\\
1604 45: y=3\\
1608 45: y=3\\
1605 46: z=x+y\\
1609 46: z=x+y\\
1606 47: print x\\
1610 47: print x\\
1607 48: a=5\\
1611 48: a=5\\
1608 49: print 'x',x,'y',y\\
1612 49: print 'x',x,'y',y\\
1609
1613
1610 you can create a macro with lines 44 through 47 (included) and line 49
1614 you can create a macro with lines 44 through 47 (included) and line 49
1611 called my_macro with:
1615 called my_macro with:
1612
1616
1613 In [51]: %macro my_macro 44-47 49
1617 In [51]: %macro my_macro 44-47 49
1614
1618
1615 Now, typing `my_macro` (without quotes) will re-execute all this code
1619 Now, typing `my_macro` (without quotes) will re-execute all this code
1616 in one pass.
1620 in one pass.
1617
1621
1618 You don't need to give the line-numbers in order, and any given line
1622 You don't need to give the line-numbers in order, and any given line
1619 number can appear multiple times. You can assemble macros with any
1623 number can appear multiple times. You can assemble macros with any
1620 lines from your input history in any order.
1624 lines from your input history in any order.
1621
1625
1622 The macro is a simple object which holds its value in an attribute,
1626 The macro is a simple object which holds its value in an attribute,
1623 but IPython's display system checks for macros and executes them as
1627 but IPython's display system checks for macros and executes them as
1624 code instead of printing them when you type their name.
1628 code instead of printing them when you type their name.
1625
1629
1626 You can view a macro's contents by explicitly printing it with:
1630 You can view a macro's contents by explicitly printing it with:
1627
1631
1628 'print macro_name'.
1632 'print macro_name'.
1629
1633
1630 For one-off cases which DON'T contain magic function calls in them you
1634 For one-off cases which DON'T contain magic function calls in them you
1631 can obtain similar results by explicitly executing slices from your
1635 can obtain similar results by explicitly executing slices from your
1632 input history with:
1636 input history with:
1633
1637
1634 In [60]: exec In[44:48]+In[49]"""
1638 In [60]: exec In[44:48]+In[49]"""
1635
1639
1636 args = parameter_s.split()
1640 args = parameter_s.split()
1637 name,ranges = args[0], args[1:]
1641 name,ranges = args[0], args[1:]
1638 #print 'rng',ranges # dbg
1642 #print 'rng',ranges # dbg
1639 lines = self.extract_input_slices(ranges)
1643 lines = self.extract_input_slices(ranges)
1640 macro = Macro(lines)
1644 macro = Macro(lines)
1641 self.shell.user_ns.update({name:macro})
1645 self.shell.user_ns.update({name:macro})
1642 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1646 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1643 print 'Macro contents:'
1647 print 'Macro contents:'
1644 print macro,
1648 print macro,
1645
1649
1646 def magic_save(self,parameter_s = ''):
1650 def magic_save(self,parameter_s = ''):
1647 """Save a set of lines to a given filename.
1651 """Save a set of lines to a given filename.
1648
1652
1649 Usage:\\
1653 Usage:\\
1650 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1654 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1651
1655
1652 This function uses the same syntax as %macro for line extraction, but
1656 This function uses the same syntax as %macro for line extraction, but
1653 instead of creating a macro it saves the resulting string to the
1657 instead of creating a macro it saves the resulting string to the
1654 filename you specify.
1658 filename you specify.
1655
1659
1656 It adds a '.py' extension to the file if you don't do so yourself, and
1660 It adds a '.py' extension to the file if you don't do so yourself, and
1657 it asks for confirmation before overwriting existing files."""
1661 it asks for confirmation before overwriting existing files."""
1658
1662
1659 args = parameter_s.split()
1663 args = parameter_s.split()
1660 fname,ranges = args[0], args[1:]
1664 fname,ranges = args[0], args[1:]
1661 if not fname.endswith('.py'):
1665 if not fname.endswith('.py'):
1662 fname += '.py'
1666 fname += '.py'
1663 if os.path.isfile(fname):
1667 if os.path.isfile(fname):
1664 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1668 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1665 if ans.lower() not in ['y','yes']:
1669 if ans.lower() not in ['y','yes']:
1666 print 'Operation cancelled.'
1670 print 'Operation cancelled.'
1667 return
1671 return
1668 cmds = ''.join(self.extract_input_slices(ranges))
1672 cmds = ''.join(self.extract_input_slices(ranges))
1669 f = file(fname,'w')
1673 f = file(fname,'w')
1670 f.write(cmds)
1674 f.write(cmds)
1671 f.close()
1675 f.close()
1672 print 'The following commands were written to file `%s`:' % fname
1676 print 'The following commands were written to file `%s`:' % fname
1673 print cmds
1677 print cmds
1674
1678
1675 def _edit_macro(self,mname,macro):
1679 def _edit_macro(self,mname,macro):
1676 """open an editor with the macro data in a file"""
1680 """open an editor with the macro data in a file"""
1677 filename = self.shell.mktempfile(macro.value)
1681 filename = self.shell.mktempfile(macro.value)
1678 self.shell.hooks.editor(filename)
1682 self.shell.hooks.editor(filename)
1679
1683
1680 # and make a new macro object, to replace the old one
1684 # and make a new macro object, to replace the old one
1681 mfile = open(filename)
1685 mfile = open(filename)
1682 mvalue = mfile.read()
1686 mvalue = mfile.read()
1683 mfile.close()
1687 mfile.close()
1684 self.shell.user_ns[mname] = Macro(mvalue)
1688 self.shell.user_ns[mname] = Macro(mvalue)
1685
1689
1686 def magic_ed(self,parameter_s=''):
1690 def magic_ed(self,parameter_s=''):
1687 """Alias to %edit."""
1691 """Alias to %edit."""
1688 return self.magic_edit(parameter_s)
1692 return self.magic_edit(parameter_s)
1689
1693
1690 def magic_edit(self,parameter_s='',last_call=['','']):
1694 def magic_edit(self,parameter_s='',last_call=['','']):
1691 """Bring up an editor and execute the resulting code.
1695 """Bring up an editor and execute the resulting code.
1692
1696
1693 Usage:
1697 Usage:
1694 %edit [options] [args]
1698 %edit [options] [args]
1695
1699
1696 %edit runs IPython's editor hook. The default version of this hook is
1700 %edit runs IPython's editor hook. The default version of this hook is
1697 set to call the __IPYTHON__.rc.editor command. This is read from your
1701 set to call the __IPYTHON__.rc.editor command. This is read from your
1698 environment variable $EDITOR. If this isn't found, it will default to
1702 environment variable $EDITOR. If this isn't found, it will default to
1699 vi under Linux/Unix and to notepad under Windows. See the end of this
1703 vi under Linux/Unix and to notepad under Windows. See the end of this
1700 docstring for how to change the editor hook.
1704 docstring for how to change the editor hook.
1701
1705
1702 You can also set the value of this editor via the command line option
1706 You can also set the value of this editor via the command line option
1703 '-editor' or in your ipythonrc file. This is useful if you wish to use
1707 '-editor' or in your ipythonrc file. This is useful if you wish to use
1704 specifically for IPython an editor different from your typical default
1708 specifically for IPython an editor different from your typical default
1705 (and for Windows users who typically don't set environment variables).
1709 (and for Windows users who typically don't set environment variables).
1706
1710
1707 This command allows you to conveniently edit multi-line code right in
1711 This command allows you to conveniently edit multi-line code right in
1708 your IPython session.
1712 your IPython session.
1709
1713
1710 If called without arguments, %edit opens up an empty editor with a
1714 If called without arguments, %edit opens up an empty editor with a
1711 temporary file and will execute the contents of this file when you
1715 temporary file and will execute the contents of this file when you
1712 close it (don't forget to save it!).
1716 close it (don't forget to save it!).
1713
1717
1714
1718
1715 Options:
1719 Options:
1716
1720
1717 -p: this will call the editor with the same data as the previous time
1721 -p: this will call the editor with the same data as the previous time
1718 it was used, regardless of how long ago (in your current session) it
1722 it was used, regardless of how long ago (in your current session) it
1719 was.
1723 was.
1720
1724
1721 -x: do not execute the edited code immediately upon exit. This is
1725 -x: do not execute the edited code immediately upon exit. This is
1722 mainly useful if you are editing programs which need to be called with
1726 mainly useful if you are editing programs which need to be called with
1723 command line arguments, which you can then do using %run.
1727 command line arguments, which you can then do using %run.
1724
1728
1725
1729
1726 Arguments:
1730 Arguments:
1727
1731
1728 If arguments are given, the following possibilites exist:
1732 If arguments are given, the following possibilites exist:
1729
1733
1730 - The arguments are numbers or pairs of colon-separated numbers (like
1734 - The arguments are numbers or pairs of colon-separated numbers (like
1731 1 4:8 9). These are interpreted as lines of previous input to be
1735 1 4:8 9). These are interpreted as lines of previous input to be
1732 loaded into the editor. The syntax is the same of the %macro command.
1736 loaded into the editor. The syntax is the same of the %macro command.
1733
1737
1734 - If the argument doesn't start with a number, it is evaluated as a
1738 - If the argument doesn't start with a number, it is evaluated as a
1735 variable and its contents loaded into the editor. You can thus edit
1739 variable and its contents loaded into the editor. You can thus edit
1736 any string which contains python code (including the result of
1740 any string which contains python code (including the result of
1737 previous edits).
1741 previous edits).
1738
1742
1739 - If the argument is the name of an object (other than a string),
1743 - If the argument is the name of an object (other than a string),
1740 IPython will try to locate the file where it was defined and open the
1744 IPython will try to locate the file where it was defined and open the
1741 editor at the point where it is defined. You can use `%edit function`
1745 editor at the point where it is defined. You can use `%edit function`
1742 to load an editor exactly at the point where 'function' is defined,
1746 to load an editor exactly at the point where 'function' is defined,
1743 edit it and have the file be executed automatically.
1747 edit it and have the file be executed automatically.
1744
1748
1745 If the object is a macro (see %macro for details), this opens up your
1749 If the object is a macro (see %macro for details), this opens up your
1746 specified editor with a temporary file containing the macro's data.
1750 specified editor with a temporary file containing the macro's data.
1747 Upon exit, the macro is reloaded with the contents of the file.
1751 Upon exit, the macro is reloaded with the contents of the file.
1748
1752
1749 Note: opening at an exact line is only supported under Unix, and some
1753 Note: opening at an exact line is only supported under Unix, and some
1750 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1754 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1751 '+NUMBER' parameter necessary for this feature. Good editors like
1755 '+NUMBER' parameter necessary for this feature. Good editors like
1752 (X)Emacs, vi, jed, pico and joe all do.
1756 (X)Emacs, vi, jed, pico and joe all do.
1753
1757
1754 - If the argument is not found as a variable, IPython will look for a
1758 - If the argument is not found as a variable, IPython will look for a
1755 file with that name (adding .py if necessary) and load it into the
1759 file with that name (adding .py if necessary) and load it into the
1756 editor. It will execute its contents with execfile() when you exit,
1760 editor. It will execute its contents with execfile() when you exit,
1757 loading any code in the file into your interactive namespace.
1761 loading any code in the file into your interactive namespace.
1758
1762
1759 After executing your code, %edit will return as output the code you
1763 After executing your code, %edit will return as output the code you
1760 typed in the editor (except when it was an existing file). This way
1764 typed in the editor (except when it was an existing file). This way
1761 you can reload the code in further invocations of %edit as a variable,
1765 you can reload the code in further invocations of %edit as a variable,
1762 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1766 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1763 the output.
1767 the output.
1764
1768
1765 Note that %edit is also available through the alias %ed.
1769 Note that %edit is also available through the alias %ed.
1766
1770
1767 This is an example of creating a simple function inside the editor and
1771 This is an example of creating a simple function inside the editor and
1768 then modifying it. First, start up the editor:
1772 then modifying it. First, start up the editor:
1769
1773
1770 In [1]: ed\\
1774 In [1]: ed\\
1771 Editing... done. Executing edited code...\\
1775 Editing... done. Executing edited code...\\
1772 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1776 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1773
1777
1774 We can then call the function foo():
1778 We can then call the function foo():
1775
1779
1776 In [2]: foo()\\
1780 In [2]: foo()\\
1777 foo() was defined in an editing session
1781 foo() was defined in an editing session
1778
1782
1779 Now we edit foo. IPython automatically loads the editor with the
1783 Now we edit foo. IPython automatically loads the editor with the
1780 (temporary) file where foo() was previously defined:
1784 (temporary) file where foo() was previously defined:
1781
1785
1782 In [3]: ed foo\\
1786 In [3]: ed foo\\
1783 Editing... done. Executing edited code...
1787 Editing... done. Executing edited code...
1784
1788
1785 And if we call foo() again we get the modified version:
1789 And if we call foo() again we get the modified version:
1786
1790
1787 In [4]: foo()\\
1791 In [4]: foo()\\
1788 foo() has now been changed!
1792 foo() has now been changed!
1789
1793
1790 Here is an example of how to edit a code snippet successive
1794 Here is an example of how to edit a code snippet successive
1791 times. First we call the editor:
1795 times. First we call the editor:
1792
1796
1793 In [8]: ed\\
1797 In [8]: ed\\
1794 Editing... done. Executing edited code...\\
1798 Editing... done. Executing edited code...\\
1795 hello\\
1799 hello\\
1796 Out[8]: "print 'hello'\\n"
1800 Out[8]: "print 'hello'\\n"
1797
1801
1798 Now we call it again with the previous output (stored in _):
1802 Now we call it again with the previous output (stored in _):
1799
1803
1800 In [9]: ed _\\
1804 In [9]: ed _\\
1801 Editing... done. Executing edited code...\\
1805 Editing... done. Executing edited code...\\
1802 hello world\\
1806 hello world\\
1803 Out[9]: "print 'hello world'\\n"
1807 Out[9]: "print 'hello world'\\n"
1804
1808
1805 Now we call it with the output #8 (stored in _8, also as Out[8]):
1809 Now we call it with the output #8 (stored in _8, also as Out[8]):
1806
1810
1807 In [10]: ed _8\\
1811 In [10]: ed _8\\
1808 Editing... done. Executing edited code...\\
1812 Editing... done. Executing edited code...\\
1809 hello again\\
1813 hello again\\
1810 Out[10]: "print 'hello again'\\n"
1814 Out[10]: "print 'hello again'\\n"
1811
1815
1812
1816
1813 Changing the default editor hook:
1817 Changing the default editor hook:
1814
1818
1815 If you wish to write your own editor hook, you can put it in a
1819 If you wish to write your own editor hook, you can put it in a
1816 configuration file which you load at startup time. The default hook
1820 configuration file which you load at startup time. The default hook
1817 is defined in the IPython.hooks module, and you can use that as a
1821 is defined in the IPython.hooks module, and you can use that as a
1818 starting example for further modifications. That file also has
1822 starting example for further modifications. That file also has
1819 general instructions on how to set a new hook for use once you've
1823 general instructions on how to set a new hook for use once you've
1820 defined it."""
1824 defined it."""
1821
1825
1822 # FIXME: This function has become a convoluted mess. It needs a
1826 # FIXME: This function has become a convoluted mess. It needs a
1823 # ground-up rewrite with clean, simple logic.
1827 # ground-up rewrite with clean, simple logic.
1824
1828
1825 def make_filename(arg):
1829 def make_filename(arg):
1826 "Make a filename from the given args"
1830 "Make a filename from the given args"
1827 try:
1831 try:
1828 filename = get_py_filename(arg)
1832 filename = get_py_filename(arg)
1829 except IOError:
1833 except IOError:
1830 if args.endswith('.py'):
1834 if args.endswith('.py'):
1831 filename = arg
1835 filename = arg
1832 else:
1836 else:
1833 filename = None
1837 filename = None
1834 return filename
1838 return filename
1835
1839
1836 # custom exceptions
1840 # custom exceptions
1837 class DataIsObject(Exception): pass
1841 class DataIsObject(Exception): pass
1838
1842
1839 opts,args = self.parse_options(parameter_s,'px')
1843 opts,args = self.parse_options(parameter_s,'px')
1840
1844
1841 # Default line number value
1845 # Default line number value
1842 lineno = None
1846 lineno = None
1843 if opts.has_key('p'):
1847 if opts.has_key('p'):
1844 args = '_%s' % last_call[0]
1848 args = '_%s' % last_call[0]
1845 if not self.shell.user_ns.has_key(args):
1849 if not self.shell.user_ns.has_key(args):
1846 args = last_call[1]
1850 args = last_call[1]
1847
1851
1848 # use last_call to remember the state of the previous call, but don't
1852 # use last_call to remember the state of the previous call, but don't
1849 # let it be clobbered by successive '-p' calls.
1853 # let it be clobbered by successive '-p' calls.
1850 try:
1854 try:
1851 last_call[0] = self.shell.outputcache.prompt_count
1855 last_call[0] = self.shell.outputcache.prompt_count
1852 if not opts.has_key('p'):
1856 if not opts.has_key('p'):
1853 last_call[1] = parameter_s
1857 last_call[1] = parameter_s
1854 except:
1858 except:
1855 pass
1859 pass
1856
1860
1857 # by default this is done with temp files, except when the given
1861 # by default this is done with temp files, except when the given
1858 # arg is a filename
1862 # arg is a filename
1859 use_temp = 1
1863 use_temp = 1
1860
1864
1861 if re.match(r'\d',args):
1865 if re.match(r'\d',args):
1862 # Mode where user specifies ranges of lines, like in %macro.
1866 # Mode where user specifies ranges of lines, like in %macro.
1863 # This means that you can't edit files whose names begin with
1867 # This means that you can't edit files whose names begin with
1864 # numbers this way. Tough.
1868 # numbers this way. Tough.
1865 ranges = args.split()
1869 ranges = args.split()
1866 data = ''.join(self.extract_input_slices(ranges))
1870 data = ''.join(self.extract_input_slices(ranges))
1867 elif args.endswith('.py'):
1871 elif args.endswith('.py'):
1868 filename = make_filename(args)
1872 filename = make_filename(args)
1869 data = ''
1873 data = ''
1870 use_temp = 0
1874 use_temp = 0
1871 elif args:
1875 elif args:
1872 try:
1876 try:
1873 # Load the parameter given as a variable. If not a string,
1877 # Load the parameter given as a variable. If not a string,
1874 # process it as an object instead (below)
1878 # process it as an object instead (below)
1875
1879
1876 #print '*** args',args,'type',type(args) # dbg
1880 #print '*** args',args,'type',type(args) # dbg
1877 data = eval(args,self.shell.user_ns)
1881 data = eval(args,self.shell.user_ns)
1878 if not type(data) in StringTypes:
1882 if not type(data) in StringTypes:
1879 raise DataIsObject
1883 raise DataIsObject
1880
1884
1881 except (NameError,SyntaxError):
1885 except (NameError,SyntaxError):
1882 # given argument is not a variable, try as a filename
1886 # given argument is not a variable, try as a filename
1883 filename = make_filename(args)
1887 filename = make_filename(args)
1884 if filename is None:
1888 if filename is None:
1885 warn("Argument given (%s) can't be found as a variable "
1889 warn("Argument given (%s) can't be found as a variable "
1886 "or as a filename." % args)
1890 "or as a filename." % args)
1887 return
1891 return
1888
1892
1889 data = ''
1893 data = ''
1890 use_temp = 0
1894 use_temp = 0
1891 except DataIsObject:
1895 except DataIsObject:
1892
1896
1893 # macros have a special edit function
1897 # macros have a special edit function
1894 if isinstance(data,Macro):
1898 if isinstance(data,Macro):
1895 self._edit_macro(args,data)
1899 self._edit_macro(args,data)
1896 return
1900 return
1897
1901
1898 # For objects, try to edit the file where they are defined
1902 # For objects, try to edit the file where they are defined
1899 try:
1903 try:
1900 filename = inspect.getabsfile(data)
1904 filename = inspect.getabsfile(data)
1901 datafile = 1
1905 datafile = 1
1902 except TypeError:
1906 except TypeError:
1903 filename = make_filename(args)
1907 filename = make_filename(args)
1904 datafile = 1
1908 datafile = 1
1905 warn('Could not find file where `%s` is defined.\n'
1909 warn('Could not find file where `%s` is defined.\n'
1906 'Opening a file named `%s`' % (args,filename))
1910 'Opening a file named `%s`' % (args,filename))
1907 # Now, make sure we can actually read the source (if it was in
1911 # Now, make sure we can actually read the source (if it was in
1908 # a temp file it's gone by now).
1912 # a temp file it's gone by now).
1909 if datafile:
1913 if datafile:
1910 try:
1914 try:
1911 lineno = inspect.getsourcelines(data)[1]
1915 lineno = inspect.getsourcelines(data)[1]
1912 except IOError:
1916 except IOError:
1913 filename = make_filename(args)
1917 filename = make_filename(args)
1914 if filename is None:
1918 if filename is None:
1915 warn('The file `%s` where `%s` was defined cannot '
1919 warn('The file `%s` where `%s` was defined cannot '
1916 'be read.' % (filename,data))
1920 'be read.' % (filename,data))
1917 return
1921 return
1918 use_temp = 0
1922 use_temp = 0
1919 else:
1923 else:
1920 data = ''
1924 data = ''
1921
1925
1922 if use_temp:
1926 if use_temp:
1923 filename = self.shell.mktempfile(data)
1927 filename = self.shell.mktempfile(data)
1924 print 'IPython will make a temporary file named:',filename
1928 print 'IPython will make a temporary file named:',filename
1925
1929
1926 # do actual editing here
1930 # do actual editing here
1927 print 'Editing...',
1931 print 'Editing...',
1928 sys.stdout.flush()
1932 sys.stdout.flush()
1929 self.shell.hooks.editor(filename,lineno)
1933 self.shell.hooks.editor(filename,lineno)
1930 if opts.has_key('x'): # -x prevents actual execution
1934 if opts.has_key('x'): # -x prevents actual execution
1931 print
1935 print
1932 else:
1936 else:
1933 print 'done. Executing edited code...'
1937 print 'done. Executing edited code...'
1934 try:
1938 try:
1935 self.shell.safe_execfile(filename,self.shell.user_ns)
1939 self.shell.safe_execfile(filename,self.shell.user_ns)
1936 except IOError,msg:
1940 except IOError,msg:
1937 if msg.filename == filename:
1941 if msg.filename == filename:
1938 warn('File not found. Did you forget to save?')
1942 warn('File not found. Did you forget to save?')
1939 return
1943 return
1940 else:
1944 else:
1941 self.shell.showtraceback()
1945 self.shell.showtraceback()
1942 except:
1946 except:
1943 self.shell.showtraceback()
1947 self.shell.showtraceback()
1944 if use_temp:
1948 if use_temp:
1945 return open(filename).read()
1949 return open(filename).read()
1946
1950
1947 def magic_xmode(self,parameter_s = ''):
1951 def magic_xmode(self,parameter_s = ''):
1948 """Switch modes for the exception handlers.
1952 """Switch modes for the exception handlers.
1949
1953
1950 Valid modes: Plain, Context and Verbose.
1954 Valid modes: Plain, Context and Verbose.
1951
1955
1952 If called without arguments, acts as a toggle."""
1956 If called without arguments, acts as a toggle."""
1953
1957
1954 def xmode_switch_err(name):
1958 def xmode_switch_err(name):
1955 warn('Error changing %s exception modes.\n%s' %
1959 warn('Error changing %s exception modes.\n%s' %
1956 (name,sys.exc_info()[1]))
1960 (name,sys.exc_info()[1]))
1957
1961
1958 shell = self.shell
1962 shell = self.shell
1959 new_mode = parameter_s.strip().capitalize()
1963 new_mode = parameter_s.strip().capitalize()
1960 try:
1964 try:
1961 shell.InteractiveTB.set_mode(mode=new_mode)
1965 shell.InteractiveTB.set_mode(mode=new_mode)
1962 print 'Exception reporting mode:',shell.InteractiveTB.mode
1966 print 'Exception reporting mode:',shell.InteractiveTB.mode
1963 except:
1967 except:
1964 xmode_switch_err('user')
1968 xmode_switch_err('user')
1965
1969
1966 # threaded shells use a special handler in sys.excepthook
1970 # threaded shells use a special handler in sys.excepthook
1967 if shell.isthreaded:
1971 if shell.isthreaded:
1968 try:
1972 try:
1969 shell.sys_excepthook.set_mode(mode=new_mode)
1973 shell.sys_excepthook.set_mode(mode=new_mode)
1970 except:
1974 except:
1971 xmode_switch_err('threaded')
1975 xmode_switch_err('threaded')
1972
1976
1973 def magic_colors(self,parameter_s = ''):
1977 def magic_colors(self,parameter_s = ''):
1974 """Switch color scheme for prompts, info system and exception handlers.
1978 """Switch color scheme for prompts, info system and exception handlers.
1975
1979
1976 Currently implemented schemes: NoColor, Linux, LightBG.
1980 Currently implemented schemes: NoColor, Linux, LightBG.
1977
1981
1978 Color scheme names are not case-sensitive."""
1982 Color scheme names are not case-sensitive."""
1979
1983
1980 def color_switch_err(name):
1984 def color_switch_err(name):
1981 warn('Error changing %s color schemes.\n%s' %
1985 warn('Error changing %s color schemes.\n%s' %
1982 (name,sys.exc_info()[1]))
1986 (name,sys.exc_info()[1]))
1983
1987
1984
1988
1985 new_scheme = parameter_s.strip()
1989 new_scheme = parameter_s.strip()
1986 if not new_scheme:
1990 if not new_scheme:
1987 print 'You must specify a color scheme.'
1991 print 'You must specify a color scheme.'
1988 return
1992 return
1989 # Under Windows, check for Gary Bishop's readline, which is necessary
1993 # Under Windows, check for Gary Bishop's readline, which is necessary
1990 # for ANSI coloring
1994 # for ANSI coloring
1991 if os.name in ['nt','dos']:
1995 if os.name in ['nt','dos']:
1992 try:
1996 try:
1993 import readline
1997 import readline
1994 except ImportError:
1998 except ImportError:
1995 has_readline = 0
1999 has_readline = 0
1996 else:
2000 else:
1997 try:
2001 try:
1998 readline.GetOutputFile()
2002 readline.GetOutputFile()
1999 except AttributeError:
2003 except AttributeError:
2000 has_readline = 0
2004 has_readline = 0
2001 else:
2005 else:
2002 has_readline = 1
2006 has_readline = 1
2003 if not has_readline:
2007 if not has_readline:
2004 msg = """\
2008 msg = """\
2005 Proper color support under MS Windows requires Gary Bishop's readline library.
2009 Proper color support under MS Windows requires Gary Bishop's readline library.
2006 You can find it at:
2010 You can find it at:
2007 http://sourceforge.net/projects/uncpythontools
2011 http://sourceforge.net/projects/uncpythontools
2008 Gary's readline needs the ctypes module, from:
2012 Gary's readline needs the ctypes module, from:
2009 http://starship.python.net/crew/theller/ctypes
2013 http://starship.python.net/crew/theller/ctypes
2010
2014
2011 Defaulting color scheme to 'NoColor'"""
2015 Defaulting color scheme to 'NoColor'"""
2012 new_scheme = 'NoColor'
2016 new_scheme = 'NoColor'
2013 warn(msg)
2017 warn(msg)
2014 # local shortcut
2018 # local shortcut
2015 shell = self.shell
2019 shell = self.shell
2016
2020
2017 # Set prompt colors
2021 # Set prompt colors
2018 try:
2022 try:
2019 shell.outputcache.set_colors(new_scheme)
2023 shell.outputcache.set_colors(new_scheme)
2020 except:
2024 except:
2021 color_switch_err('prompt')
2025 color_switch_err('prompt')
2022 else:
2026 else:
2023 shell.rc.colors = \
2027 shell.rc.colors = \
2024 shell.outputcache.color_table.active_scheme_name
2028 shell.outputcache.color_table.active_scheme_name
2025 # Set exception colors
2029 # Set exception colors
2026 try:
2030 try:
2027 shell.InteractiveTB.set_colors(scheme = new_scheme)
2031 shell.InteractiveTB.set_colors(scheme = new_scheme)
2028 shell.SyntaxTB.set_colors(scheme = new_scheme)
2032 shell.SyntaxTB.set_colors(scheme = new_scheme)
2029 except:
2033 except:
2030 color_switch_err('exception')
2034 color_switch_err('exception')
2031
2035
2032 # threaded shells use a verbose traceback in sys.excepthook
2036 # threaded shells use a verbose traceback in sys.excepthook
2033 if shell.isthreaded:
2037 if shell.isthreaded:
2034 try:
2038 try:
2035 shell.sys_excepthook.set_colors(scheme=new_scheme)
2039 shell.sys_excepthook.set_colors(scheme=new_scheme)
2036 except:
2040 except:
2037 color_switch_err('system exception handler')
2041 color_switch_err('system exception handler')
2038
2042
2039 # Set info (for 'object?') colors
2043 # Set info (for 'object?') colors
2040 if shell.rc.color_info:
2044 if shell.rc.color_info:
2041 try:
2045 try:
2042 shell.inspector.set_active_scheme(new_scheme)
2046 shell.inspector.set_active_scheme(new_scheme)
2043 except:
2047 except:
2044 color_switch_err('object inspector')
2048 color_switch_err('object inspector')
2045 else:
2049 else:
2046 shell.inspector.set_active_scheme('NoColor')
2050 shell.inspector.set_active_scheme('NoColor')
2047
2051
2048 def magic_color_info(self,parameter_s = ''):
2052 def magic_color_info(self,parameter_s = ''):
2049 """Toggle color_info.
2053 """Toggle color_info.
2050
2054
2051 The color_info configuration parameter controls whether colors are
2055 The color_info configuration parameter controls whether colors are
2052 used for displaying object details (by things like %psource, %pfile or
2056 used for displaying object details (by things like %psource, %pfile or
2053 the '?' system). This function toggles this value with each call.
2057 the '?' system). This function toggles this value with each call.
2054
2058
2055 Note that unless you have a fairly recent pager (less works better
2059 Note that unless you have a fairly recent pager (less works better
2056 than more) in your system, using colored object information displays
2060 than more) in your system, using colored object information displays
2057 will not work properly. Test it and see."""
2061 will not work properly. Test it and see."""
2058
2062
2059 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2063 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2060 self.magic_colors(self.shell.rc.colors)
2064 self.magic_colors(self.shell.rc.colors)
2061 print 'Object introspection functions have now coloring:',
2065 print 'Object introspection functions have now coloring:',
2062 print ['OFF','ON'][self.shell.rc.color_info]
2066 print ['OFF','ON'][self.shell.rc.color_info]
2063
2067
2064 def magic_Pprint(self, parameter_s=''):
2068 def magic_Pprint(self, parameter_s=''):
2065 """Toggle pretty printing on/off."""
2069 """Toggle pretty printing on/off."""
2066
2070
2067 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2071 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2068 print 'Pretty printing has been turned', \
2072 print 'Pretty printing has been turned', \
2069 ['OFF','ON'][self.shell.outputcache.Pprint]
2073 ['OFF','ON'][self.shell.outputcache.Pprint]
2070
2074
2071 def magic_exit(self, parameter_s=''):
2075 def magic_exit(self, parameter_s=''):
2072 """Exit IPython, confirming if configured to do so.
2076 """Exit IPython, confirming if configured to do so.
2073
2077
2074 You can configure whether IPython asks for confirmation upon exit by
2078 You can configure whether IPython asks for confirmation upon exit by
2075 setting the confirm_exit flag in the ipythonrc file."""
2079 setting the confirm_exit flag in the ipythonrc file."""
2076
2080
2077 self.shell.exit()
2081 self.shell.exit()
2078
2082
2079 def magic_quit(self, parameter_s=''):
2083 def magic_quit(self, parameter_s=''):
2080 """Exit IPython, confirming if configured to do so (like %exit)"""
2084 """Exit IPython, confirming if configured to do so (like %exit)"""
2081
2085
2082 self.shell.exit()
2086 self.shell.exit()
2083
2087
2084 def magic_Exit(self, parameter_s=''):
2088 def magic_Exit(self, parameter_s=''):
2085 """Exit IPython without confirmation."""
2089 """Exit IPython without confirmation."""
2086
2090
2087 self.shell.exit_now = True
2091 self.shell.exit_now = True
2088
2092
2089 def magic_Quit(self, parameter_s=''):
2093 def magic_Quit(self, parameter_s=''):
2090 """Exit IPython without confirmation (like %Exit)."""
2094 """Exit IPython without confirmation (like %Exit)."""
2091
2095
2092 self.shell.exit_now = True
2096 self.shell.exit_now = True
2093
2097
2094 #......................................................................
2098 #......................................................................
2095 # Functions to implement unix shell-type things
2099 # Functions to implement unix shell-type things
2096
2100
2097 def magic_alias(self, parameter_s = ''):
2101 def magic_alias(self, parameter_s = ''):
2098 """Define an alias for a system command.
2102 """Define an alias for a system command.
2099
2103
2100 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2104 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2101
2105
2102 Then, typing 'alias_name params' will execute the system command 'cmd
2106 Then, typing 'alias_name params' will execute the system command 'cmd
2103 params' (from your underlying operating system).
2107 params' (from your underlying operating system).
2104
2108
2105 Aliases have lower precedence than magic functions and Python normal
2109 Aliases have lower precedence than magic functions and Python normal
2106 variables, so if 'foo' is both a Python variable and an alias, the
2110 variables, so if 'foo' is both a Python variable and an alias, the
2107 alias can not be executed until 'del foo' removes the Python variable.
2111 alias can not be executed until 'del foo' removes the Python variable.
2108
2112
2109 You can use the %l specifier in an alias definition to represent the
2113 You can use the %l specifier in an alias definition to represent the
2110 whole line when the alias is called. For example:
2114 whole line when the alias is called. For example:
2111
2115
2112 In [2]: alias all echo "Input in brackets: <%l>"\\
2116 In [2]: alias all echo "Input in brackets: <%l>"\\
2113 In [3]: all hello world\\
2117 In [3]: all hello world\\
2114 Input in brackets: <hello world>
2118 Input in brackets: <hello world>
2115
2119
2116 You can also define aliases with parameters using %s specifiers (one
2120 You can also define aliases with parameters using %s specifiers (one
2117 per parameter):
2121 per parameter):
2118
2122
2119 In [1]: alias parts echo first %s second %s\\
2123 In [1]: alias parts echo first %s second %s\\
2120 In [2]: %parts A B\\
2124 In [2]: %parts A B\\
2121 first A second B\\
2125 first A second B\\
2122 In [3]: %parts A\\
2126 In [3]: %parts A\\
2123 Incorrect number of arguments: 2 expected.\\
2127 Incorrect number of arguments: 2 expected.\\
2124 parts is an alias to: 'echo first %s second %s'
2128 parts is an alias to: 'echo first %s second %s'
2125
2129
2126 Note that %l and %s are mutually exclusive. You can only use one or
2130 Note that %l and %s are mutually exclusive. You can only use one or
2127 the other in your aliases.
2131 the other in your aliases.
2128
2132
2129 Aliases expand Python variables just like system calls using ! or !!
2133 Aliases expand Python variables just like system calls using ! or !!
2130 do: all expressions prefixed with '$' get expanded. For details of
2134 do: all expressions prefixed with '$' get expanded. For details of
2131 the semantic rules, see PEP-215:
2135 the semantic rules, see PEP-215:
2132 http://www.python.org/peps/pep-0215.html. This is the library used by
2136 http://www.python.org/peps/pep-0215.html. This is the library used by
2133 IPython for variable expansion. If you want to access a true shell
2137 IPython for variable expansion. If you want to access a true shell
2134 variable, an extra $ is necessary to prevent its expansion by IPython:
2138 variable, an extra $ is necessary to prevent its expansion by IPython:
2135
2139
2136 In [6]: alias show echo\\
2140 In [6]: alias show echo\\
2137 In [7]: PATH='A Python string'\\
2141 In [7]: PATH='A Python string'\\
2138 In [8]: show $PATH\\
2142 In [8]: show $PATH\\
2139 A Python string\\
2143 A Python string\\
2140 In [9]: show $$PATH\\
2144 In [9]: show $$PATH\\
2141 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2145 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2142
2146
2143 You can use the alias facility to acess all of $PATH. See the %rehash
2147 You can use the alias facility to acess all of $PATH. See the %rehash
2144 and %rehashx functions, which automatically create aliases for the
2148 and %rehashx functions, which automatically create aliases for the
2145 contents of your $PATH.
2149 contents of your $PATH.
2146
2150
2147 If called with no parameters, %alias prints the current alias table."""
2151 If called with no parameters, %alias prints the current alias table."""
2148
2152
2149 par = parameter_s.strip()
2153 par = parameter_s.strip()
2150 if not par:
2154 if not par:
2151 if self.shell.rc.automagic:
2155 if self.shell.rc.automagic:
2152 prechar = ''
2156 prechar = ''
2153 else:
2157 else:
2154 prechar = self.shell.ESC_MAGIC
2158 prechar = self.shell.ESC_MAGIC
2155 print 'Alias\t\tSystem Command\n'+'-'*30
2159 print 'Alias\t\tSystem Command\n'+'-'*30
2156 atab = self.shell.alias_table
2160 atab = self.shell.alias_table
2157 aliases = atab.keys()
2161 aliases = atab.keys()
2158 aliases.sort()
2162 aliases.sort()
2159 for alias in aliases:
2163 for alias in aliases:
2160 print prechar+alias+'\t\t'+atab[alias][1]
2164 print prechar+alias+'\t\t'+atab[alias][1]
2161 print '-'*30+'\nTotal number of aliases:',len(aliases)
2165 print '-'*30+'\nTotal number of aliases:',len(aliases)
2162 return
2166 return
2163 try:
2167 try:
2164 alias,cmd = par.split(None,1)
2168 alias,cmd = par.split(None,1)
2165 except:
2169 except:
2166 print OInspect.getdoc(self.magic_alias)
2170 print OInspect.getdoc(self.magic_alias)
2167 else:
2171 else:
2168 nargs = cmd.count('%s')
2172 nargs = cmd.count('%s')
2169 if nargs>0 and cmd.find('%l')>=0:
2173 if nargs>0 and cmd.find('%l')>=0:
2170 error('The %s and %l specifiers are mutually exclusive '
2174 error('The %s and %l specifiers are mutually exclusive '
2171 'in alias definitions.')
2175 'in alias definitions.')
2172 else: # all looks OK
2176 else: # all looks OK
2173 self.shell.alias_table[alias] = (nargs,cmd)
2177 self.shell.alias_table[alias] = (nargs,cmd)
2174 self.shell.alias_table_validate(verbose=1)
2178 self.shell.alias_table_validate(verbose=1)
2175 # end magic_alias
2179 # end magic_alias
2176
2180
2177 def magic_unalias(self, parameter_s = ''):
2181 def magic_unalias(self, parameter_s = ''):
2178 """Remove an alias"""
2182 """Remove an alias"""
2179
2183
2180 aname = parameter_s.strip()
2184 aname = parameter_s.strip()
2181 if aname in self.shell.alias_table:
2185 if aname in self.shell.alias_table:
2182 del self.shell.alias_table[aname]
2186 del self.shell.alias_table[aname]
2183
2187
2184 def magic_rehash(self, parameter_s = ''):
2188 def magic_rehash(self, parameter_s = ''):
2185 """Update the alias table with all entries in $PATH.
2189 """Update the alias table with all entries in $PATH.
2186
2190
2187 This version does no checks on execute permissions or whether the
2191 This version does no checks on execute permissions or whether the
2188 contents of $PATH are truly files (instead of directories or something
2192 contents of $PATH are truly files (instead of directories or something
2189 else). For such a safer (but slower) version, use %rehashx."""
2193 else). For such a safer (but slower) version, use %rehashx."""
2190
2194
2191 # This function (and rehashx) manipulate the alias_table directly
2195 # This function (and rehashx) manipulate the alias_table directly
2192 # rather than calling magic_alias, for speed reasons. A rehash on a
2196 # rather than calling magic_alias, for speed reasons. A rehash on a
2193 # typical Linux box involves several thousand entries, so efficiency
2197 # typical Linux box involves several thousand entries, so efficiency
2194 # here is a top concern.
2198 # here is a top concern.
2195
2199
2196 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2200 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2197 alias_table = self.shell.alias_table
2201 alias_table = self.shell.alias_table
2198 for pdir in path:
2202 for pdir in path:
2199 for ff in os.listdir(pdir):
2203 for ff in os.listdir(pdir):
2200 # each entry in the alias table must be (N,name), where
2204 # each entry in the alias table must be (N,name), where
2201 # N is the number of positional arguments of the alias.
2205 # N is the number of positional arguments of the alias.
2202 alias_table[ff] = (0,ff)
2206 alias_table[ff] = (0,ff)
2203 # Make sure the alias table doesn't contain keywords or builtins
2207 # Make sure the alias table doesn't contain keywords or builtins
2204 self.shell.alias_table_validate()
2208 self.shell.alias_table_validate()
2205 # Call again init_auto_alias() so we get 'rm -i' and other modified
2209 # Call again init_auto_alias() so we get 'rm -i' and other modified
2206 # aliases since %rehash will probably clobber them
2210 # aliases since %rehash will probably clobber them
2207 self.shell.init_auto_alias()
2211 self.shell.init_auto_alias()
2208
2212
2209 def magic_rehashx(self, parameter_s = ''):
2213 def magic_rehashx(self, parameter_s = ''):
2210 """Update the alias table with all executable files in $PATH.
2214 """Update the alias table with all executable files in $PATH.
2211
2215
2212 This version explicitly checks that every entry in $PATH is a file
2216 This version explicitly checks that every entry in $PATH is a file
2213 with execute access (os.X_OK), so it is much slower than %rehash.
2217 with execute access (os.X_OK), so it is much slower than %rehash.
2214
2218
2215 Under Windows, it checks executability as a match agains a
2219 Under Windows, it checks executability as a match agains a
2216 '|'-separated string of extensions, stored in the IPython config
2220 '|'-separated string of extensions, stored in the IPython config
2217 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2221 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2218
2222
2219 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2223 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2220 alias_table = self.shell.alias_table
2224 alias_table = self.shell.alias_table
2221
2225
2222 if os.name == 'posix':
2226 if os.name == 'posix':
2223 isexec = lambda fname:os.path.isfile(fname) and \
2227 isexec = lambda fname:os.path.isfile(fname) and \
2224 os.access(fname,os.X_OK)
2228 os.access(fname,os.X_OK)
2225 else:
2229 else:
2226
2230
2227 try:
2231 try:
2228 winext = os.environ['pathext'].replace(';','|').replace('.','')
2232 winext = os.environ['pathext'].replace(';','|').replace('.','')
2229 except KeyError:
2233 except KeyError:
2230 winext = 'exe|com|bat'
2234 winext = 'exe|com|bat'
2231
2235
2232 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2236 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2233 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2237 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2234 savedir = os.getcwd()
2238 savedir = os.getcwd()
2235 try:
2239 try:
2236 # write the whole loop for posix/Windows so we don't have an if in
2240 # write the whole loop for posix/Windows so we don't have an if in
2237 # the innermost part
2241 # the innermost part
2238 if os.name == 'posix':
2242 if os.name == 'posix':
2239 for pdir in path:
2243 for pdir in path:
2240 os.chdir(pdir)
2244 os.chdir(pdir)
2241 for ff in os.listdir(pdir):
2245 for ff in os.listdir(pdir):
2242 if isexec(ff):
2246 if isexec(ff):
2243 # each entry in the alias table must be (N,name),
2247 # each entry in the alias table must be (N,name),
2244 # where N is the number of positional arguments of the
2248 # where N is the number of positional arguments of the
2245 # alias.
2249 # alias.
2246 alias_table[ff] = (0,ff)
2250 alias_table[ff] = (0,ff)
2247 else:
2251 else:
2248 for pdir in path:
2252 for pdir in path:
2249 os.chdir(pdir)
2253 os.chdir(pdir)
2250 for ff in os.listdir(pdir):
2254 for ff in os.listdir(pdir):
2251 if isexec(ff):
2255 if isexec(ff):
2252 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2256 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2253 # Make sure the alias table doesn't contain keywords or builtins
2257 # Make sure the alias table doesn't contain keywords or builtins
2254 self.shell.alias_table_validate()
2258 self.shell.alias_table_validate()
2255 # Call again init_auto_alias() so we get 'rm -i' and other
2259 # Call again init_auto_alias() so we get 'rm -i' and other
2256 # modified aliases since %rehashx will probably clobber them
2260 # modified aliases since %rehashx will probably clobber them
2257 self.shell.init_auto_alias()
2261 self.shell.init_auto_alias()
2258 finally:
2262 finally:
2259 os.chdir(savedir)
2263 os.chdir(savedir)
2260
2264
2261 def magic_pwd(self, parameter_s = ''):
2265 def magic_pwd(self, parameter_s = ''):
2262 """Return the current working directory path."""
2266 """Return the current working directory path."""
2263 return os.getcwd()
2267 return os.getcwd()
2264
2268
2265 def magic_cd(self, parameter_s=''):
2269 def magic_cd(self, parameter_s=''):
2266 """Change the current working directory.
2270 """Change the current working directory.
2267
2271
2268 This command automatically maintains an internal list of directories
2272 This command automatically maintains an internal list of directories
2269 you visit during your IPython session, in the variable _dh. The
2273 you visit during your IPython session, in the variable _dh. The
2270 command %dhist shows this history nicely formatted.
2274 command %dhist shows this history nicely formatted.
2271
2275
2272 Usage:
2276 Usage:
2273
2277
2274 cd 'dir': changes to directory 'dir'.
2278 cd 'dir': changes to directory 'dir'.
2275
2279
2276 cd -: changes to the last visited directory.
2280 cd -: changes to the last visited directory.
2277
2281
2278 cd -<n>: changes to the n-th directory in the directory history.
2282 cd -<n>: changes to the n-th directory in the directory history.
2279
2283
2280 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2284 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2281 (note: cd <bookmark_name> is enough if there is no
2285 (note: cd <bookmark_name> is enough if there is no
2282 directory <bookmark_name>, but a bookmark with the name exists.)
2286 directory <bookmark_name>, but a bookmark with the name exists.)
2283
2287
2284 Options:
2288 Options:
2285
2289
2286 -q: quiet. Do not print the working directory after the cd command is
2290 -q: quiet. Do not print the working directory after the cd command is
2287 executed. By default IPython's cd command does print this directory,
2291 executed. By default IPython's cd command does print this directory,
2288 since the default prompts do not display path information.
2292 since the default prompts do not display path information.
2289
2293
2290 Note that !cd doesn't work for this purpose because the shell where
2294 Note that !cd doesn't work for this purpose because the shell where
2291 !command runs is immediately discarded after executing 'command'."""
2295 !command runs is immediately discarded after executing 'command'."""
2292
2296
2293 parameter_s = parameter_s.strip()
2297 parameter_s = parameter_s.strip()
2294 bkms = self.shell.persist.get("bookmarks",{})
2298 bkms = self.shell.persist.get("bookmarks",{})
2295
2299
2296 numcd = re.match(r'(-)(\d+)$',parameter_s)
2300 numcd = re.match(r'(-)(\d+)$',parameter_s)
2297 # jump in directory history by number
2301 # jump in directory history by number
2298 if numcd:
2302 if numcd:
2299 nn = int(numcd.group(2))
2303 nn = int(numcd.group(2))
2300 try:
2304 try:
2301 ps = self.shell.user_ns['_dh'][nn]
2305 ps = self.shell.user_ns['_dh'][nn]
2302 except IndexError:
2306 except IndexError:
2303 print 'The requested directory does not exist in history.'
2307 print 'The requested directory does not exist in history.'
2304 return
2308 return
2305 else:
2309 else:
2306 opts = {}
2310 opts = {}
2307 else:
2311 else:
2308 #turn all non-space-escaping backslashes to slashes,
2312 #turn all non-space-escaping backslashes to slashes,
2309 # for c:\windows\directory\names\
2313 # for c:\windows\directory\names\
2310 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2314 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2311 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2315 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2312 # jump to previous
2316 # jump to previous
2313 if ps == '-':
2317 if ps == '-':
2314 try:
2318 try:
2315 ps = self.shell.user_ns['_dh'][-2]
2319 ps = self.shell.user_ns['_dh'][-2]
2316 except IndexError:
2320 except IndexError:
2317 print 'No previous directory to change to.'
2321 print 'No previous directory to change to.'
2318 return
2322 return
2319 # jump to bookmark
2323 # jump to bookmark
2320 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2324 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2321 if bkms.has_key(ps):
2325 if bkms.has_key(ps):
2322 target = bkms[ps]
2326 target = bkms[ps]
2323 print '(bookmark:%s) -> %s' % (ps,target)
2327 print '(bookmark:%s) -> %s' % (ps,target)
2324 ps = target
2328 ps = target
2325 else:
2329 else:
2326 if bkms:
2330 if bkms:
2327 error("Bookmark '%s' not found. "
2331 error("Bookmark '%s' not found. "
2328 "Use '%%bookmark -l' to see your bookmarks." % ps)
2332 "Use '%%bookmark -l' to see your bookmarks." % ps)
2329 else:
2333 else:
2330 print "Bookmarks not set - use %bookmark <bookmarkname>"
2334 print "Bookmarks not set - use %bookmark <bookmarkname>"
2331 return
2335 return
2332
2336
2333 # at this point ps should point to the target dir
2337 # at this point ps should point to the target dir
2334 if ps:
2338 if ps:
2335 try:
2339 try:
2336 os.chdir(os.path.expanduser(ps))
2340 os.chdir(os.path.expanduser(ps))
2337 ttitle = ("IPy:" + (
2341 ttitle = ("IPy:" + (
2338 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2342 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2339 platutils.set_term_title(ttitle)
2343 platutils.set_term_title(ttitle)
2340 except OSError:
2344 except OSError:
2341 print sys.exc_info()[1]
2345 print sys.exc_info()[1]
2342 else:
2346 else:
2343 self.shell.user_ns['_dh'].append(os.getcwd())
2347 self.shell.user_ns['_dh'].append(os.getcwd())
2344 else:
2348 else:
2345 os.chdir(self.shell.home_dir)
2349 os.chdir(self.shell.home_dir)
2346 platutils.set_term_title("IPy:~")
2350 platutils.set_term_title("IPy:~")
2347 self.shell.user_ns['_dh'].append(os.getcwd())
2351 self.shell.user_ns['_dh'].append(os.getcwd())
2348 if not 'q' in opts:
2352 if not 'q' in opts:
2349 print self.shell.user_ns['_dh'][-1]
2353 print self.shell.user_ns['_dh'][-1]
2350
2354
2351 def magic_dhist(self, parameter_s=''):
2355 def magic_dhist(self, parameter_s=''):
2352 """Print your history of visited directories.
2356 """Print your history of visited directories.
2353
2357
2354 %dhist -> print full history\\
2358 %dhist -> print full history\\
2355 %dhist n -> print last n entries only\\
2359 %dhist n -> print last n entries only\\
2356 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2360 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2357
2361
2358 This history is automatically maintained by the %cd command, and
2362 This history is automatically maintained by the %cd command, and
2359 always available as the global list variable _dh. You can use %cd -<n>
2363 always available as the global list variable _dh. You can use %cd -<n>
2360 to go to directory number <n>."""
2364 to go to directory number <n>."""
2361
2365
2362 dh = self.shell.user_ns['_dh']
2366 dh = self.shell.user_ns['_dh']
2363 if parameter_s:
2367 if parameter_s:
2364 try:
2368 try:
2365 args = map(int,parameter_s.split())
2369 args = map(int,parameter_s.split())
2366 except:
2370 except:
2367 self.arg_err(Magic.magic_dhist)
2371 self.arg_err(Magic.magic_dhist)
2368 return
2372 return
2369 if len(args) == 1:
2373 if len(args) == 1:
2370 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2374 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2371 elif len(args) == 2:
2375 elif len(args) == 2:
2372 ini,fin = args
2376 ini,fin = args
2373 else:
2377 else:
2374 self.arg_err(Magic.magic_dhist)
2378 self.arg_err(Magic.magic_dhist)
2375 return
2379 return
2376 else:
2380 else:
2377 ini,fin = 0,len(dh)
2381 ini,fin = 0,len(dh)
2378 nlprint(dh,
2382 nlprint(dh,
2379 header = 'Directory history (kept in _dh)',
2383 header = 'Directory history (kept in _dh)',
2380 start=ini,stop=fin)
2384 start=ini,stop=fin)
2381
2385
2382 def magic_env(self, parameter_s=''):
2386 def magic_env(self, parameter_s=''):
2383 """List environment variables."""
2387 """List environment variables."""
2384
2388
2385 return os.environ.data
2389 return os.environ.data
2386
2390
2387 def magic_pushd(self, parameter_s=''):
2391 def magic_pushd(self, parameter_s=''):
2388 """Place the current dir on stack and change directory.
2392 """Place the current dir on stack and change directory.
2389
2393
2390 Usage:\\
2394 Usage:\\
2391 %pushd ['dirname']
2395 %pushd ['dirname']
2392
2396
2393 %pushd with no arguments does a %pushd to your home directory.
2397 %pushd with no arguments does a %pushd to your home directory.
2394 """
2398 """
2395 if parameter_s == '': parameter_s = '~'
2399 if parameter_s == '': parameter_s = '~'
2396 dir_s = self.shell.dir_stack
2400 dir_s = self.shell.dir_stack
2397 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2401 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2398 os.path.expanduser(self.shell.dir_stack[0]):
2402 os.path.expanduser(self.shell.dir_stack[0]):
2399 try:
2403 try:
2400 self.magic_cd(parameter_s)
2404 self.magic_cd(parameter_s)
2401 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2405 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2402 self.magic_dirs()
2406 self.magic_dirs()
2403 except:
2407 except:
2404 print 'Invalid directory'
2408 print 'Invalid directory'
2405 else:
2409 else:
2406 print 'You are already there!'
2410 print 'You are already there!'
2407
2411
2408 def magic_popd(self, parameter_s=''):
2412 def magic_popd(self, parameter_s=''):
2409 """Change to directory popped off the top of the stack.
2413 """Change to directory popped off the top of the stack.
2410 """
2414 """
2411 if len (self.shell.dir_stack) > 1:
2415 if len (self.shell.dir_stack) > 1:
2412 self.shell.dir_stack.pop(0)
2416 self.shell.dir_stack.pop(0)
2413 self.magic_cd(self.shell.dir_stack[0])
2417 self.magic_cd(self.shell.dir_stack[0])
2414 print self.shell.dir_stack[0]
2418 print self.shell.dir_stack[0]
2415 else:
2419 else:
2416 print "You can't remove the starting directory from the stack:",\
2420 print "You can't remove the starting directory from the stack:",\
2417 self.shell.dir_stack
2421 self.shell.dir_stack
2418
2422
2419 def magic_dirs(self, parameter_s=''):
2423 def magic_dirs(self, parameter_s=''):
2420 """Return the current directory stack."""
2424 """Return the current directory stack."""
2421
2425
2422 return self.shell.dir_stack[:]
2426 return self.shell.dir_stack[:]
2423
2427
2424 def magic_sc(self, parameter_s=''):
2428 def magic_sc(self, parameter_s=''):
2425 """Shell capture - execute a shell command and capture its output.
2429 """Shell capture - execute a shell command and capture its output.
2426
2430
2427 %sc [options] varname=command
2431 %sc [options] varname=command
2428
2432
2429 IPython will run the given command using commands.getoutput(), and
2433 IPython will run the given command using commands.getoutput(), and
2430 will then update the user's interactive namespace with a variable
2434 will then update the user's interactive namespace with a variable
2431 called varname, containing the value of the call. Your command can
2435 called varname, containing the value of the call. Your command can
2432 contain shell wildcards, pipes, etc.
2436 contain shell wildcards, pipes, etc.
2433
2437
2434 The '=' sign in the syntax is mandatory, and the variable name you
2438 The '=' sign in the syntax is mandatory, and the variable name you
2435 supply must follow Python's standard conventions for valid names.
2439 supply must follow Python's standard conventions for valid names.
2436
2440
2437 Options:
2441 Options:
2438
2442
2439 -l: list output. Split the output on newlines into a list before
2443 -l: list output. Split the output on newlines into a list before
2440 assigning it to the given variable. By default the output is stored
2444 assigning it to the given variable. By default the output is stored
2441 as a single string.
2445 as a single string.
2442
2446
2443 -v: verbose. Print the contents of the variable.
2447 -v: verbose. Print the contents of the variable.
2444
2448
2445 In most cases you should not need to split as a list, because the
2449 In most cases you should not need to split as a list, because the
2446 returned value is a special type of string which can automatically
2450 returned value is a special type of string which can automatically
2447 provide its contents either as a list (split on newlines) or as a
2451 provide its contents either as a list (split on newlines) or as a
2448 space-separated string. These are convenient, respectively, either
2452 space-separated string. These are convenient, respectively, either
2449 for sequential processing or to be passed to a shell command.
2453 for sequential processing or to be passed to a shell command.
2450
2454
2451 For example:
2455 For example:
2452
2456
2453 # Capture into variable a
2457 # Capture into variable a
2454 In [9]: sc a=ls *py
2458 In [9]: sc a=ls *py
2455
2459
2456 # a is a string with embedded newlines
2460 # a is a string with embedded newlines
2457 In [10]: a
2461 In [10]: a
2458 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2462 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2459
2463
2460 # which can be seen as a list:
2464 # which can be seen as a list:
2461 In [11]: a.l
2465 In [11]: a.l
2462 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2466 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2463
2467
2464 # or as a whitespace-separated string:
2468 # or as a whitespace-separated string:
2465 In [12]: a.s
2469 In [12]: a.s
2466 Out[12]: 'setup.py win32_manual_post_install.py'
2470 Out[12]: 'setup.py win32_manual_post_install.py'
2467
2471
2468 # a.s is useful to pass as a single command line:
2472 # a.s is useful to pass as a single command line:
2469 In [13]: !wc -l $a.s
2473 In [13]: !wc -l $a.s
2470 146 setup.py
2474 146 setup.py
2471 130 win32_manual_post_install.py
2475 130 win32_manual_post_install.py
2472 276 total
2476 276 total
2473
2477
2474 # while the list form is useful to loop over:
2478 # while the list form is useful to loop over:
2475 In [14]: for f in a.l:
2479 In [14]: for f in a.l:
2476 ....: !wc -l $f
2480 ....: !wc -l $f
2477 ....:
2481 ....:
2478 146 setup.py
2482 146 setup.py
2479 130 win32_manual_post_install.py
2483 130 win32_manual_post_install.py
2480
2484
2481 Similiarly, the lists returned by the -l option are also special, in
2485 Similiarly, the lists returned by the -l option are also special, in
2482 the sense that you can equally invoke the .s attribute on them to
2486 the sense that you can equally invoke the .s attribute on them to
2483 automatically get a whitespace-separated string from their contents:
2487 automatically get a whitespace-separated string from their contents:
2484
2488
2485 In [1]: sc -l b=ls *py
2489 In [1]: sc -l b=ls *py
2486
2490
2487 In [2]: b
2491 In [2]: b
2488 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2492 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2489
2493
2490 In [3]: b.s
2494 In [3]: b.s
2491 Out[3]: 'setup.py win32_manual_post_install.py'
2495 Out[3]: 'setup.py win32_manual_post_install.py'
2492
2496
2493 In summary, both the lists and strings used for ouptut capture have
2497 In summary, both the lists and strings used for ouptut capture have
2494 the following special attributes:
2498 the following special attributes:
2495
2499
2496 .l (or .list) : value as list.
2500 .l (or .list) : value as list.
2497 .n (or .nlstr): value as newline-separated string.
2501 .n (or .nlstr): value as newline-separated string.
2498 .s (or .spstr): value as space-separated string.
2502 .s (or .spstr): value as space-separated string.
2499 """
2503 """
2500
2504
2501 opts,args = self.parse_options(parameter_s,'lv')
2505 opts,args = self.parse_options(parameter_s,'lv')
2502 # Try to get a variable name and command to run
2506 # Try to get a variable name and command to run
2503 try:
2507 try:
2504 # the variable name must be obtained from the parse_options
2508 # the variable name must be obtained from the parse_options
2505 # output, which uses shlex.split to strip options out.
2509 # output, which uses shlex.split to strip options out.
2506 var,_ = args.split('=',1)
2510 var,_ = args.split('=',1)
2507 var = var.strip()
2511 var = var.strip()
2508 # But the the command has to be extracted from the original input
2512 # But the the command has to be extracted from the original input
2509 # parameter_s, not on what parse_options returns, to avoid the
2513 # parameter_s, not on what parse_options returns, to avoid the
2510 # quote stripping which shlex.split performs on it.
2514 # quote stripping which shlex.split performs on it.
2511 _,cmd = parameter_s.split('=',1)
2515 _,cmd = parameter_s.split('=',1)
2512 except ValueError:
2516 except ValueError:
2513 var,cmd = '',''
2517 var,cmd = '',''
2514 if not var:
2518 if not var:
2515 error('you must specify a variable to assign the command to.')
2519 error('you must specify a variable to assign the command to.')
2516 return
2520 return
2517 # If all looks ok, proceed
2521 # If all looks ok, proceed
2518 out,err = self.shell.getoutputerror(cmd)
2522 out,err = self.shell.getoutputerror(cmd)
2519 if err:
2523 if err:
2520 print >> Term.cerr,err
2524 print >> Term.cerr,err
2521 if opts.has_key('l'):
2525 if opts.has_key('l'):
2522 out = SList(out.split('\n'))
2526 out = SList(out.split('\n'))
2523 else:
2527 else:
2524 out = LSString(out)
2528 out = LSString(out)
2525 if opts.has_key('v'):
2529 if opts.has_key('v'):
2526 print '%s ==\n%s' % (var,pformat(out))
2530 print '%s ==\n%s' % (var,pformat(out))
2527 self.shell.user_ns.update({var:out})
2531 self.shell.user_ns.update({var:out})
2528
2532
2529 def magic_sx(self, parameter_s=''):
2533 def magic_sx(self, parameter_s=''):
2530 """Shell execute - run a shell command and capture its output.
2534 """Shell execute - run a shell command and capture its output.
2531
2535
2532 %sx command
2536 %sx command
2533
2537
2534 IPython will run the given command using commands.getoutput(), and
2538 IPython will run the given command using commands.getoutput(), and
2535 return the result formatted as a list (split on '\\n'). Since the
2539 return the result formatted as a list (split on '\\n'). Since the
2536 output is _returned_, it will be stored in ipython's regular output
2540 output is _returned_, it will be stored in ipython's regular output
2537 cache Out[N] and in the '_N' automatic variables.
2541 cache Out[N] and in the '_N' automatic variables.
2538
2542
2539 Notes:
2543 Notes:
2540
2544
2541 1) If an input line begins with '!!', then %sx is automatically
2545 1) If an input line begins with '!!', then %sx is automatically
2542 invoked. That is, while:
2546 invoked. That is, while:
2543 !ls
2547 !ls
2544 causes ipython to simply issue system('ls'), typing
2548 causes ipython to simply issue system('ls'), typing
2545 !!ls
2549 !!ls
2546 is a shorthand equivalent to:
2550 is a shorthand equivalent to:
2547 %sx ls
2551 %sx ls
2548
2552
2549 2) %sx differs from %sc in that %sx automatically splits into a list,
2553 2) %sx differs from %sc in that %sx automatically splits into a list,
2550 like '%sc -l'. The reason for this is to make it as easy as possible
2554 like '%sc -l'. The reason for this is to make it as easy as possible
2551 to process line-oriented shell output via further python commands.
2555 to process line-oriented shell output via further python commands.
2552 %sc is meant to provide much finer control, but requires more
2556 %sc is meant to provide much finer control, but requires more
2553 typing.
2557 typing.
2554
2558
2555 3) Just like %sc -l, this is a list with special attributes:
2559 3) Just like %sc -l, this is a list with special attributes:
2556
2560
2557 .l (or .list) : value as list.
2561 .l (or .list) : value as list.
2558 .n (or .nlstr): value as newline-separated string.
2562 .n (or .nlstr): value as newline-separated string.
2559 .s (or .spstr): value as whitespace-separated string.
2563 .s (or .spstr): value as whitespace-separated string.
2560
2564
2561 This is very useful when trying to use such lists as arguments to
2565 This is very useful when trying to use such lists as arguments to
2562 system commands."""
2566 system commands."""
2563
2567
2564 if parameter_s:
2568 if parameter_s:
2565 out,err = self.shell.getoutputerror(parameter_s)
2569 out,err = self.shell.getoutputerror(parameter_s)
2566 if err:
2570 if err:
2567 print >> Term.cerr,err
2571 print >> Term.cerr,err
2568 return SList(out.split('\n'))
2572 return SList(out.split('\n'))
2569
2573
2570 def magic_bg(self, parameter_s=''):
2574 def magic_bg(self, parameter_s=''):
2571 """Run a job in the background, in a separate thread.
2575 """Run a job in the background, in a separate thread.
2572
2576
2573 For example,
2577 For example,
2574
2578
2575 %bg myfunc(x,y,z=1)
2579 %bg myfunc(x,y,z=1)
2576
2580
2577 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2581 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2578 execution starts, a message will be printed indicating the job
2582 execution starts, a message will be printed indicating the job
2579 number. If your job number is 5, you can use
2583 number. If your job number is 5, you can use
2580
2584
2581 myvar = jobs.result(5) or myvar = jobs[5].result
2585 myvar = jobs.result(5) or myvar = jobs[5].result
2582
2586
2583 to assign this result to variable 'myvar'.
2587 to assign this result to variable 'myvar'.
2584
2588
2585 IPython has a job manager, accessible via the 'jobs' object. You can
2589 IPython has a job manager, accessible via the 'jobs' object. You can
2586 type jobs? to get more information about it, and use jobs.<TAB> to see
2590 type jobs? to get more information about it, and use jobs.<TAB> to see
2587 its attributes. All attributes not starting with an underscore are
2591 its attributes. All attributes not starting with an underscore are
2588 meant for public use.
2592 meant for public use.
2589
2593
2590 In particular, look at the jobs.new() method, which is used to create
2594 In particular, look at the jobs.new() method, which is used to create
2591 new jobs. This magic %bg function is just a convenience wrapper
2595 new jobs. This magic %bg function is just a convenience wrapper
2592 around jobs.new(), for expression-based jobs. If you want to create a
2596 around jobs.new(), for expression-based jobs. If you want to create a
2593 new job with an explicit function object and arguments, you must call
2597 new job with an explicit function object and arguments, you must call
2594 jobs.new() directly.
2598 jobs.new() directly.
2595
2599
2596 The jobs.new docstring also describes in detail several important
2600 The jobs.new docstring also describes in detail several important
2597 caveats associated with a thread-based model for background job
2601 caveats associated with a thread-based model for background job
2598 execution. Type jobs.new? for details.
2602 execution. Type jobs.new? for details.
2599
2603
2600 You can check the status of all jobs with jobs.status().
2604 You can check the status of all jobs with jobs.status().
2601
2605
2602 The jobs variable is set by IPython into the Python builtin namespace.
2606 The jobs variable is set by IPython into the Python builtin namespace.
2603 If you ever declare a variable named 'jobs', you will shadow this
2607 If you ever declare a variable named 'jobs', you will shadow this
2604 name. You can either delete your global jobs variable to regain
2608 name. You can either delete your global jobs variable to regain
2605 access to the job manager, or make a new name and assign it manually
2609 access to the job manager, or make a new name and assign it manually
2606 to the manager (stored in IPython's namespace). For example, to
2610 to the manager (stored in IPython's namespace). For example, to
2607 assign the job manager to the Jobs name, use:
2611 assign the job manager to the Jobs name, use:
2608
2612
2609 Jobs = __builtins__.jobs"""
2613 Jobs = __builtins__.jobs"""
2610
2614
2611 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2615 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2612
2616
2613 def magic_store(self, parameter_s=''):
2617 def magic_store(self, parameter_s=''):
2614 """Lightweight persistence for python variables.
2618 """Lightweight persistence for python variables.
2615
2619
2616 Example:
2620 Example:
2617
2621
2618 ville@badger[~]|1> A = ['hello',10,'world']\\
2622 ville@badger[~]|1> A = ['hello',10,'world']\\
2619 ville@badger[~]|2> %store A\\
2623 ville@badger[~]|2> %store A\\
2620 ville@badger[~]|3> Exit
2624 ville@badger[~]|3> Exit
2621
2625
2622 (IPython session is closed and started again...)
2626 (IPython session is closed and started again...)
2623
2627
2624 ville@badger:~$ ipython -p pysh\\
2628 ville@badger:~$ ipython -p pysh\\
2625 ville@badger[~]|1> print A
2629 ville@badger[~]|1> print A
2626
2630
2627 ['hello', 10, 'world']
2631 ['hello', 10, 'world']
2628
2632
2629 Usage:
2633 Usage:
2630
2634
2631 %store - Show list of all variables and their current values\\
2635 %store - Show list of all variables and their current values\\
2632 %store <var> - Store the *current* value of the variable to disk\\
2636 %store <var> - Store the *current* value of the variable to disk\\
2633 %store -d <var> - Remove the variable and its value from storage\\
2637 %store -d <var> - Remove the variable and its value from storage\\
2634 %store -r - Remove all variables from storage
2638 %store -r - Remove all variables from storage
2635
2639
2636 It should be noted that if you change the value of a variable, you
2640 It should be noted that if you change the value of a variable, you
2637 need to %store it again if you want to persist the new value.
2641 need to %store it again if you want to persist the new value.
2638
2642
2639 Note also that the variables will need to be pickleable; most basic
2643 Note also that the variables will need to be pickleable; most basic
2640 python types can be safely %stored.
2644 python types can be safely %stored.
2641 """
2645 """
2642
2646
2643 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2647 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2644 # delete
2648 # delete
2645 if opts.has_key('d'):
2649 if opts.has_key('d'):
2646 try:
2650 try:
2647 todel = args[0]
2651 todel = args[0]
2648 except IndexError:
2652 except IndexError:
2649 error('You must provide the variable to forget')
2653 error('You must provide the variable to forget')
2650 else:
2654 else:
2651 try:
2655 try:
2652 del self.shell.persist['S:' + todel]
2656 del self.shell.persist['S:' + todel]
2653 except:
2657 except:
2654 error("Can't delete variable '%s'" % todel)
2658 error("Can't delete variable '%s'" % todel)
2655 # reset
2659 # reset
2656 elif opts.has_key('r'):
2660 elif opts.has_key('r'):
2657 for k in self.shell.persist.keys():
2661 for k in self.shell.persist.keys():
2658 if k.startswith('S:'):
2662 if k.startswith('S:'):
2659 del self.shell.persist[k]
2663 del self.shell.persist[k]
2660
2664
2661 # run without arguments -> list variables & values
2665 # run without arguments -> list variables & values
2662 elif not args:
2666 elif not args:
2663 vars = [v[2:] for v in self.shell.persist.keys()
2667 vars = [v[2:] for v in self.shell.persist.keys()
2664 if v.startswith('S:')]
2668 if v.startswith('S:')]
2665 vars.sort()
2669 vars.sort()
2666 if vars:
2670 if vars:
2667 size = max(map(len,vars))
2671 size = max(map(len,vars))
2668 else:
2672 else:
2669 size = 0
2673 size = 0
2670
2674
2671 print 'Stored variables and their in-memory values:'
2675 print 'Stored variables and their in-memory values:'
2672 fmt = '%-'+str(size)+'s -> %s'
2676 fmt = '%-'+str(size)+'s -> %s'
2673 get = self.shell.user_ns.get
2677 get = self.shell.user_ns.get
2674 for var in vars:
2678 for var in vars:
2675 # print 30 first characters from every var
2679 # print 30 first characters from every var
2676 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2680 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2677
2681
2678 # default action - store the variable
2682 # default action - store the variable
2679 else:
2683 else:
2680 pickled = pickle.dumps(self.shell.user_ns[args[0] ])
2684 pickled = pickle.dumps(self.shell.user_ns[args[0] ])
2681 self.shell.persist[ 'S:' + args[0] ] = pickled
2685 self.shell.persist[ 'S:' + args[0] ] = pickled
2682 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2686 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2683
2687
2684 def magic_bookmark(self, parameter_s=''):
2688 def magic_bookmark(self, parameter_s=''):
2685 """Manage IPython's bookmark system.
2689 """Manage IPython's bookmark system.
2686
2690
2687 %bookmark <name> - set bookmark to current dir
2691 %bookmark <name> - set bookmark to current dir
2688 %bookmark <name> <dir> - set bookmark to <dir>
2692 %bookmark <name> <dir> - set bookmark to <dir>
2689 %bookmark -l - list all bookmarks
2693 %bookmark -l - list all bookmarks
2690 %bookmark -d <name> - remove bookmark
2694 %bookmark -d <name> - remove bookmark
2691 %bookmark -r - remove all bookmarks
2695 %bookmark -r - remove all bookmarks
2692
2696
2693 You can later on access a bookmarked folder with:
2697 You can later on access a bookmarked folder with:
2694 %cd -b <name>
2698 %cd -b <name>
2695 or simply '%cd <name>' if there is no directory called <name> AND
2699 or simply '%cd <name>' if there is no directory called <name> AND
2696 there is such a bookmark defined.
2700 there is such a bookmark defined.
2697
2701
2698 Your bookmarks persist through IPython sessions, but they are
2702 Your bookmarks persist through IPython sessions, but they are
2699 associated with each profile."""
2703 associated with each profile."""
2700
2704
2701 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2705 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2702 if len(args) > 2:
2706 if len(args) > 2:
2703 error('You can only give at most two arguments')
2707 error('You can only give at most two arguments')
2704 return
2708 return
2705
2709
2706 bkms = self.shell.persist.get('bookmarks',{})
2710 bkms = self.shell.persist.get('bookmarks',{})
2707
2711
2708 if opts.has_key('d'):
2712 if opts.has_key('d'):
2709 try:
2713 try:
2710 todel = args[0]
2714 todel = args[0]
2711 except IndexError:
2715 except IndexError:
2712 error('You must provide a bookmark to delete')
2716 error('You must provide a bookmark to delete')
2713 else:
2717 else:
2714 try:
2718 try:
2715 del bkms[todel]
2719 del bkms[todel]
2716 except:
2720 except:
2717 error("Can't delete bookmark '%s'" % todel)
2721 error("Can't delete bookmark '%s'" % todel)
2718 elif opts.has_key('r'):
2722 elif opts.has_key('r'):
2719 bkms = {}
2723 bkms = {}
2720 elif opts.has_key('l'):
2724 elif opts.has_key('l'):
2721 bks = bkms.keys()
2725 bks = bkms.keys()
2722 bks.sort()
2726 bks.sort()
2723 if bks:
2727 if bks:
2724 size = max(map(len,bks))
2728 size = max(map(len,bks))
2725 else:
2729 else:
2726 size = 0
2730 size = 0
2727 fmt = '%-'+str(size)+'s -> %s'
2731 fmt = '%-'+str(size)+'s -> %s'
2728 print 'Current bookmarks:'
2732 print 'Current bookmarks:'
2729 for bk in bks:
2733 for bk in bks:
2730 print fmt % (bk,bkms[bk])
2734 print fmt % (bk,bkms[bk])
2731 else:
2735 else:
2732 if not args:
2736 if not args:
2733 error("You must specify the bookmark name")
2737 error("You must specify the bookmark name")
2734 elif len(args)==1:
2738 elif len(args)==1:
2735 bkms[args[0]] = os.getcwd()
2739 bkms[args[0]] = os.getcwd()
2736 elif len(args)==2:
2740 elif len(args)==2:
2737 bkms[args[0]] = args[1]
2741 bkms[args[0]] = args[1]
2738 self.shell.persist['bookmarks'] = bkms
2742 self.shell.persist['bookmarks'] = bkms
2739
2743
2740 def magic_pycat(self, parameter_s=''):
2744 def magic_pycat(self, parameter_s=''):
2741 """Show a syntax-highlighted file through a pager.
2745 """Show a syntax-highlighted file through a pager.
2742
2746
2743 This magic is similar to the cat utility, but it will assume the file
2747 This magic is similar to the cat utility, but it will assume the file
2744 to be Python source and will show it with syntax highlighting. """
2748 to be Python source and will show it with syntax highlighting. """
2745
2749
2746 filename = get_py_filename(parameter_s)
2750 filename = get_py_filename(parameter_s)
2747 page(self.shell.pycolorize(file_read(filename)),
2751 page(self.shell.pycolorize(file_read(filename)),
2748 screen_lines=self.shell.rc.screen_length)
2752 screen_lines=self.shell.rc.screen_length)
2749
2753
2750 # end Magic
2754 # end Magic
@@ -1,4936 +1,4948 b''
1 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
2
3 * IPython/Magic.py (magic_run): fix __file__ global missing from
4 script's namespace when executed via %run. After a report by
5 Vivian.
6
7 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
8 when using python 2.4. The parent constructor changed in 2.4, and
9 we need to track it directly (we can't call it, as it messes up
10 readline and tab-completion inside our pdb would stop working).
11 After a bug report by R. Bernstein <rocky-AT-panix.com>.
12
1 2006-01-16 Ville Vainio <vivainio@gmail.com>
13 2006-01-16 Ville Vainio <vivainio@gmail.com>
2
14
3 * Ipython/magic.py:Reverted back to old %edit functionality
15 * Ipython/magic.py:Reverted back to old %edit functionality
4 that returns file contents on exit.
16 that returns file contents on exit.
5
17
6 * IPython/path.py: Added Jason Orendorff's "path" module to
18 * IPython/path.py: Added Jason Orendorff's "path" module to
7 IPython tree, http://www.jorendorff.com/articles/python/path/.
19 IPython tree, http://www.jorendorff.com/articles/python/path/.
8 You can get path objects conveniently through %sc, and !!, e.g.:
20 You can get path objects conveniently through %sc, and !!, e.g.:
9 sc files=ls
21 sc files=ls
10 for p in files.paths: # or files.p
22 for p in files.paths: # or files.p
11 print p,p.mtime
23 print p,p.mtime
12
24
13 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
25 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
14 now work again without considering the exclusion regexp -
26 now work again without considering the exclusion regexp -
15 hence, things like ',foo my/path' turn to 'foo("my/path")'
27 hence, things like ',foo my/path' turn to 'foo("my/path")'
16 instead of syntax error.
28 instead of syntax error.
17
29
18
30
19 2006-01-14 Ville Vainio <vivainio@gmail.com>
31 2006-01-14 Ville Vainio <vivainio@gmail.com>
20
32
21 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
33 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
22 ipapi decorators for python 2.4 users, options() provides access to rc
34 ipapi decorators for python 2.4 users, options() provides access to rc
23 data.
35 data.
24
36
25 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
37 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
26 as path separators (even on Linux ;-). Space character after
38 as path separators (even on Linux ;-). Space character after
27 backslash (as yielded by tab completer) is still space;
39 backslash (as yielded by tab completer) is still space;
28 "%cd long\ name" works as expected.
40 "%cd long\ name" works as expected.
29
41
30 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
42 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
31 as "chain of command", with priority. API stays the same,
43 as "chain of command", with priority. API stays the same,
32 TryNext exception raised by a hook function signals that
44 TryNext exception raised by a hook function signals that
33 current hook failed and next hook should try handling it, as
45 current hook failed and next hook should try handling it, as
34 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
46 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
35 requested configurable display hook, which is now implemented.
47 requested configurable display hook, which is now implemented.
36
48
37 2006-01-13 Ville Vainio <vivainio@gmail.com>
49 2006-01-13 Ville Vainio <vivainio@gmail.com>
38
50
39 * IPython/platutils*.py: platform specific utility functions,
51 * IPython/platutils*.py: platform specific utility functions,
40 so far only set_term_title is implemented (change terminal
52 so far only set_term_title is implemented (change terminal
41 label in windowing systems). %cd now changes the title to
53 label in windowing systems). %cd now changes the title to
42 current dir.
54 current dir.
43
55
44 * IPython/Release.py: Added myself to "authors" list,
56 * IPython/Release.py: Added myself to "authors" list,
45 had to create new files.
57 had to create new files.
46
58
47 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
59 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
48 shell escape; not a known bug but had potential to be one in the
60 shell escape; not a known bug but had potential to be one in the
49 future.
61 future.
50
62
51 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
63 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
52 extension API for IPython! See the module for usage example. Fix
64 extension API for IPython! See the module for usage example. Fix
53 OInspect for docstring-less magic functions.
65 OInspect for docstring-less magic functions.
54
66
55
67
56 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
68 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
57
69
58 * IPython/iplib.py (raw_input): temporarily deactivate all
70 * IPython/iplib.py (raw_input): temporarily deactivate all
59 attempts at allowing pasting of code with autoindent on. It
71 attempts at allowing pasting of code with autoindent on. It
60 introduced bugs (reported by Prabhu) and I can't seem to find a
72 introduced bugs (reported by Prabhu) and I can't seem to find a
61 robust combination which works in all cases. Will have to revisit
73 robust combination which works in all cases. Will have to revisit
62 later.
74 later.
63
75
64 * IPython/genutils.py: remove isspace() function. We've dropped
76 * IPython/genutils.py: remove isspace() function. We've dropped
65 2.2 compatibility, so it's OK to use the string method.
77 2.2 compatibility, so it's OK to use the string method.
66
78
67 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
79 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
68
80
69 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
81 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
70 matching what NOT to autocall on, to include all python binary
82 matching what NOT to autocall on, to include all python binary
71 operators (including things like 'and', 'or', 'is' and 'in').
83 operators (including things like 'and', 'or', 'is' and 'in').
72 Prompted by a bug report on 'foo & bar', but I realized we had
84 Prompted by a bug report on 'foo & bar', but I realized we had
73 many more potential bug cases with other operators. The regexp is
85 many more potential bug cases with other operators. The regexp is
74 self.re_exclude_auto, it's fairly commented.
86 self.re_exclude_auto, it's fairly commented.
75
87
76 2006-01-12 Ville Vainio <vivainio@gmail.com>
88 2006-01-12 Ville Vainio <vivainio@gmail.com>
77
89
78 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
90 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
79 Prettified and hardened string/backslash quoting with ipsystem(),
91 Prettified and hardened string/backslash quoting with ipsystem(),
80 ipalias() and ipmagic(). Now even \ characters are passed to
92 ipalias() and ipmagic(). Now even \ characters are passed to
81 %magics, !shell escapes and aliases exactly as they are in the
93 %magics, !shell escapes and aliases exactly as they are in the
82 ipython command line. Should improve backslash experience,
94 ipython command line. Should improve backslash experience,
83 particularly in Windows (path delimiter for some commands that
95 particularly in Windows (path delimiter for some commands that
84 won't understand '/'), but Unix benefits as well (regexps). %cd
96 won't understand '/'), but Unix benefits as well (regexps). %cd
85 magic still doesn't support backslash path delimiters, though. Also
97 magic still doesn't support backslash path delimiters, though. Also
86 deleted all pretense of supporting multiline command strings in
98 deleted all pretense of supporting multiline command strings in
87 !system or %magic commands. Thanks to Jerry McRae for suggestions.
99 !system or %magic commands. Thanks to Jerry McRae for suggestions.
88
100
89 * doc/build_doc_instructions.txt added. Documentation on how to
101 * doc/build_doc_instructions.txt added. Documentation on how to
90 use doc/update_manual.py, added yesterday. Both files contributed
102 use doc/update_manual.py, added yesterday. Both files contributed
91 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
103 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
92 doc/*.sh for deprecation at a later date.
104 doc/*.sh for deprecation at a later date.
93
105
94 * /ipython.py Added ipython.py to root directory for
106 * /ipython.py Added ipython.py to root directory for
95 zero-installation (tar xzvf ipython.tgz; cd ipython; python
107 zero-installation (tar xzvf ipython.tgz; cd ipython; python
96 ipython.py) and development convenience (no need to kee doing
108 ipython.py) and development convenience (no need to kee doing
97 "setup.py install" between changes).
109 "setup.py install" between changes).
98
110
99 * Made ! and !! shell escapes work (again) in multiline expressions:
111 * Made ! and !! shell escapes work (again) in multiline expressions:
100 if 1:
112 if 1:
101 !ls
113 !ls
102 !!ls
114 !!ls
103
115
104 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
116 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
105
117
106 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
118 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
107 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
119 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
108 module in case-insensitive installation. Was causing crashes
120 module in case-insensitive installation. Was causing crashes
109 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
121 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
110
122
111 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
123 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
112 <marienz-AT-gentoo.org>, closes
124 <marienz-AT-gentoo.org>, closes
113 http://www.scipy.net/roundup/ipython/issue51.
125 http://www.scipy.net/roundup/ipython/issue51.
114
126
115 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
127 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
116
128
117 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
129 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
118 problem of excessive CPU usage under *nix and keyboard lag under
130 problem of excessive CPU usage under *nix and keyboard lag under
119 win32.
131 win32.
120
132
121 2006-01-10 *** Released version 0.7.0
133 2006-01-10 *** Released version 0.7.0
122
134
123 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
135 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
124
136
125 * IPython/Release.py (revision): tag version number to 0.7.0,
137 * IPython/Release.py (revision): tag version number to 0.7.0,
126 ready for release.
138 ready for release.
127
139
128 * IPython/Magic.py (magic_edit): Add print statement to %edit so
140 * IPython/Magic.py (magic_edit): Add print statement to %edit so
129 it informs the user of the name of the temp. file used. This can
141 it informs the user of the name of the temp. file used. This can
130 help if you decide later to reuse that same file, so you know
142 help if you decide later to reuse that same file, so you know
131 where to copy the info from.
143 where to copy the info from.
132
144
133 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
145 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
134
146
135 * setup_bdist_egg.py: little script to build an egg. Added
147 * setup_bdist_egg.py: little script to build an egg. Added
136 support in the release tools as well.
148 support in the release tools as well.
137
149
138 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
150 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
139
151
140 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
152 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
141 version selection (new -wxversion command line and ipythonrc
153 version selection (new -wxversion command line and ipythonrc
142 parameter). Patch contributed by Arnd Baecker
154 parameter). Patch contributed by Arnd Baecker
143 <arnd.baecker-AT-web.de>.
155 <arnd.baecker-AT-web.de>.
144
156
145 * IPython/iplib.py (embed_mainloop): fix tab-completion in
157 * IPython/iplib.py (embed_mainloop): fix tab-completion in
146 embedded instances, for variables defined at the interactive
158 embedded instances, for variables defined at the interactive
147 prompt of the embedded ipython. Reported by Arnd.
159 prompt of the embedded ipython. Reported by Arnd.
148
160
149 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
161 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
150 it can be used as a (stateful) toggle, or with a direct parameter.
162 it can be used as a (stateful) toggle, or with a direct parameter.
151
163
152 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
164 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
153 could be triggered in certain cases and cause the traceback
165 could be triggered in certain cases and cause the traceback
154 printer not to work.
166 printer not to work.
155
167
156 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
168 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
157
169
158 * IPython/iplib.py (_should_recompile): Small fix, closes
170 * IPython/iplib.py (_should_recompile): Small fix, closes
159 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
171 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
160
172
161 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
173 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
162
174
163 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
175 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
164 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
176 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
165 Moad for help with tracking it down.
177 Moad for help with tracking it down.
166
178
167 * IPython/iplib.py (handle_auto): fix autocall handling for
179 * IPython/iplib.py (handle_auto): fix autocall handling for
168 objects which support BOTH __getitem__ and __call__ (so that f [x]
180 objects which support BOTH __getitem__ and __call__ (so that f [x]
169 is left alone, instead of becoming f([x]) automatically).
181 is left alone, instead of becoming f([x]) automatically).
170
182
171 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
183 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
172 Ville's patch.
184 Ville's patch.
173
185
174 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
186 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
175
187
176 * IPython/iplib.py (handle_auto): changed autocall semantics to
188 * IPython/iplib.py (handle_auto): changed autocall semantics to
177 include 'smart' mode, where the autocall transformation is NOT
189 include 'smart' mode, where the autocall transformation is NOT
178 applied if there are no arguments on the line. This allows you to
190 applied if there are no arguments on the line. This allows you to
179 just type 'foo' if foo is a callable to see its internal form,
191 just type 'foo' if foo is a callable to see its internal form,
180 instead of having it called with no arguments (typically a
192 instead of having it called with no arguments (typically a
181 mistake). The old 'full' autocall still exists: for that, you
193 mistake). The old 'full' autocall still exists: for that, you
182 need to set the 'autocall' parameter to 2 in your ipythonrc file.
194 need to set the 'autocall' parameter to 2 in your ipythonrc file.
183
195
184 * IPython/completer.py (Completer.attr_matches): add
196 * IPython/completer.py (Completer.attr_matches): add
185 tab-completion support for Enthoughts' traits. After a report by
197 tab-completion support for Enthoughts' traits. After a report by
186 Arnd and a patch by Prabhu.
198 Arnd and a patch by Prabhu.
187
199
188 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
200 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
189
201
190 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
202 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
191 Schmolck's patch to fix inspect.getinnerframes().
203 Schmolck's patch to fix inspect.getinnerframes().
192
204
193 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
205 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
194 for embedded instances, regarding handling of namespaces and items
206 for embedded instances, regarding handling of namespaces and items
195 added to the __builtin__ one. Multiple embedded instances and
207 added to the __builtin__ one. Multiple embedded instances and
196 recursive embeddings should work better now (though I'm not sure
208 recursive embeddings should work better now (though I'm not sure
197 I've got all the corner cases fixed, that code is a bit of a brain
209 I've got all the corner cases fixed, that code is a bit of a brain
198 twister).
210 twister).
199
211
200 * IPython/Magic.py (magic_edit): added support to edit in-memory
212 * IPython/Magic.py (magic_edit): added support to edit in-memory
201 macros (automatically creates the necessary temp files). %edit
213 macros (automatically creates the necessary temp files). %edit
202 also doesn't return the file contents anymore, it's just noise.
214 also doesn't return the file contents anymore, it's just noise.
203
215
204 * IPython/completer.py (Completer.attr_matches): revert change to
216 * IPython/completer.py (Completer.attr_matches): revert change to
205 complete only on attributes listed in __all__. I realized it
217 complete only on attributes listed in __all__. I realized it
206 cripples the tab-completion system as a tool for exploring the
218 cripples the tab-completion system as a tool for exploring the
207 internals of unknown libraries (it renders any non-__all__
219 internals of unknown libraries (it renders any non-__all__
208 attribute off-limits). I got bit by this when trying to see
220 attribute off-limits). I got bit by this when trying to see
209 something inside the dis module.
221 something inside the dis module.
210
222
211 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
223 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
212
224
213 * IPython/iplib.py (InteractiveShell.__init__): add .meta
225 * IPython/iplib.py (InteractiveShell.__init__): add .meta
214 namespace for users and extension writers to hold data in. This
226 namespace for users and extension writers to hold data in. This
215 follows the discussion in
227 follows the discussion in
216 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
228 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
217
229
218 * IPython/completer.py (IPCompleter.complete): small patch to help
230 * IPython/completer.py (IPCompleter.complete): small patch to help
219 tab-completion under Emacs, after a suggestion by John Barnard
231 tab-completion under Emacs, after a suggestion by John Barnard
220 <barnarj-AT-ccf.org>.
232 <barnarj-AT-ccf.org>.
221
233
222 * IPython/Magic.py (Magic.extract_input_slices): added support for
234 * IPython/Magic.py (Magic.extract_input_slices): added support for
223 the slice notation in magics to use N-M to represent numbers N...M
235 the slice notation in magics to use N-M to represent numbers N...M
224 (closed endpoints). This is used by %macro and %save.
236 (closed endpoints). This is used by %macro and %save.
225
237
226 * IPython/completer.py (Completer.attr_matches): for modules which
238 * IPython/completer.py (Completer.attr_matches): for modules which
227 define __all__, complete only on those. After a patch by Jeffrey
239 define __all__, complete only on those. After a patch by Jeffrey
228 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
240 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
229 speed up this routine.
241 speed up this routine.
230
242
231 * IPython/Logger.py (Logger.log): fix a history handling bug. I
243 * IPython/Logger.py (Logger.log): fix a history handling bug. I
232 don't know if this is the end of it, but the behavior now is
244 don't know if this is the end of it, but the behavior now is
233 certainly much more correct. Note that coupled with macros,
245 certainly much more correct. Note that coupled with macros,
234 slightly surprising (at first) behavior may occur: a macro will in
246 slightly surprising (at first) behavior may occur: a macro will in
235 general expand to multiple lines of input, so upon exiting, the
247 general expand to multiple lines of input, so upon exiting, the
236 in/out counters will both be bumped by the corresponding amount
248 in/out counters will both be bumped by the corresponding amount
237 (as if the macro's contents had been typed interactively). Typing
249 (as if the macro's contents had been typed interactively). Typing
238 %hist will reveal the intermediate (silently processed) lines.
250 %hist will reveal the intermediate (silently processed) lines.
239
251
240 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
252 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
241 pickle to fail (%run was overwriting __main__ and not restoring
253 pickle to fail (%run was overwriting __main__ and not restoring
242 it, but pickle relies on __main__ to operate).
254 it, but pickle relies on __main__ to operate).
243
255
244 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
256 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
245 using properties, but forgot to make the main InteractiveShell
257 using properties, but forgot to make the main InteractiveShell
246 class a new-style class. Properties fail silently, and
258 class a new-style class. Properties fail silently, and
247 misteriously, with old-style class (getters work, but
259 misteriously, with old-style class (getters work, but
248 setters don't do anything).
260 setters don't do anything).
249
261
250 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
262 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
251
263
252 * IPython/Magic.py (magic_history): fix history reporting bug (I
264 * IPython/Magic.py (magic_history): fix history reporting bug (I
253 know some nasties are still there, I just can't seem to find a
265 know some nasties are still there, I just can't seem to find a
254 reproducible test case to track them down; the input history is
266 reproducible test case to track them down; the input history is
255 falling out of sync...)
267 falling out of sync...)
256
268
257 * IPython/iplib.py (handle_shell_escape): fix bug where both
269 * IPython/iplib.py (handle_shell_escape): fix bug where both
258 aliases and system accesses where broken for indented code (such
270 aliases and system accesses where broken for indented code (such
259 as loops).
271 as loops).
260
272
261 * IPython/genutils.py (shell): fix small but critical bug for
273 * IPython/genutils.py (shell): fix small but critical bug for
262 win32 system access.
274 win32 system access.
263
275
264 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
276 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
265
277
266 * IPython/iplib.py (showtraceback): remove use of the
278 * IPython/iplib.py (showtraceback): remove use of the
267 sys.last_{type/value/traceback} structures, which are non
279 sys.last_{type/value/traceback} structures, which are non
268 thread-safe.
280 thread-safe.
269 (_prefilter): change control flow to ensure that we NEVER
281 (_prefilter): change control flow to ensure that we NEVER
270 introspect objects when autocall is off. This will guarantee that
282 introspect objects when autocall is off. This will guarantee that
271 having an input line of the form 'x.y', where access to attribute
283 having an input line of the form 'x.y', where access to attribute
272 'y' has side effects, doesn't trigger the side effect TWICE. It
284 'y' has side effects, doesn't trigger the side effect TWICE. It
273 is important to note that, with autocall on, these side effects
285 is important to note that, with autocall on, these side effects
274 can still happen.
286 can still happen.
275 (ipsystem): new builtin, to complete the ip{magic/alias/system}
287 (ipsystem): new builtin, to complete the ip{magic/alias/system}
276 trio. IPython offers these three kinds of special calls which are
288 trio. IPython offers these three kinds of special calls which are
277 not python code, and it's a good thing to have their call method
289 not python code, and it's a good thing to have their call method
278 be accessible as pure python functions (not just special syntax at
290 be accessible as pure python functions (not just special syntax at
279 the command line). It gives us a better internal implementation
291 the command line). It gives us a better internal implementation
280 structure, as well as exposing these for user scripting more
292 structure, as well as exposing these for user scripting more
281 cleanly.
293 cleanly.
282
294
283 * IPython/macro.py (Macro.__init__): moved macros to a standalone
295 * IPython/macro.py (Macro.__init__): moved macros to a standalone
284 file. Now that they'll be more likely to be used with the
296 file. Now that they'll be more likely to be used with the
285 persistance system (%store), I want to make sure their module path
297 persistance system (%store), I want to make sure their module path
286 doesn't change in the future, so that we don't break things for
298 doesn't change in the future, so that we don't break things for
287 users' persisted data.
299 users' persisted data.
288
300
289 * IPython/iplib.py (autoindent_update): move indentation
301 * IPython/iplib.py (autoindent_update): move indentation
290 management into the _text_ processing loop, not the keyboard
302 management into the _text_ processing loop, not the keyboard
291 interactive one. This is necessary to correctly process non-typed
303 interactive one. This is necessary to correctly process non-typed
292 multiline input (such as macros).
304 multiline input (such as macros).
293
305
294 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
306 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
295 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
307 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
296 which was producing problems in the resulting manual.
308 which was producing problems in the resulting manual.
297 (magic_whos): improve reporting of instances (show their class,
309 (magic_whos): improve reporting of instances (show their class,
298 instead of simply printing 'instance' which isn't terribly
310 instead of simply printing 'instance' which isn't terribly
299 informative).
311 informative).
300
312
301 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
313 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
302 (minor mods) to support network shares under win32.
314 (minor mods) to support network shares under win32.
303
315
304 * IPython/winconsole.py (get_console_size): add new winconsole
316 * IPython/winconsole.py (get_console_size): add new winconsole
305 module and fixes to page_dumb() to improve its behavior under
317 module and fixes to page_dumb() to improve its behavior under
306 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
318 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
307
319
308 * IPython/Magic.py (Macro): simplified Macro class to just
320 * IPython/Magic.py (Macro): simplified Macro class to just
309 subclass list. We've had only 2.2 compatibility for a very long
321 subclass list. We've had only 2.2 compatibility for a very long
310 time, yet I was still avoiding subclassing the builtin types. No
322 time, yet I was still avoiding subclassing the builtin types. No
311 more (I'm also starting to use properties, though I won't shift to
323 more (I'm also starting to use properties, though I won't shift to
312 2.3-specific features quite yet).
324 2.3-specific features quite yet).
313 (magic_store): added Ville's patch for lightweight variable
325 (magic_store): added Ville's patch for lightweight variable
314 persistence, after a request on the user list by Matt Wilkie
326 persistence, after a request on the user list by Matt Wilkie
315 <maphew-AT-gmail.com>. The new %store magic's docstring has full
327 <maphew-AT-gmail.com>. The new %store magic's docstring has full
316 details.
328 details.
317
329
318 * IPython/iplib.py (InteractiveShell.post_config_initialization):
330 * IPython/iplib.py (InteractiveShell.post_config_initialization):
319 changed the default logfile name from 'ipython.log' to
331 changed the default logfile name from 'ipython.log' to
320 'ipython_log.py'. These logs are real python files, and now that
332 'ipython_log.py'. These logs are real python files, and now that
321 we have much better multiline support, people are more likely to
333 we have much better multiline support, people are more likely to
322 want to use them as such. Might as well name them correctly.
334 want to use them as such. Might as well name them correctly.
323
335
324 * IPython/Magic.py: substantial cleanup. While we can't stop
336 * IPython/Magic.py: substantial cleanup. While we can't stop
325 using magics as mixins, due to the existing customizations 'out
337 using magics as mixins, due to the existing customizations 'out
326 there' which rely on the mixin naming conventions, at least I
338 there' which rely on the mixin naming conventions, at least I
327 cleaned out all cross-class name usage. So once we are OK with
339 cleaned out all cross-class name usage. So once we are OK with
328 breaking compatibility, the two systems can be separated.
340 breaking compatibility, the two systems can be separated.
329
341
330 * IPython/Logger.py: major cleanup. This one is NOT a mixin
342 * IPython/Logger.py: major cleanup. This one is NOT a mixin
331 anymore, and the class is a fair bit less hideous as well. New
343 anymore, and the class is a fair bit less hideous as well. New
332 features were also introduced: timestamping of input, and logging
344 features were also introduced: timestamping of input, and logging
333 of output results. These are user-visible with the -t and -o
345 of output results. These are user-visible with the -t and -o
334 options to %logstart. Closes
346 options to %logstart. Closes
335 http://www.scipy.net/roundup/ipython/issue11 and a request by
347 http://www.scipy.net/roundup/ipython/issue11 and a request by
336 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
348 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
337
349
338 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
350 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
339
351
340 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
352 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
341 better hadnle backslashes in paths. See the thread 'More Windows
353 better hadnle backslashes in paths. See the thread 'More Windows
342 questions part 2 - \/ characters revisited' on the iypthon user
354 questions part 2 - \/ characters revisited' on the iypthon user
343 list:
355 list:
344 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
356 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
345
357
346 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
358 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
347
359
348 (InteractiveShell.__init__): change threaded shells to not use the
360 (InteractiveShell.__init__): change threaded shells to not use the
349 ipython crash handler. This was causing more problems than not,
361 ipython crash handler. This was causing more problems than not,
350 as exceptions in the main thread (GUI code, typically) would
362 as exceptions in the main thread (GUI code, typically) would
351 always show up as a 'crash', when they really weren't.
363 always show up as a 'crash', when they really weren't.
352
364
353 The colors and exception mode commands (%colors/%xmode) have been
365 The colors and exception mode commands (%colors/%xmode) have been
354 synchronized to also take this into account, so users can get
366 synchronized to also take this into account, so users can get
355 verbose exceptions for their threaded code as well. I also added
367 verbose exceptions for their threaded code as well. I also added
356 support for activating pdb inside this exception handler as well,
368 support for activating pdb inside this exception handler as well,
357 so now GUI authors can use IPython's enhanced pdb at runtime.
369 so now GUI authors can use IPython's enhanced pdb at runtime.
358
370
359 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
371 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
360 true by default, and add it to the shipped ipythonrc file. Since
372 true by default, and add it to the shipped ipythonrc file. Since
361 this asks the user before proceeding, I think it's OK to make it
373 this asks the user before proceeding, I think it's OK to make it
362 true by default.
374 true by default.
363
375
364 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
376 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
365 of the previous special-casing of input in the eval loop. I think
377 of the previous special-casing of input in the eval loop. I think
366 this is cleaner, as they really are commands and shouldn't have
378 this is cleaner, as they really are commands and shouldn't have
367 a special role in the middle of the core code.
379 a special role in the middle of the core code.
368
380
369 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
381 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
370
382
371 * IPython/iplib.py (edit_syntax_error): added support for
383 * IPython/iplib.py (edit_syntax_error): added support for
372 automatically reopening the editor if the file had a syntax error
384 automatically reopening the editor if the file had a syntax error
373 in it. Thanks to scottt who provided the patch at:
385 in it. Thanks to scottt who provided the patch at:
374 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
386 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
375 version committed).
387 version committed).
376
388
377 * IPython/iplib.py (handle_normal): add suport for multi-line
389 * IPython/iplib.py (handle_normal): add suport for multi-line
378 input with emtpy lines. This fixes
390 input with emtpy lines. This fixes
379 http://www.scipy.net/roundup/ipython/issue43 and a similar
391 http://www.scipy.net/roundup/ipython/issue43 and a similar
380 discussion on the user list.
392 discussion on the user list.
381
393
382 WARNING: a behavior change is necessarily introduced to support
394 WARNING: a behavior change is necessarily introduced to support
383 blank lines: now a single blank line with whitespace does NOT
395 blank lines: now a single blank line with whitespace does NOT
384 break the input loop, which means that when autoindent is on, by
396 break the input loop, which means that when autoindent is on, by
385 default hitting return on the next (indented) line does NOT exit.
397 default hitting return on the next (indented) line does NOT exit.
386
398
387 Instead, to exit a multiline input you can either have:
399 Instead, to exit a multiline input you can either have:
388
400
389 - TWO whitespace lines (just hit return again), or
401 - TWO whitespace lines (just hit return again), or
390 - a single whitespace line of a different length than provided
402 - a single whitespace line of a different length than provided
391 by the autoindent (add or remove a space).
403 by the autoindent (add or remove a space).
392
404
393 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
405 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
394 module to better organize all readline-related functionality.
406 module to better organize all readline-related functionality.
395 I've deleted FlexCompleter and put all completion clases here.
407 I've deleted FlexCompleter and put all completion clases here.
396
408
397 * IPython/iplib.py (raw_input): improve indentation management.
409 * IPython/iplib.py (raw_input): improve indentation management.
398 It is now possible to paste indented code with autoindent on, and
410 It is now possible to paste indented code with autoindent on, and
399 the code is interpreted correctly (though it still looks bad on
411 the code is interpreted correctly (though it still looks bad on
400 screen, due to the line-oriented nature of ipython).
412 screen, due to the line-oriented nature of ipython).
401 (MagicCompleter.complete): change behavior so that a TAB key on an
413 (MagicCompleter.complete): change behavior so that a TAB key on an
402 otherwise empty line actually inserts a tab, instead of completing
414 otherwise empty line actually inserts a tab, instead of completing
403 on the entire global namespace. This makes it easier to use the
415 on the entire global namespace. This makes it easier to use the
404 TAB key for indentation. After a request by Hans Meine
416 TAB key for indentation. After a request by Hans Meine
405 <hans_meine-AT-gmx.net>
417 <hans_meine-AT-gmx.net>
406 (_prefilter): add support so that typing plain 'exit' or 'quit'
418 (_prefilter): add support so that typing plain 'exit' or 'quit'
407 does a sensible thing. Originally I tried to deviate as little as
419 does a sensible thing. Originally I tried to deviate as little as
408 possible from the default python behavior, but even that one may
420 possible from the default python behavior, but even that one may
409 change in this direction (thread on python-dev to that effect).
421 change in this direction (thread on python-dev to that effect).
410 Regardless, ipython should do the right thing even if CPython's
422 Regardless, ipython should do the right thing even if CPython's
411 '>>>' prompt doesn't.
423 '>>>' prompt doesn't.
412 (InteractiveShell): removed subclassing code.InteractiveConsole
424 (InteractiveShell): removed subclassing code.InteractiveConsole
413 class. By now we'd overridden just about all of its methods: I've
425 class. By now we'd overridden just about all of its methods: I've
414 copied the remaining two over, and now ipython is a standalone
426 copied the remaining two over, and now ipython is a standalone
415 class. This will provide a clearer picture for the chainsaw
427 class. This will provide a clearer picture for the chainsaw
416 branch refactoring.
428 branch refactoring.
417
429
418 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
430 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
419
431
420 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
432 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
421 failures for objects which break when dir() is called on them.
433 failures for objects which break when dir() is called on them.
422
434
423 * IPython/FlexCompleter.py (Completer.__init__): Added support for
435 * IPython/FlexCompleter.py (Completer.__init__): Added support for
424 distinct local and global namespaces in the completer API. This
436 distinct local and global namespaces in the completer API. This
425 change allows us top properly handle completion with distinct
437 change allows us top properly handle completion with distinct
426 scopes, including in embedded instances (this had never really
438 scopes, including in embedded instances (this had never really
427 worked correctly).
439 worked correctly).
428
440
429 Note: this introduces a change in the constructor for
441 Note: this introduces a change in the constructor for
430 MagicCompleter, as a new global_namespace parameter is now the
442 MagicCompleter, as a new global_namespace parameter is now the
431 second argument (the others were bumped one position).
443 second argument (the others were bumped one position).
432
444
433 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
445 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
434
446
435 * IPython/iplib.py (embed_mainloop): fix tab-completion in
447 * IPython/iplib.py (embed_mainloop): fix tab-completion in
436 embedded instances (which can be done now thanks to Vivian's
448 embedded instances (which can be done now thanks to Vivian's
437 frame-handling fixes for pdb).
449 frame-handling fixes for pdb).
438 (InteractiveShell.__init__): Fix namespace handling problem in
450 (InteractiveShell.__init__): Fix namespace handling problem in
439 embedded instances. We were overwriting __main__ unconditionally,
451 embedded instances. We were overwriting __main__ unconditionally,
440 and this should only be done for 'full' (non-embedded) IPython;
452 and this should only be done for 'full' (non-embedded) IPython;
441 embedded instances must respect the caller's __main__. Thanks to
453 embedded instances must respect the caller's __main__. Thanks to
442 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
454 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
443
455
444 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
456 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
445
457
446 * setup.py: added download_url to setup(). This registers the
458 * setup.py: added download_url to setup(). This registers the
447 download address at PyPI, which is not only useful to humans
459 download address at PyPI, which is not only useful to humans
448 browsing the site, but is also picked up by setuptools (the Eggs
460 browsing the site, but is also picked up by setuptools (the Eggs
449 machinery). Thanks to Ville and R. Kern for the info/discussion
461 machinery). Thanks to Ville and R. Kern for the info/discussion
450 on this.
462 on this.
451
463
452 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
464 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
453
465
454 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
466 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
455 This brings a lot of nice functionality to the pdb mode, which now
467 This brings a lot of nice functionality to the pdb mode, which now
456 has tab-completion, syntax highlighting, and better stack handling
468 has tab-completion, syntax highlighting, and better stack handling
457 than before. Many thanks to Vivian De Smedt
469 than before. Many thanks to Vivian De Smedt
458 <vivian-AT-vdesmedt.com> for the original patches.
470 <vivian-AT-vdesmedt.com> for the original patches.
459
471
460 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
472 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
461
473
462 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
474 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
463 sequence to consistently accept the banner argument. The
475 sequence to consistently accept the banner argument. The
464 inconsistency was tripping SAGE, thanks to Gary Zablackis
476 inconsistency was tripping SAGE, thanks to Gary Zablackis
465 <gzabl-AT-yahoo.com> for the report.
477 <gzabl-AT-yahoo.com> for the report.
466
478
467 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
479 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
468
480
469 * IPython/iplib.py (InteractiveShell.post_config_initialization):
481 * IPython/iplib.py (InteractiveShell.post_config_initialization):
470 Fix bug where a naked 'alias' call in the ipythonrc file would
482 Fix bug where a naked 'alias' call in the ipythonrc file would
471 cause a crash. Bug reported by Jorgen Stenarson.
483 cause a crash. Bug reported by Jorgen Stenarson.
472
484
473 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
485 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
474
486
475 * IPython/ipmaker.py (make_IPython): cleanups which should improve
487 * IPython/ipmaker.py (make_IPython): cleanups which should improve
476 startup time.
488 startup time.
477
489
478 * IPython/iplib.py (runcode): my globals 'fix' for embedded
490 * IPython/iplib.py (runcode): my globals 'fix' for embedded
479 instances had introduced a bug with globals in normal code. Now
491 instances had introduced a bug with globals in normal code. Now
480 it's working in all cases.
492 it's working in all cases.
481
493
482 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
494 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
483 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
495 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
484 has been introduced to set the default case sensitivity of the
496 has been introduced to set the default case sensitivity of the
485 searches. Users can still select either mode at runtime on a
497 searches. Users can still select either mode at runtime on a
486 per-search basis.
498 per-search basis.
487
499
488 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
500 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
489
501
490 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
502 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
491 attributes in wildcard searches for subclasses. Modified version
503 attributes in wildcard searches for subclasses. Modified version
492 of a patch by Jorgen.
504 of a patch by Jorgen.
493
505
494 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
506 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
495
507
496 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
508 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
497 embedded instances. I added a user_global_ns attribute to the
509 embedded instances. I added a user_global_ns attribute to the
498 InteractiveShell class to handle this.
510 InteractiveShell class to handle this.
499
511
500 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
512 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
501
513
502 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
514 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
503 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
515 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
504 (reported under win32, but may happen also in other platforms).
516 (reported under win32, but may happen also in other platforms).
505 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
517 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
506
518
507 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
519 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
508
520
509 * IPython/Magic.py (magic_psearch): new support for wildcard
521 * IPython/Magic.py (magic_psearch): new support for wildcard
510 patterns. Now, typing ?a*b will list all names which begin with a
522 patterns. Now, typing ?a*b will list all names which begin with a
511 and end in b, for example. The %psearch magic has full
523 and end in b, for example. The %psearch magic has full
512 docstrings. Many thanks to JΓΆrgen Stenarson
524 docstrings. Many thanks to JΓΆrgen Stenarson
513 <jorgen.stenarson-AT-bostream.nu>, author of the patches
525 <jorgen.stenarson-AT-bostream.nu>, author of the patches
514 implementing this functionality.
526 implementing this functionality.
515
527
516 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
528 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
517
529
518 * Manual: fixed long-standing annoyance of double-dashes (as in
530 * Manual: fixed long-standing annoyance of double-dashes (as in
519 --prefix=~, for example) being stripped in the HTML version. This
531 --prefix=~, for example) being stripped in the HTML version. This
520 is a latex2html bug, but a workaround was provided. Many thanks
532 is a latex2html bug, but a workaround was provided. Many thanks
521 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
533 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
522 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
534 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
523 rolling. This seemingly small issue had tripped a number of users
535 rolling. This seemingly small issue had tripped a number of users
524 when first installing, so I'm glad to see it gone.
536 when first installing, so I'm glad to see it gone.
525
537
526 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
538 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
527
539
528 * IPython/Extensions/numeric_formats.py: fix missing import,
540 * IPython/Extensions/numeric_formats.py: fix missing import,
529 reported by Stephen Walton.
541 reported by Stephen Walton.
530
542
531 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
543 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
532
544
533 * IPython/demo.py: finish demo module, fully documented now.
545 * IPython/demo.py: finish demo module, fully documented now.
534
546
535 * IPython/genutils.py (file_read): simple little utility to read a
547 * IPython/genutils.py (file_read): simple little utility to read a
536 file and ensure it's closed afterwards.
548 file and ensure it's closed afterwards.
537
549
538 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
550 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
539
551
540 * IPython/demo.py (Demo.__init__): added support for individually
552 * IPython/demo.py (Demo.__init__): added support for individually
541 tagging blocks for automatic execution.
553 tagging blocks for automatic execution.
542
554
543 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
555 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
544 syntax-highlighted python sources, requested by John.
556 syntax-highlighted python sources, requested by John.
545
557
546 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
558 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
547
559
548 * IPython/demo.py (Demo.again): fix bug where again() blocks after
560 * IPython/demo.py (Demo.again): fix bug where again() blocks after
549 finishing.
561 finishing.
550
562
551 * IPython/genutils.py (shlex_split): moved from Magic to here,
563 * IPython/genutils.py (shlex_split): moved from Magic to here,
552 where all 2.2 compatibility stuff lives. I needed it for demo.py.
564 where all 2.2 compatibility stuff lives. I needed it for demo.py.
553
565
554 * IPython/demo.py (Demo.__init__): added support for silent
566 * IPython/demo.py (Demo.__init__): added support for silent
555 blocks, improved marks as regexps, docstrings written.
567 blocks, improved marks as regexps, docstrings written.
556 (Demo.__init__): better docstring, added support for sys.argv.
568 (Demo.__init__): better docstring, added support for sys.argv.
557
569
558 * IPython/genutils.py (marquee): little utility used by the demo
570 * IPython/genutils.py (marquee): little utility used by the demo
559 code, handy in general.
571 code, handy in general.
560
572
561 * IPython/demo.py (Demo.__init__): new class for interactive
573 * IPython/demo.py (Demo.__init__): new class for interactive
562 demos. Not documented yet, I just wrote it in a hurry for
574 demos. Not documented yet, I just wrote it in a hurry for
563 scipy'05. Will docstring later.
575 scipy'05. Will docstring later.
564
576
565 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
577 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
566
578
567 * IPython/Shell.py (sigint_handler): Drastic simplification which
579 * IPython/Shell.py (sigint_handler): Drastic simplification which
568 also seems to make Ctrl-C work correctly across threads! This is
580 also seems to make Ctrl-C work correctly across threads! This is
569 so simple, that I can't beleive I'd missed it before. Needs more
581 so simple, that I can't beleive I'd missed it before. Needs more
570 testing, though.
582 testing, though.
571 (KBINT): Never mind, revert changes. I'm sure I'd tried something
583 (KBINT): Never mind, revert changes. I'm sure I'd tried something
572 like this before...
584 like this before...
573
585
574 * IPython/genutils.py (get_home_dir): add protection against
586 * IPython/genutils.py (get_home_dir): add protection against
575 non-dirs in win32 registry.
587 non-dirs in win32 registry.
576
588
577 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
589 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
578 bug where dict was mutated while iterating (pysh crash).
590 bug where dict was mutated while iterating (pysh crash).
579
591
580 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
592 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
581
593
582 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
594 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
583 spurious newlines added by this routine. After a report by
595 spurious newlines added by this routine. After a report by
584 F. Mantegazza.
596 F. Mantegazza.
585
597
586 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
598 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
587
599
588 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
600 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
589 calls. These were a leftover from the GTK 1.x days, and can cause
601 calls. These were a leftover from the GTK 1.x days, and can cause
590 problems in certain cases (after a report by John Hunter).
602 problems in certain cases (after a report by John Hunter).
591
603
592 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
604 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
593 os.getcwd() fails at init time. Thanks to patch from David Remahl
605 os.getcwd() fails at init time. Thanks to patch from David Remahl
594 <chmod007-AT-mac.com>.
606 <chmod007-AT-mac.com>.
595 (InteractiveShell.__init__): prevent certain special magics from
607 (InteractiveShell.__init__): prevent certain special magics from
596 being shadowed by aliases. Closes
608 being shadowed by aliases. Closes
597 http://www.scipy.net/roundup/ipython/issue41.
609 http://www.scipy.net/roundup/ipython/issue41.
598
610
599 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
611 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
600
612
601 * IPython/iplib.py (InteractiveShell.complete): Added new
613 * IPython/iplib.py (InteractiveShell.complete): Added new
602 top-level completion method to expose the completion mechanism
614 top-level completion method to expose the completion mechanism
603 beyond readline-based environments.
615 beyond readline-based environments.
604
616
605 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
617 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
606
618
607 * tools/ipsvnc (svnversion): fix svnversion capture.
619 * tools/ipsvnc (svnversion): fix svnversion capture.
608
620
609 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
621 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
610 attribute to self, which was missing. Before, it was set by a
622 attribute to self, which was missing. Before, it was set by a
611 routine which in certain cases wasn't being called, so the
623 routine which in certain cases wasn't being called, so the
612 instance could end up missing the attribute. This caused a crash.
624 instance could end up missing the attribute. This caused a crash.
613 Closes http://www.scipy.net/roundup/ipython/issue40.
625 Closes http://www.scipy.net/roundup/ipython/issue40.
614
626
615 2005-08-16 Fernando Perez <fperez@colorado.edu>
627 2005-08-16 Fernando Perez <fperez@colorado.edu>
616
628
617 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
629 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
618 contains non-string attribute. Closes
630 contains non-string attribute. Closes
619 http://www.scipy.net/roundup/ipython/issue38.
631 http://www.scipy.net/roundup/ipython/issue38.
620
632
621 2005-08-14 Fernando Perez <fperez@colorado.edu>
633 2005-08-14 Fernando Perez <fperez@colorado.edu>
622
634
623 * tools/ipsvnc: Minor improvements, to add changeset info.
635 * tools/ipsvnc: Minor improvements, to add changeset info.
624
636
625 2005-08-12 Fernando Perez <fperez@colorado.edu>
637 2005-08-12 Fernando Perez <fperez@colorado.edu>
626
638
627 * IPython/iplib.py (runsource): remove self.code_to_run_src
639 * IPython/iplib.py (runsource): remove self.code_to_run_src
628 attribute. I realized this is nothing more than
640 attribute. I realized this is nothing more than
629 '\n'.join(self.buffer), and having the same data in two different
641 '\n'.join(self.buffer), and having the same data in two different
630 places is just asking for synchronization bugs. This may impact
642 places is just asking for synchronization bugs. This may impact
631 people who have custom exception handlers, so I need to warn
643 people who have custom exception handlers, so I need to warn
632 ipython-dev about it (F. Mantegazza may use them).
644 ipython-dev about it (F. Mantegazza may use them).
633
645
634 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
646 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
635
647
636 * IPython/genutils.py: fix 2.2 compatibility (generators)
648 * IPython/genutils.py: fix 2.2 compatibility (generators)
637
649
638 2005-07-18 Fernando Perez <fperez@colorado.edu>
650 2005-07-18 Fernando Perez <fperez@colorado.edu>
639
651
640 * IPython/genutils.py (get_home_dir): fix to help users with
652 * IPython/genutils.py (get_home_dir): fix to help users with
641 invalid $HOME under win32.
653 invalid $HOME under win32.
642
654
643 2005-07-17 Fernando Perez <fperez@colorado.edu>
655 2005-07-17 Fernando Perez <fperez@colorado.edu>
644
656
645 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
657 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
646 some old hacks and clean up a bit other routines; code should be
658 some old hacks and clean up a bit other routines; code should be
647 simpler and a bit faster.
659 simpler and a bit faster.
648
660
649 * IPython/iplib.py (interact): removed some last-resort attempts
661 * IPython/iplib.py (interact): removed some last-resort attempts
650 to survive broken stdout/stderr. That code was only making it
662 to survive broken stdout/stderr. That code was only making it
651 harder to abstract out the i/o (necessary for gui integration),
663 harder to abstract out the i/o (necessary for gui integration),
652 and the crashes it could prevent were extremely rare in practice
664 and the crashes it could prevent were extremely rare in practice
653 (besides being fully user-induced in a pretty violent manner).
665 (besides being fully user-induced in a pretty violent manner).
654
666
655 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
667 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
656 Nothing major yet, but the code is simpler to read; this should
668 Nothing major yet, but the code is simpler to read; this should
657 make it easier to do more serious modifications in the future.
669 make it easier to do more serious modifications in the future.
658
670
659 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
671 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
660 which broke in .15 (thanks to a report by Ville).
672 which broke in .15 (thanks to a report by Ville).
661
673
662 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
674 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
663 be quite correct, I know next to nothing about unicode). This
675 be quite correct, I know next to nothing about unicode). This
664 will allow unicode strings to be used in prompts, amongst other
676 will allow unicode strings to be used in prompts, amongst other
665 cases. It also will prevent ipython from crashing when unicode
677 cases. It also will prevent ipython from crashing when unicode
666 shows up unexpectedly in many places. If ascii encoding fails, we
678 shows up unexpectedly in many places. If ascii encoding fails, we
667 assume utf_8. Currently the encoding is not a user-visible
679 assume utf_8. Currently the encoding is not a user-visible
668 setting, though it could be made so if there is demand for it.
680 setting, though it could be made so if there is demand for it.
669
681
670 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
682 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
671
683
672 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
684 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
673
685
674 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
686 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
675
687
676 * IPython/genutils.py: Add 2.2 compatibility here, so all other
688 * IPython/genutils.py: Add 2.2 compatibility here, so all other
677 code can work transparently for 2.2/2.3.
689 code can work transparently for 2.2/2.3.
678
690
679 2005-07-16 Fernando Perez <fperez@colorado.edu>
691 2005-07-16 Fernando Perez <fperez@colorado.edu>
680
692
681 * IPython/ultraTB.py (ExceptionColors): Make a global variable
693 * IPython/ultraTB.py (ExceptionColors): Make a global variable
682 out of the color scheme table used for coloring exception
694 out of the color scheme table used for coloring exception
683 tracebacks. This allows user code to add new schemes at runtime.
695 tracebacks. This allows user code to add new schemes at runtime.
684 This is a minimally modified version of the patch at
696 This is a minimally modified version of the patch at
685 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
697 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
686 for the contribution.
698 for the contribution.
687
699
688 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
700 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
689 slightly modified version of the patch in
701 slightly modified version of the patch in
690 http://www.scipy.net/roundup/ipython/issue34, which also allows me
702 http://www.scipy.net/roundup/ipython/issue34, which also allows me
691 to remove the previous try/except solution (which was costlier).
703 to remove the previous try/except solution (which was costlier).
692 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
704 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
693
705
694 2005-06-08 Fernando Perez <fperez@colorado.edu>
706 2005-06-08 Fernando Perez <fperez@colorado.edu>
695
707
696 * IPython/iplib.py (write/write_err): Add methods to abstract all
708 * IPython/iplib.py (write/write_err): Add methods to abstract all
697 I/O a bit more.
709 I/O a bit more.
698
710
699 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
711 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
700 warning, reported by Aric Hagberg, fix by JD Hunter.
712 warning, reported by Aric Hagberg, fix by JD Hunter.
701
713
702 2005-06-02 *** Released version 0.6.15
714 2005-06-02 *** Released version 0.6.15
703
715
704 2005-06-01 Fernando Perez <fperez@colorado.edu>
716 2005-06-01 Fernando Perez <fperez@colorado.edu>
705
717
706 * IPython/iplib.py (MagicCompleter.file_matches): Fix
718 * IPython/iplib.py (MagicCompleter.file_matches): Fix
707 tab-completion of filenames within open-quoted strings. Note that
719 tab-completion of filenames within open-quoted strings. Note that
708 this requires that in ~/.ipython/ipythonrc, users change the
720 this requires that in ~/.ipython/ipythonrc, users change the
709 readline delimiters configuration to read:
721 readline delimiters configuration to read:
710
722
711 readline_remove_delims -/~
723 readline_remove_delims -/~
712
724
713
725
714 2005-05-31 *** Released version 0.6.14
726 2005-05-31 *** Released version 0.6.14
715
727
716 2005-05-29 Fernando Perez <fperez@colorado.edu>
728 2005-05-29 Fernando Perez <fperez@colorado.edu>
717
729
718 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
730 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
719 with files not on the filesystem. Reported by Eliyahu Sandler
731 with files not on the filesystem. Reported by Eliyahu Sandler
720 <eli@gondolin.net>
732 <eli@gondolin.net>
721
733
722 2005-05-22 Fernando Perez <fperez@colorado.edu>
734 2005-05-22 Fernando Perez <fperez@colorado.edu>
723
735
724 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
736 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
725 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
737 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
726
738
727 2005-05-19 Fernando Perez <fperez@colorado.edu>
739 2005-05-19 Fernando Perez <fperez@colorado.edu>
728
740
729 * IPython/iplib.py (safe_execfile): close a file which could be
741 * IPython/iplib.py (safe_execfile): close a file which could be
730 left open (causing problems in win32, which locks open files).
742 left open (causing problems in win32, which locks open files).
731 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
743 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
732
744
733 2005-05-18 Fernando Perez <fperez@colorado.edu>
745 2005-05-18 Fernando Perez <fperez@colorado.edu>
734
746
735 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
747 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
736 keyword arguments correctly to safe_execfile().
748 keyword arguments correctly to safe_execfile().
737
749
738 2005-05-13 Fernando Perez <fperez@colorado.edu>
750 2005-05-13 Fernando Perez <fperez@colorado.edu>
739
751
740 * ipython.1: Added info about Qt to manpage, and threads warning
752 * ipython.1: Added info about Qt to manpage, and threads warning
741 to usage page (invoked with --help).
753 to usage page (invoked with --help).
742
754
743 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
755 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
744 new matcher (it goes at the end of the priority list) to do
756 new matcher (it goes at the end of the priority list) to do
745 tab-completion on named function arguments. Submitted by George
757 tab-completion on named function arguments. Submitted by George
746 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
758 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
747 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
759 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
748 for more details.
760 for more details.
749
761
750 * IPython/Magic.py (magic_run): Added new -e flag to ignore
762 * IPython/Magic.py (magic_run): Added new -e flag to ignore
751 SystemExit exceptions in the script being run. Thanks to a report
763 SystemExit exceptions in the script being run. Thanks to a report
752 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
764 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
753 producing very annoying behavior when running unit tests.
765 producing very annoying behavior when running unit tests.
754
766
755 2005-05-12 Fernando Perez <fperez@colorado.edu>
767 2005-05-12 Fernando Perez <fperez@colorado.edu>
756
768
757 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
769 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
758 which I'd broken (again) due to a changed regexp. In the process,
770 which I'd broken (again) due to a changed regexp. In the process,
759 added ';' as an escape to auto-quote the whole line without
771 added ';' as an escape to auto-quote the whole line without
760 splitting its arguments. Thanks to a report by Jerry McRae
772 splitting its arguments. Thanks to a report by Jerry McRae
761 <qrs0xyc02-AT-sneakemail.com>.
773 <qrs0xyc02-AT-sneakemail.com>.
762
774
763 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
775 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
764 possible crashes caused by a TokenError. Reported by Ed Schofield
776 possible crashes caused by a TokenError. Reported by Ed Schofield
765 <schofield-AT-ftw.at>.
777 <schofield-AT-ftw.at>.
766
778
767 2005-05-06 Fernando Perez <fperez@colorado.edu>
779 2005-05-06 Fernando Perez <fperez@colorado.edu>
768
780
769 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
781 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
770
782
771 2005-04-29 Fernando Perez <fperez@colorado.edu>
783 2005-04-29 Fernando Perez <fperez@colorado.edu>
772
784
773 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
785 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
774 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
786 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
775 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
787 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
776 which provides support for Qt interactive usage (similar to the
788 which provides support for Qt interactive usage (similar to the
777 existing one for WX and GTK). This had been often requested.
789 existing one for WX and GTK). This had been often requested.
778
790
779 2005-04-14 *** Released version 0.6.13
791 2005-04-14 *** Released version 0.6.13
780
792
781 2005-04-08 Fernando Perez <fperez@colorado.edu>
793 2005-04-08 Fernando Perez <fperez@colorado.edu>
782
794
783 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
795 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
784 from _ofind, which gets called on almost every input line. Now,
796 from _ofind, which gets called on almost every input line. Now,
785 we only try to get docstrings if they are actually going to be
797 we only try to get docstrings if they are actually going to be
786 used (the overhead of fetching unnecessary docstrings can be
798 used (the overhead of fetching unnecessary docstrings can be
787 noticeable for certain objects, such as Pyro proxies).
799 noticeable for certain objects, such as Pyro proxies).
788
800
789 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
801 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
790 for completers. For some reason I had been passing them the state
802 for completers. For some reason I had been passing them the state
791 variable, which completers never actually need, and was in
803 variable, which completers never actually need, and was in
792 conflict with the rlcompleter API. Custom completers ONLY need to
804 conflict with the rlcompleter API. Custom completers ONLY need to
793 take the text parameter.
805 take the text parameter.
794
806
795 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
807 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
796 work correctly in pysh. I've also moved all the logic which used
808 work correctly in pysh. I've also moved all the logic which used
797 to be in pysh.py here, which will prevent problems with future
809 to be in pysh.py here, which will prevent problems with future
798 upgrades. However, this time I must warn users to update their
810 upgrades. However, this time I must warn users to update their
799 pysh profile to include the line
811 pysh profile to include the line
800
812
801 import_all IPython.Extensions.InterpreterExec
813 import_all IPython.Extensions.InterpreterExec
802
814
803 because otherwise things won't work for them. They MUST also
815 because otherwise things won't work for them. They MUST also
804 delete pysh.py and the line
816 delete pysh.py and the line
805
817
806 execfile pysh.py
818 execfile pysh.py
807
819
808 from their ipythonrc-pysh.
820 from their ipythonrc-pysh.
809
821
810 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
822 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
811 robust in the face of objects whose dir() returns non-strings
823 robust in the face of objects whose dir() returns non-strings
812 (which it shouldn't, but some broken libs like ITK do). Thanks to
824 (which it shouldn't, but some broken libs like ITK do). Thanks to
813 a patch by John Hunter (implemented differently, though). Also
825 a patch by John Hunter (implemented differently, though). Also
814 minor improvements by using .extend instead of + on lists.
826 minor improvements by using .extend instead of + on lists.
815
827
816 * pysh.py:
828 * pysh.py:
817
829
818 2005-04-06 Fernando Perez <fperez@colorado.edu>
830 2005-04-06 Fernando Perez <fperez@colorado.edu>
819
831
820 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
832 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
821 by default, so that all users benefit from it. Those who don't
833 by default, so that all users benefit from it. Those who don't
822 want it can still turn it off.
834 want it can still turn it off.
823
835
824 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
836 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
825 config file, I'd forgotten about this, so users were getting it
837 config file, I'd forgotten about this, so users were getting it
826 off by default.
838 off by default.
827
839
828 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
840 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
829 consistency. Now magics can be called in multiline statements,
841 consistency. Now magics can be called in multiline statements,
830 and python variables can be expanded in magic calls via $var.
842 and python variables can be expanded in magic calls via $var.
831 This makes the magic system behave just like aliases or !system
843 This makes the magic system behave just like aliases or !system
832 calls.
844 calls.
833
845
834 2005-03-28 Fernando Perez <fperez@colorado.edu>
846 2005-03-28 Fernando Perez <fperez@colorado.edu>
835
847
836 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
848 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
837 expensive string additions for building command. Add support for
849 expensive string additions for building command. Add support for
838 trailing ';' when autocall is used.
850 trailing ';' when autocall is used.
839
851
840 2005-03-26 Fernando Perez <fperez@colorado.edu>
852 2005-03-26 Fernando Perez <fperez@colorado.edu>
841
853
842 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
854 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
843 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
855 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
844 ipython.el robust against prompts with any number of spaces
856 ipython.el robust against prompts with any number of spaces
845 (including 0) after the ':' character.
857 (including 0) after the ':' character.
846
858
847 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
859 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
848 continuation prompt, which misled users to think the line was
860 continuation prompt, which misled users to think the line was
849 already indented. Closes debian Bug#300847, reported to me by
861 already indented. Closes debian Bug#300847, reported to me by
850 Norbert Tretkowski <tretkowski-AT-inittab.de>.
862 Norbert Tretkowski <tretkowski-AT-inittab.de>.
851
863
852 2005-03-23 Fernando Perez <fperez@colorado.edu>
864 2005-03-23 Fernando Perez <fperez@colorado.edu>
853
865
854 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
866 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
855 properly aligned if they have embedded newlines.
867 properly aligned if they have embedded newlines.
856
868
857 * IPython/iplib.py (runlines): Add a public method to expose
869 * IPython/iplib.py (runlines): Add a public method to expose
858 IPython's code execution machinery, so that users can run strings
870 IPython's code execution machinery, so that users can run strings
859 as if they had been typed at the prompt interactively.
871 as if they had been typed at the prompt interactively.
860 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
872 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
861 methods which can call the system shell, but with python variable
873 methods which can call the system shell, but with python variable
862 expansion. The three such methods are: __IPYTHON__.system,
874 expansion. The three such methods are: __IPYTHON__.system,
863 .getoutput and .getoutputerror. These need to be documented in a
875 .getoutput and .getoutputerror. These need to be documented in a
864 'public API' section (to be written) of the manual.
876 'public API' section (to be written) of the manual.
865
877
866 2005-03-20 Fernando Perez <fperez@colorado.edu>
878 2005-03-20 Fernando Perez <fperez@colorado.edu>
867
879
868 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
880 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
869 for custom exception handling. This is quite powerful, and it
881 for custom exception handling. This is quite powerful, and it
870 allows for user-installable exception handlers which can trap
882 allows for user-installable exception handlers which can trap
871 custom exceptions at runtime and treat them separately from
883 custom exceptions at runtime and treat them separately from
872 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
884 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
873 Mantegazza <mantegazza-AT-ill.fr>.
885 Mantegazza <mantegazza-AT-ill.fr>.
874 (InteractiveShell.set_custom_completer): public API function to
886 (InteractiveShell.set_custom_completer): public API function to
875 add new completers at runtime.
887 add new completers at runtime.
876
888
877 2005-03-19 Fernando Perez <fperez@colorado.edu>
889 2005-03-19 Fernando Perez <fperez@colorado.edu>
878
890
879 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
891 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
880 allow objects which provide their docstrings via non-standard
892 allow objects which provide their docstrings via non-standard
881 mechanisms (like Pyro proxies) to still be inspected by ipython's
893 mechanisms (like Pyro proxies) to still be inspected by ipython's
882 ? system.
894 ? system.
883
895
884 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
896 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
885 automatic capture system. I tried quite hard to make it work
897 automatic capture system. I tried quite hard to make it work
886 reliably, and simply failed. I tried many combinations with the
898 reliably, and simply failed. I tried many combinations with the
887 subprocess module, but eventually nothing worked in all needed
899 subprocess module, but eventually nothing worked in all needed
888 cases (not blocking stdin for the child, duplicating stdout
900 cases (not blocking stdin for the child, duplicating stdout
889 without blocking, etc). The new %sc/%sx still do capture to these
901 without blocking, etc). The new %sc/%sx still do capture to these
890 magical list/string objects which make shell use much more
902 magical list/string objects which make shell use much more
891 conveninent, so not all is lost.
903 conveninent, so not all is lost.
892
904
893 XXX - FIX MANUAL for the change above!
905 XXX - FIX MANUAL for the change above!
894
906
895 (runsource): I copied code.py's runsource() into ipython to modify
907 (runsource): I copied code.py's runsource() into ipython to modify
896 it a bit. Now the code object and source to be executed are
908 it a bit. Now the code object and source to be executed are
897 stored in ipython. This makes this info accessible to third-party
909 stored in ipython. This makes this info accessible to third-party
898 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
910 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
899 Mantegazza <mantegazza-AT-ill.fr>.
911 Mantegazza <mantegazza-AT-ill.fr>.
900
912
901 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
913 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
902 history-search via readline (like C-p/C-n). I'd wanted this for a
914 history-search via readline (like C-p/C-n). I'd wanted this for a
903 long time, but only recently found out how to do it. For users
915 long time, but only recently found out how to do it. For users
904 who already have their ipythonrc files made and want this, just
916 who already have their ipythonrc files made and want this, just
905 add:
917 add:
906
918
907 readline_parse_and_bind "\e[A": history-search-backward
919 readline_parse_and_bind "\e[A": history-search-backward
908 readline_parse_and_bind "\e[B": history-search-forward
920 readline_parse_and_bind "\e[B": history-search-forward
909
921
910 2005-03-18 Fernando Perez <fperez@colorado.edu>
922 2005-03-18 Fernando Perez <fperez@colorado.edu>
911
923
912 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
924 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
913 LSString and SList classes which allow transparent conversions
925 LSString and SList classes which allow transparent conversions
914 between list mode and whitespace-separated string.
926 between list mode and whitespace-separated string.
915 (magic_r): Fix recursion problem in %r.
927 (magic_r): Fix recursion problem in %r.
916
928
917 * IPython/genutils.py (LSString): New class to be used for
929 * IPython/genutils.py (LSString): New class to be used for
918 automatic storage of the results of all alias/system calls in _o
930 automatic storage of the results of all alias/system calls in _o
919 and _e (stdout/err). These provide a .l/.list attribute which
931 and _e (stdout/err). These provide a .l/.list attribute which
920 does automatic splitting on newlines. This means that for most
932 does automatic splitting on newlines. This means that for most
921 uses, you'll never need to do capturing of output with %sc/%sx
933 uses, you'll never need to do capturing of output with %sc/%sx
922 anymore, since ipython keeps this always done for you. Note that
934 anymore, since ipython keeps this always done for you. Note that
923 only the LAST results are stored, the _o/e variables are
935 only the LAST results are stored, the _o/e variables are
924 overwritten on each call. If you need to save their contents
936 overwritten on each call. If you need to save their contents
925 further, simply bind them to any other name.
937 further, simply bind them to any other name.
926
938
927 2005-03-17 Fernando Perez <fperez@colorado.edu>
939 2005-03-17 Fernando Perez <fperez@colorado.edu>
928
940
929 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
941 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
930 prompt namespace handling.
942 prompt namespace handling.
931
943
932 2005-03-16 Fernando Perez <fperez@colorado.edu>
944 2005-03-16 Fernando Perez <fperez@colorado.edu>
933
945
934 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
946 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
935 classic prompts to be '>>> ' (final space was missing, and it
947 classic prompts to be '>>> ' (final space was missing, and it
936 trips the emacs python mode).
948 trips the emacs python mode).
937 (BasePrompt.__str__): Added safe support for dynamic prompt
949 (BasePrompt.__str__): Added safe support for dynamic prompt
938 strings. Now you can set your prompt string to be '$x', and the
950 strings. Now you can set your prompt string to be '$x', and the
939 value of x will be printed from your interactive namespace. The
951 value of x will be printed from your interactive namespace. The
940 interpolation syntax includes the full Itpl support, so
952 interpolation syntax includes the full Itpl support, so
941 ${foo()+x+bar()} is a valid prompt string now, and the function
953 ${foo()+x+bar()} is a valid prompt string now, and the function
942 calls will be made at runtime.
954 calls will be made at runtime.
943
955
944 2005-03-15 Fernando Perez <fperez@colorado.edu>
956 2005-03-15 Fernando Perez <fperez@colorado.edu>
945
957
946 * IPython/Magic.py (magic_history): renamed %hist to %history, to
958 * IPython/Magic.py (magic_history): renamed %hist to %history, to
947 avoid name clashes in pylab. %hist still works, it just forwards
959 avoid name clashes in pylab. %hist still works, it just forwards
948 the call to %history.
960 the call to %history.
949
961
950 2005-03-02 *** Released version 0.6.12
962 2005-03-02 *** Released version 0.6.12
951
963
952 2005-03-02 Fernando Perez <fperez@colorado.edu>
964 2005-03-02 Fernando Perez <fperez@colorado.edu>
953
965
954 * IPython/iplib.py (handle_magic): log magic calls properly as
966 * IPython/iplib.py (handle_magic): log magic calls properly as
955 ipmagic() function calls.
967 ipmagic() function calls.
956
968
957 * IPython/Magic.py (magic_time): Improved %time to support
969 * IPython/Magic.py (magic_time): Improved %time to support
958 statements and provide wall-clock as well as CPU time.
970 statements and provide wall-clock as well as CPU time.
959
971
960 2005-02-27 Fernando Perez <fperez@colorado.edu>
972 2005-02-27 Fernando Perez <fperez@colorado.edu>
961
973
962 * IPython/hooks.py: New hooks module, to expose user-modifiable
974 * IPython/hooks.py: New hooks module, to expose user-modifiable
963 IPython functionality in a clean manner. For now only the editor
975 IPython functionality in a clean manner. For now only the editor
964 hook is actually written, and other thigns which I intend to turn
976 hook is actually written, and other thigns which I intend to turn
965 into proper hooks aren't yet there. The display and prefilter
977 into proper hooks aren't yet there. The display and prefilter
966 stuff, for example, should be hooks. But at least now the
978 stuff, for example, should be hooks. But at least now the
967 framework is in place, and the rest can be moved here with more
979 framework is in place, and the rest can be moved here with more
968 time later. IPython had had a .hooks variable for a long time for
980 time later. IPython had had a .hooks variable for a long time for
969 this purpose, but I'd never actually used it for anything.
981 this purpose, but I'd never actually used it for anything.
970
982
971 2005-02-26 Fernando Perez <fperez@colorado.edu>
983 2005-02-26 Fernando Perez <fperez@colorado.edu>
972
984
973 * IPython/ipmaker.py (make_IPython): make the default ipython
985 * IPython/ipmaker.py (make_IPython): make the default ipython
974 directory be called _ipython under win32, to follow more the
986 directory be called _ipython under win32, to follow more the
975 naming peculiarities of that platform (where buggy software like
987 naming peculiarities of that platform (where buggy software like
976 Visual Sourcesafe breaks with .named directories). Reported by
988 Visual Sourcesafe breaks with .named directories). Reported by
977 Ville Vainio.
989 Ville Vainio.
978
990
979 2005-02-23 Fernando Perez <fperez@colorado.edu>
991 2005-02-23 Fernando Perez <fperez@colorado.edu>
980
992
981 * IPython/iplib.py (InteractiveShell.__init__): removed a few
993 * IPython/iplib.py (InteractiveShell.__init__): removed a few
982 auto_aliases for win32 which were causing problems. Users can
994 auto_aliases for win32 which were causing problems. Users can
983 define the ones they personally like.
995 define the ones they personally like.
984
996
985 2005-02-21 Fernando Perez <fperez@colorado.edu>
997 2005-02-21 Fernando Perez <fperez@colorado.edu>
986
998
987 * IPython/Magic.py (magic_time): new magic to time execution of
999 * IPython/Magic.py (magic_time): new magic to time execution of
988 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1000 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
989
1001
990 2005-02-19 Fernando Perez <fperez@colorado.edu>
1002 2005-02-19 Fernando Perez <fperez@colorado.edu>
991
1003
992 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1004 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
993 into keys (for prompts, for example).
1005 into keys (for prompts, for example).
994
1006
995 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1007 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
996 prompts in case users want them. This introduces a small behavior
1008 prompts in case users want them. This introduces a small behavior
997 change: ipython does not automatically add a space to all prompts
1009 change: ipython does not automatically add a space to all prompts
998 anymore. To get the old prompts with a space, users should add it
1010 anymore. To get the old prompts with a space, users should add it
999 manually to their ipythonrc file, so for example prompt_in1 should
1011 manually to their ipythonrc file, so for example prompt_in1 should
1000 now read 'In [\#]: ' instead of 'In [\#]:'.
1012 now read 'In [\#]: ' instead of 'In [\#]:'.
1001 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1013 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1002 file) to control left-padding of secondary prompts.
1014 file) to control left-padding of secondary prompts.
1003
1015
1004 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1016 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1005 the profiler can't be imported. Fix for Debian, which removed
1017 the profiler can't be imported. Fix for Debian, which removed
1006 profile.py because of License issues. I applied a slightly
1018 profile.py because of License issues. I applied a slightly
1007 modified version of the original Debian patch at
1019 modified version of the original Debian patch at
1008 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1020 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1009
1021
1010 2005-02-17 Fernando Perez <fperez@colorado.edu>
1022 2005-02-17 Fernando Perez <fperez@colorado.edu>
1011
1023
1012 * IPython/genutils.py (native_line_ends): Fix bug which would
1024 * IPython/genutils.py (native_line_ends): Fix bug which would
1013 cause improper line-ends under win32 b/c I was not opening files
1025 cause improper line-ends under win32 b/c I was not opening files
1014 in binary mode. Bug report and fix thanks to Ville.
1026 in binary mode. Bug report and fix thanks to Ville.
1015
1027
1016 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1028 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1017 trying to catch spurious foo[1] autocalls. My fix actually broke
1029 trying to catch spurious foo[1] autocalls. My fix actually broke
1018 ',/' autoquote/call with explicit escape (bad regexp).
1030 ',/' autoquote/call with explicit escape (bad regexp).
1019
1031
1020 2005-02-15 *** Released version 0.6.11
1032 2005-02-15 *** Released version 0.6.11
1021
1033
1022 2005-02-14 Fernando Perez <fperez@colorado.edu>
1034 2005-02-14 Fernando Perez <fperez@colorado.edu>
1023
1035
1024 * IPython/background_jobs.py: New background job management
1036 * IPython/background_jobs.py: New background job management
1025 subsystem. This is implemented via a new set of classes, and
1037 subsystem. This is implemented via a new set of classes, and
1026 IPython now provides a builtin 'jobs' object for background job
1038 IPython now provides a builtin 'jobs' object for background job
1027 execution. A convenience %bg magic serves as a lightweight
1039 execution. A convenience %bg magic serves as a lightweight
1028 frontend for starting the more common type of calls. This was
1040 frontend for starting the more common type of calls. This was
1029 inspired by discussions with B. Granger and the BackgroundCommand
1041 inspired by discussions with B. Granger and the BackgroundCommand
1030 class described in the book Python Scripting for Computational
1042 class described in the book Python Scripting for Computational
1031 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1043 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1032 (although ultimately no code from this text was used, as IPython's
1044 (although ultimately no code from this text was used, as IPython's
1033 system is a separate implementation).
1045 system is a separate implementation).
1034
1046
1035 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1047 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1036 to control the completion of single/double underscore names
1048 to control the completion of single/double underscore names
1037 separately. As documented in the example ipytonrc file, the
1049 separately. As documented in the example ipytonrc file, the
1038 readline_omit__names variable can now be set to 2, to omit even
1050 readline_omit__names variable can now be set to 2, to omit even
1039 single underscore names. Thanks to a patch by Brian Wong
1051 single underscore names. Thanks to a patch by Brian Wong
1040 <BrianWong-AT-AirgoNetworks.Com>.
1052 <BrianWong-AT-AirgoNetworks.Com>.
1041 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1053 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1042 be autocalled as foo([1]) if foo were callable. A problem for
1054 be autocalled as foo([1]) if foo were callable. A problem for
1043 things which are both callable and implement __getitem__.
1055 things which are both callable and implement __getitem__.
1044 (init_readline): Fix autoindentation for win32. Thanks to a patch
1056 (init_readline): Fix autoindentation for win32. Thanks to a patch
1045 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1057 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1046
1058
1047 2005-02-12 Fernando Perez <fperez@colorado.edu>
1059 2005-02-12 Fernando Perez <fperez@colorado.edu>
1048
1060
1049 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1061 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1050 which I had written long ago to sort out user error messages which
1062 which I had written long ago to sort out user error messages which
1051 may occur during startup. This seemed like a good idea initially,
1063 may occur during startup. This seemed like a good idea initially,
1052 but it has proven a disaster in retrospect. I don't want to
1064 but it has proven a disaster in retrospect. I don't want to
1053 change much code for now, so my fix is to set the internal 'debug'
1065 change much code for now, so my fix is to set the internal 'debug'
1054 flag to true everywhere, whose only job was precisely to control
1066 flag to true everywhere, whose only job was precisely to control
1055 this subsystem. This closes issue 28 (as well as avoiding all
1067 this subsystem. This closes issue 28 (as well as avoiding all
1056 sorts of strange hangups which occur from time to time).
1068 sorts of strange hangups which occur from time to time).
1057
1069
1058 2005-02-07 Fernando Perez <fperez@colorado.edu>
1070 2005-02-07 Fernando Perez <fperez@colorado.edu>
1059
1071
1060 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1072 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1061 previous call produced a syntax error.
1073 previous call produced a syntax error.
1062
1074
1063 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1075 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1064 classes without constructor.
1076 classes without constructor.
1065
1077
1066 2005-02-06 Fernando Perez <fperez@colorado.edu>
1078 2005-02-06 Fernando Perez <fperez@colorado.edu>
1067
1079
1068 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1080 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1069 completions with the results of each matcher, so we return results
1081 completions with the results of each matcher, so we return results
1070 to the user from all namespaces. This breaks with ipython
1082 to the user from all namespaces. This breaks with ipython
1071 tradition, but I think it's a nicer behavior. Now you get all
1083 tradition, but I think it's a nicer behavior. Now you get all
1072 possible completions listed, from all possible namespaces (python,
1084 possible completions listed, from all possible namespaces (python,
1073 filesystem, magics...) After a request by John Hunter
1085 filesystem, magics...) After a request by John Hunter
1074 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1086 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1075
1087
1076 2005-02-05 Fernando Perez <fperez@colorado.edu>
1088 2005-02-05 Fernando Perez <fperez@colorado.edu>
1077
1089
1078 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1090 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1079 the call had quote characters in it (the quotes were stripped).
1091 the call had quote characters in it (the quotes were stripped).
1080
1092
1081 2005-01-31 Fernando Perez <fperez@colorado.edu>
1093 2005-01-31 Fernando Perez <fperez@colorado.edu>
1082
1094
1083 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1095 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1084 Itpl.itpl() to make the code more robust against psyco
1096 Itpl.itpl() to make the code more robust against psyco
1085 optimizations.
1097 optimizations.
1086
1098
1087 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1099 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1088 of causing an exception. Quicker, cleaner.
1100 of causing an exception. Quicker, cleaner.
1089
1101
1090 2005-01-28 Fernando Perez <fperez@colorado.edu>
1102 2005-01-28 Fernando Perez <fperez@colorado.edu>
1091
1103
1092 * scripts/ipython_win_post_install.py (install): hardcode
1104 * scripts/ipython_win_post_install.py (install): hardcode
1093 sys.prefix+'python.exe' as the executable path. It turns out that
1105 sys.prefix+'python.exe' as the executable path. It turns out that
1094 during the post-installation run, sys.executable resolves to the
1106 during the post-installation run, sys.executable resolves to the
1095 name of the binary installer! I should report this as a distutils
1107 name of the binary installer! I should report this as a distutils
1096 bug, I think. I updated the .10 release with this tiny fix, to
1108 bug, I think. I updated the .10 release with this tiny fix, to
1097 avoid annoying the lists further.
1109 avoid annoying the lists further.
1098
1110
1099 2005-01-27 *** Released version 0.6.10
1111 2005-01-27 *** Released version 0.6.10
1100
1112
1101 2005-01-27 Fernando Perez <fperez@colorado.edu>
1113 2005-01-27 Fernando Perez <fperez@colorado.edu>
1102
1114
1103 * IPython/numutils.py (norm): Added 'inf' as optional name for
1115 * IPython/numutils.py (norm): Added 'inf' as optional name for
1104 L-infinity norm, included references to mathworld.com for vector
1116 L-infinity norm, included references to mathworld.com for vector
1105 norm definitions.
1117 norm definitions.
1106 (amin/amax): added amin/amax for array min/max. Similar to what
1118 (amin/amax): added amin/amax for array min/max. Similar to what
1107 pylab ships with after the recent reorganization of names.
1119 pylab ships with after the recent reorganization of names.
1108 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1120 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1109
1121
1110 * ipython.el: committed Alex's recent fixes and improvements.
1122 * ipython.el: committed Alex's recent fixes and improvements.
1111 Tested with python-mode from CVS, and it looks excellent. Since
1123 Tested with python-mode from CVS, and it looks excellent. Since
1112 python-mode hasn't released anything in a while, I'm temporarily
1124 python-mode hasn't released anything in a while, I'm temporarily
1113 putting a copy of today's CVS (v 4.70) of python-mode in:
1125 putting a copy of today's CVS (v 4.70) of python-mode in:
1114 http://ipython.scipy.org/tmp/python-mode.el
1126 http://ipython.scipy.org/tmp/python-mode.el
1115
1127
1116 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1128 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1117 sys.executable for the executable name, instead of assuming it's
1129 sys.executable for the executable name, instead of assuming it's
1118 called 'python.exe' (the post-installer would have produced broken
1130 called 'python.exe' (the post-installer would have produced broken
1119 setups on systems with a differently named python binary).
1131 setups on systems with a differently named python binary).
1120
1132
1121 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1133 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1122 references to os.linesep, to make the code more
1134 references to os.linesep, to make the code more
1123 platform-independent. This is also part of the win32 coloring
1135 platform-independent. This is also part of the win32 coloring
1124 fixes.
1136 fixes.
1125
1137
1126 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1138 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1127 lines, which actually cause coloring bugs because the length of
1139 lines, which actually cause coloring bugs because the length of
1128 the line is very difficult to correctly compute with embedded
1140 the line is very difficult to correctly compute with embedded
1129 escapes. This was the source of all the coloring problems under
1141 escapes. This was the source of all the coloring problems under
1130 Win32. I think that _finally_, Win32 users have a properly
1142 Win32. I think that _finally_, Win32 users have a properly
1131 working ipython in all respects. This would never have happened
1143 working ipython in all respects. This would never have happened
1132 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1144 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1133
1145
1134 2005-01-26 *** Released version 0.6.9
1146 2005-01-26 *** Released version 0.6.9
1135
1147
1136 2005-01-25 Fernando Perez <fperez@colorado.edu>
1148 2005-01-25 Fernando Perez <fperez@colorado.edu>
1137
1149
1138 * setup.py: finally, we have a true Windows installer, thanks to
1150 * setup.py: finally, we have a true Windows installer, thanks to
1139 the excellent work of Viktor Ransmayr
1151 the excellent work of Viktor Ransmayr
1140 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1152 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1141 Windows users. The setup routine is quite a bit cleaner thanks to
1153 Windows users. The setup routine is quite a bit cleaner thanks to
1142 this, and the post-install script uses the proper functions to
1154 this, and the post-install script uses the proper functions to
1143 allow a clean de-installation using the standard Windows Control
1155 allow a clean de-installation using the standard Windows Control
1144 Panel.
1156 Panel.
1145
1157
1146 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1158 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1147 environment variable under all OSes (including win32) if
1159 environment variable under all OSes (including win32) if
1148 available. This will give consistency to win32 users who have set
1160 available. This will give consistency to win32 users who have set
1149 this variable for any reason. If os.environ['HOME'] fails, the
1161 this variable for any reason. If os.environ['HOME'] fails, the
1150 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1162 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1151
1163
1152 2005-01-24 Fernando Perez <fperez@colorado.edu>
1164 2005-01-24 Fernando Perez <fperez@colorado.edu>
1153
1165
1154 * IPython/numutils.py (empty_like): add empty_like(), similar to
1166 * IPython/numutils.py (empty_like): add empty_like(), similar to
1155 zeros_like() but taking advantage of the new empty() Numeric routine.
1167 zeros_like() but taking advantage of the new empty() Numeric routine.
1156
1168
1157 2005-01-23 *** Released version 0.6.8
1169 2005-01-23 *** Released version 0.6.8
1158
1170
1159 2005-01-22 Fernando Perez <fperez@colorado.edu>
1171 2005-01-22 Fernando Perez <fperez@colorado.edu>
1160
1172
1161 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1173 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1162 automatic show() calls. After discussing things with JDH, it
1174 automatic show() calls. After discussing things with JDH, it
1163 turns out there are too many corner cases where this can go wrong.
1175 turns out there are too many corner cases where this can go wrong.
1164 It's best not to try to be 'too smart', and simply have ipython
1176 It's best not to try to be 'too smart', and simply have ipython
1165 reproduce as much as possible the default behavior of a normal
1177 reproduce as much as possible the default behavior of a normal
1166 python shell.
1178 python shell.
1167
1179
1168 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1180 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1169 line-splitting regexp and _prefilter() to avoid calling getattr()
1181 line-splitting regexp and _prefilter() to avoid calling getattr()
1170 on assignments. This closes
1182 on assignments. This closes
1171 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1183 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1172 readline uses getattr(), so a simple <TAB> keypress is still
1184 readline uses getattr(), so a simple <TAB> keypress is still
1173 enough to trigger getattr() calls on an object.
1185 enough to trigger getattr() calls on an object.
1174
1186
1175 2005-01-21 Fernando Perez <fperez@colorado.edu>
1187 2005-01-21 Fernando Perez <fperez@colorado.edu>
1176
1188
1177 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1189 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1178 docstring under pylab so it doesn't mask the original.
1190 docstring under pylab so it doesn't mask the original.
1179
1191
1180 2005-01-21 *** Released version 0.6.7
1192 2005-01-21 *** Released version 0.6.7
1181
1193
1182 2005-01-21 Fernando Perez <fperez@colorado.edu>
1194 2005-01-21 Fernando Perez <fperez@colorado.edu>
1183
1195
1184 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1196 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1185 signal handling for win32 users in multithreaded mode.
1197 signal handling for win32 users in multithreaded mode.
1186
1198
1187 2005-01-17 Fernando Perez <fperez@colorado.edu>
1199 2005-01-17 Fernando Perez <fperez@colorado.edu>
1188
1200
1189 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1201 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1190 instances with no __init__. After a crash report by Norbert Nemec
1202 instances with no __init__. After a crash report by Norbert Nemec
1191 <Norbert-AT-nemec-online.de>.
1203 <Norbert-AT-nemec-online.de>.
1192
1204
1193 2005-01-14 Fernando Perez <fperez@colorado.edu>
1205 2005-01-14 Fernando Perez <fperez@colorado.edu>
1194
1206
1195 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1207 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1196 names for verbose exceptions, when multiple dotted names and the
1208 names for verbose exceptions, when multiple dotted names and the
1197 'parent' object were present on the same line.
1209 'parent' object were present on the same line.
1198
1210
1199 2005-01-11 Fernando Perez <fperez@colorado.edu>
1211 2005-01-11 Fernando Perez <fperez@colorado.edu>
1200
1212
1201 * IPython/genutils.py (flag_calls): new utility to trap and flag
1213 * IPython/genutils.py (flag_calls): new utility to trap and flag
1202 calls in functions. I need it to clean up matplotlib support.
1214 calls in functions. I need it to clean up matplotlib support.
1203 Also removed some deprecated code in genutils.
1215 Also removed some deprecated code in genutils.
1204
1216
1205 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1217 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1206 that matplotlib scripts called with %run, which don't call show()
1218 that matplotlib scripts called with %run, which don't call show()
1207 themselves, still have their plotting windows open.
1219 themselves, still have their plotting windows open.
1208
1220
1209 2005-01-05 Fernando Perez <fperez@colorado.edu>
1221 2005-01-05 Fernando Perez <fperez@colorado.edu>
1210
1222
1211 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1223 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1212 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1224 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1213
1225
1214 2004-12-19 Fernando Perez <fperez@colorado.edu>
1226 2004-12-19 Fernando Perez <fperez@colorado.edu>
1215
1227
1216 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1228 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1217 parent_runcode, which was an eyesore. The same result can be
1229 parent_runcode, which was an eyesore. The same result can be
1218 obtained with Python's regular superclass mechanisms.
1230 obtained with Python's regular superclass mechanisms.
1219
1231
1220 2004-12-17 Fernando Perez <fperez@colorado.edu>
1232 2004-12-17 Fernando Perez <fperez@colorado.edu>
1221
1233
1222 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1234 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1223 reported by Prabhu.
1235 reported by Prabhu.
1224 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1236 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1225 sys.stderr) instead of explicitly calling sys.stderr. This helps
1237 sys.stderr) instead of explicitly calling sys.stderr. This helps
1226 maintain our I/O abstractions clean, for future GUI embeddings.
1238 maintain our I/O abstractions clean, for future GUI embeddings.
1227
1239
1228 * IPython/genutils.py (info): added new utility for sys.stderr
1240 * IPython/genutils.py (info): added new utility for sys.stderr
1229 unified info message handling (thin wrapper around warn()).
1241 unified info message handling (thin wrapper around warn()).
1230
1242
1231 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1243 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1232 composite (dotted) names on verbose exceptions.
1244 composite (dotted) names on verbose exceptions.
1233 (VerboseTB.nullrepr): harden against another kind of errors which
1245 (VerboseTB.nullrepr): harden against another kind of errors which
1234 Python's inspect module can trigger, and which were crashing
1246 Python's inspect module can trigger, and which were crashing
1235 IPython. Thanks to a report by Marco Lombardi
1247 IPython. Thanks to a report by Marco Lombardi
1236 <mlombard-AT-ma010192.hq.eso.org>.
1248 <mlombard-AT-ma010192.hq.eso.org>.
1237
1249
1238 2004-12-13 *** Released version 0.6.6
1250 2004-12-13 *** Released version 0.6.6
1239
1251
1240 2004-12-12 Fernando Perez <fperez@colorado.edu>
1252 2004-12-12 Fernando Perez <fperez@colorado.edu>
1241
1253
1242 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1254 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1243 generated by pygtk upon initialization if it was built without
1255 generated by pygtk upon initialization if it was built without
1244 threads (for matplotlib users). After a crash reported by
1256 threads (for matplotlib users). After a crash reported by
1245 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1257 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1246
1258
1247 * IPython/ipmaker.py (make_IPython): fix small bug in the
1259 * IPython/ipmaker.py (make_IPython): fix small bug in the
1248 import_some parameter for multiple imports.
1260 import_some parameter for multiple imports.
1249
1261
1250 * IPython/iplib.py (ipmagic): simplified the interface of
1262 * IPython/iplib.py (ipmagic): simplified the interface of
1251 ipmagic() to take a single string argument, just as it would be
1263 ipmagic() to take a single string argument, just as it would be
1252 typed at the IPython cmd line.
1264 typed at the IPython cmd line.
1253 (ipalias): Added new ipalias() with an interface identical to
1265 (ipalias): Added new ipalias() with an interface identical to
1254 ipmagic(). This completes exposing a pure python interface to the
1266 ipmagic(). This completes exposing a pure python interface to the
1255 alias and magic system, which can be used in loops or more complex
1267 alias and magic system, which can be used in loops or more complex
1256 code where IPython's automatic line mangling is not active.
1268 code where IPython's automatic line mangling is not active.
1257
1269
1258 * IPython/genutils.py (timing): changed interface of timing to
1270 * IPython/genutils.py (timing): changed interface of timing to
1259 simply run code once, which is the most common case. timings()
1271 simply run code once, which is the most common case. timings()
1260 remains unchanged, for the cases where you want multiple runs.
1272 remains unchanged, for the cases where you want multiple runs.
1261
1273
1262 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1274 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1263 bug where Python2.2 crashes with exec'ing code which does not end
1275 bug where Python2.2 crashes with exec'ing code which does not end
1264 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1276 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1265 before.
1277 before.
1266
1278
1267 2004-12-10 Fernando Perez <fperez@colorado.edu>
1279 2004-12-10 Fernando Perez <fperez@colorado.edu>
1268
1280
1269 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1281 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1270 -t to -T, to accomodate the new -t flag in %run (the %run and
1282 -t to -T, to accomodate the new -t flag in %run (the %run and
1271 %prun options are kind of intermixed, and it's not easy to change
1283 %prun options are kind of intermixed, and it's not easy to change
1272 this with the limitations of python's getopt).
1284 this with the limitations of python's getopt).
1273
1285
1274 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1286 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1275 the execution of scripts. It's not as fine-tuned as timeit.py,
1287 the execution of scripts. It's not as fine-tuned as timeit.py,
1276 but it works from inside ipython (and under 2.2, which lacks
1288 but it works from inside ipython (and under 2.2, which lacks
1277 timeit.py). Optionally a number of runs > 1 can be given for
1289 timeit.py). Optionally a number of runs > 1 can be given for
1278 timing very short-running code.
1290 timing very short-running code.
1279
1291
1280 * IPython/genutils.py (uniq_stable): new routine which returns a
1292 * IPython/genutils.py (uniq_stable): new routine which returns a
1281 list of unique elements in any iterable, but in stable order of
1293 list of unique elements in any iterable, but in stable order of
1282 appearance. I needed this for the ultraTB fixes, and it's a handy
1294 appearance. I needed this for the ultraTB fixes, and it's a handy
1283 utility.
1295 utility.
1284
1296
1285 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1297 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1286 dotted names in Verbose exceptions. This had been broken since
1298 dotted names in Verbose exceptions. This had been broken since
1287 the very start, now x.y will properly be printed in a Verbose
1299 the very start, now x.y will properly be printed in a Verbose
1288 traceback, instead of x being shown and y appearing always as an
1300 traceback, instead of x being shown and y appearing always as an
1289 'undefined global'. Getting this to work was a bit tricky,
1301 'undefined global'. Getting this to work was a bit tricky,
1290 because by default python tokenizers are stateless. Saved by
1302 because by default python tokenizers are stateless. Saved by
1291 python's ability to easily add a bit of state to an arbitrary
1303 python's ability to easily add a bit of state to an arbitrary
1292 function (without needing to build a full-blown callable object).
1304 function (without needing to build a full-blown callable object).
1293
1305
1294 Also big cleanup of this code, which had horrendous runtime
1306 Also big cleanup of this code, which had horrendous runtime
1295 lookups of zillions of attributes for colorization. Moved all
1307 lookups of zillions of attributes for colorization. Moved all
1296 this code into a few templates, which make it cleaner and quicker.
1308 this code into a few templates, which make it cleaner and quicker.
1297
1309
1298 Printout quality was also improved for Verbose exceptions: one
1310 Printout quality was also improved for Verbose exceptions: one
1299 variable per line, and memory addresses are printed (this can be
1311 variable per line, and memory addresses are printed (this can be
1300 quite handy in nasty debugging situations, which is what Verbose
1312 quite handy in nasty debugging situations, which is what Verbose
1301 is for).
1313 is for).
1302
1314
1303 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1315 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1304 the command line as scripts to be loaded by embedded instances.
1316 the command line as scripts to be loaded by embedded instances.
1305 Doing so has the potential for an infinite recursion if there are
1317 Doing so has the potential for an infinite recursion if there are
1306 exceptions thrown in the process. This fixes a strange crash
1318 exceptions thrown in the process. This fixes a strange crash
1307 reported by Philippe MULLER <muller-AT-irit.fr>.
1319 reported by Philippe MULLER <muller-AT-irit.fr>.
1308
1320
1309 2004-12-09 Fernando Perez <fperez@colorado.edu>
1321 2004-12-09 Fernando Perez <fperez@colorado.edu>
1310
1322
1311 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1323 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1312 to reflect new names in matplotlib, which now expose the
1324 to reflect new names in matplotlib, which now expose the
1313 matlab-compatible interface via a pylab module instead of the
1325 matlab-compatible interface via a pylab module instead of the
1314 'matlab' name. The new code is backwards compatible, so users of
1326 'matlab' name. The new code is backwards compatible, so users of
1315 all matplotlib versions are OK. Patch by J. Hunter.
1327 all matplotlib versions are OK. Patch by J. Hunter.
1316
1328
1317 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1329 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1318 of __init__ docstrings for instances (class docstrings are already
1330 of __init__ docstrings for instances (class docstrings are already
1319 automatically printed). Instances with customized docstrings
1331 automatically printed). Instances with customized docstrings
1320 (indep. of the class) are also recognized and all 3 separate
1332 (indep. of the class) are also recognized and all 3 separate
1321 docstrings are printed (instance, class, constructor). After some
1333 docstrings are printed (instance, class, constructor). After some
1322 comments/suggestions by J. Hunter.
1334 comments/suggestions by J. Hunter.
1323
1335
1324 2004-12-05 Fernando Perez <fperez@colorado.edu>
1336 2004-12-05 Fernando Perez <fperez@colorado.edu>
1325
1337
1326 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1338 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1327 warnings when tab-completion fails and triggers an exception.
1339 warnings when tab-completion fails and triggers an exception.
1328
1340
1329 2004-12-03 Fernando Perez <fperez@colorado.edu>
1341 2004-12-03 Fernando Perez <fperez@colorado.edu>
1330
1342
1331 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1343 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1332 be triggered when using 'run -p'. An incorrect option flag was
1344 be triggered when using 'run -p'. An incorrect option flag was
1333 being set ('d' instead of 'D').
1345 being set ('d' instead of 'D').
1334 (manpage): fix missing escaped \- sign.
1346 (manpage): fix missing escaped \- sign.
1335
1347
1336 2004-11-30 *** Released version 0.6.5
1348 2004-11-30 *** Released version 0.6.5
1337
1349
1338 2004-11-30 Fernando Perez <fperez@colorado.edu>
1350 2004-11-30 Fernando Perez <fperez@colorado.edu>
1339
1351
1340 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1352 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1341 setting with -d option.
1353 setting with -d option.
1342
1354
1343 * setup.py (docfiles): Fix problem where the doc glob I was using
1355 * setup.py (docfiles): Fix problem where the doc glob I was using
1344 was COMPLETELY BROKEN. It was giving the right files by pure
1356 was COMPLETELY BROKEN. It was giving the right files by pure
1345 accident, but failed once I tried to include ipython.el. Note:
1357 accident, but failed once I tried to include ipython.el. Note:
1346 glob() does NOT allow you to do exclusion on multiple endings!
1358 glob() does NOT allow you to do exclusion on multiple endings!
1347
1359
1348 2004-11-29 Fernando Perez <fperez@colorado.edu>
1360 2004-11-29 Fernando Perez <fperez@colorado.edu>
1349
1361
1350 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1362 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1351 the manpage as the source. Better formatting & consistency.
1363 the manpage as the source. Better formatting & consistency.
1352
1364
1353 * IPython/Magic.py (magic_run): Added new -d option, to run
1365 * IPython/Magic.py (magic_run): Added new -d option, to run
1354 scripts under the control of the python pdb debugger. Note that
1366 scripts under the control of the python pdb debugger. Note that
1355 this required changing the %prun option -d to -D, to avoid a clash
1367 this required changing the %prun option -d to -D, to avoid a clash
1356 (since %run must pass options to %prun, and getopt is too dumb to
1368 (since %run must pass options to %prun, and getopt is too dumb to
1357 handle options with string values with embedded spaces). Thanks
1369 handle options with string values with embedded spaces). Thanks
1358 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1370 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1359 (magic_who_ls): added type matching to %who and %whos, so that one
1371 (magic_who_ls): added type matching to %who and %whos, so that one
1360 can filter their output to only include variables of certain
1372 can filter their output to only include variables of certain
1361 types. Another suggestion by Matthew.
1373 types. Another suggestion by Matthew.
1362 (magic_whos): Added memory summaries in kb and Mb for arrays.
1374 (magic_whos): Added memory summaries in kb and Mb for arrays.
1363 (magic_who): Improve formatting (break lines every 9 vars).
1375 (magic_who): Improve formatting (break lines every 9 vars).
1364
1376
1365 2004-11-28 Fernando Perez <fperez@colorado.edu>
1377 2004-11-28 Fernando Perez <fperez@colorado.edu>
1366
1378
1367 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1379 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1368 cache when empty lines were present.
1380 cache when empty lines were present.
1369
1381
1370 2004-11-24 Fernando Perez <fperez@colorado.edu>
1382 2004-11-24 Fernando Perez <fperez@colorado.edu>
1371
1383
1372 * IPython/usage.py (__doc__): document the re-activated threading
1384 * IPython/usage.py (__doc__): document the re-activated threading
1373 options for WX and GTK.
1385 options for WX and GTK.
1374
1386
1375 2004-11-23 Fernando Perez <fperez@colorado.edu>
1387 2004-11-23 Fernando Perez <fperez@colorado.edu>
1376
1388
1377 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1389 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1378 the -wthread and -gthread options, along with a new -tk one to try
1390 the -wthread and -gthread options, along with a new -tk one to try
1379 and coordinate Tk threading with wx/gtk. The tk support is very
1391 and coordinate Tk threading with wx/gtk. The tk support is very
1380 platform dependent, since it seems to require Tcl and Tk to be
1392 platform dependent, since it seems to require Tcl and Tk to be
1381 built with threads (Fedora1/2 appears NOT to have it, but in
1393 built with threads (Fedora1/2 appears NOT to have it, but in
1382 Prabhu's Debian boxes it works OK). But even with some Tk
1394 Prabhu's Debian boxes it works OK). But even with some Tk
1383 limitations, this is a great improvement.
1395 limitations, this is a great improvement.
1384
1396
1385 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1397 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1386 info in user prompts. Patch by Prabhu.
1398 info in user prompts. Patch by Prabhu.
1387
1399
1388 2004-11-18 Fernando Perez <fperez@colorado.edu>
1400 2004-11-18 Fernando Perez <fperez@colorado.edu>
1389
1401
1390 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1402 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1391 EOFErrors and bail, to avoid infinite loops if a non-terminating
1403 EOFErrors and bail, to avoid infinite loops if a non-terminating
1392 file is fed into ipython. Patch submitted in issue 19 by user,
1404 file is fed into ipython. Patch submitted in issue 19 by user,
1393 many thanks.
1405 many thanks.
1394
1406
1395 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1407 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1396 autoquote/parens in continuation prompts, which can cause lots of
1408 autoquote/parens in continuation prompts, which can cause lots of
1397 problems. Closes roundup issue 20.
1409 problems. Closes roundup issue 20.
1398
1410
1399 2004-11-17 Fernando Perez <fperez@colorado.edu>
1411 2004-11-17 Fernando Perez <fperez@colorado.edu>
1400
1412
1401 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1413 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1402 reported as debian bug #280505. I'm not sure my local changelog
1414 reported as debian bug #280505. I'm not sure my local changelog
1403 entry has the proper debian format (Jack?).
1415 entry has the proper debian format (Jack?).
1404
1416
1405 2004-11-08 *** Released version 0.6.4
1417 2004-11-08 *** Released version 0.6.4
1406
1418
1407 2004-11-08 Fernando Perez <fperez@colorado.edu>
1419 2004-11-08 Fernando Perez <fperez@colorado.edu>
1408
1420
1409 * IPython/iplib.py (init_readline): Fix exit message for Windows
1421 * IPython/iplib.py (init_readline): Fix exit message for Windows
1410 when readline is active. Thanks to a report by Eric Jones
1422 when readline is active. Thanks to a report by Eric Jones
1411 <eric-AT-enthought.com>.
1423 <eric-AT-enthought.com>.
1412
1424
1413 2004-11-07 Fernando Perez <fperez@colorado.edu>
1425 2004-11-07 Fernando Perez <fperez@colorado.edu>
1414
1426
1415 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1427 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1416 sometimes seen by win2k/cygwin users.
1428 sometimes seen by win2k/cygwin users.
1417
1429
1418 2004-11-06 Fernando Perez <fperez@colorado.edu>
1430 2004-11-06 Fernando Perez <fperez@colorado.edu>
1419
1431
1420 * IPython/iplib.py (interact): Change the handling of %Exit from
1432 * IPython/iplib.py (interact): Change the handling of %Exit from
1421 trying to propagate a SystemExit to an internal ipython flag.
1433 trying to propagate a SystemExit to an internal ipython flag.
1422 This is less elegant than using Python's exception mechanism, but
1434 This is less elegant than using Python's exception mechanism, but
1423 I can't get that to work reliably with threads, so under -pylab
1435 I can't get that to work reliably with threads, so under -pylab
1424 %Exit was hanging IPython. Cross-thread exception handling is
1436 %Exit was hanging IPython. Cross-thread exception handling is
1425 really a bitch. Thaks to a bug report by Stephen Walton
1437 really a bitch. Thaks to a bug report by Stephen Walton
1426 <stephen.walton-AT-csun.edu>.
1438 <stephen.walton-AT-csun.edu>.
1427
1439
1428 2004-11-04 Fernando Perez <fperez@colorado.edu>
1440 2004-11-04 Fernando Perez <fperez@colorado.edu>
1429
1441
1430 * IPython/iplib.py (raw_input_original): store a pointer to the
1442 * IPython/iplib.py (raw_input_original): store a pointer to the
1431 true raw_input to harden against code which can modify it
1443 true raw_input to harden against code which can modify it
1432 (wx.py.PyShell does this and would otherwise crash ipython).
1444 (wx.py.PyShell does this and would otherwise crash ipython).
1433 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1445 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1434
1446
1435 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1447 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1436 Ctrl-C problem, which does not mess up the input line.
1448 Ctrl-C problem, which does not mess up the input line.
1437
1449
1438 2004-11-03 Fernando Perez <fperez@colorado.edu>
1450 2004-11-03 Fernando Perez <fperez@colorado.edu>
1439
1451
1440 * IPython/Release.py: Changed licensing to BSD, in all files.
1452 * IPython/Release.py: Changed licensing to BSD, in all files.
1441 (name): lowercase name for tarball/RPM release.
1453 (name): lowercase name for tarball/RPM release.
1442
1454
1443 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1455 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1444 use throughout ipython.
1456 use throughout ipython.
1445
1457
1446 * IPython/Magic.py (Magic._ofind): Switch to using the new
1458 * IPython/Magic.py (Magic._ofind): Switch to using the new
1447 OInspect.getdoc() function.
1459 OInspect.getdoc() function.
1448
1460
1449 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1461 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1450 of the line currently being canceled via Ctrl-C. It's extremely
1462 of the line currently being canceled via Ctrl-C. It's extremely
1451 ugly, but I don't know how to do it better (the problem is one of
1463 ugly, but I don't know how to do it better (the problem is one of
1452 handling cross-thread exceptions).
1464 handling cross-thread exceptions).
1453
1465
1454 2004-10-28 Fernando Perez <fperez@colorado.edu>
1466 2004-10-28 Fernando Perez <fperez@colorado.edu>
1455
1467
1456 * IPython/Shell.py (signal_handler): add signal handlers to trap
1468 * IPython/Shell.py (signal_handler): add signal handlers to trap
1457 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1469 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1458 report by Francesc Alted.
1470 report by Francesc Alted.
1459
1471
1460 2004-10-21 Fernando Perez <fperez@colorado.edu>
1472 2004-10-21 Fernando Perez <fperez@colorado.edu>
1461
1473
1462 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1474 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1463 to % for pysh syntax extensions.
1475 to % for pysh syntax extensions.
1464
1476
1465 2004-10-09 Fernando Perez <fperez@colorado.edu>
1477 2004-10-09 Fernando Perez <fperez@colorado.edu>
1466
1478
1467 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1479 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1468 arrays to print a more useful summary, without calling str(arr).
1480 arrays to print a more useful summary, without calling str(arr).
1469 This avoids the problem of extremely lengthy computations which
1481 This avoids the problem of extremely lengthy computations which
1470 occur if arr is large, and appear to the user as a system lockup
1482 occur if arr is large, and appear to the user as a system lockup
1471 with 100% cpu activity. After a suggestion by Kristian Sandberg
1483 with 100% cpu activity. After a suggestion by Kristian Sandberg
1472 <Kristian.Sandberg@colorado.edu>.
1484 <Kristian.Sandberg@colorado.edu>.
1473 (Magic.__init__): fix bug in global magic escapes not being
1485 (Magic.__init__): fix bug in global magic escapes not being
1474 correctly set.
1486 correctly set.
1475
1487
1476 2004-10-08 Fernando Perez <fperez@colorado.edu>
1488 2004-10-08 Fernando Perez <fperez@colorado.edu>
1477
1489
1478 * IPython/Magic.py (__license__): change to absolute imports of
1490 * IPython/Magic.py (__license__): change to absolute imports of
1479 ipython's own internal packages, to start adapting to the absolute
1491 ipython's own internal packages, to start adapting to the absolute
1480 import requirement of PEP-328.
1492 import requirement of PEP-328.
1481
1493
1482 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1494 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1483 files, and standardize author/license marks through the Release
1495 files, and standardize author/license marks through the Release
1484 module instead of having per/file stuff (except for files with
1496 module instead of having per/file stuff (except for files with
1485 particular licenses, like the MIT/PSF-licensed codes).
1497 particular licenses, like the MIT/PSF-licensed codes).
1486
1498
1487 * IPython/Debugger.py: remove dead code for python 2.1
1499 * IPython/Debugger.py: remove dead code for python 2.1
1488
1500
1489 2004-10-04 Fernando Perez <fperez@colorado.edu>
1501 2004-10-04 Fernando Perez <fperez@colorado.edu>
1490
1502
1491 * IPython/iplib.py (ipmagic): New function for accessing magics
1503 * IPython/iplib.py (ipmagic): New function for accessing magics
1492 via a normal python function call.
1504 via a normal python function call.
1493
1505
1494 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1506 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1495 from '@' to '%', to accomodate the new @decorator syntax of python
1507 from '@' to '%', to accomodate the new @decorator syntax of python
1496 2.4.
1508 2.4.
1497
1509
1498 2004-09-29 Fernando Perez <fperez@colorado.edu>
1510 2004-09-29 Fernando Perez <fperez@colorado.edu>
1499
1511
1500 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1512 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1501 matplotlib.use to prevent running scripts which try to switch
1513 matplotlib.use to prevent running scripts which try to switch
1502 interactive backends from within ipython. This will just crash
1514 interactive backends from within ipython. This will just crash
1503 the python interpreter, so we can't allow it (but a detailed error
1515 the python interpreter, so we can't allow it (but a detailed error
1504 is given to the user).
1516 is given to the user).
1505
1517
1506 2004-09-28 Fernando Perez <fperez@colorado.edu>
1518 2004-09-28 Fernando Perez <fperez@colorado.edu>
1507
1519
1508 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1520 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1509 matplotlib-related fixes so that using @run with non-matplotlib
1521 matplotlib-related fixes so that using @run with non-matplotlib
1510 scripts doesn't pop up spurious plot windows. This requires
1522 scripts doesn't pop up spurious plot windows. This requires
1511 matplotlib >= 0.63, where I had to make some changes as well.
1523 matplotlib >= 0.63, where I had to make some changes as well.
1512
1524
1513 * IPython/ipmaker.py (make_IPython): update version requirement to
1525 * IPython/ipmaker.py (make_IPython): update version requirement to
1514 python 2.2.
1526 python 2.2.
1515
1527
1516 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1528 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1517 banner arg for embedded customization.
1529 banner arg for embedded customization.
1518
1530
1519 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1531 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1520 explicit uses of __IP as the IPython's instance name. Now things
1532 explicit uses of __IP as the IPython's instance name. Now things
1521 are properly handled via the shell.name value. The actual code
1533 are properly handled via the shell.name value. The actual code
1522 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1534 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1523 is much better than before. I'll clean things completely when the
1535 is much better than before. I'll clean things completely when the
1524 magic stuff gets a real overhaul.
1536 magic stuff gets a real overhaul.
1525
1537
1526 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1538 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1527 minor changes to debian dir.
1539 minor changes to debian dir.
1528
1540
1529 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1541 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1530 pointer to the shell itself in the interactive namespace even when
1542 pointer to the shell itself in the interactive namespace even when
1531 a user-supplied dict is provided. This is needed for embedding
1543 a user-supplied dict is provided. This is needed for embedding
1532 purposes (found by tests with Michel Sanner).
1544 purposes (found by tests with Michel Sanner).
1533
1545
1534 2004-09-27 Fernando Perez <fperez@colorado.edu>
1546 2004-09-27 Fernando Perez <fperez@colorado.edu>
1535
1547
1536 * IPython/UserConfig/ipythonrc: remove []{} from
1548 * IPython/UserConfig/ipythonrc: remove []{} from
1537 readline_remove_delims, so that things like [modname.<TAB> do
1549 readline_remove_delims, so that things like [modname.<TAB> do
1538 proper completion. This disables [].TAB, but that's a less common
1550 proper completion. This disables [].TAB, but that's a less common
1539 case than module names in list comprehensions, for example.
1551 case than module names in list comprehensions, for example.
1540 Thanks to a report by Andrea Riciputi.
1552 Thanks to a report by Andrea Riciputi.
1541
1553
1542 2004-09-09 Fernando Perez <fperez@colorado.edu>
1554 2004-09-09 Fernando Perez <fperez@colorado.edu>
1543
1555
1544 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1556 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1545 blocking problems in win32 and osx. Fix by John.
1557 blocking problems in win32 and osx. Fix by John.
1546
1558
1547 2004-09-08 Fernando Perez <fperez@colorado.edu>
1559 2004-09-08 Fernando Perez <fperez@colorado.edu>
1548
1560
1549 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1561 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1550 for Win32 and OSX. Fix by John Hunter.
1562 for Win32 and OSX. Fix by John Hunter.
1551
1563
1552 2004-08-30 *** Released version 0.6.3
1564 2004-08-30 *** Released version 0.6.3
1553
1565
1554 2004-08-30 Fernando Perez <fperez@colorado.edu>
1566 2004-08-30 Fernando Perez <fperez@colorado.edu>
1555
1567
1556 * setup.py (isfile): Add manpages to list of dependent files to be
1568 * setup.py (isfile): Add manpages to list of dependent files to be
1557 updated.
1569 updated.
1558
1570
1559 2004-08-27 Fernando Perez <fperez@colorado.edu>
1571 2004-08-27 Fernando Perez <fperez@colorado.edu>
1560
1572
1561 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1573 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1562 for now. They don't really work with standalone WX/GTK code
1574 for now. They don't really work with standalone WX/GTK code
1563 (though matplotlib IS working fine with both of those backends).
1575 (though matplotlib IS working fine with both of those backends).
1564 This will neeed much more testing. I disabled most things with
1576 This will neeed much more testing. I disabled most things with
1565 comments, so turning it back on later should be pretty easy.
1577 comments, so turning it back on later should be pretty easy.
1566
1578
1567 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1579 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1568 autocalling of expressions like r'foo', by modifying the line
1580 autocalling of expressions like r'foo', by modifying the line
1569 split regexp. Closes
1581 split regexp. Closes
1570 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1582 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1571 Riley <ipythonbugs-AT-sabi.net>.
1583 Riley <ipythonbugs-AT-sabi.net>.
1572 (InteractiveShell.mainloop): honor --nobanner with banner
1584 (InteractiveShell.mainloop): honor --nobanner with banner
1573 extensions.
1585 extensions.
1574
1586
1575 * IPython/Shell.py: Significant refactoring of all classes, so
1587 * IPython/Shell.py: Significant refactoring of all classes, so
1576 that we can really support ALL matplotlib backends and threading
1588 that we can really support ALL matplotlib backends and threading
1577 models (John spotted a bug with Tk which required this). Now we
1589 models (John spotted a bug with Tk which required this). Now we
1578 should support single-threaded, WX-threads and GTK-threads, both
1590 should support single-threaded, WX-threads and GTK-threads, both
1579 for generic code and for matplotlib.
1591 for generic code and for matplotlib.
1580
1592
1581 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1593 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1582 -pylab, to simplify things for users. Will also remove the pylab
1594 -pylab, to simplify things for users. Will also remove the pylab
1583 profile, since now all of matplotlib configuration is directly
1595 profile, since now all of matplotlib configuration is directly
1584 handled here. This also reduces startup time.
1596 handled here. This also reduces startup time.
1585
1597
1586 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1598 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1587 shell wasn't being correctly called. Also in IPShellWX.
1599 shell wasn't being correctly called. Also in IPShellWX.
1588
1600
1589 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1601 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1590 fine-tune banner.
1602 fine-tune banner.
1591
1603
1592 * IPython/numutils.py (spike): Deprecate these spike functions,
1604 * IPython/numutils.py (spike): Deprecate these spike functions,
1593 delete (long deprecated) gnuplot_exec handler.
1605 delete (long deprecated) gnuplot_exec handler.
1594
1606
1595 2004-08-26 Fernando Perez <fperez@colorado.edu>
1607 2004-08-26 Fernando Perez <fperez@colorado.edu>
1596
1608
1597 * ipython.1: Update for threading options, plus some others which
1609 * ipython.1: Update for threading options, plus some others which
1598 were missing.
1610 were missing.
1599
1611
1600 * IPython/ipmaker.py (__call__): Added -wthread option for
1612 * IPython/ipmaker.py (__call__): Added -wthread option for
1601 wxpython thread handling. Make sure threading options are only
1613 wxpython thread handling. Make sure threading options are only
1602 valid at the command line.
1614 valid at the command line.
1603
1615
1604 * scripts/ipython: moved shell selection into a factory function
1616 * scripts/ipython: moved shell selection into a factory function
1605 in Shell.py, to keep the starter script to a minimum.
1617 in Shell.py, to keep the starter script to a minimum.
1606
1618
1607 2004-08-25 Fernando Perez <fperez@colorado.edu>
1619 2004-08-25 Fernando Perez <fperez@colorado.edu>
1608
1620
1609 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1621 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1610 John. Along with some recent changes he made to matplotlib, the
1622 John. Along with some recent changes he made to matplotlib, the
1611 next versions of both systems should work very well together.
1623 next versions of both systems should work very well together.
1612
1624
1613 2004-08-24 Fernando Perez <fperez@colorado.edu>
1625 2004-08-24 Fernando Perez <fperez@colorado.edu>
1614
1626
1615 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1627 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1616 tried to switch the profiling to using hotshot, but I'm getting
1628 tried to switch the profiling to using hotshot, but I'm getting
1617 strange errors from prof.runctx() there. I may be misreading the
1629 strange errors from prof.runctx() there. I may be misreading the
1618 docs, but it looks weird. For now the profiling code will
1630 docs, but it looks weird. For now the profiling code will
1619 continue to use the standard profiler.
1631 continue to use the standard profiler.
1620
1632
1621 2004-08-23 Fernando Perez <fperez@colorado.edu>
1633 2004-08-23 Fernando Perez <fperez@colorado.edu>
1622
1634
1623 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1635 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1624 threaded shell, by John Hunter. It's not quite ready yet, but
1636 threaded shell, by John Hunter. It's not quite ready yet, but
1625 close.
1637 close.
1626
1638
1627 2004-08-22 Fernando Perez <fperez@colorado.edu>
1639 2004-08-22 Fernando Perez <fperez@colorado.edu>
1628
1640
1629 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1641 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1630 in Magic and ultraTB.
1642 in Magic and ultraTB.
1631
1643
1632 * ipython.1: document threading options in manpage.
1644 * ipython.1: document threading options in manpage.
1633
1645
1634 * scripts/ipython: Changed name of -thread option to -gthread,
1646 * scripts/ipython: Changed name of -thread option to -gthread,
1635 since this is GTK specific. I want to leave the door open for a
1647 since this is GTK specific. I want to leave the door open for a
1636 -wthread option for WX, which will most likely be necessary. This
1648 -wthread option for WX, which will most likely be necessary. This
1637 change affects usage and ipmaker as well.
1649 change affects usage and ipmaker as well.
1638
1650
1639 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1651 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1640 handle the matplotlib shell issues. Code by John Hunter
1652 handle the matplotlib shell issues. Code by John Hunter
1641 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1653 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1642 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1654 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1643 broken (and disabled for end users) for now, but it puts the
1655 broken (and disabled for end users) for now, but it puts the
1644 infrastructure in place.
1656 infrastructure in place.
1645
1657
1646 2004-08-21 Fernando Perez <fperez@colorado.edu>
1658 2004-08-21 Fernando Perez <fperez@colorado.edu>
1647
1659
1648 * ipythonrc-pylab: Add matplotlib support.
1660 * ipythonrc-pylab: Add matplotlib support.
1649
1661
1650 * matplotlib_config.py: new files for matplotlib support, part of
1662 * matplotlib_config.py: new files for matplotlib support, part of
1651 the pylab profile.
1663 the pylab profile.
1652
1664
1653 * IPython/usage.py (__doc__): documented the threading options.
1665 * IPython/usage.py (__doc__): documented the threading options.
1654
1666
1655 2004-08-20 Fernando Perez <fperez@colorado.edu>
1667 2004-08-20 Fernando Perez <fperez@colorado.edu>
1656
1668
1657 * ipython: Modified the main calling routine to handle the -thread
1669 * ipython: Modified the main calling routine to handle the -thread
1658 and -mpthread options. This needs to be done as a top-level hack,
1670 and -mpthread options. This needs to be done as a top-level hack,
1659 because it determines which class to instantiate for IPython
1671 because it determines which class to instantiate for IPython
1660 itself.
1672 itself.
1661
1673
1662 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1674 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1663 classes to support multithreaded GTK operation without blocking,
1675 classes to support multithreaded GTK operation without blocking,
1664 and matplotlib with all backends. This is a lot of still very
1676 and matplotlib with all backends. This is a lot of still very
1665 experimental code, and threads are tricky. So it may still have a
1677 experimental code, and threads are tricky. So it may still have a
1666 few rough edges... This code owes a lot to
1678 few rough edges... This code owes a lot to
1667 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1679 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1668 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1680 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1669 to John Hunter for all the matplotlib work.
1681 to John Hunter for all the matplotlib work.
1670
1682
1671 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1683 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1672 options for gtk thread and matplotlib support.
1684 options for gtk thread and matplotlib support.
1673
1685
1674 2004-08-16 Fernando Perez <fperez@colorado.edu>
1686 2004-08-16 Fernando Perez <fperez@colorado.edu>
1675
1687
1676 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1688 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1677 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1689 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1678 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1690 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1679
1691
1680 2004-08-11 Fernando Perez <fperez@colorado.edu>
1692 2004-08-11 Fernando Perez <fperez@colorado.edu>
1681
1693
1682 * setup.py (isfile): Fix build so documentation gets updated for
1694 * setup.py (isfile): Fix build so documentation gets updated for
1683 rpms (it was only done for .tgz builds).
1695 rpms (it was only done for .tgz builds).
1684
1696
1685 2004-08-10 Fernando Perez <fperez@colorado.edu>
1697 2004-08-10 Fernando Perez <fperez@colorado.edu>
1686
1698
1687 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1699 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1688
1700
1689 * iplib.py : Silence syntax error exceptions in tab-completion.
1701 * iplib.py : Silence syntax error exceptions in tab-completion.
1690
1702
1691 2004-08-05 Fernando Perez <fperez@colorado.edu>
1703 2004-08-05 Fernando Perez <fperez@colorado.edu>
1692
1704
1693 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1705 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1694 'color off' mark for continuation prompts. This was causing long
1706 'color off' mark for continuation prompts. This was causing long
1695 continuation lines to mis-wrap.
1707 continuation lines to mis-wrap.
1696
1708
1697 2004-08-01 Fernando Perez <fperez@colorado.edu>
1709 2004-08-01 Fernando Perez <fperez@colorado.edu>
1698
1710
1699 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1711 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1700 for building ipython to be a parameter. All this is necessary
1712 for building ipython to be a parameter. All this is necessary
1701 right now to have a multithreaded version, but this insane
1713 right now to have a multithreaded version, but this insane
1702 non-design will be cleaned up soon. For now, it's a hack that
1714 non-design will be cleaned up soon. For now, it's a hack that
1703 works.
1715 works.
1704
1716
1705 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1717 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1706 args in various places. No bugs so far, but it's a dangerous
1718 args in various places. No bugs so far, but it's a dangerous
1707 practice.
1719 practice.
1708
1720
1709 2004-07-31 Fernando Perez <fperez@colorado.edu>
1721 2004-07-31 Fernando Perez <fperez@colorado.edu>
1710
1722
1711 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1723 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1712 fix completion of files with dots in their names under most
1724 fix completion of files with dots in their names under most
1713 profiles (pysh was OK because the completion order is different).
1725 profiles (pysh was OK because the completion order is different).
1714
1726
1715 2004-07-27 Fernando Perez <fperez@colorado.edu>
1727 2004-07-27 Fernando Perez <fperez@colorado.edu>
1716
1728
1717 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1729 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1718 keywords manually, b/c the one in keyword.py was removed in python
1730 keywords manually, b/c the one in keyword.py was removed in python
1719 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1731 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1720 This is NOT a bug under python 2.3 and earlier.
1732 This is NOT a bug under python 2.3 and earlier.
1721
1733
1722 2004-07-26 Fernando Perez <fperez@colorado.edu>
1734 2004-07-26 Fernando Perez <fperez@colorado.edu>
1723
1735
1724 * IPython/ultraTB.py (VerboseTB.text): Add another
1736 * IPython/ultraTB.py (VerboseTB.text): Add another
1725 linecache.checkcache() call to try to prevent inspect.py from
1737 linecache.checkcache() call to try to prevent inspect.py from
1726 crashing under python 2.3. I think this fixes
1738 crashing under python 2.3. I think this fixes
1727 http://www.scipy.net/roundup/ipython/issue17.
1739 http://www.scipy.net/roundup/ipython/issue17.
1728
1740
1729 2004-07-26 *** Released version 0.6.2
1741 2004-07-26 *** Released version 0.6.2
1730
1742
1731 2004-07-26 Fernando Perez <fperez@colorado.edu>
1743 2004-07-26 Fernando Perez <fperez@colorado.edu>
1732
1744
1733 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1745 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1734 fail for any number.
1746 fail for any number.
1735 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1747 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1736 empty bookmarks.
1748 empty bookmarks.
1737
1749
1738 2004-07-26 *** Released version 0.6.1
1750 2004-07-26 *** Released version 0.6.1
1739
1751
1740 2004-07-26 Fernando Perez <fperez@colorado.edu>
1752 2004-07-26 Fernando Perez <fperez@colorado.edu>
1741
1753
1742 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1754 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1743
1755
1744 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1756 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1745 escaping '()[]{}' in filenames.
1757 escaping '()[]{}' in filenames.
1746
1758
1747 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1759 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1748 Python 2.2 users who lack a proper shlex.split.
1760 Python 2.2 users who lack a proper shlex.split.
1749
1761
1750 2004-07-19 Fernando Perez <fperez@colorado.edu>
1762 2004-07-19 Fernando Perez <fperez@colorado.edu>
1751
1763
1752 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1764 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1753 for reading readline's init file. I follow the normal chain:
1765 for reading readline's init file. I follow the normal chain:
1754 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1766 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1755 report by Mike Heeter. This closes
1767 report by Mike Heeter. This closes
1756 http://www.scipy.net/roundup/ipython/issue16.
1768 http://www.scipy.net/roundup/ipython/issue16.
1757
1769
1758 2004-07-18 Fernando Perez <fperez@colorado.edu>
1770 2004-07-18 Fernando Perez <fperez@colorado.edu>
1759
1771
1760 * IPython/iplib.py (__init__): Add better handling of '\' under
1772 * IPython/iplib.py (__init__): Add better handling of '\' under
1761 Win32 for filenames. After a patch by Ville.
1773 Win32 for filenames. After a patch by Ville.
1762
1774
1763 2004-07-17 Fernando Perez <fperez@colorado.edu>
1775 2004-07-17 Fernando Perez <fperez@colorado.edu>
1764
1776
1765 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1777 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1766 autocalling would be triggered for 'foo is bar' if foo is
1778 autocalling would be triggered for 'foo is bar' if foo is
1767 callable. I also cleaned up the autocall detection code to use a
1779 callable. I also cleaned up the autocall detection code to use a
1768 regexp, which is faster. Bug reported by Alexander Schmolck.
1780 regexp, which is faster. Bug reported by Alexander Schmolck.
1769
1781
1770 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1782 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1771 '?' in them would confuse the help system. Reported by Alex
1783 '?' in them would confuse the help system. Reported by Alex
1772 Schmolck.
1784 Schmolck.
1773
1785
1774 2004-07-16 Fernando Perez <fperez@colorado.edu>
1786 2004-07-16 Fernando Perez <fperez@colorado.edu>
1775
1787
1776 * IPython/GnuplotInteractive.py (__all__): added plot2.
1788 * IPython/GnuplotInteractive.py (__all__): added plot2.
1777
1789
1778 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1790 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1779 plotting dictionaries, lists or tuples of 1d arrays.
1791 plotting dictionaries, lists or tuples of 1d arrays.
1780
1792
1781 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1793 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1782 optimizations.
1794 optimizations.
1783
1795
1784 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1796 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1785 the information which was there from Janko's original IPP code:
1797 the information which was there from Janko's original IPP code:
1786
1798
1787 03.05.99 20:53 porto.ifm.uni-kiel.de
1799 03.05.99 20:53 porto.ifm.uni-kiel.de
1788 --Started changelog.
1800 --Started changelog.
1789 --make clear do what it say it does
1801 --make clear do what it say it does
1790 --added pretty output of lines from inputcache
1802 --added pretty output of lines from inputcache
1791 --Made Logger a mixin class, simplifies handling of switches
1803 --Made Logger a mixin class, simplifies handling of switches
1792 --Added own completer class. .string<TAB> expands to last history
1804 --Added own completer class. .string<TAB> expands to last history
1793 line which starts with string. The new expansion is also present
1805 line which starts with string. The new expansion is also present
1794 with Ctrl-r from the readline library. But this shows, who this
1806 with Ctrl-r from the readline library. But this shows, who this
1795 can be done for other cases.
1807 can be done for other cases.
1796 --Added convention that all shell functions should accept a
1808 --Added convention that all shell functions should accept a
1797 parameter_string This opens the door for different behaviour for
1809 parameter_string This opens the door for different behaviour for
1798 each function. @cd is a good example of this.
1810 each function. @cd is a good example of this.
1799
1811
1800 04.05.99 12:12 porto.ifm.uni-kiel.de
1812 04.05.99 12:12 porto.ifm.uni-kiel.de
1801 --added logfile rotation
1813 --added logfile rotation
1802 --added new mainloop method which freezes first the namespace
1814 --added new mainloop method which freezes first the namespace
1803
1815
1804 07.05.99 21:24 porto.ifm.uni-kiel.de
1816 07.05.99 21:24 porto.ifm.uni-kiel.de
1805 --added the docreader classes. Now there is a help system.
1817 --added the docreader classes. Now there is a help system.
1806 -This is only a first try. Currently it's not easy to put new
1818 -This is only a first try. Currently it's not easy to put new
1807 stuff in the indices. But this is the way to go. Info would be
1819 stuff in the indices. But this is the way to go. Info would be
1808 better, but HTML is every where and not everybody has an info
1820 better, but HTML is every where and not everybody has an info
1809 system installed and it's not so easy to change html-docs to info.
1821 system installed and it's not so easy to change html-docs to info.
1810 --added global logfile option
1822 --added global logfile option
1811 --there is now a hook for object inspection method pinfo needs to
1823 --there is now a hook for object inspection method pinfo needs to
1812 be provided for this. Can be reached by two '??'.
1824 be provided for this. Can be reached by two '??'.
1813
1825
1814 08.05.99 20:51 porto.ifm.uni-kiel.de
1826 08.05.99 20:51 porto.ifm.uni-kiel.de
1815 --added a README
1827 --added a README
1816 --bug in rc file. Something has changed so functions in the rc
1828 --bug in rc file. Something has changed so functions in the rc
1817 file need to reference the shell and not self. Not clear if it's a
1829 file need to reference the shell and not self. Not clear if it's a
1818 bug or feature.
1830 bug or feature.
1819 --changed rc file for new behavior
1831 --changed rc file for new behavior
1820
1832
1821 2004-07-15 Fernando Perez <fperez@colorado.edu>
1833 2004-07-15 Fernando Perez <fperez@colorado.edu>
1822
1834
1823 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1835 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1824 cache was falling out of sync in bizarre manners when multi-line
1836 cache was falling out of sync in bizarre manners when multi-line
1825 input was present. Minor optimizations and cleanup.
1837 input was present. Minor optimizations and cleanup.
1826
1838
1827 (Logger): Remove old Changelog info for cleanup. This is the
1839 (Logger): Remove old Changelog info for cleanup. This is the
1828 information which was there from Janko's original code:
1840 information which was there from Janko's original code:
1829
1841
1830 Changes to Logger: - made the default log filename a parameter
1842 Changes to Logger: - made the default log filename a parameter
1831
1843
1832 - put a check for lines beginning with !@? in log(). Needed
1844 - put a check for lines beginning with !@? in log(). Needed
1833 (even if the handlers properly log their lines) for mid-session
1845 (even if the handlers properly log their lines) for mid-session
1834 logging activation to work properly. Without this, lines logged
1846 logging activation to work properly. Without this, lines logged
1835 in mid session, which get read from the cache, would end up
1847 in mid session, which get read from the cache, would end up
1836 'bare' (with !@? in the open) in the log. Now they are caught
1848 'bare' (with !@? in the open) in the log. Now they are caught
1837 and prepended with a #.
1849 and prepended with a #.
1838
1850
1839 * IPython/iplib.py (InteractiveShell.init_readline): added check
1851 * IPython/iplib.py (InteractiveShell.init_readline): added check
1840 in case MagicCompleter fails to be defined, so we don't crash.
1852 in case MagicCompleter fails to be defined, so we don't crash.
1841
1853
1842 2004-07-13 Fernando Perez <fperez@colorado.edu>
1854 2004-07-13 Fernando Perez <fperez@colorado.edu>
1843
1855
1844 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1856 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1845 of EPS if the requested filename ends in '.eps'.
1857 of EPS if the requested filename ends in '.eps'.
1846
1858
1847 2004-07-04 Fernando Perez <fperez@colorado.edu>
1859 2004-07-04 Fernando Perez <fperez@colorado.edu>
1848
1860
1849 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1861 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1850 escaping of quotes when calling the shell.
1862 escaping of quotes when calling the shell.
1851
1863
1852 2004-07-02 Fernando Perez <fperez@colorado.edu>
1864 2004-07-02 Fernando Perez <fperez@colorado.edu>
1853
1865
1854 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1866 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1855 gettext not working because we were clobbering '_'. Fixes
1867 gettext not working because we were clobbering '_'. Fixes
1856 http://www.scipy.net/roundup/ipython/issue6.
1868 http://www.scipy.net/roundup/ipython/issue6.
1857
1869
1858 2004-07-01 Fernando Perez <fperez@colorado.edu>
1870 2004-07-01 Fernando Perez <fperez@colorado.edu>
1859
1871
1860 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1872 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1861 into @cd. Patch by Ville.
1873 into @cd. Patch by Ville.
1862
1874
1863 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1875 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1864 new function to store things after ipmaker runs. Patch by Ville.
1876 new function to store things after ipmaker runs. Patch by Ville.
1865 Eventually this will go away once ipmaker is removed and the class
1877 Eventually this will go away once ipmaker is removed and the class
1866 gets cleaned up, but for now it's ok. Key functionality here is
1878 gets cleaned up, but for now it's ok. Key functionality here is
1867 the addition of the persistent storage mechanism, a dict for
1879 the addition of the persistent storage mechanism, a dict for
1868 keeping data across sessions (for now just bookmarks, but more can
1880 keeping data across sessions (for now just bookmarks, but more can
1869 be implemented later).
1881 be implemented later).
1870
1882
1871 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1883 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1872 persistent across sections. Patch by Ville, I modified it
1884 persistent across sections. Patch by Ville, I modified it
1873 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1885 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1874 added a '-l' option to list all bookmarks.
1886 added a '-l' option to list all bookmarks.
1875
1887
1876 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1888 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1877 center for cleanup. Registered with atexit.register(). I moved
1889 center for cleanup. Registered with atexit.register(). I moved
1878 here the old exit_cleanup(). After a patch by Ville.
1890 here the old exit_cleanup(). After a patch by Ville.
1879
1891
1880 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1892 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1881 characters in the hacked shlex_split for python 2.2.
1893 characters in the hacked shlex_split for python 2.2.
1882
1894
1883 * IPython/iplib.py (file_matches): more fixes to filenames with
1895 * IPython/iplib.py (file_matches): more fixes to filenames with
1884 whitespace in them. It's not perfect, but limitations in python's
1896 whitespace in them. It's not perfect, but limitations in python's
1885 readline make it impossible to go further.
1897 readline make it impossible to go further.
1886
1898
1887 2004-06-29 Fernando Perez <fperez@colorado.edu>
1899 2004-06-29 Fernando Perez <fperez@colorado.edu>
1888
1900
1889 * IPython/iplib.py (file_matches): escape whitespace correctly in
1901 * IPython/iplib.py (file_matches): escape whitespace correctly in
1890 filename completions. Bug reported by Ville.
1902 filename completions. Bug reported by Ville.
1891
1903
1892 2004-06-28 Fernando Perez <fperez@colorado.edu>
1904 2004-06-28 Fernando Perez <fperez@colorado.edu>
1893
1905
1894 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1906 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1895 the history file will be called 'history-PROFNAME' (or just
1907 the history file will be called 'history-PROFNAME' (or just
1896 'history' if no profile is loaded). I was getting annoyed at
1908 'history' if no profile is loaded). I was getting annoyed at
1897 getting my Numerical work history clobbered by pysh sessions.
1909 getting my Numerical work history clobbered by pysh sessions.
1898
1910
1899 * IPython/iplib.py (InteractiveShell.__init__): Internal
1911 * IPython/iplib.py (InteractiveShell.__init__): Internal
1900 getoutputerror() function so that we can honor the system_verbose
1912 getoutputerror() function so that we can honor the system_verbose
1901 flag for _all_ system calls. I also added escaping of #
1913 flag for _all_ system calls. I also added escaping of #
1902 characters here to avoid confusing Itpl.
1914 characters here to avoid confusing Itpl.
1903
1915
1904 * IPython/Magic.py (shlex_split): removed call to shell in
1916 * IPython/Magic.py (shlex_split): removed call to shell in
1905 parse_options and replaced it with shlex.split(). The annoying
1917 parse_options and replaced it with shlex.split(). The annoying
1906 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1918 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1907 to backport it from 2.3, with several frail hacks (the shlex
1919 to backport it from 2.3, with several frail hacks (the shlex
1908 module is rather limited in 2.2). Thanks to a suggestion by Ville
1920 module is rather limited in 2.2). Thanks to a suggestion by Ville
1909 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1921 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1910 problem.
1922 problem.
1911
1923
1912 (Magic.magic_system_verbose): new toggle to print the actual
1924 (Magic.magic_system_verbose): new toggle to print the actual
1913 system calls made by ipython. Mainly for debugging purposes.
1925 system calls made by ipython. Mainly for debugging purposes.
1914
1926
1915 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1927 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1916 doesn't support persistence. Reported (and fix suggested) by
1928 doesn't support persistence. Reported (and fix suggested) by
1917 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1929 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1918
1930
1919 2004-06-26 Fernando Perez <fperez@colorado.edu>
1931 2004-06-26 Fernando Perez <fperez@colorado.edu>
1920
1932
1921 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1933 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1922 continue prompts.
1934 continue prompts.
1923
1935
1924 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1936 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1925 function (basically a big docstring) and a few more things here to
1937 function (basically a big docstring) and a few more things here to
1926 speedup startup. pysh.py is now very lightweight. We want because
1938 speedup startup. pysh.py is now very lightweight. We want because
1927 it gets execfile'd, while InterpreterExec gets imported, so
1939 it gets execfile'd, while InterpreterExec gets imported, so
1928 byte-compilation saves time.
1940 byte-compilation saves time.
1929
1941
1930 2004-06-25 Fernando Perez <fperez@colorado.edu>
1942 2004-06-25 Fernando Perez <fperez@colorado.edu>
1931
1943
1932 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1944 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1933 -NUM', which was recently broken.
1945 -NUM', which was recently broken.
1934
1946
1935 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1947 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1936 in multi-line input (but not !!, which doesn't make sense there).
1948 in multi-line input (but not !!, which doesn't make sense there).
1937
1949
1938 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1950 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1939 It's just too useful, and people can turn it off in the less
1951 It's just too useful, and people can turn it off in the less
1940 common cases where it's a problem.
1952 common cases where it's a problem.
1941
1953
1942 2004-06-24 Fernando Perez <fperez@colorado.edu>
1954 2004-06-24 Fernando Perez <fperez@colorado.edu>
1943
1955
1944 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1956 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1945 special syntaxes (like alias calling) is now allied in multi-line
1957 special syntaxes (like alias calling) is now allied in multi-line
1946 input. This is still _very_ experimental, but it's necessary for
1958 input. This is still _very_ experimental, but it's necessary for
1947 efficient shell usage combining python looping syntax with system
1959 efficient shell usage combining python looping syntax with system
1948 calls. For now it's restricted to aliases, I don't think it
1960 calls. For now it's restricted to aliases, I don't think it
1949 really even makes sense to have this for magics.
1961 really even makes sense to have this for magics.
1950
1962
1951 2004-06-23 Fernando Perez <fperez@colorado.edu>
1963 2004-06-23 Fernando Perez <fperez@colorado.edu>
1952
1964
1953 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1965 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1954 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1966 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1955
1967
1956 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1968 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1957 extensions under Windows (after code sent by Gary Bishop). The
1969 extensions under Windows (after code sent by Gary Bishop). The
1958 extensions considered 'executable' are stored in IPython's rc
1970 extensions considered 'executable' are stored in IPython's rc
1959 structure as win_exec_ext.
1971 structure as win_exec_ext.
1960
1972
1961 * IPython/genutils.py (shell): new function, like system() but
1973 * IPython/genutils.py (shell): new function, like system() but
1962 without return value. Very useful for interactive shell work.
1974 without return value. Very useful for interactive shell work.
1963
1975
1964 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1976 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1965 delete aliases.
1977 delete aliases.
1966
1978
1967 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1979 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1968 sure that the alias table doesn't contain python keywords.
1980 sure that the alias table doesn't contain python keywords.
1969
1981
1970 2004-06-21 Fernando Perez <fperez@colorado.edu>
1982 2004-06-21 Fernando Perez <fperez@colorado.edu>
1971
1983
1972 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1984 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1973 non-existent items are found in $PATH. Reported by Thorsten.
1985 non-existent items are found in $PATH. Reported by Thorsten.
1974
1986
1975 2004-06-20 Fernando Perez <fperez@colorado.edu>
1987 2004-06-20 Fernando Perez <fperez@colorado.edu>
1976
1988
1977 * IPython/iplib.py (complete): modified the completer so that the
1989 * IPython/iplib.py (complete): modified the completer so that the
1978 order of priorities can be easily changed at runtime.
1990 order of priorities can be easily changed at runtime.
1979
1991
1980 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1992 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1981 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1993 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1982
1994
1983 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1995 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1984 expand Python variables prepended with $ in all system calls. The
1996 expand Python variables prepended with $ in all system calls. The
1985 same was done to InteractiveShell.handle_shell_escape. Now all
1997 same was done to InteractiveShell.handle_shell_escape. Now all
1986 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1998 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1987 expansion of python variables and expressions according to the
1999 expansion of python variables and expressions according to the
1988 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2000 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1989
2001
1990 Though PEP-215 has been rejected, a similar (but simpler) one
2002 Though PEP-215 has been rejected, a similar (but simpler) one
1991 seems like it will go into Python 2.4, PEP-292 -
2003 seems like it will go into Python 2.4, PEP-292 -
1992 http://www.python.org/peps/pep-0292.html.
2004 http://www.python.org/peps/pep-0292.html.
1993
2005
1994 I'll keep the full syntax of PEP-215, since IPython has since the
2006 I'll keep the full syntax of PEP-215, since IPython has since the
1995 start used Ka-Ping Yee's reference implementation discussed there
2007 start used Ka-Ping Yee's reference implementation discussed there
1996 (Itpl), and I actually like the powerful semantics it offers.
2008 (Itpl), and I actually like the powerful semantics it offers.
1997
2009
1998 In order to access normal shell variables, the $ has to be escaped
2010 In order to access normal shell variables, the $ has to be escaped
1999 via an extra $. For example:
2011 via an extra $. For example:
2000
2012
2001 In [7]: PATH='a python variable'
2013 In [7]: PATH='a python variable'
2002
2014
2003 In [8]: !echo $PATH
2015 In [8]: !echo $PATH
2004 a python variable
2016 a python variable
2005
2017
2006 In [9]: !echo $$PATH
2018 In [9]: !echo $$PATH
2007 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2019 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2008
2020
2009 (Magic.parse_options): escape $ so the shell doesn't evaluate
2021 (Magic.parse_options): escape $ so the shell doesn't evaluate
2010 things prematurely.
2022 things prematurely.
2011
2023
2012 * IPython/iplib.py (InteractiveShell.call_alias): added the
2024 * IPython/iplib.py (InteractiveShell.call_alias): added the
2013 ability for aliases to expand python variables via $.
2025 ability for aliases to expand python variables via $.
2014
2026
2015 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2027 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2016 system, now there's a @rehash/@rehashx pair of magics. These work
2028 system, now there's a @rehash/@rehashx pair of magics. These work
2017 like the csh rehash command, and can be invoked at any time. They
2029 like the csh rehash command, and can be invoked at any time. They
2018 build a table of aliases to everything in the user's $PATH
2030 build a table of aliases to everything in the user's $PATH
2019 (@rehash uses everything, @rehashx is slower but only adds
2031 (@rehash uses everything, @rehashx is slower but only adds
2020 executable files). With this, the pysh.py-based shell profile can
2032 executable files). With this, the pysh.py-based shell profile can
2021 now simply call rehash upon startup, and full access to all
2033 now simply call rehash upon startup, and full access to all
2022 programs in the user's path is obtained.
2034 programs in the user's path is obtained.
2023
2035
2024 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2036 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2025 functionality is now fully in place. I removed the old dynamic
2037 functionality is now fully in place. I removed the old dynamic
2026 code generation based approach, in favor of a much lighter one
2038 code generation based approach, in favor of a much lighter one
2027 based on a simple dict. The advantage is that this allows me to
2039 based on a simple dict. The advantage is that this allows me to
2028 now have thousands of aliases with negligible cost (unthinkable
2040 now have thousands of aliases with negligible cost (unthinkable
2029 with the old system).
2041 with the old system).
2030
2042
2031 2004-06-19 Fernando Perez <fperez@colorado.edu>
2043 2004-06-19 Fernando Perez <fperez@colorado.edu>
2032
2044
2033 * IPython/iplib.py (__init__): extended MagicCompleter class to
2045 * IPython/iplib.py (__init__): extended MagicCompleter class to
2034 also complete (last in priority) on user aliases.
2046 also complete (last in priority) on user aliases.
2035
2047
2036 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2048 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2037 call to eval.
2049 call to eval.
2038 (ItplNS.__init__): Added a new class which functions like Itpl,
2050 (ItplNS.__init__): Added a new class which functions like Itpl,
2039 but allows configuring the namespace for the evaluation to occur
2051 but allows configuring the namespace for the evaluation to occur
2040 in.
2052 in.
2041
2053
2042 2004-06-18 Fernando Perez <fperez@colorado.edu>
2054 2004-06-18 Fernando Perez <fperez@colorado.edu>
2043
2055
2044 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2056 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2045 better message when 'exit' or 'quit' are typed (a common newbie
2057 better message when 'exit' or 'quit' are typed (a common newbie
2046 confusion).
2058 confusion).
2047
2059
2048 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2060 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2049 check for Windows users.
2061 check for Windows users.
2050
2062
2051 * IPython/iplib.py (InteractiveShell.user_setup): removed
2063 * IPython/iplib.py (InteractiveShell.user_setup): removed
2052 disabling of colors for Windows. I'll test at runtime and issue a
2064 disabling of colors for Windows. I'll test at runtime and issue a
2053 warning if Gary's readline isn't found, as to nudge users to
2065 warning if Gary's readline isn't found, as to nudge users to
2054 download it.
2066 download it.
2055
2067
2056 2004-06-16 Fernando Perez <fperez@colorado.edu>
2068 2004-06-16 Fernando Perez <fperez@colorado.edu>
2057
2069
2058 * IPython/genutils.py (Stream.__init__): changed to print errors
2070 * IPython/genutils.py (Stream.__init__): changed to print errors
2059 to sys.stderr. I had a circular dependency here. Now it's
2071 to sys.stderr. I had a circular dependency here. Now it's
2060 possible to run ipython as IDLE's shell (consider this pre-alpha,
2072 possible to run ipython as IDLE's shell (consider this pre-alpha,
2061 since true stdout things end up in the starting terminal instead
2073 since true stdout things end up in the starting terminal instead
2062 of IDLE's out).
2074 of IDLE's out).
2063
2075
2064 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2076 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2065 users who haven't # updated their prompt_in2 definitions. Remove
2077 users who haven't # updated their prompt_in2 definitions. Remove
2066 eventually.
2078 eventually.
2067 (multiple_replace): added credit to original ASPN recipe.
2079 (multiple_replace): added credit to original ASPN recipe.
2068
2080
2069 2004-06-15 Fernando Perez <fperez@colorado.edu>
2081 2004-06-15 Fernando Perez <fperez@colorado.edu>
2070
2082
2071 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2083 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2072 list of auto-defined aliases.
2084 list of auto-defined aliases.
2073
2085
2074 2004-06-13 Fernando Perez <fperez@colorado.edu>
2086 2004-06-13 Fernando Perez <fperez@colorado.edu>
2075
2087
2076 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2088 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2077 install was really requested (so setup.py can be used for other
2089 install was really requested (so setup.py can be used for other
2078 things under Windows).
2090 things under Windows).
2079
2091
2080 2004-06-10 Fernando Perez <fperez@colorado.edu>
2092 2004-06-10 Fernando Perez <fperez@colorado.edu>
2081
2093
2082 * IPython/Logger.py (Logger.create_log): Manually remove any old
2094 * IPython/Logger.py (Logger.create_log): Manually remove any old
2083 backup, since os.remove may fail under Windows. Fixes bug
2095 backup, since os.remove may fail under Windows. Fixes bug
2084 reported by Thorsten.
2096 reported by Thorsten.
2085
2097
2086 2004-06-09 Fernando Perez <fperez@colorado.edu>
2098 2004-06-09 Fernando Perez <fperez@colorado.edu>
2087
2099
2088 * examples/example-embed.py: fixed all references to %n (replaced
2100 * examples/example-embed.py: fixed all references to %n (replaced
2089 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2101 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2090 for all examples and the manual as well.
2102 for all examples and the manual as well.
2091
2103
2092 2004-06-08 Fernando Perez <fperez@colorado.edu>
2104 2004-06-08 Fernando Perez <fperez@colorado.edu>
2093
2105
2094 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2106 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2095 alignment and color management. All 3 prompt subsystems now
2107 alignment and color management. All 3 prompt subsystems now
2096 inherit from BasePrompt.
2108 inherit from BasePrompt.
2097
2109
2098 * tools/release: updates for windows installer build and tag rpms
2110 * tools/release: updates for windows installer build and tag rpms
2099 with python version (since paths are fixed).
2111 with python version (since paths are fixed).
2100
2112
2101 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2113 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2102 which will become eventually obsolete. Also fixed the default
2114 which will become eventually obsolete. Also fixed the default
2103 prompt_in2 to use \D, so at least new users start with the correct
2115 prompt_in2 to use \D, so at least new users start with the correct
2104 defaults.
2116 defaults.
2105 WARNING: Users with existing ipythonrc files will need to apply
2117 WARNING: Users with existing ipythonrc files will need to apply
2106 this fix manually!
2118 this fix manually!
2107
2119
2108 * setup.py: make windows installer (.exe). This is finally the
2120 * setup.py: make windows installer (.exe). This is finally the
2109 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2121 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2110 which I hadn't included because it required Python 2.3 (or recent
2122 which I hadn't included because it required Python 2.3 (or recent
2111 distutils).
2123 distutils).
2112
2124
2113 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2125 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2114 usage of new '\D' escape.
2126 usage of new '\D' escape.
2115
2127
2116 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2128 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2117 lacks os.getuid())
2129 lacks os.getuid())
2118 (CachedOutput.set_colors): Added the ability to turn coloring
2130 (CachedOutput.set_colors): Added the ability to turn coloring
2119 on/off with @colors even for manually defined prompt colors. It
2131 on/off with @colors even for manually defined prompt colors. It
2120 uses a nasty global, but it works safely and via the generic color
2132 uses a nasty global, but it works safely and via the generic color
2121 handling mechanism.
2133 handling mechanism.
2122 (Prompt2.__init__): Introduced new escape '\D' for continuation
2134 (Prompt2.__init__): Introduced new escape '\D' for continuation
2123 prompts. It represents the counter ('\#') as dots.
2135 prompts. It represents the counter ('\#') as dots.
2124 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2136 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2125 need to update their ipythonrc files and replace '%n' with '\D' in
2137 need to update their ipythonrc files and replace '%n' with '\D' in
2126 their prompt_in2 settings everywhere. Sorry, but there's
2138 their prompt_in2 settings everywhere. Sorry, but there's
2127 otherwise no clean way to get all prompts to properly align. The
2139 otherwise no clean way to get all prompts to properly align. The
2128 ipythonrc shipped with IPython has been updated.
2140 ipythonrc shipped with IPython has been updated.
2129
2141
2130 2004-06-07 Fernando Perez <fperez@colorado.edu>
2142 2004-06-07 Fernando Perez <fperez@colorado.edu>
2131
2143
2132 * setup.py (isfile): Pass local_icons option to latex2html, so the
2144 * setup.py (isfile): Pass local_icons option to latex2html, so the
2133 resulting HTML file is self-contained. Thanks to
2145 resulting HTML file is self-contained. Thanks to
2134 dryice-AT-liu.com.cn for the tip.
2146 dryice-AT-liu.com.cn for the tip.
2135
2147
2136 * pysh.py: I created a new profile 'shell', which implements a
2148 * pysh.py: I created a new profile 'shell', which implements a
2137 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2149 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2138 system shell, nor will it become one anytime soon. It's mainly
2150 system shell, nor will it become one anytime soon. It's mainly
2139 meant to illustrate the use of the new flexible bash-like prompts.
2151 meant to illustrate the use of the new flexible bash-like prompts.
2140 I guess it could be used by hardy souls for true shell management,
2152 I guess it could be used by hardy souls for true shell management,
2141 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2153 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2142 profile. This uses the InterpreterExec extension provided by
2154 profile. This uses the InterpreterExec extension provided by
2143 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2155 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2144
2156
2145 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2157 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2146 auto-align itself with the length of the previous input prompt
2158 auto-align itself with the length of the previous input prompt
2147 (taking into account the invisible color escapes).
2159 (taking into account the invisible color escapes).
2148 (CachedOutput.__init__): Large restructuring of this class. Now
2160 (CachedOutput.__init__): Large restructuring of this class. Now
2149 all three prompts (primary1, primary2, output) are proper objects,
2161 all three prompts (primary1, primary2, output) are proper objects,
2150 managed by the 'parent' CachedOutput class. The code is still a
2162 managed by the 'parent' CachedOutput class. The code is still a
2151 bit hackish (all prompts share state via a pointer to the cache),
2163 bit hackish (all prompts share state via a pointer to the cache),
2152 but it's overall far cleaner than before.
2164 but it's overall far cleaner than before.
2153
2165
2154 * IPython/genutils.py (getoutputerror): modified to add verbose,
2166 * IPython/genutils.py (getoutputerror): modified to add verbose,
2155 debug and header options. This makes the interface of all getout*
2167 debug and header options. This makes the interface of all getout*
2156 functions uniform.
2168 functions uniform.
2157 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2169 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2158
2170
2159 * IPython/Magic.py (Magic.default_option): added a function to
2171 * IPython/Magic.py (Magic.default_option): added a function to
2160 allow registering default options for any magic command. This
2172 allow registering default options for any magic command. This
2161 makes it easy to have profiles which customize the magics globally
2173 makes it easy to have profiles which customize the magics globally
2162 for a certain use. The values set through this function are
2174 for a certain use. The values set through this function are
2163 picked up by the parse_options() method, which all magics should
2175 picked up by the parse_options() method, which all magics should
2164 use to parse their options.
2176 use to parse their options.
2165
2177
2166 * IPython/genutils.py (warn): modified the warnings framework to
2178 * IPython/genutils.py (warn): modified the warnings framework to
2167 use the Term I/O class. I'm trying to slowly unify all of
2179 use the Term I/O class. I'm trying to slowly unify all of
2168 IPython's I/O operations to pass through Term.
2180 IPython's I/O operations to pass through Term.
2169
2181
2170 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2182 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2171 the secondary prompt to correctly match the length of the primary
2183 the secondary prompt to correctly match the length of the primary
2172 one for any prompt. Now multi-line code will properly line up
2184 one for any prompt. Now multi-line code will properly line up
2173 even for path dependent prompts, such as the new ones available
2185 even for path dependent prompts, such as the new ones available
2174 via the prompt_specials.
2186 via the prompt_specials.
2175
2187
2176 2004-06-06 Fernando Perez <fperez@colorado.edu>
2188 2004-06-06 Fernando Perez <fperez@colorado.edu>
2177
2189
2178 * IPython/Prompts.py (prompt_specials): Added the ability to have
2190 * IPython/Prompts.py (prompt_specials): Added the ability to have
2179 bash-like special sequences in the prompts, which get
2191 bash-like special sequences in the prompts, which get
2180 automatically expanded. Things like hostname, current working
2192 automatically expanded. Things like hostname, current working
2181 directory and username are implemented already, but it's easy to
2193 directory and username are implemented already, but it's easy to
2182 add more in the future. Thanks to a patch by W.J. van der Laan
2194 add more in the future. Thanks to a patch by W.J. van der Laan
2183 <gnufnork-AT-hetdigitalegat.nl>
2195 <gnufnork-AT-hetdigitalegat.nl>
2184 (prompt_specials): Added color support for prompt strings, so
2196 (prompt_specials): Added color support for prompt strings, so
2185 users can define arbitrary color setups for their prompts.
2197 users can define arbitrary color setups for their prompts.
2186
2198
2187 2004-06-05 Fernando Perez <fperez@colorado.edu>
2199 2004-06-05 Fernando Perez <fperez@colorado.edu>
2188
2200
2189 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2201 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2190 code to load Gary Bishop's readline and configure it
2202 code to load Gary Bishop's readline and configure it
2191 automatically. Thanks to Gary for help on this.
2203 automatically. Thanks to Gary for help on this.
2192
2204
2193 2004-06-01 Fernando Perez <fperez@colorado.edu>
2205 2004-06-01 Fernando Perez <fperez@colorado.edu>
2194
2206
2195 * IPython/Logger.py (Logger.create_log): fix bug for logging
2207 * IPython/Logger.py (Logger.create_log): fix bug for logging
2196 with no filename (previous fix was incomplete).
2208 with no filename (previous fix was incomplete).
2197
2209
2198 2004-05-25 Fernando Perez <fperez@colorado.edu>
2210 2004-05-25 Fernando Perez <fperez@colorado.edu>
2199
2211
2200 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2212 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2201 parens would get passed to the shell.
2213 parens would get passed to the shell.
2202
2214
2203 2004-05-20 Fernando Perez <fperez@colorado.edu>
2215 2004-05-20 Fernando Perez <fperez@colorado.edu>
2204
2216
2205 * IPython/Magic.py (Magic.magic_prun): changed default profile
2217 * IPython/Magic.py (Magic.magic_prun): changed default profile
2206 sort order to 'time' (the more common profiling need).
2218 sort order to 'time' (the more common profiling need).
2207
2219
2208 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2220 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2209 so that source code shown is guaranteed in sync with the file on
2221 so that source code shown is guaranteed in sync with the file on
2210 disk (also changed in psource). Similar fix to the one for
2222 disk (also changed in psource). Similar fix to the one for
2211 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2223 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2212 <yann.ledu-AT-noos.fr>.
2224 <yann.ledu-AT-noos.fr>.
2213
2225
2214 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2226 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2215 with a single option would not be correctly parsed. Closes
2227 with a single option would not be correctly parsed. Closes
2216 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2228 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2217 introduced in 0.6.0 (on 2004-05-06).
2229 introduced in 0.6.0 (on 2004-05-06).
2218
2230
2219 2004-05-13 *** Released version 0.6.0
2231 2004-05-13 *** Released version 0.6.0
2220
2232
2221 2004-05-13 Fernando Perez <fperez@colorado.edu>
2233 2004-05-13 Fernando Perez <fperez@colorado.edu>
2222
2234
2223 * debian/: Added debian/ directory to CVS, so that debian support
2235 * debian/: Added debian/ directory to CVS, so that debian support
2224 is publicly accessible. The debian package is maintained by Jack
2236 is publicly accessible. The debian package is maintained by Jack
2225 Moffit <jack-AT-xiph.org>.
2237 Moffit <jack-AT-xiph.org>.
2226
2238
2227 * Documentation: included the notes about an ipython-based system
2239 * Documentation: included the notes about an ipython-based system
2228 shell (the hypothetical 'pysh') into the new_design.pdf document,
2240 shell (the hypothetical 'pysh') into the new_design.pdf document,
2229 so that these ideas get distributed to users along with the
2241 so that these ideas get distributed to users along with the
2230 official documentation.
2242 official documentation.
2231
2243
2232 2004-05-10 Fernando Perez <fperez@colorado.edu>
2244 2004-05-10 Fernando Perez <fperez@colorado.edu>
2233
2245
2234 * IPython/Logger.py (Logger.create_log): fix recently introduced
2246 * IPython/Logger.py (Logger.create_log): fix recently introduced
2235 bug (misindented line) where logstart would fail when not given an
2247 bug (misindented line) where logstart would fail when not given an
2236 explicit filename.
2248 explicit filename.
2237
2249
2238 2004-05-09 Fernando Perez <fperez@colorado.edu>
2250 2004-05-09 Fernando Perez <fperez@colorado.edu>
2239
2251
2240 * IPython/Magic.py (Magic.parse_options): skip system call when
2252 * IPython/Magic.py (Magic.parse_options): skip system call when
2241 there are no options to look for. Faster, cleaner for the common
2253 there are no options to look for. Faster, cleaner for the common
2242 case.
2254 case.
2243
2255
2244 * Documentation: many updates to the manual: describing Windows
2256 * Documentation: many updates to the manual: describing Windows
2245 support better, Gnuplot updates, credits, misc small stuff. Also
2257 support better, Gnuplot updates, credits, misc small stuff. Also
2246 updated the new_design doc a bit.
2258 updated the new_design doc a bit.
2247
2259
2248 2004-05-06 *** Released version 0.6.0.rc1
2260 2004-05-06 *** Released version 0.6.0.rc1
2249
2261
2250 2004-05-06 Fernando Perez <fperez@colorado.edu>
2262 2004-05-06 Fernando Perez <fperez@colorado.edu>
2251
2263
2252 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2264 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2253 operations to use the vastly more efficient list/''.join() method.
2265 operations to use the vastly more efficient list/''.join() method.
2254 (FormattedTB.text): Fix
2266 (FormattedTB.text): Fix
2255 http://www.scipy.net/roundup/ipython/issue12 - exception source
2267 http://www.scipy.net/roundup/ipython/issue12 - exception source
2256 extract not updated after reload. Thanks to Mike Salib
2268 extract not updated after reload. Thanks to Mike Salib
2257 <msalib-AT-mit.edu> for pinning the source of the problem.
2269 <msalib-AT-mit.edu> for pinning the source of the problem.
2258 Fortunately, the solution works inside ipython and doesn't require
2270 Fortunately, the solution works inside ipython and doesn't require
2259 any changes to python proper.
2271 any changes to python proper.
2260
2272
2261 * IPython/Magic.py (Magic.parse_options): Improved to process the
2273 * IPython/Magic.py (Magic.parse_options): Improved to process the
2262 argument list as a true shell would (by actually using the
2274 argument list as a true shell would (by actually using the
2263 underlying system shell). This way, all @magics automatically get
2275 underlying system shell). This way, all @magics automatically get
2264 shell expansion for variables. Thanks to a comment by Alex
2276 shell expansion for variables. Thanks to a comment by Alex
2265 Schmolck.
2277 Schmolck.
2266
2278
2267 2004-04-04 Fernando Perez <fperez@colorado.edu>
2279 2004-04-04 Fernando Perez <fperez@colorado.edu>
2268
2280
2269 * IPython/iplib.py (InteractiveShell.interact): Added a special
2281 * IPython/iplib.py (InteractiveShell.interact): Added a special
2270 trap for a debugger quit exception, which is basically impossible
2282 trap for a debugger quit exception, which is basically impossible
2271 to handle by normal mechanisms, given what pdb does to the stack.
2283 to handle by normal mechanisms, given what pdb does to the stack.
2272 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2284 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2273
2285
2274 2004-04-03 Fernando Perez <fperez@colorado.edu>
2286 2004-04-03 Fernando Perez <fperez@colorado.edu>
2275
2287
2276 * IPython/genutils.py (Term): Standardized the names of the Term
2288 * IPython/genutils.py (Term): Standardized the names of the Term
2277 class streams to cin/cout/cerr, following C++ naming conventions
2289 class streams to cin/cout/cerr, following C++ naming conventions
2278 (I can't use in/out/err because 'in' is not a valid attribute
2290 (I can't use in/out/err because 'in' is not a valid attribute
2279 name).
2291 name).
2280
2292
2281 * IPython/iplib.py (InteractiveShell.interact): don't increment
2293 * IPython/iplib.py (InteractiveShell.interact): don't increment
2282 the prompt if there's no user input. By Daniel 'Dang' Griffith
2294 the prompt if there's no user input. By Daniel 'Dang' Griffith
2283 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2295 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2284 Francois Pinard.
2296 Francois Pinard.
2285
2297
2286 2004-04-02 Fernando Perez <fperez@colorado.edu>
2298 2004-04-02 Fernando Perez <fperez@colorado.edu>
2287
2299
2288 * IPython/genutils.py (Stream.__init__): Modified to survive at
2300 * IPython/genutils.py (Stream.__init__): Modified to survive at
2289 least importing in contexts where stdin/out/err aren't true file
2301 least importing in contexts where stdin/out/err aren't true file
2290 objects, such as PyCrust (they lack fileno() and mode). However,
2302 objects, such as PyCrust (they lack fileno() and mode). However,
2291 the recovery facilities which rely on these things existing will
2303 the recovery facilities which rely on these things existing will
2292 not work.
2304 not work.
2293
2305
2294 2004-04-01 Fernando Perez <fperez@colorado.edu>
2306 2004-04-01 Fernando Perez <fperez@colorado.edu>
2295
2307
2296 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2308 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2297 use the new getoutputerror() function, so it properly
2309 use the new getoutputerror() function, so it properly
2298 distinguishes stdout/err.
2310 distinguishes stdout/err.
2299
2311
2300 * IPython/genutils.py (getoutputerror): added a function to
2312 * IPython/genutils.py (getoutputerror): added a function to
2301 capture separately the standard output and error of a command.
2313 capture separately the standard output and error of a command.
2302 After a comment from dang on the mailing lists. This code is
2314 After a comment from dang on the mailing lists. This code is
2303 basically a modified version of commands.getstatusoutput(), from
2315 basically a modified version of commands.getstatusoutput(), from
2304 the standard library.
2316 the standard library.
2305
2317
2306 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2318 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2307 '!!' as a special syntax (shorthand) to access @sx.
2319 '!!' as a special syntax (shorthand) to access @sx.
2308
2320
2309 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2321 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2310 command and return its output as a list split on '\n'.
2322 command and return its output as a list split on '\n'.
2311
2323
2312 2004-03-31 Fernando Perez <fperez@colorado.edu>
2324 2004-03-31 Fernando Perez <fperez@colorado.edu>
2313
2325
2314 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2326 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2315 method to dictionaries used as FakeModule instances if they lack
2327 method to dictionaries used as FakeModule instances if they lack
2316 it. At least pydoc in python2.3 breaks for runtime-defined
2328 it. At least pydoc in python2.3 breaks for runtime-defined
2317 functions without this hack. At some point I need to _really_
2329 functions without this hack. At some point I need to _really_
2318 understand what FakeModule is doing, because it's a gross hack.
2330 understand what FakeModule is doing, because it's a gross hack.
2319 But it solves Arnd's problem for now...
2331 But it solves Arnd's problem for now...
2320
2332
2321 2004-02-27 Fernando Perez <fperez@colorado.edu>
2333 2004-02-27 Fernando Perez <fperez@colorado.edu>
2322
2334
2323 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2335 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2324 mode would behave erratically. Also increased the number of
2336 mode would behave erratically. Also increased the number of
2325 possible logs in rotate mod to 999. Thanks to Rod Holland
2337 possible logs in rotate mod to 999. Thanks to Rod Holland
2326 <rhh@StructureLABS.com> for the report and fixes.
2338 <rhh@StructureLABS.com> for the report and fixes.
2327
2339
2328 2004-02-26 Fernando Perez <fperez@colorado.edu>
2340 2004-02-26 Fernando Perez <fperez@colorado.edu>
2329
2341
2330 * IPython/genutils.py (page): Check that the curses module really
2342 * IPython/genutils.py (page): Check that the curses module really
2331 has the initscr attribute before trying to use it. For some
2343 has the initscr attribute before trying to use it. For some
2332 reason, the Solaris curses module is missing this. I think this
2344 reason, the Solaris curses module is missing this. I think this
2333 should be considered a Solaris python bug, but I'm not sure.
2345 should be considered a Solaris python bug, but I'm not sure.
2334
2346
2335 2004-01-17 Fernando Perez <fperez@colorado.edu>
2347 2004-01-17 Fernando Perez <fperez@colorado.edu>
2336
2348
2337 * IPython/genutils.py (Stream.__init__): Changes to try to make
2349 * IPython/genutils.py (Stream.__init__): Changes to try to make
2338 ipython robust against stdin/out/err being closed by the user.
2350 ipython robust against stdin/out/err being closed by the user.
2339 This is 'user error' (and blocks a normal python session, at least
2351 This is 'user error' (and blocks a normal python session, at least
2340 the stdout case). However, Ipython should be able to survive such
2352 the stdout case). However, Ipython should be able to survive such
2341 instances of abuse as gracefully as possible. To simplify the
2353 instances of abuse as gracefully as possible. To simplify the
2342 coding and maintain compatibility with Gary Bishop's Term
2354 coding and maintain compatibility with Gary Bishop's Term
2343 contributions, I've made use of classmethods for this. I think
2355 contributions, I've made use of classmethods for this. I think
2344 this introduces a dependency on python 2.2.
2356 this introduces a dependency on python 2.2.
2345
2357
2346 2004-01-13 Fernando Perez <fperez@colorado.edu>
2358 2004-01-13 Fernando Perez <fperez@colorado.edu>
2347
2359
2348 * IPython/numutils.py (exp_safe): simplified the code a bit and
2360 * IPython/numutils.py (exp_safe): simplified the code a bit and
2349 removed the need for importing the kinds module altogether.
2361 removed the need for importing the kinds module altogether.
2350
2362
2351 2004-01-06 Fernando Perez <fperez@colorado.edu>
2363 2004-01-06 Fernando Perez <fperez@colorado.edu>
2352
2364
2353 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2365 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2354 a magic function instead, after some community feedback. No
2366 a magic function instead, after some community feedback. No
2355 special syntax will exist for it, but its name is deliberately
2367 special syntax will exist for it, but its name is deliberately
2356 very short.
2368 very short.
2357
2369
2358 2003-12-20 Fernando Perez <fperez@colorado.edu>
2370 2003-12-20 Fernando Perez <fperez@colorado.edu>
2359
2371
2360 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2372 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2361 new functionality, to automagically assign the result of a shell
2373 new functionality, to automagically assign the result of a shell
2362 command to a variable. I'll solicit some community feedback on
2374 command to a variable. I'll solicit some community feedback on
2363 this before making it permanent.
2375 this before making it permanent.
2364
2376
2365 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2377 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2366 requested about callables for which inspect couldn't obtain a
2378 requested about callables for which inspect couldn't obtain a
2367 proper argspec. Thanks to a crash report sent by Etienne
2379 proper argspec. Thanks to a crash report sent by Etienne
2368 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2380 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2369
2381
2370 2003-12-09 Fernando Perez <fperez@colorado.edu>
2382 2003-12-09 Fernando Perez <fperez@colorado.edu>
2371
2383
2372 * IPython/genutils.py (page): patch for the pager to work across
2384 * IPython/genutils.py (page): patch for the pager to work across
2373 various versions of Windows. By Gary Bishop.
2385 various versions of Windows. By Gary Bishop.
2374
2386
2375 2003-12-04 Fernando Perez <fperez@colorado.edu>
2387 2003-12-04 Fernando Perez <fperez@colorado.edu>
2376
2388
2377 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2389 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2378 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2390 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2379 While I tested this and it looks ok, there may still be corner
2391 While I tested this and it looks ok, there may still be corner
2380 cases I've missed.
2392 cases I've missed.
2381
2393
2382 2003-12-01 Fernando Perez <fperez@colorado.edu>
2394 2003-12-01 Fernando Perez <fperez@colorado.edu>
2383
2395
2384 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2396 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2385 where a line like 'p,q=1,2' would fail because the automagic
2397 where a line like 'p,q=1,2' would fail because the automagic
2386 system would be triggered for @p.
2398 system would be triggered for @p.
2387
2399
2388 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2400 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2389 cleanups, code unmodified.
2401 cleanups, code unmodified.
2390
2402
2391 * IPython/genutils.py (Term): added a class for IPython to handle
2403 * IPython/genutils.py (Term): added a class for IPython to handle
2392 output. In most cases it will just be a proxy for stdout/err, but
2404 output. In most cases it will just be a proxy for stdout/err, but
2393 having this allows modifications to be made for some platforms,
2405 having this allows modifications to be made for some platforms,
2394 such as handling color escapes under Windows. All of this code
2406 such as handling color escapes under Windows. All of this code
2395 was contributed by Gary Bishop, with minor modifications by me.
2407 was contributed by Gary Bishop, with minor modifications by me.
2396 The actual changes affect many files.
2408 The actual changes affect many files.
2397
2409
2398 2003-11-30 Fernando Perez <fperez@colorado.edu>
2410 2003-11-30 Fernando Perez <fperez@colorado.edu>
2399
2411
2400 * IPython/iplib.py (file_matches): new completion code, courtesy
2412 * IPython/iplib.py (file_matches): new completion code, courtesy
2401 of Jeff Collins. This enables filename completion again under
2413 of Jeff Collins. This enables filename completion again under
2402 python 2.3, which disabled it at the C level.
2414 python 2.3, which disabled it at the C level.
2403
2415
2404 2003-11-11 Fernando Perez <fperez@colorado.edu>
2416 2003-11-11 Fernando Perez <fperez@colorado.edu>
2405
2417
2406 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2418 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2407 for Numeric.array(map(...)), but often convenient.
2419 for Numeric.array(map(...)), but often convenient.
2408
2420
2409 2003-11-05 Fernando Perez <fperez@colorado.edu>
2421 2003-11-05 Fernando Perez <fperez@colorado.edu>
2410
2422
2411 * IPython/numutils.py (frange): Changed a call from int() to
2423 * IPython/numutils.py (frange): Changed a call from int() to
2412 int(round()) to prevent a problem reported with arange() in the
2424 int(round()) to prevent a problem reported with arange() in the
2413 numpy list.
2425 numpy list.
2414
2426
2415 2003-10-06 Fernando Perez <fperez@colorado.edu>
2427 2003-10-06 Fernando Perez <fperez@colorado.edu>
2416
2428
2417 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2429 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2418 prevent crashes if sys lacks an argv attribute (it happens with
2430 prevent crashes if sys lacks an argv attribute (it happens with
2419 embedded interpreters which build a bare-bones sys module).
2431 embedded interpreters which build a bare-bones sys module).
2420 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2432 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2421
2433
2422 2003-09-24 Fernando Perez <fperez@colorado.edu>
2434 2003-09-24 Fernando Perez <fperez@colorado.edu>
2423
2435
2424 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2436 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2425 to protect against poorly written user objects where __getattr__
2437 to protect against poorly written user objects where __getattr__
2426 raises exceptions other than AttributeError. Thanks to a bug
2438 raises exceptions other than AttributeError. Thanks to a bug
2427 report by Oliver Sander <osander-AT-gmx.de>.
2439 report by Oliver Sander <osander-AT-gmx.de>.
2428
2440
2429 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2441 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2430 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2442 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2431
2443
2432 2003-09-09 Fernando Perez <fperez@colorado.edu>
2444 2003-09-09 Fernando Perez <fperez@colorado.edu>
2433
2445
2434 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2446 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2435 unpacking a list whith a callable as first element would
2447 unpacking a list whith a callable as first element would
2436 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2448 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2437 Collins.
2449 Collins.
2438
2450
2439 2003-08-25 *** Released version 0.5.0
2451 2003-08-25 *** Released version 0.5.0
2440
2452
2441 2003-08-22 Fernando Perez <fperez@colorado.edu>
2453 2003-08-22 Fernando Perez <fperez@colorado.edu>
2442
2454
2443 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2455 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2444 improperly defined user exceptions. Thanks to feedback from Mark
2456 improperly defined user exceptions. Thanks to feedback from Mark
2445 Russell <mrussell-AT-verio.net>.
2457 Russell <mrussell-AT-verio.net>.
2446
2458
2447 2003-08-20 Fernando Perez <fperez@colorado.edu>
2459 2003-08-20 Fernando Perez <fperez@colorado.edu>
2448
2460
2449 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2461 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2450 printing so that it would print multi-line string forms starting
2462 printing so that it would print multi-line string forms starting
2451 with a new line. This way the formatting is better respected for
2463 with a new line. This way the formatting is better respected for
2452 objects which work hard to make nice string forms.
2464 objects which work hard to make nice string forms.
2453
2465
2454 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2466 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2455 autocall would overtake data access for objects with both
2467 autocall would overtake data access for objects with both
2456 __getitem__ and __call__.
2468 __getitem__ and __call__.
2457
2469
2458 2003-08-19 *** Released version 0.5.0-rc1
2470 2003-08-19 *** Released version 0.5.0-rc1
2459
2471
2460 2003-08-19 Fernando Perez <fperez@colorado.edu>
2472 2003-08-19 Fernando Perez <fperez@colorado.edu>
2461
2473
2462 * IPython/deep_reload.py (load_tail): single tiny change here
2474 * IPython/deep_reload.py (load_tail): single tiny change here
2463 seems to fix the long-standing bug of dreload() failing to work
2475 seems to fix the long-standing bug of dreload() failing to work
2464 for dotted names. But this module is pretty tricky, so I may have
2476 for dotted names. But this module is pretty tricky, so I may have
2465 missed some subtlety. Needs more testing!.
2477 missed some subtlety. Needs more testing!.
2466
2478
2467 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2479 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2468 exceptions which have badly implemented __str__ methods.
2480 exceptions which have badly implemented __str__ methods.
2469 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2481 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2470 which I've been getting reports about from Python 2.3 users. I
2482 which I've been getting reports about from Python 2.3 users. I
2471 wish I had a simple test case to reproduce the problem, so I could
2483 wish I had a simple test case to reproduce the problem, so I could
2472 either write a cleaner workaround or file a bug report if
2484 either write a cleaner workaround or file a bug report if
2473 necessary.
2485 necessary.
2474
2486
2475 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2487 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2476 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2488 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2477 a bug report by Tjabo Kloppenburg.
2489 a bug report by Tjabo Kloppenburg.
2478
2490
2479 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2491 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2480 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2492 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2481 seems rather unstable. Thanks to a bug report by Tjabo
2493 seems rather unstable. Thanks to a bug report by Tjabo
2482 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2494 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2483
2495
2484 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2496 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2485 this out soon because of the critical fixes in the inner loop for
2497 this out soon because of the critical fixes in the inner loop for
2486 generators.
2498 generators.
2487
2499
2488 * IPython/Magic.py (Magic.getargspec): removed. This (and
2500 * IPython/Magic.py (Magic.getargspec): removed. This (and
2489 _get_def) have been obsoleted by OInspect for a long time, I
2501 _get_def) have been obsoleted by OInspect for a long time, I
2490 hadn't noticed that they were dead code.
2502 hadn't noticed that they were dead code.
2491 (Magic._ofind): restored _ofind functionality for a few literals
2503 (Magic._ofind): restored _ofind functionality for a few literals
2492 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2504 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2493 for things like "hello".capitalize?, since that would require a
2505 for things like "hello".capitalize?, since that would require a
2494 potentially dangerous eval() again.
2506 potentially dangerous eval() again.
2495
2507
2496 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2508 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2497 logic a bit more to clean up the escapes handling and minimize the
2509 logic a bit more to clean up the escapes handling and minimize the
2498 use of _ofind to only necessary cases. The interactive 'feel' of
2510 use of _ofind to only necessary cases. The interactive 'feel' of
2499 IPython should have improved quite a bit with the changes in
2511 IPython should have improved quite a bit with the changes in
2500 _prefilter and _ofind (besides being far safer than before).
2512 _prefilter and _ofind (besides being far safer than before).
2501
2513
2502 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2514 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2503 obscure, never reported). Edit would fail to find the object to
2515 obscure, never reported). Edit would fail to find the object to
2504 edit under some circumstances.
2516 edit under some circumstances.
2505 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2517 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2506 which were causing double-calling of generators. Those eval calls
2518 which were causing double-calling of generators. Those eval calls
2507 were _very_ dangerous, since code with side effects could be
2519 were _very_ dangerous, since code with side effects could be
2508 triggered. As they say, 'eval is evil'... These were the
2520 triggered. As they say, 'eval is evil'... These were the
2509 nastiest evals in IPython. Besides, _ofind is now far simpler,
2521 nastiest evals in IPython. Besides, _ofind is now far simpler,
2510 and it should also be quite a bit faster. Its use of inspect is
2522 and it should also be quite a bit faster. Its use of inspect is
2511 also safer, so perhaps some of the inspect-related crashes I've
2523 also safer, so perhaps some of the inspect-related crashes I've
2512 seen lately with Python 2.3 might be taken care of. That will
2524 seen lately with Python 2.3 might be taken care of. That will
2513 need more testing.
2525 need more testing.
2514
2526
2515 2003-08-17 Fernando Perez <fperez@colorado.edu>
2527 2003-08-17 Fernando Perez <fperez@colorado.edu>
2516
2528
2517 * IPython/iplib.py (InteractiveShell._prefilter): significant
2529 * IPython/iplib.py (InteractiveShell._prefilter): significant
2518 simplifications to the logic for handling user escapes. Faster
2530 simplifications to the logic for handling user escapes. Faster
2519 and simpler code.
2531 and simpler code.
2520
2532
2521 2003-08-14 Fernando Perez <fperez@colorado.edu>
2533 2003-08-14 Fernando Perez <fperez@colorado.edu>
2522
2534
2523 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2535 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2524 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2536 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2525 but it should be quite a bit faster. And the recursive version
2537 but it should be quite a bit faster. And the recursive version
2526 generated O(log N) intermediate storage for all rank>1 arrays,
2538 generated O(log N) intermediate storage for all rank>1 arrays,
2527 even if they were contiguous.
2539 even if they were contiguous.
2528 (l1norm): Added this function.
2540 (l1norm): Added this function.
2529 (norm): Added this function for arbitrary norms (including
2541 (norm): Added this function for arbitrary norms (including
2530 l-infinity). l1 and l2 are still special cases for convenience
2542 l-infinity). l1 and l2 are still special cases for convenience
2531 and speed.
2543 and speed.
2532
2544
2533 2003-08-03 Fernando Perez <fperez@colorado.edu>
2545 2003-08-03 Fernando Perez <fperez@colorado.edu>
2534
2546
2535 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2547 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2536 exceptions, which now raise PendingDeprecationWarnings in Python
2548 exceptions, which now raise PendingDeprecationWarnings in Python
2537 2.3. There were some in Magic and some in Gnuplot2.
2549 2.3. There were some in Magic and some in Gnuplot2.
2538
2550
2539 2003-06-30 Fernando Perez <fperez@colorado.edu>
2551 2003-06-30 Fernando Perez <fperez@colorado.edu>
2540
2552
2541 * IPython/genutils.py (page): modified to call curses only for
2553 * IPython/genutils.py (page): modified to call curses only for
2542 terminals where TERM=='xterm'. After problems under many other
2554 terminals where TERM=='xterm'. After problems under many other
2543 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2555 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2544
2556
2545 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2557 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2546 would be triggered when readline was absent. This was just an old
2558 would be triggered when readline was absent. This was just an old
2547 debugging statement I'd forgotten to take out.
2559 debugging statement I'd forgotten to take out.
2548
2560
2549 2003-06-20 Fernando Perez <fperez@colorado.edu>
2561 2003-06-20 Fernando Perez <fperez@colorado.edu>
2550
2562
2551 * IPython/genutils.py (clock): modified to return only user time
2563 * IPython/genutils.py (clock): modified to return only user time
2552 (not counting system time), after a discussion on scipy. While
2564 (not counting system time), after a discussion on scipy. While
2553 system time may be a useful quantity occasionally, it may much
2565 system time may be a useful quantity occasionally, it may much
2554 more easily be skewed by occasional swapping or other similar
2566 more easily be skewed by occasional swapping or other similar
2555 activity.
2567 activity.
2556
2568
2557 2003-06-05 Fernando Perez <fperez@colorado.edu>
2569 2003-06-05 Fernando Perez <fperez@colorado.edu>
2558
2570
2559 * IPython/numutils.py (identity): new function, for building
2571 * IPython/numutils.py (identity): new function, for building
2560 arbitrary rank Kronecker deltas (mostly backwards compatible with
2572 arbitrary rank Kronecker deltas (mostly backwards compatible with
2561 Numeric.identity)
2573 Numeric.identity)
2562
2574
2563 2003-06-03 Fernando Perez <fperez@colorado.edu>
2575 2003-06-03 Fernando Perez <fperez@colorado.edu>
2564
2576
2565 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2577 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2566 arguments passed to magics with spaces, to allow trailing '\' to
2578 arguments passed to magics with spaces, to allow trailing '\' to
2567 work normally (mainly for Windows users).
2579 work normally (mainly for Windows users).
2568
2580
2569 2003-05-29 Fernando Perez <fperez@colorado.edu>
2581 2003-05-29 Fernando Perez <fperez@colorado.edu>
2570
2582
2571 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2583 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2572 instead of pydoc.help. This fixes a bizarre behavior where
2584 instead of pydoc.help. This fixes a bizarre behavior where
2573 printing '%s' % locals() would trigger the help system. Now
2585 printing '%s' % locals() would trigger the help system. Now
2574 ipython behaves like normal python does.
2586 ipython behaves like normal python does.
2575
2587
2576 Note that if one does 'from pydoc import help', the bizarre
2588 Note that if one does 'from pydoc import help', the bizarre
2577 behavior returns, but this will also happen in normal python, so
2589 behavior returns, but this will also happen in normal python, so
2578 it's not an ipython bug anymore (it has to do with how pydoc.help
2590 it's not an ipython bug anymore (it has to do with how pydoc.help
2579 is implemented).
2591 is implemented).
2580
2592
2581 2003-05-22 Fernando Perez <fperez@colorado.edu>
2593 2003-05-22 Fernando Perez <fperez@colorado.edu>
2582
2594
2583 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2595 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2584 return [] instead of None when nothing matches, also match to end
2596 return [] instead of None when nothing matches, also match to end
2585 of line. Patch by Gary Bishop.
2597 of line. Patch by Gary Bishop.
2586
2598
2587 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2599 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2588 protection as before, for files passed on the command line. This
2600 protection as before, for files passed on the command line. This
2589 prevents the CrashHandler from kicking in if user files call into
2601 prevents the CrashHandler from kicking in if user files call into
2590 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2602 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2591 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2603 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2592
2604
2593 2003-05-20 *** Released version 0.4.0
2605 2003-05-20 *** Released version 0.4.0
2594
2606
2595 2003-05-20 Fernando Perez <fperez@colorado.edu>
2607 2003-05-20 Fernando Perez <fperez@colorado.edu>
2596
2608
2597 * setup.py: added support for manpages. It's a bit hackish b/c of
2609 * setup.py: added support for manpages. It's a bit hackish b/c of
2598 a bug in the way the bdist_rpm distutils target handles gzipped
2610 a bug in the way the bdist_rpm distutils target handles gzipped
2599 manpages, but it works. After a patch by Jack.
2611 manpages, but it works. After a patch by Jack.
2600
2612
2601 2003-05-19 Fernando Perez <fperez@colorado.edu>
2613 2003-05-19 Fernando Perez <fperez@colorado.edu>
2602
2614
2603 * IPython/numutils.py: added a mockup of the kinds module, since
2615 * IPython/numutils.py: added a mockup of the kinds module, since
2604 it was recently removed from Numeric. This way, numutils will
2616 it was recently removed from Numeric. This way, numutils will
2605 work for all users even if they are missing kinds.
2617 work for all users even if they are missing kinds.
2606
2618
2607 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2619 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2608 failure, which can occur with SWIG-wrapped extensions. After a
2620 failure, which can occur with SWIG-wrapped extensions. After a
2609 crash report from Prabhu.
2621 crash report from Prabhu.
2610
2622
2611 2003-05-16 Fernando Perez <fperez@colorado.edu>
2623 2003-05-16 Fernando Perez <fperez@colorado.edu>
2612
2624
2613 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2625 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2614 protect ipython from user code which may call directly
2626 protect ipython from user code which may call directly
2615 sys.excepthook (this looks like an ipython crash to the user, even
2627 sys.excepthook (this looks like an ipython crash to the user, even
2616 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2628 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2617 This is especially important to help users of WxWindows, but may
2629 This is especially important to help users of WxWindows, but may
2618 also be useful in other cases.
2630 also be useful in other cases.
2619
2631
2620 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2632 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2621 an optional tb_offset to be specified, and to preserve exception
2633 an optional tb_offset to be specified, and to preserve exception
2622 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2634 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2623
2635
2624 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2636 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2625
2637
2626 2003-05-15 Fernando Perez <fperez@colorado.edu>
2638 2003-05-15 Fernando Perez <fperez@colorado.edu>
2627
2639
2628 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2640 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2629 installing for a new user under Windows.
2641 installing for a new user under Windows.
2630
2642
2631 2003-05-12 Fernando Perez <fperez@colorado.edu>
2643 2003-05-12 Fernando Perez <fperez@colorado.edu>
2632
2644
2633 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2645 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2634 handler for Emacs comint-based lines. Currently it doesn't do
2646 handler for Emacs comint-based lines. Currently it doesn't do
2635 much (but importantly, it doesn't update the history cache). In
2647 much (but importantly, it doesn't update the history cache). In
2636 the future it may be expanded if Alex needs more functionality
2648 the future it may be expanded if Alex needs more functionality
2637 there.
2649 there.
2638
2650
2639 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2651 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2640 info to crash reports.
2652 info to crash reports.
2641
2653
2642 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2654 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2643 just like Python's -c. Also fixed crash with invalid -color
2655 just like Python's -c. Also fixed crash with invalid -color
2644 option value at startup. Thanks to Will French
2656 option value at startup. Thanks to Will French
2645 <wfrench-AT-bestweb.net> for the bug report.
2657 <wfrench-AT-bestweb.net> for the bug report.
2646
2658
2647 2003-05-09 Fernando Perez <fperez@colorado.edu>
2659 2003-05-09 Fernando Perez <fperez@colorado.edu>
2648
2660
2649 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2661 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2650 to EvalDict (it's a mapping, after all) and simplified its code
2662 to EvalDict (it's a mapping, after all) and simplified its code
2651 quite a bit, after a nice discussion on c.l.py where Gustavo
2663 quite a bit, after a nice discussion on c.l.py where Gustavo
2652 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2664 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2653
2665
2654 2003-04-30 Fernando Perez <fperez@colorado.edu>
2666 2003-04-30 Fernando Perez <fperez@colorado.edu>
2655
2667
2656 * IPython/genutils.py (timings_out): modified it to reduce its
2668 * IPython/genutils.py (timings_out): modified it to reduce its
2657 overhead in the common reps==1 case.
2669 overhead in the common reps==1 case.
2658
2670
2659 2003-04-29 Fernando Perez <fperez@colorado.edu>
2671 2003-04-29 Fernando Perez <fperez@colorado.edu>
2660
2672
2661 * IPython/genutils.py (timings_out): Modified to use the resource
2673 * IPython/genutils.py (timings_out): Modified to use the resource
2662 module, which avoids the wraparound problems of time.clock().
2674 module, which avoids the wraparound problems of time.clock().
2663
2675
2664 2003-04-17 *** Released version 0.2.15pre4
2676 2003-04-17 *** Released version 0.2.15pre4
2665
2677
2666 2003-04-17 Fernando Perez <fperez@colorado.edu>
2678 2003-04-17 Fernando Perez <fperez@colorado.edu>
2667
2679
2668 * setup.py (scriptfiles): Split windows-specific stuff over to a
2680 * setup.py (scriptfiles): Split windows-specific stuff over to a
2669 separate file, in an attempt to have a Windows GUI installer.
2681 separate file, in an attempt to have a Windows GUI installer.
2670 That didn't work, but part of the groundwork is done.
2682 That didn't work, but part of the groundwork is done.
2671
2683
2672 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2684 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2673 indent/unindent with 4 spaces. Particularly useful in combination
2685 indent/unindent with 4 spaces. Particularly useful in combination
2674 with the new auto-indent option.
2686 with the new auto-indent option.
2675
2687
2676 2003-04-16 Fernando Perez <fperez@colorado.edu>
2688 2003-04-16 Fernando Perez <fperez@colorado.edu>
2677
2689
2678 * IPython/Magic.py: various replacements of self.rc for
2690 * IPython/Magic.py: various replacements of self.rc for
2679 self.shell.rc. A lot more remains to be done to fully disentangle
2691 self.shell.rc. A lot more remains to be done to fully disentangle
2680 this class from the main Shell class.
2692 this class from the main Shell class.
2681
2693
2682 * IPython/GnuplotRuntime.py: added checks for mouse support so
2694 * IPython/GnuplotRuntime.py: added checks for mouse support so
2683 that we don't try to enable it if the current gnuplot doesn't
2695 that we don't try to enable it if the current gnuplot doesn't
2684 really support it. Also added checks so that we don't try to
2696 really support it. Also added checks so that we don't try to
2685 enable persist under Windows (where Gnuplot doesn't recognize the
2697 enable persist under Windows (where Gnuplot doesn't recognize the
2686 option).
2698 option).
2687
2699
2688 * IPython/iplib.py (InteractiveShell.interact): Added optional
2700 * IPython/iplib.py (InteractiveShell.interact): Added optional
2689 auto-indenting code, after a patch by King C. Shu
2701 auto-indenting code, after a patch by King C. Shu
2690 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2702 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2691 get along well with pasting indented code. If I ever figure out
2703 get along well with pasting indented code. If I ever figure out
2692 how to make that part go well, it will become on by default.
2704 how to make that part go well, it will become on by default.
2693
2705
2694 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2706 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2695 crash ipython if there was an unmatched '%' in the user's prompt
2707 crash ipython if there was an unmatched '%' in the user's prompt
2696 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2708 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2697
2709
2698 * IPython/iplib.py (InteractiveShell.interact): removed the
2710 * IPython/iplib.py (InteractiveShell.interact): removed the
2699 ability to ask the user whether he wants to crash or not at the
2711 ability to ask the user whether he wants to crash or not at the
2700 'last line' exception handler. Calling functions at that point
2712 'last line' exception handler. Calling functions at that point
2701 changes the stack, and the error reports would have incorrect
2713 changes the stack, and the error reports would have incorrect
2702 tracebacks.
2714 tracebacks.
2703
2715
2704 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2716 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2705 pass through a peger a pretty-printed form of any object. After a
2717 pass through a peger a pretty-printed form of any object. After a
2706 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2718 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2707
2719
2708 2003-04-14 Fernando Perez <fperez@colorado.edu>
2720 2003-04-14 Fernando Perez <fperez@colorado.edu>
2709
2721
2710 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2722 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2711 all files in ~ would be modified at first install (instead of
2723 all files in ~ would be modified at first install (instead of
2712 ~/.ipython). This could be potentially disastrous, as the
2724 ~/.ipython). This could be potentially disastrous, as the
2713 modification (make line-endings native) could damage binary files.
2725 modification (make line-endings native) could damage binary files.
2714
2726
2715 2003-04-10 Fernando Perez <fperez@colorado.edu>
2727 2003-04-10 Fernando Perez <fperez@colorado.edu>
2716
2728
2717 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2729 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2718 handle only lines which are invalid python. This now means that
2730 handle only lines which are invalid python. This now means that
2719 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2731 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2720 for the bug report.
2732 for the bug report.
2721
2733
2722 2003-04-01 Fernando Perez <fperez@colorado.edu>
2734 2003-04-01 Fernando Perez <fperez@colorado.edu>
2723
2735
2724 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2736 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2725 where failing to set sys.last_traceback would crash pdb.pm().
2737 where failing to set sys.last_traceback would crash pdb.pm().
2726 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2738 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2727 report.
2739 report.
2728
2740
2729 2003-03-25 Fernando Perez <fperez@colorado.edu>
2741 2003-03-25 Fernando Perez <fperez@colorado.edu>
2730
2742
2731 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2743 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2732 before printing it (it had a lot of spurious blank lines at the
2744 before printing it (it had a lot of spurious blank lines at the
2733 end).
2745 end).
2734
2746
2735 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2747 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2736 output would be sent 21 times! Obviously people don't use this
2748 output would be sent 21 times! Obviously people don't use this
2737 too often, or I would have heard about it.
2749 too often, or I would have heard about it.
2738
2750
2739 2003-03-24 Fernando Perez <fperez@colorado.edu>
2751 2003-03-24 Fernando Perez <fperez@colorado.edu>
2740
2752
2741 * setup.py (scriptfiles): renamed the data_files parameter from
2753 * setup.py (scriptfiles): renamed the data_files parameter from
2742 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2754 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2743 for the patch.
2755 for the patch.
2744
2756
2745 2003-03-20 Fernando Perez <fperez@colorado.edu>
2757 2003-03-20 Fernando Perez <fperez@colorado.edu>
2746
2758
2747 * IPython/genutils.py (error): added error() and fatal()
2759 * IPython/genutils.py (error): added error() and fatal()
2748 functions.
2760 functions.
2749
2761
2750 2003-03-18 *** Released version 0.2.15pre3
2762 2003-03-18 *** Released version 0.2.15pre3
2751
2763
2752 2003-03-18 Fernando Perez <fperez@colorado.edu>
2764 2003-03-18 Fernando Perez <fperez@colorado.edu>
2753
2765
2754 * setupext/install_data_ext.py
2766 * setupext/install_data_ext.py
2755 (install_data_ext.initialize_options): Class contributed by Jack
2767 (install_data_ext.initialize_options): Class contributed by Jack
2756 Moffit for fixing the old distutils hack. He is sending this to
2768 Moffit for fixing the old distutils hack. He is sending this to
2757 the distutils folks so in the future we may not need it as a
2769 the distutils folks so in the future we may not need it as a
2758 private fix.
2770 private fix.
2759
2771
2760 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2772 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2761 changes for Debian packaging. See his patch for full details.
2773 changes for Debian packaging. See his patch for full details.
2762 The old distutils hack of making the ipythonrc* files carry a
2774 The old distutils hack of making the ipythonrc* files carry a
2763 bogus .py extension is gone, at last. Examples were moved to a
2775 bogus .py extension is gone, at last. Examples were moved to a
2764 separate subdir under doc/, and the separate executable scripts
2776 separate subdir under doc/, and the separate executable scripts
2765 now live in their own directory. Overall a great cleanup. The
2777 now live in their own directory. Overall a great cleanup. The
2766 manual was updated to use the new files, and setup.py has been
2778 manual was updated to use the new files, and setup.py has been
2767 fixed for this setup.
2779 fixed for this setup.
2768
2780
2769 * IPython/PyColorize.py (Parser.usage): made non-executable and
2781 * IPython/PyColorize.py (Parser.usage): made non-executable and
2770 created a pycolor wrapper around it to be included as a script.
2782 created a pycolor wrapper around it to be included as a script.
2771
2783
2772 2003-03-12 *** Released version 0.2.15pre2
2784 2003-03-12 *** Released version 0.2.15pre2
2773
2785
2774 2003-03-12 Fernando Perez <fperez@colorado.edu>
2786 2003-03-12 Fernando Perez <fperez@colorado.edu>
2775
2787
2776 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2788 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2777 long-standing problem with garbage characters in some terminals.
2789 long-standing problem with garbage characters in some terminals.
2778 The issue was really that the \001 and \002 escapes must _only_ be
2790 The issue was really that the \001 and \002 escapes must _only_ be
2779 passed to input prompts (which call readline), but _never_ to
2791 passed to input prompts (which call readline), but _never_ to
2780 normal text to be printed on screen. I changed ColorANSI to have
2792 normal text to be printed on screen. I changed ColorANSI to have
2781 two classes: TermColors and InputTermColors, each with the
2793 two classes: TermColors and InputTermColors, each with the
2782 appropriate escapes for input prompts or normal text. The code in
2794 appropriate escapes for input prompts or normal text. The code in
2783 Prompts.py got slightly more complicated, but this very old and
2795 Prompts.py got slightly more complicated, but this very old and
2784 annoying bug is finally fixed.
2796 annoying bug is finally fixed.
2785
2797
2786 All the credit for nailing down the real origin of this problem
2798 All the credit for nailing down the real origin of this problem
2787 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2799 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2788 *Many* thanks to him for spending quite a bit of effort on this.
2800 *Many* thanks to him for spending quite a bit of effort on this.
2789
2801
2790 2003-03-05 *** Released version 0.2.15pre1
2802 2003-03-05 *** Released version 0.2.15pre1
2791
2803
2792 2003-03-03 Fernando Perez <fperez@colorado.edu>
2804 2003-03-03 Fernando Perez <fperez@colorado.edu>
2793
2805
2794 * IPython/FakeModule.py: Moved the former _FakeModule to a
2806 * IPython/FakeModule.py: Moved the former _FakeModule to a
2795 separate file, because it's also needed by Magic (to fix a similar
2807 separate file, because it's also needed by Magic (to fix a similar
2796 pickle-related issue in @run).
2808 pickle-related issue in @run).
2797
2809
2798 2003-03-02 Fernando Perez <fperez@colorado.edu>
2810 2003-03-02 Fernando Perez <fperez@colorado.edu>
2799
2811
2800 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2812 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2801 the autocall option at runtime.
2813 the autocall option at runtime.
2802 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2814 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2803 across Magic.py to start separating Magic from InteractiveShell.
2815 across Magic.py to start separating Magic from InteractiveShell.
2804 (Magic._ofind): Fixed to return proper namespace for dotted
2816 (Magic._ofind): Fixed to return proper namespace for dotted
2805 names. Before, a dotted name would always return 'not currently
2817 names. Before, a dotted name would always return 'not currently
2806 defined', because it would find the 'parent'. s.x would be found,
2818 defined', because it would find the 'parent'. s.x would be found,
2807 but since 'x' isn't defined by itself, it would get confused.
2819 but since 'x' isn't defined by itself, it would get confused.
2808 (Magic.magic_run): Fixed pickling problems reported by Ralf
2820 (Magic.magic_run): Fixed pickling problems reported by Ralf
2809 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2821 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2810 that I'd used when Mike Heeter reported similar issues at the
2822 that I'd used when Mike Heeter reported similar issues at the
2811 top-level, but now for @run. It boils down to injecting the
2823 top-level, but now for @run. It boils down to injecting the
2812 namespace where code is being executed with something that looks
2824 namespace where code is being executed with something that looks
2813 enough like a module to fool pickle.dump(). Since a pickle stores
2825 enough like a module to fool pickle.dump(). Since a pickle stores
2814 a named reference to the importing module, we need this for
2826 a named reference to the importing module, we need this for
2815 pickles to save something sensible.
2827 pickles to save something sensible.
2816
2828
2817 * IPython/ipmaker.py (make_IPython): added an autocall option.
2829 * IPython/ipmaker.py (make_IPython): added an autocall option.
2818
2830
2819 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2831 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2820 the auto-eval code. Now autocalling is an option, and the code is
2832 the auto-eval code. Now autocalling is an option, and the code is
2821 also vastly safer. There is no more eval() involved at all.
2833 also vastly safer. There is no more eval() involved at all.
2822
2834
2823 2003-03-01 Fernando Perez <fperez@colorado.edu>
2835 2003-03-01 Fernando Perez <fperez@colorado.edu>
2824
2836
2825 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2837 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2826 dict with named keys instead of a tuple.
2838 dict with named keys instead of a tuple.
2827
2839
2828 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2840 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2829
2841
2830 * setup.py (make_shortcut): Fixed message about directories
2842 * setup.py (make_shortcut): Fixed message about directories
2831 created during Windows installation (the directories were ok, just
2843 created during Windows installation (the directories were ok, just
2832 the printed message was misleading). Thanks to Chris Liechti
2844 the printed message was misleading). Thanks to Chris Liechti
2833 <cliechti-AT-gmx.net> for the heads up.
2845 <cliechti-AT-gmx.net> for the heads up.
2834
2846
2835 2003-02-21 Fernando Perez <fperez@colorado.edu>
2847 2003-02-21 Fernando Perez <fperez@colorado.edu>
2836
2848
2837 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2849 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2838 of ValueError exception when checking for auto-execution. This
2850 of ValueError exception when checking for auto-execution. This
2839 one is raised by things like Numeric arrays arr.flat when the
2851 one is raised by things like Numeric arrays arr.flat when the
2840 array is non-contiguous.
2852 array is non-contiguous.
2841
2853
2842 2003-01-31 Fernando Perez <fperez@colorado.edu>
2854 2003-01-31 Fernando Perez <fperez@colorado.edu>
2843
2855
2844 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2856 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2845 not return any value at all (even though the command would get
2857 not return any value at all (even though the command would get
2846 executed).
2858 executed).
2847 (xsys): Flush stdout right after printing the command to ensure
2859 (xsys): Flush stdout right after printing the command to ensure
2848 proper ordering of commands and command output in the total
2860 proper ordering of commands and command output in the total
2849 output.
2861 output.
2850 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2862 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2851 system/getoutput as defaults. The old ones are kept for
2863 system/getoutput as defaults. The old ones are kept for
2852 compatibility reasons, so no code which uses this library needs
2864 compatibility reasons, so no code which uses this library needs
2853 changing.
2865 changing.
2854
2866
2855 2003-01-27 *** Released version 0.2.14
2867 2003-01-27 *** Released version 0.2.14
2856
2868
2857 2003-01-25 Fernando Perez <fperez@colorado.edu>
2869 2003-01-25 Fernando Perez <fperez@colorado.edu>
2858
2870
2859 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2871 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2860 functions defined in previous edit sessions could not be re-edited
2872 functions defined in previous edit sessions could not be re-edited
2861 (because the temp files were immediately removed). Now temp files
2873 (because the temp files were immediately removed). Now temp files
2862 are removed only at IPython's exit.
2874 are removed only at IPython's exit.
2863 (Magic.magic_run): Improved @run to perform shell-like expansions
2875 (Magic.magic_run): Improved @run to perform shell-like expansions
2864 on its arguments (~users and $VARS). With this, @run becomes more
2876 on its arguments (~users and $VARS). With this, @run becomes more
2865 like a normal command-line.
2877 like a normal command-line.
2866
2878
2867 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2879 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2868 bugs related to embedding and cleaned up that code. A fairly
2880 bugs related to embedding and cleaned up that code. A fairly
2869 important one was the impossibility to access the global namespace
2881 important one was the impossibility to access the global namespace
2870 through the embedded IPython (only local variables were visible).
2882 through the embedded IPython (only local variables were visible).
2871
2883
2872 2003-01-14 Fernando Perez <fperez@colorado.edu>
2884 2003-01-14 Fernando Perez <fperez@colorado.edu>
2873
2885
2874 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2886 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2875 auto-calling to be a bit more conservative. Now it doesn't get
2887 auto-calling to be a bit more conservative. Now it doesn't get
2876 triggered if any of '!=()<>' are in the rest of the input line, to
2888 triggered if any of '!=()<>' are in the rest of the input line, to
2877 allow comparing callables. Thanks to Alex for the heads up.
2889 allow comparing callables. Thanks to Alex for the heads up.
2878
2890
2879 2003-01-07 Fernando Perez <fperez@colorado.edu>
2891 2003-01-07 Fernando Perez <fperez@colorado.edu>
2880
2892
2881 * IPython/genutils.py (page): fixed estimation of the number of
2893 * IPython/genutils.py (page): fixed estimation of the number of
2882 lines in a string to be paged to simply count newlines. This
2894 lines in a string to be paged to simply count newlines. This
2883 prevents over-guessing due to embedded escape sequences. A better
2895 prevents over-guessing due to embedded escape sequences. A better
2884 long-term solution would involve stripping out the control chars
2896 long-term solution would involve stripping out the control chars
2885 for the count, but it's potentially so expensive I just don't
2897 for the count, but it's potentially so expensive I just don't
2886 think it's worth doing.
2898 think it's worth doing.
2887
2899
2888 2002-12-19 *** Released version 0.2.14pre50
2900 2002-12-19 *** Released version 0.2.14pre50
2889
2901
2890 2002-12-19 Fernando Perez <fperez@colorado.edu>
2902 2002-12-19 Fernando Perez <fperez@colorado.edu>
2891
2903
2892 * tools/release (version): Changed release scripts to inform
2904 * tools/release (version): Changed release scripts to inform
2893 Andrea and build a NEWS file with a list of recent changes.
2905 Andrea and build a NEWS file with a list of recent changes.
2894
2906
2895 * IPython/ColorANSI.py (__all__): changed terminal detection
2907 * IPython/ColorANSI.py (__all__): changed terminal detection
2896 code. Seems to work better for xterms without breaking
2908 code. Seems to work better for xterms without breaking
2897 konsole. Will need more testing to determine if WinXP and Mac OSX
2909 konsole. Will need more testing to determine if WinXP and Mac OSX
2898 also work ok.
2910 also work ok.
2899
2911
2900 2002-12-18 *** Released version 0.2.14pre49
2912 2002-12-18 *** Released version 0.2.14pre49
2901
2913
2902 2002-12-18 Fernando Perez <fperez@colorado.edu>
2914 2002-12-18 Fernando Perez <fperez@colorado.edu>
2903
2915
2904 * Docs: added new info about Mac OSX, from Andrea.
2916 * Docs: added new info about Mac OSX, from Andrea.
2905
2917
2906 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2918 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2907 allow direct plotting of python strings whose format is the same
2919 allow direct plotting of python strings whose format is the same
2908 of gnuplot data files.
2920 of gnuplot data files.
2909
2921
2910 2002-12-16 Fernando Perez <fperez@colorado.edu>
2922 2002-12-16 Fernando Perez <fperez@colorado.edu>
2911
2923
2912 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2924 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2913 value of exit question to be acknowledged.
2925 value of exit question to be acknowledged.
2914
2926
2915 2002-12-03 Fernando Perez <fperez@colorado.edu>
2927 2002-12-03 Fernando Perez <fperez@colorado.edu>
2916
2928
2917 * IPython/ipmaker.py: removed generators, which had been added
2929 * IPython/ipmaker.py: removed generators, which had been added
2918 by mistake in an earlier debugging run. This was causing trouble
2930 by mistake in an earlier debugging run. This was causing trouble
2919 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2931 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2920 for pointing this out.
2932 for pointing this out.
2921
2933
2922 2002-11-17 Fernando Perez <fperez@colorado.edu>
2934 2002-11-17 Fernando Perez <fperez@colorado.edu>
2923
2935
2924 * Manual: updated the Gnuplot section.
2936 * Manual: updated the Gnuplot section.
2925
2937
2926 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2938 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2927 a much better split of what goes in Runtime and what goes in
2939 a much better split of what goes in Runtime and what goes in
2928 Interactive.
2940 Interactive.
2929
2941
2930 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2942 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2931 being imported from iplib.
2943 being imported from iplib.
2932
2944
2933 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2945 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2934 for command-passing. Now the global Gnuplot instance is called
2946 for command-passing. Now the global Gnuplot instance is called
2935 'gp' instead of 'g', which was really a far too fragile and
2947 'gp' instead of 'g', which was really a far too fragile and
2936 common name.
2948 common name.
2937
2949
2938 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2950 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2939 bounding boxes generated by Gnuplot for square plots.
2951 bounding boxes generated by Gnuplot for square plots.
2940
2952
2941 * IPython/genutils.py (popkey): new function added. I should
2953 * IPython/genutils.py (popkey): new function added. I should
2942 suggest this on c.l.py as a dict method, it seems useful.
2954 suggest this on c.l.py as a dict method, it seems useful.
2943
2955
2944 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2956 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2945 to transparently handle PostScript generation. MUCH better than
2957 to transparently handle PostScript generation. MUCH better than
2946 the previous plot_eps/replot_eps (which I removed now). The code
2958 the previous plot_eps/replot_eps (which I removed now). The code
2947 is also fairly clean and well documented now (including
2959 is also fairly clean and well documented now (including
2948 docstrings).
2960 docstrings).
2949
2961
2950 2002-11-13 Fernando Perez <fperez@colorado.edu>
2962 2002-11-13 Fernando Perez <fperez@colorado.edu>
2951
2963
2952 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2964 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2953 (inconsistent with options).
2965 (inconsistent with options).
2954
2966
2955 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2967 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2956 manually disabled, I don't know why. Fixed it.
2968 manually disabled, I don't know why. Fixed it.
2957 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2969 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2958 eps output.
2970 eps output.
2959
2971
2960 2002-11-12 Fernando Perez <fperez@colorado.edu>
2972 2002-11-12 Fernando Perez <fperez@colorado.edu>
2961
2973
2962 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2974 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2963 don't propagate up to caller. Fixes crash reported by François
2975 don't propagate up to caller. Fixes crash reported by François
2964 Pinard.
2976 Pinard.
2965
2977
2966 2002-11-09 Fernando Perez <fperez@colorado.edu>
2978 2002-11-09 Fernando Perez <fperez@colorado.edu>
2967
2979
2968 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2980 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2969 history file for new users.
2981 history file for new users.
2970 (make_IPython): fixed bug where initial install would leave the
2982 (make_IPython): fixed bug where initial install would leave the
2971 user running in the .ipython dir.
2983 user running in the .ipython dir.
2972 (make_IPython): fixed bug where config dir .ipython would be
2984 (make_IPython): fixed bug where config dir .ipython would be
2973 created regardless of the given -ipythondir option. Thanks to Cory
2985 created regardless of the given -ipythondir option. Thanks to Cory
2974 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2986 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2975
2987
2976 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2988 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2977 type confirmations. Will need to use it in all of IPython's code
2989 type confirmations. Will need to use it in all of IPython's code
2978 consistently.
2990 consistently.
2979
2991
2980 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2992 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2981 context to print 31 lines instead of the default 5. This will make
2993 context to print 31 lines instead of the default 5. This will make
2982 the crash reports extremely detailed in case the problem is in
2994 the crash reports extremely detailed in case the problem is in
2983 libraries I don't have access to.
2995 libraries I don't have access to.
2984
2996
2985 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2997 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2986 line of defense' code to still crash, but giving users fair
2998 line of defense' code to still crash, but giving users fair
2987 warning. I don't want internal errors to go unreported: if there's
2999 warning. I don't want internal errors to go unreported: if there's
2988 an internal problem, IPython should crash and generate a full
3000 an internal problem, IPython should crash and generate a full
2989 report.
3001 report.
2990
3002
2991 2002-11-08 Fernando Perez <fperez@colorado.edu>
3003 2002-11-08 Fernando Perez <fperez@colorado.edu>
2992
3004
2993 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3005 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2994 otherwise uncaught exceptions which can appear if people set
3006 otherwise uncaught exceptions which can appear if people set
2995 sys.stdout to something badly broken. Thanks to a crash report
3007 sys.stdout to something badly broken. Thanks to a crash report
2996 from henni-AT-mail.brainbot.com.
3008 from henni-AT-mail.brainbot.com.
2997
3009
2998 2002-11-04 Fernando Perez <fperez@colorado.edu>
3010 2002-11-04 Fernando Perez <fperez@colorado.edu>
2999
3011
3000 * IPython/iplib.py (InteractiveShell.interact): added
3012 * IPython/iplib.py (InteractiveShell.interact): added
3001 __IPYTHON__active to the builtins. It's a flag which goes on when
3013 __IPYTHON__active to the builtins. It's a flag which goes on when
3002 the interaction starts and goes off again when it stops. This
3014 the interaction starts and goes off again when it stops. This
3003 allows embedding code to detect being inside IPython. Before this
3015 allows embedding code to detect being inside IPython. Before this
3004 was done via __IPYTHON__, but that only shows that an IPython
3016 was done via __IPYTHON__, but that only shows that an IPython
3005 instance has been created.
3017 instance has been created.
3006
3018
3007 * IPython/Magic.py (Magic.magic_env): I realized that in a
3019 * IPython/Magic.py (Magic.magic_env): I realized that in a
3008 UserDict, instance.data holds the data as a normal dict. So I
3020 UserDict, instance.data holds the data as a normal dict. So I
3009 modified @env to return os.environ.data instead of rebuilding a
3021 modified @env to return os.environ.data instead of rebuilding a
3010 dict by hand.
3022 dict by hand.
3011
3023
3012 2002-11-02 Fernando Perez <fperez@colorado.edu>
3024 2002-11-02 Fernando Perez <fperez@colorado.edu>
3013
3025
3014 * IPython/genutils.py (warn): changed so that level 1 prints no
3026 * IPython/genutils.py (warn): changed so that level 1 prints no
3015 header. Level 2 is now the default (with 'WARNING' header, as
3027 header. Level 2 is now the default (with 'WARNING' header, as
3016 before). I think I tracked all places where changes were needed in
3028 before). I think I tracked all places where changes were needed in
3017 IPython, but outside code using the old level numbering may have
3029 IPython, but outside code using the old level numbering may have
3018 broken.
3030 broken.
3019
3031
3020 * IPython/iplib.py (InteractiveShell.runcode): added this to
3032 * IPython/iplib.py (InteractiveShell.runcode): added this to
3021 handle the tracebacks in SystemExit traps correctly. The previous
3033 handle the tracebacks in SystemExit traps correctly. The previous
3022 code (through interact) was printing more of the stack than
3034 code (through interact) was printing more of the stack than
3023 necessary, showing IPython internal code to the user.
3035 necessary, showing IPython internal code to the user.
3024
3036
3025 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3037 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3026 default. Now that the default at the confirmation prompt is yes,
3038 default. Now that the default at the confirmation prompt is yes,
3027 it's not so intrusive. François' argument that ipython sessions
3039 it's not so intrusive. François' argument that ipython sessions
3028 tend to be complex enough not to lose them from an accidental C-d,
3040 tend to be complex enough not to lose them from an accidental C-d,
3029 is a valid one.
3041 is a valid one.
3030
3042
3031 * IPython/iplib.py (InteractiveShell.interact): added a
3043 * IPython/iplib.py (InteractiveShell.interact): added a
3032 showtraceback() call to the SystemExit trap, and modified the exit
3044 showtraceback() call to the SystemExit trap, and modified the exit
3033 confirmation to have yes as the default.
3045 confirmation to have yes as the default.
3034
3046
3035 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3047 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3036 this file. It's been gone from the code for a long time, this was
3048 this file. It's been gone from the code for a long time, this was
3037 simply leftover junk.
3049 simply leftover junk.
3038
3050
3039 2002-11-01 Fernando Perez <fperez@colorado.edu>
3051 2002-11-01 Fernando Perez <fperez@colorado.edu>
3040
3052
3041 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3053 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3042 added. If set, IPython now traps EOF and asks for
3054 added. If set, IPython now traps EOF and asks for
3043 confirmation. After a request by François Pinard.
3055 confirmation. After a request by François Pinard.
3044
3056
3045 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3057 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3046 of @abort, and with a new (better) mechanism for handling the
3058 of @abort, and with a new (better) mechanism for handling the
3047 exceptions.
3059 exceptions.
3048
3060
3049 2002-10-27 Fernando Perez <fperez@colorado.edu>
3061 2002-10-27 Fernando Perez <fperez@colorado.edu>
3050
3062
3051 * IPython/usage.py (__doc__): updated the --help information and
3063 * IPython/usage.py (__doc__): updated the --help information and
3052 the ipythonrc file to indicate that -log generates
3064 the ipythonrc file to indicate that -log generates
3053 ./ipython.log. Also fixed the corresponding info in @logstart.
3065 ./ipython.log. Also fixed the corresponding info in @logstart.
3054 This and several other fixes in the manuals thanks to reports by
3066 This and several other fixes in the manuals thanks to reports by
3055 François Pinard <pinard-AT-iro.umontreal.ca>.
3067 François Pinard <pinard-AT-iro.umontreal.ca>.
3056
3068
3057 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3069 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3058 refer to @logstart (instead of @log, which doesn't exist).
3070 refer to @logstart (instead of @log, which doesn't exist).
3059
3071
3060 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3072 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3061 AttributeError crash. Thanks to Christopher Armstrong
3073 AttributeError crash. Thanks to Christopher Armstrong
3062 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3074 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3063 introduced recently (in 0.2.14pre37) with the fix to the eval
3075 introduced recently (in 0.2.14pre37) with the fix to the eval
3064 problem mentioned below.
3076 problem mentioned below.
3065
3077
3066 2002-10-17 Fernando Perez <fperez@colorado.edu>
3078 2002-10-17 Fernando Perez <fperez@colorado.edu>
3067
3079
3068 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3080 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3069 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3081 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3070
3082
3071 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3083 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3072 this function to fix a problem reported by Alex Schmolck. He saw
3084 this function to fix a problem reported by Alex Schmolck. He saw
3073 it with list comprehensions and generators, which were getting
3085 it with list comprehensions and generators, which were getting
3074 called twice. The real problem was an 'eval' call in testing for
3086 called twice. The real problem was an 'eval' call in testing for
3075 automagic which was evaluating the input line silently.
3087 automagic which was evaluating the input line silently.
3076
3088
3077 This is a potentially very nasty bug, if the input has side
3089 This is a potentially very nasty bug, if the input has side
3078 effects which must not be repeated. The code is much cleaner now,
3090 effects which must not be repeated. The code is much cleaner now,
3079 without any blanket 'except' left and with a regexp test for
3091 without any blanket 'except' left and with a regexp test for
3080 actual function names.
3092 actual function names.
3081
3093
3082 But an eval remains, which I'm not fully comfortable with. I just
3094 But an eval remains, which I'm not fully comfortable with. I just
3083 don't know how to find out if an expression could be a callable in
3095 don't know how to find out if an expression could be a callable in
3084 the user's namespace without doing an eval on the string. However
3096 the user's namespace without doing an eval on the string. However
3085 that string is now much more strictly checked so that no code
3097 that string is now much more strictly checked so that no code
3086 slips by, so the eval should only happen for things that can
3098 slips by, so the eval should only happen for things that can
3087 really be only function/method names.
3099 really be only function/method names.
3088
3100
3089 2002-10-15 Fernando Perez <fperez@colorado.edu>
3101 2002-10-15 Fernando Perez <fperez@colorado.edu>
3090
3102
3091 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3103 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3092 OSX information to main manual, removed README_Mac_OSX file from
3104 OSX information to main manual, removed README_Mac_OSX file from
3093 distribution. Also updated credits for recent additions.
3105 distribution. Also updated credits for recent additions.
3094
3106
3095 2002-10-10 Fernando Perez <fperez@colorado.edu>
3107 2002-10-10 Fernando Perez <fperez@colorado.edu>
3096
3108
3097 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3109 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3098 terminal-related issues. Many thanks to Andrea Riciputi
3110 terminal-related issues. Many thanks to Andrea Riciputi
3099 <andrea.riciputi-AT-libero.it> for writing it.
3111 <andrea.riciputi-AT-libero.it> for writing it.
3100
3112
3101 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3113 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3102 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3114 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3103
3115
3104 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3116 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3105 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3117 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3106 <syver-en-AT-online.no> who both submitted patches for this problem.
3118 <syver-en-AT-online.no> who both submitted patches for this problem.
3107
3119
3108 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3120 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3109 global embedding to make sure that things don't overwrite user
3121 global embedding to make sure that things don't overwrite user
3110 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3122 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3111
3123
3112 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3124 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3113 compatibility. Thanks to Hayden Callow
3125 compatibility. Thanks to Hayden Callow
3114 <h.callow-AT-elec.canterbury.ac.nz>
3126 <h.callow-AT-elec.canterbury.ac.nz>
3115
3127
3116 2002-10-04 Fernando Perez <fperez@colorado.edu>
3128 2002-10-04 Fernando Perez <fperez@colorado.edu>
3117
3129
3118 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3130 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3119 Gnuplot.File objects.
3131 Gnuplot.File objects.
3120
3132
3121 2002-07-23 Fernando Perez <fperez@colorado.edu>
3133 2002-07-23 Fernando Perez <fperez@colorado.edu>
3122
3134
3123 * IPython/genutils.py (timing): Added timings() and timing() for
3135 * IPython/genutils.py (timing): Added timings() and timing() for
3124 quick access to the most commonly needed data, the execution
3136 quick access to the most commonly needed data, the execution
3125 times. Old timing() renamed to timings_out().
3137 times. Old timing() renamed to timings_out().
3126
3138
3127 2002-07-18 Fernando Perez <fperez@colorado.edu>
3139 2002-07-18 Fernando Perez <fperez@colorado.edu>
3128
3140
3129 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3141 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3130 bug with nested instances disrupting the parent's tab completion.
3142 bug with nested instances disrupting the parent's tab completion.
3131
3143
3132 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3144 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3133 all_completions code to begin the emacs integration.
3145 all_completions code to begin the emacs integration.
3134
3146
3135 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3147 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3136 argument to allow titling individual arrays when plotting.
3148 argument to allow titling individual arrays when plotting.
3137
3149
3138 2002-07-15 Fernando Perez <fperez@colorado.edu>
3150 2002-07-15 Fernando Perez <fperez@colorado.edu>
3139
3151
3140 * setup.py (make_shortcut): changed to retrieve the value of
3152 * setup.py (make_shortcut): changed to retrieve the value of
3141 'Program Files' directory from the registry (this value changes in
3153 'Program Files' directory from the registry (this value changes in
3142 non-english versions of Windows). Thanks to Thomas Fanslau
3154 non-english versions of Windows). Thanks to Thomas Fanslau
3143 <tfanslau-AT-gmx.de> for the report.
3155 <tfanslau-AT-gmx.de> for the report.
3144
3156
3145 2002-07-10 Fernando Perez <fperez@colorado.edu>
3157 2002-07-10 Fernando Perez <fperez@colorado.edu>
3146
3158
3147 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3159 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3148 a bug in pdb, which crashes if a line with only whitespace is
3160 a bug in pdb, which crashes if a line with only whitespace is
3149 entered. Bug report submitted to sourceforge.
3161 entered. Bug report submitted to sourceforge.
3150
3162
3151 2002-07-09 Fernando Perez <fperez@colorado.edu>
3163 2002-07-09 Fernando Perez <fperez@colorado.edu>
3152
3164
3153 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3165 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3154 reporting exceptions (it's a bug in inspect.py, I just set a
3166 reporting exceptions (it's a bug in inspect.py, I just set a
3155 workaround).
3167 workaround).
3156
3168
3157 2002-07-08 Fernando Perez <fperez@colorado.edu>
3169 2002-07-08 Fernando Perez <fperez@colorado.edu>
3158
3170
3159 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3171 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3160 __IPYTHON__ in __builtins__ to show up in user_ns.
3172 __IPYTHON__ in __builtins__ to show up in user_ns.
3161
3173
3162 2002-07-03 Fernando Perez <fperez@colorado.edu>
3174 2002-07-03 Fernando Perez <fperez@colorado.edu>
3163
3175
3164 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3176 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3165 name from @gp_set_instance to @gp_set_default.
3177 name from @gp_set_instance to @gp_set_default.
3166
3178
3167 * IPython/ipmaker.py (make_IPython): default editor value set to
3179 * IPython/ipmaker.py (make_IPython): default editor value set to
3168 '0' (a string), to match the rc file. Otherwise will crash when
3180 '0' (a string), to match the rc file. Otherwise will crash when
3169 .strip() is called on it.
3181 .strip() is called on it.
3170
3182
3171
3183
3172 2002-06-28 Fernando Perez <fperez@colorado.edu>
3184 2002-06-28 Fernando Perez <fperez@colorado.edu>
3173
3185
3174 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3186 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3175 of files in current directory when a file is executed via
3187 of files in current directory when a file is executed via
3176 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3188 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3177
3189
3178 * setup.py (manfiles): fix for rpm builds, submitted by RA
3190 * setup.py (manfiles): fix for rpm builds, submitted by RA
3179 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3191 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3180
3192
3181 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3193 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3182 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3194 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3183 string!). A. Schmolck caught this one.
3195 string!). A. Schmolck caught this one.
3184
3196
3185 2002-06-27 Fernando Perez <fperez@colorado.edu>
3197 2002-06-27 Fernando Perez <fperez@colorado.edu>
3186
3198
3187 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3199 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3188 defined files at the cmd line. __name__ wasn't being set to
3200 defined files at the cmd line. __name__ wasn't being set to
3189 __main__.
3201 __main__.
3190
3202
3191 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3203 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3192 regular lists and tuples besides Numeric arrays.
3204 regular lists and tuples besides Numeric arrays.
3193
3205
3194 * IPython/Prompts.py (CachedOutput.__call__): Added output
3206 * IPython/Prompts.py (CachedOutput.__call__): Added output
3195 supression for input ending with ';'. Similar to Mathematica and
3207 supression for input ending with ';'. Similar to Mathematica and
3196 Matlab. The _* vars and Out[] list are still updated, just like
3208 Matlab. The _* vars and Out[] list are still updated, just like
3197 Mathematica behaves.
3209 Mathematica behaves.
3198
3210
3199 2002-06-25 Fernando Perez <fperez@colorado.edu>
3211 2002-06-25 Fernando Perez <fperez@colorado.edu>
3200
3212
3201 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3213 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3202 .ini extensions for profiels under Windows.
3214 .ini extensions for profiels under Windows.
3203
3215
3204 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3216 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3205 string form. Fix contributed by Alexander Schmolck
3217 string form. Fix contributed by Alexander Schmolck
3206 <a.schmolck-AT-gmx.net>
3218 <a.schmolck-AT-gmx.net>
3207
3219
3208 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3220 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3209 pre-configured Gnuplot instance.
3221 pre-configured Gnuplot instance.
3210
3222
3211 2002-06-21 Fernando Perez <fperez@colorado.edu>
3223 2002-06-21 Fernando Perez <fperez@colorado.edu>
3212
3224
3213 * IPython/numutils.py (exp_safe): new function, works around the
3225 * IPython/numutils.py (exp_safe): new function, works around the
3214 underflow problems in Numeric.
3226 underflow problems in Numeric.
3215 (log2): New fn. Safe log in base 2: returns exact integer answer
3227 (log2): New fn. Safe log in base 2: returns exact integer answer
3216 for exact integer powers of 2.
3228 for exact integer powers of 2.
3217
3229
3218 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3230 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3219 properly.
3231 properly.
3220
3232
3221 2002-06-20 Fernando Perez <fperez@colorado.edu>
3233 2002-06-20 Fernando Perez <fperez@colorado.edu>
3222
3234
3223 * IPython/genutils.py (timing): new function like
3235 * IPython/genutils.py (timing): new function like
3224 Mathematica's. Similar to time_test, but returns more info.
3236 Mathematica's. Similar to time_test, but returns more info.
3225
3237
3226 2002-06-18 Fernando Perez <fperez@colorado.edu>
3238 2002-06-18 Fernando Perez <fperez@colorado.edu>
3227
3239
3228 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3240 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3229 according to Mike Heeter's suggestions.
3241 according to Mike Heeter's suggestions.
3230
3242
3231 2002-06-16 Fernando Perez <fperez@colorado.edu>
3243 2002-06-16 Fernando Perez <fperez@colorado.edu>
3232
3244
3233 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3245 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3234 system. GnuplotMagic is gone as a user-directory option. New files
3246 system. GnuplotMagic is gone as a user-directory option. New files
3235 make it easier to use all the gnuplot stuff both from external
3247 make it easier to use all the gnuplot stuff both from external
3236 programs as well as from IPython. Had to rewrite part of
3248 programs as well as from IPython. Had to rewrite part of
3237 hardcopy() b/c of a strange bug: often the ps files simply don't
3249 hardcopy() b/c of a strange bug: often the ps files simply don't
3238 get created, and require a repeat of the command (often several
3250 get created, and require a repeat of the command (often several
3239 times).
3251 times).
3240
3252
3241 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3253 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3242 resolve output channel at call time, so that if sys.stderr has
3254 resolve output channel at call time, so that if sys.stderr has
3243 been redirected by user this gets honored.
3255 been redirected by user this gets honored.
3244
3256
3245 2002-06-13 Fernando Perez <fperez@colorado.edu>
3257 2002-06-13 Fernando Perez <fperez@colorado.edu>
3246
3258
3247 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3259 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3248 IPShell. Kept a copy with the old names to avoid breaking people's
3260 IPShell. Kept a copy with the old names to avoid breaking people's
3249 embedded code.
3261 embedded code.
3250
3262
3251 * IPython/ipython: simplified it to the bare minimum after
3263 * IPython/ipython: simplified it to the bare minimum after
3252 Holger's suggestions. Added info about how to use it in
3264 Holger's suggestions. Added info about how to use it in
3253 PYTHONSTARTUP.
3265 PYTHONSTARTUP.
3254
3266
3255 * IPython/Shell.py (IPythonShell): changed the options passing
3267 * IPython/Shell.py (IPythonShell): changed the options passing
3256 from a string with funky %s replacements to a straight list. Maybe
3268 from a string with funky %s replacements to a straight list. Maybe
3257 a bit more typing, but it follows sys.argv conventions, so there's
3269 a bit more typing, but it follows sys.argv conventions, so there's
3258 less special-casing to remember.
3270 less special-casing to remember.
3259
3271
3260 2002-06-12 Fernando Perez <fperez@colorado.edu>
3272 2002-06-12 Fernando Perez <fperez@colorado.edu>
3261
3273
3262 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3274 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3263 command. Thanks to a suggestion by Mike Heeter.
3275 command. Thanks to a suggestion by Mike Heeter.
3264 (Magic.magic_pfile): added behavior to look at filenames if given
3276 (Magic.magic_pfile): added behavior to look at filenames if given
3265 arg is not a defined object.
3277 arg is not a defined object.
3266 (Magic.magic_save): New @save function to save code snippets. Also
3278 (Magic.magic_save): New @save function to save code snippets. Also
3267 a Mike Heeter idea.
3279 a Mike Heeter idea.
3268
3280
3269 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3281 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3270 plot() and replot(). Much more convenient now, especially for
3282 plot() and replot(). Much more convenient now, especially for
3271 interactive use.
3283 interactive use.
3272
3284
3273 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3285 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3274 filenames.
3286 filenames.
3275
3287
3276 2002-06-02 Fernando Perez <fperez@colorado.edu>
3288 2002-06-02 Fernando Perez <fperez@colorado.edu>
3277
3289
3278 * IPython/Struct.py (Struct.__init__): modified to admit
3290 * IPython/Struct.py (Struct.__init__): modified to admit
3279 initialization via another struct.
3291 initialization via another struct.
3280
3292
3281 * IPython/genutils.py (SystemExec.__init__): New stateful
3293 * IPython/genutils.py (SystemExec.__init__): New stateful
3282 interface to xsys and bq. Useful for writing system scripts.
3294 interface to xsys and bq. Useful for writing system scripts.
3283
3295
3284 2002-05-30 Fernando Perez <fperez@colorado.edu>
3296 2002-05-30 Fernando Perez <fperez@colorado.edu>
3285
3297
3286 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3298 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3287 documents. This will make the user download smaller (it's getting
3299 documents. This will make the user download smaller (it's getting
3288 too big).
3300 too big).
3289
3301
3290 2002-05-29 Fernando Perez <fperez@colorado.edu>
3302 2002-05-29 Fernando Perez <fperez@colorado.edu>
3291
3303
3292 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3304 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3293 fix problems with shelve and pickle. Seems to work, but I don't
3305 fix problems with shelve and pickle. Seems to work, but I don't
3294 know if corner cases break it. Thanks to Mike Heeter
3306 know if corner cases break it. Thanks to Mike Heeter
3295 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3307 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3296
3308
3297 2002-05-24 Fernando Perez <fperez@colorado.edu>
3309 2002-05-24 Fernando Perez <fperez@colorado.edu>
3298
3310
3299 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3311 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3300 macros having broken.
3312 macros having broken.
3301
3313
3302 2002-05-21 Fernando Perez <fperez@colorado.edu>
3314 2002-05-21 Fernando Perez <fperez@colorado.edu>
3303
3315
3304 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3316 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3305 introduced logging bug: all history before logging started was
3317 introduced logging bug: all history before logging started was
3306 being written one character per line! This came from the redesign
3318 being written one character per line! This came from the redesign
3307 of the input history as a special list which slices to strings,
3319 of the input history as a special list which slices to strings,
3308 not to lists.
3320 not to lists.
3309
3321
3310 2002-05-20 Fernando Perez <fperez@colorado.edu>
3322 2002-05-20 Fernando Perez <fperez@colorado.edu>
3311
3323
3312 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3324 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3313 be an attribute of all classes in this module. The design of these
3325 be an attribute of all classes in this module. The design of these
3314 classes needs some serious overhauling.
3326 classes needs some serious overhauling.
3315
3327
3316 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3328 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3317 which was ignoring '_' in option names.
3329 which was ignoring '_' in option names.
3318
3330
3319 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3331 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3320 'Verbose_novars' to 'Context' and made it the new default. It's a
3332 'Verbose_novars' to 'Context' and made it the new default. It's a
3321 bit more readable and also safer than verbose.
3333 bit more readable and also safer than verbose.
3322
3334
3323 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3335 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3324 triple-quoted strings.
3336 triple-quoted strings.
3325
3337
3326 * IPython/OInspect.py (__all__): new module exposing the object
3338 * IPython/OInspect.py (__all__): new module exposing the object
3327 introspection facilities. Now the corresponding magics are dummy
3339 introspection facilities. Now the corresponding magics are dummy
3328 wrappers around this. Having this module will make it much easier
3340 wrappers around this. Having this module will make it much easier
3329 to put these functions into our modified pdb.
3341 to put these functions into our modified pdb.
3330 This new object inspector system uses the new colorizing module,
3342 This new object inspector system uses the new colorizing module,
3331 so source code and other things are nicely syntax highlighted.
3343 so source code and other things are nicely syntax highlighted.
3332
3344
3333 2002-05-18 Fernando Perez <fperez@colorado.edu>
3345 2002-05-18 Fernando Perez <fperez@colorado.edu>
3334
3346
3335 * IPython/ColorANSI.py: Split the coloring tools into a separate
3347 * IPython/ColorANSI.py: Split the coloring tools into a separate
3336 module so I can use them in other code easier (they were part of
3348 module so I can use them in other code easier (they were part of
3337 ultraTB).
3349 ultraTB).
3338
3350
3339 2002-05-17 Fernando Perez <fperez@colorado.edu>
3351 2002-05-17 Fernando Perez <fperez@colorado.edu>
3340
3352
3341 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3353 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3342 fixed it to set the global 'g' also to the called instance, as
3354 fixed it to set the global 'g' also to the called instance, as
3343 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3355 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3344 user's 'g' variables).
3356 user's 'g' variables).
3345
3357
3346 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3358 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3347 global variables (aliases to _ih,_oh) so that users which expect
3359 global variables (aliases to _ih,_oh) so that users which expect
3348 In[5] or Out[7] to work aren't unpleasantly surprised.
3360 In[5] or Out[7] to work aren't unpleasantly surprised.
3349 (InputList.__getslice__): new class to allow executing slices of
3361 (InputList.__getslice__): new class to allow executing slices of
3350 input history directly. Very simple class, complements the use of
3362 input history directly. Very simple class, complements the use of
3351 macros.
3363 macros.
3352
3364
3353 2002-05-16 Fernando Perez <fperez@colorado.edu>
3365 2002-05-16 Fernando Perez <fperez@colorado.edu>
3354
3366
3355 * setup.py (docdirbase): make doc directory be just doc/IPython
3367 * setup.py (docdirbase): make doc directory be just doc/IPython
3356 without version numbers, it will reduce clutter for users.
3368 without version numbers, it will reduce clutter for users.
3357
3369
3358 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3370 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3359 execfile call to prevent possible memory leak. See for details:
3371 execfile call to prevent possible memory leak. See for details:
3360 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3372 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3361
3373
3362 2002-05-15 Fernando Perez <fperez@colorado.edu>
3374 2002-05-15 Fernando Perez <fperez@colorado.edu>
3363
3375
3364 * IPython/Magic.py (Magic.magic_psource): made the object
3376 * IPython/Magic.py (Magic.magic_psource): made the object
3365 introspection names be more standard: pdoc, pdef, pfile and
3377 introspection names be more standard: pdoc, pdef, pfile and
3366 psource. They all print/page their output, and it makes
3378 psource. They all print/page their output, and it makes
3367 remembering them easier. Kept old names for compatibility as
3379 remembering them easier. Kept old names for compatibility as
3368 aliases.
3380 aliases.
3369
3381
3370 2002-05-14 Fernando Perez <fperez@colorado.edu>
3382 2002-05-14 Fernando Perez <fperez@colorado.edu>
3371
3383
3372 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3384 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3373 what the mouse problem was. The trick is to use gnuplot with temp
3385 what the mouse problem was. The trick is to use gnuplot with temp
3374 files and NOT with pipes (for data communication), because having
3386 files and NOT with pipes (for data communication), because having
3375 both pipes and the mouse on is bad news.
3387 both pipes and the mouse on is bad news.
3376
3388
3377 2002-05-13 Fernando Perez <fperez@colorado.edu>
3389 2002-05-13 Fernando Perez <fperez@colorado.edu>
3378
3390
3379 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3391 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3380 bug. Information would be reported about builtins even when
3392 bug. Information would be reported about builtins even when
3381 user-defined functions overrode them.
3393 user-defined functions overrode them.
3382
3394
3383 2002-05-11 Fernando Perez <fperez@colorado.edu>
3395 2002-05-11 Fernando Perez <fperez@colorado.edu>
3384
3396
3385 * IPython/__init__.py (__all__): removed FlexCompleter from
3397 * IPython/__init__.py (__all__): removed FlexCompleter from
3386 __all__ so that things don't fail in platforms without readline.
3398 __all__ so that things don't fail in platforms without readline.
3387
3399
3388 2002-05-10 Fernando Perez <fperez@colorado.edu>
3400 2002-05-10 Fernando Perez <fperez@colorado.edu>
3389
3401
3390 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3402 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3391 it requires Numeric, effectively making Numeric a dependency for
3403 it requires Numeric, effectively making Numeric a dependency for
3392 IPython.
3404 IPython.
3393
3405
3394 * Released 0.2.13
3406 * Released 0.2.13
3395
3407
3396 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3408 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3397 profiler interface. Now all the major options from the profiler
3409 profiler interface. Now all the major options from the profiler
3398 module are directly supported in IPython, both for single
3410 module are directly supported in IPython, both for single
3399 expressions (@prun) and for full programs (@run -p).
3411 expressions (@prun) and for full programs (@run -p).
3400
3412
3401 2002-05-09 Fernando Perez <fperez@colorado.edu>
3413 2002-05-09 Fernando Perez <fperez@colorado.edu>
3402
3414
3403 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3415 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3404 magic properly formatted for screen.
3416 magic properly formatted for screen.
3405
3417
3406 * setup.py (make_shortcut): Changed things to put pdf version in
3418 * setup.py (make_shortcut): Changed things to put pdf version in
3407 doc/ instead of doc/manual (had to change lyxport a bit).
3419 doc/ instead of doc/manual (had to change lyxport a bit).
3408
3420
3409 * IPython/Magic.py (Profile.string_stats): made profile runs go
3421 * IPython/Magic.py (Profile.string_stats): made profile runs go
3410 through pager (they are long and a pager allows searching, saving,
3422 through pager (they are long and a pager allows searching, saving,
3411 etc.)
3423 etc.)
3412
3424
3413 2002-05-08 Fernando Perez <fperez@colorado.edu>
3425 2002-05-08 Fernando Perez <fperez@colorado.edu>
3414
3426
3415 * Released 0.2.12
3427 * Released 0.2.12
3416
3428
3417 2002-05-06 Fernando Perez <fperez@colorado.edu>
3429 2002-05-06 Fernando Perez <fperez@colorado.edu>
3418
3430
3419 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3431 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3420 introduced); 'hist n1 n2' was broken.
3432 introduced); 'hist n1 n2' was broken.
3421 (Magic.magic_pdb): added optional on/off arguments to @pdb
3433 (Magic.magic_pdb): added optional on/off arguments to @pdb
3422 (Magic.magic_run): added option -i to @run, which executes code in
3434 (Magic.magic_run): added option -i to @run, which executes code in
3423 the IPython namespace instead of a clean one. Also added @irun as
3435 the IPython namespace instead of a clean one. Also added @irun as
3424 an alias to @run -i.
3436 an alias to @run -i.
3425
3437
3426 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3438 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3427 fixed (it didn't really do anything, the namespaces were wrong).
3439 fixed (it didn't really do anything, the namespaces were wrong).
3428
3440
3429 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3441 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3430
3442
3431 * IPython/__init__.py (__all__): Fixed package namespace, now
3443 * IPython/__init__.py (__all__): Fixed package namespace, now
3432 'import IPython' does give access to IPython.<all> as
3444 'import IPython' does give access to IPython.<all> as
3433 expected. Also renamed __release__ to Release.
3445 expected. Also renamed __release__ to Release.
3434
3446
3435 * IPython/Debugger.py (__license__): created new Pdb class which
3447 * IPython/Debugger.py (__license__): created new Pdb class which
3436 functions like a drop-in for the normal pdb.Pdb but does NOT
3448 functions like a drop-in for the normal pdb.Pdb but does NOT
3437 import readline by default. This way it doesn't muck up IPython's
3449 import readline by default. This way it doesn't muck up IPython's
3438 readline handling, and now tab-completion finally works in the
3450 readline handling, and now tab-completion finally works in the
3439 debugger -- sort of. It completes things globally visible, but the
3451 debugger -- sort of. It completes things globally visible, but the
3440 completer doesn't track the stack as pdb walks it. That's a bit
3452 completer doesn't track the stack as pdb walks it. That's a bit
3441 tricky, and I'll have to implement it later.
3453 tricky, and I'll have to implement it later.
3442
3454
3443 2002-05-05 Fernando Perez <fperez@colorado.edu>
3455 2002-05-05 Fernando Perez <fperez@colorado.edu>
3444
3456
3445 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3457 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3446 magic docstrings when printed via ? (explicit \'s were being
3458 magic docstrings when printed via ? (explicit \'s were being
3447 printed).
3459 printed).
3448
3460
3449 * IPython/ipmaker.py (make_IPython): fixed namespace
3461 * IPython/ipmaker.py (make_IPython): fixed namespace
3450 identification bug. Now variables loaded via logs or command-line
3462 identification bug. Now variables loaded via logs or command-line
3451 files are recognized in the interactive namespace by @who.
3463 files are recognized in the interactive namespace by @who.
3452
3464
3453 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3465 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3454 log replay system stemming from the string form of Structs.
3466 log replay system stemming from the string form of Structs.
3455
3467
3456 * IPython/Magic.py (Macro.__init__): improved macros to properly
3468 * IPython/Magic.py (Macro.__init__): improved macros to properly
3457 handle magic commands in them.
3469 handle magic commands in them.
3458 (Magic.magic_logstart): usernames are now expanded so 'logstart
3470 (Magic.magic_logstart): usernames are now expanded so 'logstart
3459 ~/mylog' now works.
3471 ~/mylog' now works.
3460
3472
3461 * IPython/iplib.py (complete): fixed bug where paths starting with
3473 * IPython/iplib.py (complete): fixed bug where paths starting with
3462 '/' would be completed as magic names.
3474 '/' would be completed as magic names.
3463
3475
3464 2002-05-04 Fernando Perez <fperez@colorado.edu>
3476 2002-05-04 Fernando Perez <fperez@colorado.edu>
3465
3477
3466 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3478 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3467 allow running full programs under the profiler's control.
3479 allow running full programs under the profiler's control.
3468
3480
3469 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3481 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3470 mode to report exceptions verbosely but without formatting
3482 mode to report exceptions verbosely but without formatting
3471 variables. This addresses the issue of ipython 'freezing' (it's
3483 variables. This addresses the issue of ipython 'freezing' (it's
3472 not frozen, but caught in an expensive formatting loop) when huge
3484 not frozen, but caught in an expensive formatting loop) when huge
3473 variables are in the context of an exception.
3485 variables are in the context of an exception.
3474 (VerboseTB.text): Added '--->' markers at line where exception was
3486 (VerboseTB.text): Added '--->' markers at line where exception was
3475 triggered. Much clearer to read, especially in NoColor modes.
3487 triggered. Much clearer to read, especially in NoColor modes.
3476
3488
3477 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3489 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3478 implemented in reverse when changing to the new parse_options().
3490 implemented in reverse when changing to the new parse_options().
3479
3491
3480 2002-05-03 Fernando Perez <fperez@colorado.edu>
3492 2002-05-03 Fernando Perez <fperez@colorado.edu>
3481
3493
3482 * IPython/Magic.py (Magic.parse_options): new function so that
3494 * IPython/Magic.py (Magic.parse_options): new function so that
3483 magics can parse options easier.
3495 magics can parse options easier.
3484 (Magic.magic_prun): new function similar to profile.run(),
3496 (Magic.magic_prun): new function similar to profile.run(),
3485 suggested by Chris Hart.
3497 suggested by Chris Hart.
3486 (Magic.magic_cd): fixed behavior so that it only changes if
3498 (Magic.magic_cd): fixed behavior so that it only changes if
3487 directory actually is in history.
3499 directory actually is in history.
3488
3500
3489 * IPython/usage.py (__doc__): added information about potential
3501 * IPython/usage.py (__doc__): added information about potential
3490 slowness of Verbose exception mode when there are huge data
3502 slowness of Verbose exception mode when there are huge data
3491 structures to be formatted (thanks to Archie Paulson).
3503 structures to be formatted (thanks to Archie Paulson).
3492
3504
3493 * IPython/ipmaker.py (make_IPython): Changed default logging
3505 * IPython/ipmaker.py (make_IPython): Changed default logging
3494 (when simply called with -log) to use curr_dir/ipython.log in
3506 (when simply called with -log) to use curr_dir/ipython.log in
3495 rotate mode. Fixed crash which was occuring with -log before
3507 rotate mode. Fixed crash which was occuring with -log before
3496 (thanks to Jim Boyle).
3508 (thanks to Jim Boyle).
3497
3509
3498 2002-05-01 Fernando Perez <fperez@colorado.edu>
3510 2002-05-01 Fernando Perez <fperez@colorado.edu>
3499
3511
3500 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3512 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3501 was nasty -- though somewhat of a corner case).
3513 was nasty -- though somewhat of a corner case).
3502
3514
3503 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3515 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3504 text (was a bug).
3516 text (was a bug).
3505
3517
3506 2002-04-30 Fernando Perez <fperez@colorado.edu>
3518 2002-04-30 Fernando Perez <fperez@colorado.edu>
3507
3519
3508 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3520 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3509 a print after ^D or ^C from the user so that the In[] prompt
3521 a print after ^D or ^C from the user so that the In[] prompt
3510 doesn't over-run the gnuplot one.
3522 doesn't over-run the gnuplot one.
3511
3523
3512 2002-04-29 Fernando Perez <fperez@colorado.edu>
3524 2002-04-29 Fernando Perez <fperez@colorado.edu>
3513
3525
3514 * Released 0.2.10
3526 * Released 0.2.10
3515
3527
3516 * IPython/__release__.py (version): get date dynamically.
3528 * IPython/__release__.py (version): get date dynamically.
3517
3529
3518 * Misc. documentation updates thanks to Arnd's comments. Also ran
3530 * Misc. documentation updates thanks to Arnd's comments. Also ran
3519 a full spellcheck on the manual (hadn't been done in a while).
3531 a full spellcheck on the manual (hadn't been done in a while).
3520
3532
3521 2002-04-27 Fernando Perez <fperez@colorado.edu>
3533 2002-04-27 Fernando Perez <fperez@colorado.edu>
3522
3534
3523 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3535 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3524 starting a log in mid-session would reset the input history list.
3536 starting a log in mid-session would reset the input history list.
3525
3537
3526 2002-04-26 Fernando Perez <fperez@colorado.edu>
3538 2002-04-26 Fernando Perez <fperez@colorado.edu>
3527
3539
3528 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3540 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3529 all files were being included in an update. Now anything in
3541 all files were being included in an update. Now anything in
3530 UserConfig that matches [A-Za-z]*.py will go (this excludes
3542 UserConfig that matches [A-Za-z]*.py will go (this excludes
3531 __init__.py)
3543 __init__.py)
3532
3544
3533 2002-04-25 Fernando Perez <fperez@colorado.edu>
3545 2002-04-25 Fernando Perez <fperez@colorado.edu>
3534
3546
3535 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3547 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3536 to __builtins__ so that any form of embedded or imported code can
3548 to __builtins__ so that any form of embedded or imported code can
3537 test for being inside IPython.
3549 test for being inside IPython.
3538
3550
3539 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3551 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3540 changed to GnuplotMagic because it's now an importable module,
3552 changed to GnuplotMagic because it's now an importable module,
3541 this makes the name follow that of the standard Gnuplot module.
3553 this makes the name follow that of the standard Gnuplot module.
3542 GnuplotMagic can now be loaded at any time in mid-session.
3554 GnuplotMagic can now be loaded at any time in mid-session.
3543
3555
3544 2002-04-24 Fernando Perez <fperez@colorado.edu>
3556 2002-04-24 Fernando Perez <fperez@colorado.edu>
3545
3557
3546 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3558 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3547 the globals (IPython has its own namespace) and the
3559 the globals (IPython has its own namespace) and the
3548 PhysicalQuantity stuff is much better anyway.
3560 PhysicalQuantity stuff is much better anyway.
3549
3561
3550 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3562 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3551 embedding example to standard user directory for
3563 embedding example to standard user directory for
3552 distribution. Also put it in the manual.
3564 distribution. Also put it in the manual.
3553
3565
3554 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3566 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3555 instance as first argument (so it doesn't rely on some obscure
3567 instance as first argument (so it doesn't rely on some obscure
3556 hidden global).
3568 hidden global).
3557
3569
3558 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3570 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3559 delimiters. While it prevents ().TAB from working, it allows
3571 delimiters. While it prevents ().TAB from working, it allows
3560 completions in open (... expressions. This is by far a more common
3572 completions in open (... expressions. This is by far a more common
3561 case.
3573 case.
3562
3574
3563 2002-04-23 Fernando Perez <fperez@colorado.edu>
3575 2002-04-23 Fernando Perez <fperez@colorado.edu>
3564
3576
3565 * IPython/Extensions/InterpreterPasteInput.py: new
3577 * IPython/Extensions/InterpreterPasteInput.py: new
3566 syntax-processing module for pasting lines with >>> or ... at the
3578 syntax-processing module for pasting lines with >>> or ... at the
3567 start.
3579 start.
3568
3580
3569 * IPython/Extensions/PhysicalQ_Interactive.py
3581 * IPython/Extensions/PhysicalQ_Interactive.py
3570 (PhysicalQuantityInteractive.__int__): fixed to work with either
3582 (PhysicalQuantityInteractive.__int__): fixed to work with either
3571 Numeric or math.
3583 Numeric or math.
3572
3584
3573 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3585 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3574 provided profiles. Now we have:
3586 provided profiles. Now we have:
3575 -math -> math module as * and cmath with its own namespace.
3587 -math -> math module as * and cmath with its own namespace.
3576 -numeric -> Numeric as *, plus gnuplot & grace
3588 -numeric -> Numeric as *, plus gnuplot & grace
3577 -physics -> same as before
3589 -physics -> same as before
3578
3590
3579 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3591 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3580 user-defined magics wouldn't be found by @magic if they were
3592 user-defined magics wouldn't be found by @magic if they were
3581 defined as class methods. Also cleaned up the namespace search
3593 defined as class methods. Also cleaned up the namespace search
3582 logic and the string building (to use %s instead of many repeated
3594 logic and the string building (to use %s instead of many repeated
3583 string adds).
3595 string adds).
3584
3596
3585 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3597 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3586 of user-defined magics to operate with class methods (cleaner, in
3598 of user-defined magics to operate with class methods (cleaner, in
3587 line with the gnuplot code).
3599 line with the gnuplot code).
3588
3600
3589 2002-04-22 Fernando Perez <fperez@colorado.edu>
3601 2002-04-22 Fernando Perez <fperez@colorado.edu>
3590
3602
3591 * setup.py: updated dependency list so that manual is updated when
3603 * setup.py: updated dependency list so that manual is updated when
3592 all included files change.
3604 all included files change.
3593
3605
3594 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3606 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3595 the delimiter removal option (the fix is ugly right now).
3607 the delimiter removal option (the fix is ugly right now).
3596
3608
3597 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3609 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3598 all of the math profile (quicker loading, no conflict between
3610 all of the math profile (quicker loading, no conflict between
3599 g-9.8 and g-gnuplot).
3611 g-9.8 and g-gnuplot).
3600
3612
3601 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3613 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3602 name of post-mortem files to IPython_crash_report.txt.
3614 name of post-mortem files to IPython_crash_report.txt.
3603
3615
3604 * Cleanup/update of the docs. Added all the new readline info and
3616 * Cleanup/update of the docs. Added all the new readline info and
3605 formatted all lists as 'real lists'.
3617 formatted all lists as 'real lists'.
3606
3618
3607 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3619 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3608 tab-completion options, since the full readline parse_and_bind is
3620 tab-completion options, since the full readline parse_and_bind is
3609 now accessible.
3621 now accessible.
3610
3622
3611 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3623 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3612 handling of readline options. Now users can specify any string to
3624 handling of readline options. Now users can specify any string to
3613 be passed to parse_and_bind(), as well as the delimiters to be
3625 be passed to parse_and_bind(), as well as the delimiters to be
3614 removed.
3626 removed.
3615 (InteractiveShell.__init__): Added __name__ to the global
3627 (InteractiveShell.__init__): Added __name__ to the global
3616 namespace so that things like Itpl which rely on its existence
3628 namespace so that things like Itpl which rely on its existence
3617 don't crash.
3629 don't crash.
3618 (InteractiveShell._prefilter): Defined the default with a _ so
3630 (InteractiveShell._prefilter): Defined the default with a _ so
3619 that prefilter() is easier to override, while the default one
3631 that prefilter() is easier to override, while the default one
3620 remains available.
3632 remains available.
3621
3633
3622 2002-04-18 Fernando Perez <fperez@colorado.edu>
3634 2002-04-18 Fernando Perez <fperez@colorado.edu>
3623
3635
3624 * Added information about pdb in the docs.
3636 * Added information about pdb in the docs.
3625
3637
3626 2002-04-17 Fernando Perez <fperez@colorado.edu>
3638 2002-04-17 Fernando Perez <fperez@colorado.edu>
3627
3639
3628 * IPython/ipmaker.py (make_IPython): added rc_override option to
3640 * IPython/ipmaker.py (make_IPython): added rc_override option to
3629 allow passing config options at creation time which may override
3641 allow passing config options at creation time which may override
3630 anything set in the config files or command line. This is
3642 anything set in the config files or command line. This is
3631 particularly useful for configuring embedded instances.
3643 particularly useful for configuring embedded instances.
3632
3644
3633 2002-04-15 Fernando Perez <fperez@colorado.edu>
3645 2002-04-15 Fernando Perez <fperez@colorado.edu>
3634
3646
3635 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3647 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3636 crash embedded instances because of the input cache falling out of
3648 crash embedded instances because of the input cache falling out of
3637 sync with the output counter.
3649 sync with the output counter.
3638
3650
3639 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3651 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3640 mode which calls pdb after an uncaught exception in IPython itself.
3652 mode which calls pdb after an uncaught exception in IPython itself.
3641
3653
3642 2002-04-14 Fernando Perez <fperez@colorado.edu>
3654 2002-04-14 Fernando Perez <fperez@colorado.edu>
3643
3655
3644 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3656 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3645 readline, fix it back after each call.
3657 readline, fix it back after each call.
3646
3658
3647 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3659 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3648 method to force all access via __call__(), which guarantees that
3660 method to force all access via __call__(), which guarantees that
3649 traceback references are properly deleted.
3661 traceback references are properly deleted.
3650
3662
3651 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3663 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3652 improve printing when pprint is in use.
3664 improve printing when pprint is in use.
3653
3665
3654 2002-04-13 Fernando Perez <fperez@colorado.edu>
3666 2002-04-13 Fernando Perez <fperez@colorado.edu>
3655
3667
3656 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3668 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3657 exceptions aren't caught anymore. If the user triggers one, he
3669 exceptions aren't caught anymore. If the user triggers one, he
3658 should know why he's doing it and it should go all the way up,
3670 should know why he's doing it and it should go all the way up,
3659 just like any other exception. So now @abort will fully kill the
3671 just like any other exception. So now @abort will fully kill the
3660 embedded interpreter and the embedding code (unless that happens
3672 embedded interpreter and the embedding code (unless that happens
3661 to catch SystemExit).
3673 to catch SystemExit).
3662
3674
3663 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3675 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3664 and a debugger() method to invoke the interactive pdb debugger
3676 and a debugger() method to invoke the interactive pdb debugger
3665 after printing exception information. Also added the corresponding
3677 after printing exception information. Also added the corresponding
3666 -pdb option and @pdb magic to control this feature, and updated
3678 -pdb option and @pdb magic to control this feature, and updated
3667 the docs. After a suggestion from Christopher Hart
3679 the docs. After a suggestion from Christopher Hart
3668 (hart-AT-caltech.edu).
3680 (hart-AT-caltech.edu).
3669
3681
3670 2002-04-12 Fernando Perez <fperez@colorado.edu>
3682 2002-04-12 Fernando Perez <fperez@colorado.edu>
3671
3683
3672 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3684 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3673 the exception handlers defined by the user (not the CrashHandler)
3685 the exception handlers defined by the user (not the CrashHandler)
3674 so that user exceptions don't trigger an ipython bug report.
3686 so that user exceptions don't trigger an ipython bug report.
3675
3687
3676 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3688 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3677 configurable (it should have always been so).
3689 configurable (it should have always been so).
3678
3690
3679 2002-03-26 Fernando Perez <fperez@colorado.edu>
3691 2002-03-26 Fernando Perez <fperez@colorado.edu>
3680
3692
3681 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3693 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3682 and there to fix embedding namespace issues. This should all be
3694 and there to fix embedding namespace issues. This should all be
3683 done in a more elegant way.
3695 done in a more elegant way.
3684
3696
3685 2002-03-25 Fernando Perez <fperez@colorado.edu>
3697 2002-03-25 Fernando Perez <fperez@colorado.edu>
3686
3698
3687 * IPython/genutils.py (get_home_dir): Try to make it work under
3699 * IPython/genutils.py (get_home_dir): Try to make it work under
3688 win9x also.
3700 win9x also.
3689
3701
3690 2002-03-20 Fernando Perez <fperez@colorado.edu>
3702 2002-03-20 Fernando Perez <fperez@colorado.edu>
3691
3703
3692 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3704 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3693 sys.displayhook untouched upon __init__.
3705 sys.displayhook untouched upon __init__.
3694
3706
3695 2002-03-19 Fernando Perez <fperez@colorado.edu>
3707 2002-03-19 Fernando Perez <fperez@colorado.edu>
3696
3708
3697 * Released 0.2.9 (for embedding bug, basically).
3709 * Released 0.2.9 (for embedding bug, basically).
3698
3710
3699 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3711 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3700 exceptions so that enclosing shell's state can be restored.
3712 exceptions so that enclosing shell's state can be restored.
3701
3713
3702 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3714 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3703 naming conventions in the .ipython/ dir.
3715 naming conventions in the .ipython/ dir.
3704
3716
3705 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3717 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3706 from delimiters list so filenames with - in them get expanded.
3718 from delimiters list so filenames with - in them get expanded.
3707
3719
3708 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3720 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3709 sys.displayhook not being properly restored after an embedded call.
3721 sys.displayhook not being properly restored after an embedded call.
3710
3722
3711 2002-03-18 Fernando Perez <fperez@colorado.edu>
3723 2002-03-18 Fernando Perez <fperez@colorado.edu>
3712
3724
3713 * Released 0.2.8
3725 * Released 0.2.8
3714
3726
3715 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3727 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3716 some files weren't being included in a -upgrade.
3728 some files weren't being included in a -upgrade.
3717 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3729 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3718 on' so that the first tab completes.
3730 on' so that the first tab completes.
3719 (InteractiveShell.handle_magic): fixed bug with spaces around
3731 (InteractiveShell.handle_magic): fixed bug with spaces around
3720 quotes breaking many magic commands.
3732 quotes breaking many magic commands.
3721
3733
3722 * setup.py: added note about ignoring the syntax error messages at
3734 * setup.py: added note about ignoring the syntax error messages at
3723 installation.
3735 installation.
3724
3736
3725 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3737 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3726 streamlining the gnuplot interface, now there's only one magic @gp.
3738 streamlining the gnuplot interface, now there's only one magic @gp.
3727
3739
3728 2002-03-17 Fernando Perez <fperez@colorado.edu>
3740 2002-03-17 Fernando Perez <fperez@colorado.edu>
3729
3741
3730 * IPython/UserConfig/magic_gnuplot.py: new name for the
3742 * IPython/UserConfig/magic_gnuplot.py: new name for the
3731 example-magic_pm.py file. Much enhanced system, now with a shell
3743 example-magic_pm.py file. Much enhanced system, now with a shell
3732 for communicating directly with gnuplot, one command at a time.
3744 for communicating directly with gnuplot, one command at a time.
3733
3745
3734 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3746 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3735 setting __name__=='__main__'.
3747 setting __name__=='__main__'.
3736
3748
3737 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3749 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3738 mini-shell for accessing gnuplot from inside ipython. Should
3750 mini-shell for accessing gnuplot from inside ipython. Should
3739 extend it later for grace access too. Inspired by Arnd's
3751 extend it later for grace access too. Inspired by Arnd's
3740 suggestion.
3752 suggestion.
3741
3753
3742 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3754 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3743 calling magic functions with () in their arguments. Thanks to Arnd
3755 calling magic functions with () in their arguments. Thanks to Arnd
3744 Baecker for pointing this to me.
3756 Baecker for pointing this to me.
3745
3757
3746 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3758 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3747 infinitely for integer or complex arrays (only worked with floats).
3759 infinitely for integer or complex arrays (only worked with floats).
3748
3760
3749 2002-03-16 Fernando Perez <fperez@colorado.edu>
3761 2002-03-16 Fernando Perez <fperez@colorado.edu>
3750
3762
3751 * setup.py: Merged setup and setup_windows into a single script
3763 * setup.py: Merged setup and setup_windows into a single script
3752 which properly handles things for windows users.
3764 which properly handles things for windows users.
3753
3765
3754 2002-03-15 Fernando Perez <fperez@colorado.edu>
3766 2002-03-15 Fernando Perez <fperez@colorado.edu>
3755
3767
3756 * Big change to the manual: now the magics are all automatically
3768 * Big change to the manual: now the magics are all automatically
3757 documented. This information is generated from their docstrings
3769 documented. This information is generated from their docstrings
3758 and put in a latex file included by the manual lyx file. This way
3770 and put in a latex file included by the manual lyx file. This way
3759 we get always up to date information for the magics. The manual
3771 we get always up to date information for the magics. The manual
3760 now also has proper version information, also auto-synced.
3772 now also has proper version information, also auto-synced.
3761
3773
3762 For this to work, an undocumented --magic_docstrings option was added.
3774 For this to work, an undocumented --magic_docstrings option was added.
3763
3775
3764 2002-03-13 Fernando Perez <fperez@colorado.edu>
3776 2002-03-13 Fernando Perez <fperez@colorado.edu>
3765
3777
3766 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3778 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3767 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3779 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3768
3780
3769 2002-03-12 Fernando Perez <fperez@colorado.edu>
3781 2002-03-12 Fernando Perez <fperez@colorado.edu>
3770
3782
3771 * IPython/ultraTB.py (TermColors): changed color escapes again to
3783 * IPython/ultraTB.py (TermColors): changed color escapes again to
3772 fix the (old, reintroduced) line-wrapping bug. Basically, if
3784 fix the (old, reintroduced) line-wrapping bug. Basically, if
3773 \001..\002 aren't given in the color escapes, lines get wrapped
3785 \001..\002 aren't given in the color escapes, lines get wrapped
3774 weirdly. But giving those screws up old xterms and emacs terms. So
3786 weirdly. But giving those screws up old xterms and emacs terms. So
3775 I added some logic for emacs terms to be ok, but I can't identify old
3787 I added some logic for emacs terms to be ok, but I can't identify old
3776 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3788 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3777
3789
3778 2002-03-10 Fernando Perez <fperez@colorado.edu>
3790 2002-03-10 Fernando Perez <fperez@colorado.edu>
3779
3791
3780 * IPython/usage.py (__doc__): Various documentation cleanups and
3792 * IPython/usage.py (__doc__): Various documentation cleanups and
3781 updates, both in usage docstrings and in the manual.
3793 updates, both in usage docstrings and in the manual.
3782
3794
3783 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3795 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3784 handling of caching. Set minimum acceptabe value for having a
3796 handling of caching. Set minimum acceptabe value for having a
3785 cache at 20 values.
3797 cache at 20 values.
3786
3798
3787 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3799 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3788 install_first_time function to a method, renamed it and added an
3800 install_first_time function to a method, renamed it and added an
3789 'upgrade' mode. Now people can update their config directory with
3801 'upgrade' mode. Now people can update their config directory with
3790 a simple command line switch (-upgrade, also new).
3802 a simple command line switch (-upgrade, also new).
3791
3803
3792 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3804 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3793 @file (convenient for automagic users under Python >= 2.2).
3805 @file (convenient for automagic users under Python >= 2.2).
3794 Removed @files (it seemed more like a plural than an abbrev. of
3806 Removed @files (it seemed more like a plural than an abbrev. of
3795 'file show').
3807 'file show').
3796
3808
3797 * IPython/iplib.py (install_first_time): Fixed crash if there were
3809 * IPython/iplib.py (install_first_time): Fixed crash if there were
3798 backup files ('~') in .ipython/ install directory.
3810 backup files ('~') in .ipython/ install directory.
3799
3811
3800 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3812 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3801 system. Things look fine, but these changes are fairly
3813 system. Things look fine, but these changes are fairly
3802 intrusive. Test them for a few days.
3814 intrusive. Test them for a few days.
3803
3815
3804 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3816 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3805 the prompts system. Now all in/out prompt strings are user
3817 the prompts system. Now all in/out prompt strings are user
3806 controllable. This is particularly useful for embedding, as one
3818 controllable. This is particularly useful for embedding, as one
3807 can tag embedded instances with particular prompts.
3819 can tag embedded instances with particular prompts.
3808
3820
3809 Also removed global use of sys.ps1/2, which now allows nested
3821 Also removed global use of sys.ps1/2, which now allows nested
3810 embeddings without any problems. Added command-line options for
3822 embeddings without any problems. Added command-line options for
3811 the prompt strings.
3823 the prompt strings.
3812
3824
3813 2002-03-08 Fernando Perez <fperez@colorado.edu>
3825 2002-03-08 Fernando Perez <fperez@colorado.edu>
3814
3826
3815 * IPython/UserConfig/example-embed-short.py (ipshell): added
3827 * IPython/UserConfig/example-embed-short.py (ipshell): added
3816 example file with the bare minimum code for embedding.
3828 example file with the bare minimum code for embedding.
3817
3829
3818 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3830 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3819 functionality for the embeddable shell to be activated/deactivated
3831 functionality for the embeddable shell to be activated/deactivated
3820 either globally or at each call.
3832 either globally or at each call.
3821
3833
3822 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3834 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3823 rewriting the prompt with '--->' for auto-inputs with proper
3835 rewriting the prompt with '--->' for auto-inputs with proper
3824 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3836 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3825 this is handled by the prompts class itself, as it should.
3837 this is handled by the prompts class itself, as it should.
3826
3838
3827 2002-03-05 Fernando Perez <fperez@colorado.edu>
3839 2002-03-05 Fernando Perez <fperez@colorado.edu>
3828
3840
3829 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3841 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3830 @logstart to avoid name clashes with the math log function.
3842 @logstart to avoid name clashes with the math log function.
3831
3843
3832 * Big updates to X/Emacs section of the manual.
3844 * Big updates to X/Emacs section of the manual.
3833
3845
3834 * Removed ipython_emacs. Milan explained to me how to pass
3846 * Removed ipython_emacs. Milan explained to me how to pass
3835 arguments to ipython through Emacs. Some day I'm going to end up
3847 arguments to ipython through Emacs. Some day I'm going to end up
3836 learning some lisp...
3848 learning some lisp...
3837
3849
3838 2002-03-04 Fernando Perez <fperez@colorado.edu>
3850 2002-03-04 Fernando Perez <fperez@colorado.edu>
3839
3851
3840 * IPython/ipython_emacs: Created script to be used as the
3852 * IPython/ipython_emacs: Created script to be used as the
3841 py-python-command Emacs variable so we can pass IPython
3853 py-python-command Emacs variable so we can pass IPython
3842 parameters. I can't figure out how to tell Emacs directly to pass
3854 parameters. I can't figure out how to tell Emacs directly to pass
3843 parameters to IPython, so a dummy shell script will do it.
3855 parameters to IPython, so a dummy shell script will do it.
3844
3856
3845 Other enhancements made for things to work better under Emacs'
3857 Other enhancements made for things to work better under Emacs'
3846 various types of terminals. Many thanks to Milan Zamazal
3858 various types of terminals. Many thanks to Milan Zamazal
3847 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3859 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3848
3860
3849 2002-03-01 Fernando Perez <fperez@colorado.edu>
3861 2002-03-01 Fernando Perez <fperez@colorado.edu>
3850
3862
3851 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3863 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3852 that loading of readline is now optional. This gives better
3864 that loading of readline is now optional. This gives better
3853 control to emacs users.
3865 control to emacs users.
3854
3866
3855 * IPython/ultraTB.py (__date__): Modified color escape sequences
3867 * IPython/ultraTB.py (__date__): Modified color escape sequences
3856 and now things work fine under xterm and in Emacs' term buffers
3868 and now things work fine under xterm and in Emacs' term buffers
3857 (though not shell ones). Well, in emacs you get colors, but all
3869 (though not shell ones). Well, in emacs you get colors, but all
3858 seem to be 'light' colors (no difference between dark and light
3870 seem to be 'light' colors (no difference between dark and light
3859 ones). But the garbage chars are gone, and also in xterms. It
3871 ones). But the garbage chars are gone, and also in xterms. It
3860 seems that now I'm using 'cleaner' ansi sequences.
3872 seems that now I'm using 'cleaner' ansi sequences.
3861
3873
3862 2002-02-21 Fernando Perez <fperez@colorado.edu>
3874 2002-02-21 Fernando Perez <fperez@colorado.edu>
3863
3875
3864 * Released 0.2.7 (mainly to publish the scoping fix).
3876 * Released 0.2.7 (mainly to publish the scoping fix).
3865
3877
3866 * IPython/Logger.py (Logger.logstate): added. A corresponding
3878 * IPython/Logger.py (Logger.logstate): added. A corresponding
3867 @logstate magic was created.
3879 @logstate magic was created.
3868
3880
3869 * IPython/Magic.py: fixed nested scoping problem under Python
3881 * IPython/Magic.py: fixed nested scoping problem under Python
3870 2.1.x (automagic wasn't working).
3882 2.1.x (automagic wasn't working).
3871
3883
3872 2002-02-20 Fernando Perez <fperez@colorado.edu>
3884 2002-02-20 Fernando Perez <fperez@colorado.edu>
3873
3885
3874 * Released 0.2.6.
3886 * Released 0.2.6.
3875
3887
3876 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3888 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3877 option so that logs can come out without any headers at all.
3889 option so that logs can come out without any headers at all.
3878
3890
3879 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3891 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3880 SciPy.
3892 SciPy.
3881
3893
3882 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3894 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3883 that embedded IPython calls don't require vars() to be explicitly
3895 that embedded IPython calls don't require vars() to be explicitly
3884 passed. Now they are extracted from the caller's frame (code
3896 passed. Now they are extracted from the caller's frame (code
3885 snatched from Eric Jones' weave). Added better documentation to
3897 snatched from Eric Jones' weave). Added better documentation to
3886 the section on embedding and the example file.
3898 the section on embedding and the example file.
3887
3899
3888 * IPython/genutils.py (page): Changed so that under emacs, it just
3900 * IPython/genutils.py (page): Changed so that under emacs, it just
3889 prints the string. You can then page up and down in the emacs
3901 prints the string. You can then page up and down in the emacs
3890 buffer itself. This is how the builtin help() works.
3902 buffer itself. This is how the builtin help() works.
3891
3903
3892 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3904 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3893 macro scoping: macros need to be executed in the user's namespace
3905 macro scoping: macros need to be executed in the user's namespace
3894 to work as if they had been typed by the user.
3906 to work as if they had been typed by the user.
3895
3907
3896 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3908 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3897 execute automatically (no need to type 'exec...'). They then
3909 execute automatically (no need to type 'exec...'). They then
3898 behave like 'true macros'. The printing system was also modified
3910 behave like 'true macros'. The printing system was also modified
3899 for this to work.
3911 for this to work.
3900
3912
3901 2002-02-19 Fernando Perez <fperez@colorado.edu>
3913 2002-02-19 Fernando Perez <fperez@colorado.edu>
3902
3914
3903 * IPython/genutils.py (page_file): new function for paging files
3915 * IPython/genutils.py (page_file): new function for paging files
3904 in an OS-independent way. Also necessary for file viewing to work
3916 in an OS-independent way. Also necessary for file viewing to work
3905 well inside Emacs buffers.
3917 well inside Emacs buffers.
3906 (page): Added checks for being in an emacs buffer.
3918 (page): Added checks for being in an emacs buffer.
3907 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3919 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3908 same bug in iplib.
3920 same bug in iplib.
3909
3921
3910 2002-02-18 Fernando Perez <fperez@colorado.edu>
3922 2002-02-18 Fernando Perez <fperez@colorado.edu>
3911
3923
3912 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3924 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3913 of readline so that IPython can work inside an Emacs buffer.
3925 of readline so that IPython can work inside an Emacs buffer.
3914
3926
3915 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3927 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3916 method signatures (they weren't really bugs, but it looks cleaner
3928 method signatures (they weren't really bugs, but it looks cleaner
3917 and keeps PyChecker happy).
3929 and keeps PyChecker happy).
3918
3930
3919 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3931 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3920 for implementing various user-defined hooks. Currently only
3932 for implementing various user-defined hooks. Currently only
3921 display is done.
3933 display is done.
3922
3934
3923 * IPython/Prompts.py (CachedOutput._display): changed display
3935 * IPython/Prompts.py (CachedOutput._display): changed display
3924 functions so that they can be dynamically changed by users easily.
3936 functions so that they can be dynamically changed by users easily.
3925
3937
3926 * IPython/Extensions/numeric_formats.py (num_display): added an
3938 * IPython/Extensions/numeric_formats.py (num_display): added an
3927 extension for printing NumPy arrays in flexible manners. It
3939 extension for printing NumPy arrays in flexible manners. It
3928 doesn't do anything yet, but all the structure is in
3940 doesn't do anything yet, but all the structure is in
3929 place. Ultimately the plan is to implement output format control
3941 place. Ultimately the plan is to implement output format control
3930 like in Octave.
3942 like in Octave.
3931
3943
3932 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3944 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3933 methods are found at run-time by all the automatic machinery.
3945 methods are found at run-time by all the automatic machinery.
3934
3946
3935 2002-02-17 Fernando Perez <fperez@colorado.edu>
3947 2002-02-17 Fernando Perez <fperez@colorado.edu>
3936
3948
3937 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3949 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3938 whole file a little.
3950 whole file a little.
3939
3951
3940 * ToDo: closed this document. Now there's a new_design.lyx
3952 * ToDo: closed this document. Now there's a new_design.lyx
3941 document for all new ideas. Added making a pdf of it for the
3953 document for all new ideas. Added making a pdf of it for the
3942 end-user distro.
3954 end-user distro.
3943
3955
3944 * IPython/Logger.py (Logger.switch_log): Created this to replace
3956 * IPython/Logger.py (Logger.switch_log): Created this to replace
3945 logon() and logoff(). It also fixes a nasty crash reported by
3957 logon() and logoff(). It also fixes a nasty crash reported by
3946 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3958 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3947
3959
3948 * IPython/iplib.py (complete): got auto-completion to work with
3960 * IPython/iplib.py (complete): got auto-completion to work with
3949 automagic (I had wanted this for a long time).
3961 automagic (I had wanted this for a long time).
3950
3962
3951 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3963 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3952 to @file, since file() is now a builtin and clashes with automagic
3964 to @file, since file() is now a builtin and clashes with automagic
3953 for @file.
3965 for @file.
3954
3966
3955 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3967 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3956 of this was previously in iplib, which had grown to more than 2000
3968 of this was previously in iplib, which had grown to more than 2000
3957 lines, way too long. No new functionality, but it makes managing
3969 lines, way too long. No new functionality, but it makes managing
3958 the code a bit easier.
3970 the code a bit easier.
3959
3971
3960 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3972 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3961 information to crash reports.
3973 information to crash reports.
3962
3974
3963 2002-02-12 Fernando Perez <fperez@colorado.edu>
3975 2002-02-12 Fernando Perez <fperez@colorado.edu>
3964
3976
3965 * Released 0.2.5.
3977 * Released 0.2.5.
3966
3978
3967 2002-02-11 Fernando Perez <fperez@colorado.edu>
3979 2002-02-11 Fernando Perez <fperez@colorado.edu>
3968
3980
3969 * Wrote a relatively complete Windows installer. It puts
3981 * Wrote a relatively complete Windows installer. It puts
3970 everything in place, creates Start Menu entries and fixes the
3982 everything in place, creates Start Menu entries and fixes the
3971 color issues. Nothing fancy, but it works.
3983 color issues. Nothing fancy, but it works.
3972
3984
3973 2002-02-10 Fernando Perez <fperez@colorado.edu>
3985 2002-02-10 Fernando Perez <fperez@colorado.edu>
3974
3986
3975 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3987 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3976 os.path.expanduser() call so that we can type @run ~/myfile.py and
3988 os.path.expanduser() call so that we can type @run ~/myfile.py and
3977 have thigs work as expected.
3989 have thigs work as expected.
3978
3990
3979 * IPython/genutils.py (page): fixed exception handling so things
3991 * IPython/genutils.py (page): fixed exception handling so things
3980 work both in Unix and Windows correctly. Quitting a pager triggers
3992 work both in Unix and Windows correctly. Quitting a pager triggers
3981 an IOError/broken pipe in Unix, and in windows not finding a pager
3993 an IOError/broken pipe in Unix, and in windows not finding a pager
3982 is also an IOError, so I had to actually look at the return value
3994 is also an IOError, so I had to actually look at the return value
3983 of the exception, not just the exception itself. Should be ok now.
3995 of the exception, not just the exception itself. Should be ok now.
3984
3996
3985 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3997 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3986 modified to allow case-insensitive color scheme changes.
3998 modified to allow case-insensitive color scheme changes.
3987
3999
3988 2002-02-09 Fernando Perez <fperez@colorado.edu>
4000 2002-02-09 Fernando Perez <fperez@colorado.edu>
3989
4001
3990 * IPython/genutils.py (native_line_ends): new function to leave
4002 * IPython/genutils.py (native_line_ends): new function to leave
3991 user config files with os-native line-endings.
4003 user config files with os-native line-endings.
3992
4004
3993 * README and manual updates.
4005 * README and manual updates.
3994
4006
3995 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4007 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3996 instead of StringType to catch Unicode strings.
4008 instead of StringType to catch Unicode strings.
3997
4009
3998 * IPython/genutils.py (filefind): fixed bug for paths with
4010 * IPython/genutils.py (filefind): fixed bug for paths with
3999 embedded spaces (very common in Windows).
4011 embedded spaces (very common in Windows).
4000
4012
4001 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4013 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4002 files under Windows, so that they get automatically associated
4014 files under Windows, so that they get automatically associated
4003 with a text editor. Windows makes it a pain to handle
4015 with a text editor. Windows makes it a pain to handle
4004 extension-less files.
4016 extension-less files.
4005
4017
4006 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4018 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4007 warning about readline only occur for Posix. In Windows there's no
4019 warning about readline only occur for Posix. In Windows there's no
4008 way to get readline, so why bother with the warning.
4020 way to get readline, so why bother with the warning.
4009
4021
4010 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4022 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4011 for __str__ instead of dir(self), since dir() changed in 2.2.
4023 for __str__ instead of dir(self), since dir() changed in 2.2.
4012
4024
4013 * Ported to Windows! Tested on XP, I suspect it should work fine
4025 * Ported to Windows! Tested on XP, I suspect it should work fine
4014 on NT/2000, but I don't think it will work on 98 et al. That
4026 on NT/2000, but I don't think it will work on 98 et al. That
4015 series of Windows is such a piece of junk anyway that I won't try
4027 series of Windows is such a piece of junk anyway that I won't try
4016 porting it there. The XP port was straightforward, showed a few
4028 porting it there. The XP port was straightforward, showed a few
4017 bugs here and there (fixed all), in particular some string
4029 bugs here and there (fixed all), in particular some string
4018 handling stuff which required considering Unicode strings (which
4030 handling stuff which required considering Unicode strings (which
4019 Windows uses). This is good, but hasn't been too tested :) No
4031 Windows uses). This is good, but hasn't been too tested :) No
4020 fancy installer yet, I'll put a note in the manual so people at
4032 fancy installer yet, I'll put a note in the manual so people at
4021 least make manually a shortcut.
4033 least make manually a shortcut.
4022
4034
4023 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4035 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4024 into a single one, "colors". This now controls both prompt and
4036 into a single one, "colors". This now controls both prompt and
4025 exception color schemes, and can be changed both at startup
4037 exception color schemes, and can be changed both at startup
4026 (either via command-line switches or via ipythonrc files) and at
4038 (either via command-line switches or via ipythonrc files) and at
4027 runtime, with @colors.
4039 runtime, with @colors.
4028 (Magic.magic_run): renamed @prun to @run and removed the old
4040 (Magic.magic_run): renamed @prun to @run and removed the old
4029 @run. The two were too similar to warrant keeping both.
4041 @run. The two were too similar to warrant keeping both.
4030
4042
4031 2002-02-03 Fernando Perez <fperez@colorado.edu>
4043 2002-02-03 Fernando Perez <fperez@colorado.edu>
4032
4044
4033 * IPython/iplib.py (install_first_time): Added comment on how to
4045 * IPython/iplib.py (install_first_time): Added comment on how to
4034 configure the color options for first-time users. Put a <return>
4046 configure the color options for first-time users. Put a <return>
4035 request at the end so that small-terminal users get a chance to
4047 request at the end so that small-terminal users get a chance to
4036 read the startup info.
4048 read the startup info.
4037
4049
4038 2002-01-23 Fernando Perez <fperez@colorado.edu>
4050 2002-01-23 Fernando Perez <fperez@colorado.edu>
4039
4051
4040 * IPython/iplib.py (CachedOutput.update): Changed output memory
4052 * IPython/iplib.py (CachedOutput.update): Changed output memory
4041 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4053 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4042 input history we still use _i. Did this b/c these variable are
4054 input history we still use _i. Did this b/c these variable are
4043 very commonly used in interactive work, so the less we need to
4055 very commonly used in interactive work, so the less we need to
4044 type the better off we are.
4056 type the better off we are.
4045 (Magic.magic_prun): updated @prun to better handle the namespaces
4057 (Magic.magic_prun): updated @prun to better handle the namespaces
4046 the file will run in, including a fix for __name__ not being set
4058 the file will run in, including a fix for __name__ not being set
4047 before.
4059 before.
4048
4060
4049 2002-01-20 Fernando Perez <fperez@colorado.edu>
4061 2002-01-20 Fernando Perez <fperez@colorado.edu>
4050
4062
4051 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4063 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4052 extra garbage for Python 2.2. Need to look more carefully into
4064 extra garbage for Python 2.2. Need to look more carefully into
4053 this later.
4065 this later.
4054
4066
4055 2002-01-19 Fernando Perez <fperez@colorado.edu>
4067 2002-01-19 Fernando Perez <fperez@colorado.edu>
4056
4068
4057 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4069 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4058 display SyntaxError exceptions properly formatted when they occur
4070 display SyntaxError exceptions properly formatted when they occur
4059 (they can be triggered by imported code).
4071 (they can be triggered by imported code).
4060
4072
4061 2002-01-18 Fernando Perez <fperez@colorado.edu>
4073 2002-01-18 Fernando Perez <fperez@colorado.edu>
4062
4074
4063 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4075 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4064 SyntaxError exceptions are reported nicely formatted, instead of
4076 SyntaxError exceptions are reported nicely formatted, instead of
4065 spitting out only offset information as before.
4077 spitting out only offset information as before.
4066 (Magic.magic_prun): Added the @prun function for executing
4078 (Magic.magic_prun): Added the @prun function for executing
4067 programs with command line args inside IPython.
4079 programs with command line args inside IPython.
4068
4080
4069 2002-01-16 Fernando Perez <fperez@colorado.edu>
4081 2002-01-16 Fernando Perez <fperez@colorado.edu>
4070
4082
4071 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4083 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4072 to *not* include the last item given in a range. This brings their
4084 to *not* include the last item given in a range. This brings their
4073 behavior in line with Python's slicing:
4085 behavior in line with Python's slicing:
4074 a[n1:n2] -> a[n1]...a[n2-1]
4086 a[n1:n2] -> a[n1]...a[n2-1]
4075 It may be a bit less convenient, but I prefer to stick to Python's
4087 It may be a bit less convenient, but I prefer to stick to Python's
4076 conventions *everywhere*, so users never have to wonder.
4088 conventions *everywhere*, so users never have to wonder.
4077 (Magic.magic_macro): Added @macro function to ease the creation of
4089 (Magic.magic_macro): Added @macro function to ease the creation of
4078 macros.
4090 macros.
4079
4091
4080 2002-01-05 Fernando Perez <fperez@colorado.edu>
4092 2002-01-05 Fernando Perez <fperez@colorado.edu>
4081
4093
4082 * Released 0.2.4.
4094 * Released 0.2.4.
4083
4095
4084 * IPython/iplib.py (Magic.magic_pdef):
4096 * IPython/iplib.py (Magic.magic_pdef):
4085 (InteractiveShell.safe_execfile): report magic lines and error
4097 (InteractiveShell.safe_execfile): report magic lines and error
4086 lines without line numbers so one can easily copy/paste them for
4098 lines without line numbers so one can easily copy/paste them for
4087 re-execution.
4099 re-execution.
4088
4100
4089 * Updated manual with recent changes.
4101 * Updated manual with recent changes.
4090
4102
4091 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4103 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4092 docstring printing when class? is called. Very handy for knowing
4104 docstring printing when class? is called. Very handy for knowing
4093 how to create class instances (as long as __init__ is well
4105 how to create class instances (as long as __init__ is well
4094 documented, of course :)
4106 documented, of course :)
4095 (Magic.magic_doc): print both class and constructor docstrings.
4107 (Magic.magic_doc): print both class and constructor docstrings.
4096 (Magic.magic_pdef): give constructor info if passed a class and
4108 (Magic.magic_pdef): give constructor info if passed a class and
4097 __call__ info for callable object instances.
4109 __call__ info for callable object instances.
4098
4110
4099 2002-01-04 Fernando Perez <fperez@colorado.edu>
4111 2002-01-04 Fernando Perez <fperez@colorado.edu>
4100
4112
4101 * Made deep_reload() off by default. It doesn't always work
4113 * Made deep_reload() off by default. It doesn't always work
4102 exactly as intended, so it's probably safer to have it off. It's
4114 exactly as intended, so it's probably safer to have it off. It's
4103 still available as dreload() anyway, so nothing is lost.
4115 still available as dreload() anyway, so nothing is lost.
4104
4116
4105 2002-01-02 Fernando Perez <fperez@colorado.edu>
4117 2002-01-02 Fernando Perez <fperez@colorado.edu>
4106
4118
4107 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4119 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4108 so I wanted an updated release).
4120 so I wanted an updated release).
4109
4121
4110 2001-12-27 Fernando Perez <fperez@colorado.edu>
4122 2001-12-27 Fernando Perez <fperez@colorado.edu>
4111
4123
4112 * IPython/iplib.py (InteractiveShell.interact): Added the original
4124 * IPython/iplib.py (InteractiveShell.interact): Added the original
4113 code from 'code.py' for this module in order to change the
4125 code from 'code.py' for this module in order to change the
4114 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4126 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4115 the history cache would break when the user hit Ctrl-C, and
4127 the history cache would break when the user hit Ctrl-C, and
4116 interact() offers no way to add any hooks to it.
4128 interact() offers no way to add any hooks to it.
4117
4129
4118 2001-12-23 Fernando Perez <fperez@colorado.edu>
4130 2001-12-23 Fernando Perez <fperez@colorado.edu>
4119
4131
4120 * setup.py: added check for 'MANIFEST' before trying to remove
4132 * setup.py: added check for 'MANIFEST' before trying to remove
4121 it. Thanks to Sean Reifschneider.
4133 it. Thanks to Sean Reifschneider.
4122
4134
4123 2001-12-22 Fernando Perez <fperez@colorado.edu>
4135 2001-12-22 Fernando Perez <fperez@colorado.edu>
4124
4136
4125 * Released 0.2.2.
4137 * Released 0.2.2.
4126
4138
4127 * Finished (reasonably) writing the manual. Later will add the
4139 * Finished (reasonably) writing the manual. Later will add the
4128 python-standard navigation stylesheets, but for the time being
4140 python-standard navigation stylesheets, but for the time being
4129 it's fairly complete. Distribution will include html and pdf
4141 it's fairly complete. Distribution will include html and pdf
4130 versions.
4142 versions.
4131
4143
4132 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4144 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4133 (MayaVi author).
4145 (MayaVi author).
4134
4146
4135 2001-12-21 Fernando Perez <fperez@colorado.edu>
4147 2001-12-21 Fernando Perez <fperez@colorado.edu>
4136
4148
4137 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4149 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4138 good public release, I think (with the manual and the distutils
4150 good public release, I think (with the manual and the distutils
4139 installer). The manual can use some work, but that can go
4151 installer). The manual can use some work, but that can go
4140 slowly. Otherwise I think it's quite nice for end users. Next
4152 slowly. Otherwise I think it's quite nice for end users. Next
4141 summer, rewrite the guts of it...
4153 summer, rewrite the guts of it...
4142
4154
4143 * Changed format of ipythonrc files to use whitespace as the
4155 * Changed format of ipythonrc files to use whitespace as the
4144 separator instead of an explicit '='. Cleaner.
4156 separator instead of an explicit '='. Cleaner.
4145
4157
4146 2001-12-20 Fernando Perez <fperez@colorado.edu>
4158 2001-12-20 Fernando Perez <fperez@colorado.edu>
4147
4159
4148 * Started a manual in LyX. For now it's just a quick merge of the
4160 * Started a manual in LyX. For now it's just a quick merge of the
4149 various internal docstrings and READMEs. Later it may grow into a
4161 various internal docstrings and READMEs. Later it may grow into a
4150 nice, full-blown manual.
4162 nice, full-blown manual.
4151
4163
4152 * Set up a distutils based installer. Installation should now be
4164 * Set up a distutils based installer. Installation should now be
4153 trivially simple for end-users.
4165 trivially simple for end-users.
4154
4166
4155 2001-12-11 Fernando Perez <fperez@colorado.edu>
4167 2001-12-11 Fernando Perez <fperez@colorado.edu>
4156
4168
4157 * Released 0.2.0. First public release, announced it at
4169 * Released 0.2.0. First public release, announced it at
4158 comp.lang.python. From now on, just bugfixes...
4170 comp.lang.python. From now on, just bugfixes...
4159
4171
4160 * Went through all the files, set copyright/license notices and
4172 * Went through all the files, set copyright/license notices and
4161 cleaned up things. Ready for release.
4173 cleaned up things. Ready for release.
4162
4174
4163 2001-12-10 Fernando Perez <fperez@colorado.edu>
4175 2001-12-10 Fernando Perez <fperez@colorado.edu>
4164
4176
4165 * Changed the first-time installer not to use tarfiles. It's more
4177 * Changed the first-time installer not to use tarfiles. It's more
4166 robust now and less unix-dependent. Also makes it easier for
4178 robust now and less unix-dependent. Also makes it easier for
4167 people to later upgrade versions.
4179 people to later upgrade versions.
4168
4180
4169 * Changed @exit to @abort to reflect the fact that it's pretty
4181 * Changed @exit to @abort to reflect the fact that it's pretty
4170 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4182 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4171 becomes significant only when IPyhton is embedded: in that case,
4183 becomes significant only when IPyhton is embedded: in that case,
4172 C-D closes IPython only, but @abort kills the enclosing program
4184 C-D closes IPython only, but @abort kills the enclosing program
4173 too (unless it had called IPython inside a try catching
4185 too (unless it had called IPython inside a try catching
4174 SystemExit).
4186 SystemExit).
4175
4187
4176 * Created Shell module which exposes the actuall IPython Shell
4188 * Created Shell module which exposes the actuall IPython Shell
4177 classes, currently the normal and the embeddable one. This at
4189 classes, currently the normal and the embeddable one. This at
4178 least offers a stable interface we won't need to change when
4190 least offers a stable interface we won't need to change when
4179 (later) the internals are rewritten. That rewrite will be confined
4191 (later) the internals are rewritten. That rewrite will be confined
4180 to iplib and ipmaker, but the Shell interface should remain as is.
4192 to iplib and ipmaker, but the Shell interface should remain as is.
4181
4193
4182 * Added embed module which offers an embeddable IPShell object,
4194 * Added embed module which offers an embeddable IPShell object,
4183 useful to fire up IPython *inside* a running program. Great for
4195 useful to fire up IPython *inside* a running program. Great for
4184 debugging or dynamical data analysis.
4196 debugging or dynamical data analysis.
4185
4197
4186 2001-12-08 Fernando Perez <fperez@colorado.edu>
4198 2001-12-08 Fernando Perez <fperez@colorado.edu>
4187
4199
4188 * Fixed small bug preventing seeing info from methods of defined
4200 * Fixed small bug preventing seeing info from methods of defined
4189 objects (incorrect namespace in _ofind()).
4201 objects (incorrect namespace in _ofind()).
4190
4202
4191 * Documentation cleanup. Moved the main usage docstrings to a
4203 * Documentation cleanup. Moved the main usage docstrings to a
4192 separate file, usage.py (cleaner to maintain, and hopefully in the
4204 separate file, usage.py (cleaner to maintain, and hopefully in the
4193 future some perlpod-like way of producing interactive, man and
4205 future some perlpod-like way of producing interactive, man and
4194 html docs out of it will be found).
4206 html docs out of it will be found).
4195
4207
4196 * Added @profile to see your profile at any time.
4208 * Added @profile to see your profile at any time.
4197
4209
4198 * Added @p as an alias for 'print'. It's especially convenient if
4210 * Added @p as an alias for 'print'. It's especially convenient if
4199 using automagic ('p x' prints x).
4211 using automagic ('p x' prints x).
4200
4212
4201 * Small cleanups and fixes after a pychecker run.
4213 * Small cleanups and fixes after a pychecker run.
4202
4214
4203 * Changed the @cd command to handle @cd - and @cd -<n> for
4215 * Changed the @cd command to handle @cd - and @cd -<n> for
4204 visiting any directory in _dh.
4216 visiting any directory in _dh.
4205
4217
4206 * Introduced _dh, a history of visited directories. @dhist prints
4218 * Introduced _dh, a history of visited directories. @dhist prints
4207 it out with numbers.
4219 it out with numbers.
4208
4220
4209 2001-12-07 Fernando Perez <fperez@colorado.edu>
4221 2001-12-07 Fernando Perez <fperez@colorado.edu>
4210
4222
4211 * Released 0.1.22
4223 * Released 0.1.22
4212
4224
4213 * Made initialization a bit more robust against invalid color
4225 * Made initialization a bit more robust against invalid color
4214 options in user input (exit, not traceback-crash).
4226 options in user input (exit, not traceback-crash).
4215
4227
4216 * Changed the bug crash reporter to write the report only in the
4228 * Changed the bug crash reporter to write the report only in the
4217 user's .ipython directory. That way IPython won't litter people's
4229 user's .ipython directory. That way IPython won't litter people's
4218 hard disks with crash files all over the place. Also print on
4230 hard disks with crash files all over the place. Also print on
4219 screen the necessary mail command.
4231 screen the necessary mail command.
4220
4232
4221 * With the new ultraTB, implemented LightBG color scheme for light
4233 * With the new ultraTB, implemented LightBG color scheme for light
4222 background terminals. A lot of people like white backgrounds, so I
4234 background terminals. A lot of people like white backgrounds, so I
4223 guess we should at least give them something readable.
4235 guess we should at least give them something readable.
4224
4236
4225 2001-12-06 Fernando Perez <fperez@colorado.edu>
4237 2001-12-06 Fernando Perez <fperez@colorado.edu>
4226
4238
4227 * Modified the structure of ultraTB. Now there's a proper class
4239 * Modified the structure of ultraTB. Now there's a proper class
4228 for tables of color schemes which allow adding schemes easily and
4240 for tables of color schemes which allow adding schemes easily and
4229 switching the active scheme without creating a new instance every
4241 switching the active scheme without creating a new instance every
4230 time (which was ridiculous). The syntax for creating new schemes
4242 time (which was ridiculous). The syntax for creating new schemes
4231 is also cleaner. I think ultraTB is finally done, with a clean
4243 is also cleaner. I think ultraTB is finally done, with a clean
4232 class structure. Names are also much cleaner (now there's proper
4244 class structure. Names are also much cleaner (now there's proper
4233 color tables, no need for every variable to also have 'color' in
4245 color tables, no need for every variable to also have 'color' in
4234 its name).
4246 its name).
4235
4247
4236 * Broke down genutils into separate files. Now genutils only
4248 * Broke down genutils into separate files. Now genutils only
4237 contains utility functions, and classes have been moved to their
4249 contains utility functions, and classes have been moved to their
4238 own files (they had enough independent functionality to warrant
4250 own files (they had enough independent functionality to warrant
4239 it): ConfigLoader, OutputTrap, Struct.
4251 it): ConfigLoader, OutputTrap, Struct.
4240
4252
4241 2001-12-05 Fernando Perez <fperez@colorado.edu>
4253 2001-12-05 Fernando Perez <fperez@colorado.edu>
4242
4254
4243 * IPython turns 21! Released version 0.1.21, as a candidate for
4255 * IPython turns 21! Released version 0.1.21, as a candidate for
4244 public consumption. If all goes well, release in a few days.
4256 public consumption. If all goes well, release in a few days.
4245
4257
4246 * Fixed path bug (files in Extensions/ directory wouldn't be found
4258 * Fixed path bug (files in Extensions/ directory wouldn't be found
4247 unless IPython/ was explicitly in sys.path).
4259 unless IPython/ was explicitly in sys.path).
4248
4260
4249 * Extended the FlexCompleter class as MagicCompleter to allow
4261 * Extended the FlexCompleter class as MagicCompleter to allow
4250 completion of @-starting lines.
4262 completion of @-starting lines.
4251
4263
4252 * Created __release__.py file as a central repository for release
4264 * Created __release__.py file as a central repository for release
4253 info that other files can read from.
4265 info that other files can read from.
4254
4266
4255 * Fixed small bug in logging: when logging was turned on in
4267 * Fixed small bug in logging: when logging was turned on in
4256 mid-session, old lines with special meanings (!@?) were being
4268 mid-session, old lines with special meanings (!@?) were being
4257 logged without the prepended comment, which is necessary since
4269 logged without the prepended comment, which is necessary since
4258 they are not truly valid python syntax. This should make session
4270 they are not truly valid python syntax. This should make session
4259 restores produce less errors.
4271 restores produce less errors.
4260
4272
4261 * The namespace cleanup forced me to make a FlexCompleter class
4273 * The namespace cleanup forced me to make a FlexCompleter class
4262 which is nothing but a ripoff of rlcompleter, but with selectable
4274 which is nothing but a ripoff of rlcompleter, but with selectable
4263 namespace (rlcompleter only works in __main__.__dict__). I'll try
4275 namespace (rlcompleter only works in __main__.__dict__). I'll try
4264 to submit a note to the authors to see if this change can be
4276 to submit a note to the authors to see if this change can be
4265 incorporated in future rlcompleter releases (Dec.6: done)
4277 incorporated in future rlcompleter releases (Dec.6: done)
4266
4278
4267 * More fixes to namespace handling. It was a mess! Now all
4279 * More fixes to namespace handling. It was a mess! Now all
4268 explicit references to __main__.__dict__ are gone (except when
4280 explicit references to __main__.__dict__ are gone (except when
4269 really needed) and everything is handled through the namespace
4281 really needed) and everything is handled through the namespace
4270 dicts in the IPython instance. We seem to be getting somewhere
4282 dicts in the IPython instance. We seem to be getting somewhere
4271 with this, finally...
4283 with this, finally...
4272
4284
4273 * Small documentation updates.
4285 * Small documentation updates.
4274
4286
4275 * Created the Extensions directory under IPython (with an
4287 * Created the Extensions directory under IPython (with an
4276 __init__.py). Put the PhysicalQ stuff there. This directory should
4288 __init__.py). Put the PhysicalQ stuff there. This directory should
4277 be used for all special-purpose extensions.
4289 be used for all special-purpose extensions.
4278
4290
4279 * File renaming:
4291 * File renaming:
4280 ipythonlib --> ipmaker
4292 ipythonlib --> ipmaker
4281 ipplib --> iplib
4293 ipplib --> iplib
4282 This makes a bit more sense in terms of what these files actually do.
4294 This makes a bit more sense in terms of what these files actually do.
4283
4295
4284 * Moved all the classes and functions in ipythonlib to ipplib, so
4296 * Moved all the classes and functions in ipythonlib to ipplib, so
4285 now ipythonlib only has make_IPython(). This will ease up its
4297 now ipythonlib only has make_IPython(). This will ease up its
4286 splitting in smaller functional chunks later.
4298 splitting in smaller functional chunks later.
4287
4299
4288 * Cleaned up (done, I think) output of @whos. Better column
4300 * Cleaned up (done, I think) output of @whos. Better column
4289 formatting, and now shows str(var) for as much as it can, which is
4301 formatting, and now shows str(var) for as much as it can, which is
4290 typically what one gets with a 'print var'.
4302 typically what one gets with a 'print var'.
4291
4303
4292 2001-12-04 Fernando Perez <fperez@colorado.edu>
4304 2001-12-04 Fernando Perez <fperez@colorado.edu>
4293
4305
4294 * Fixed namespace problems. Now builtin/IPyhton/user names get
4306 * Fixed namespace problems. Now builtin/IPyhton/user names get
4295 properly reported in their namespace. Internal namespace handling
4307 properly reported in their namespace. Internal namespace handling
4296 is finally getting decent (not perfect yet, but much better than
4308 is finally getting decent (not perfect yet, but much better than
4297 the ad-hoc mess we had).
4309 the ad-hoc mess we had).
4298
4310
4299 * Removed -exit option. If people just want to run a python
4311 * Removed -exit option. If people just want to run a python
4300 script, that's what the normal interpreter is for. Less
4312 script, that's what the normal interpreter is for. Less
4301 unnecessary options, less chances for bugs.
4313 unnecessary options, less chances for bugs.
4302
4314
4303 * Added a crash handler which generates a complete post-mortem if
4315 * Added a crash handler which generates a complete post-mortem if
4304 IPython crashes. This will help a lot in tracking bugs down the
4316 IPython crashes. This will help a lot in tracking bugs down the
4305 road.
4317 road.
4306
4318
4307 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4319 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4308 which were boud to functions being reassigned would bypass the
4320 which were boud to functions being reassigned would bypass the
4309 logger, breaking the sync of _il with the prompt counter. This
4321 logger, breaking the sync of _il with the prompt counter. This
4310 would then crash IPython later when a new line was logged.
4322 would then crash IPython later when a new line was logged.
4311
4323
4312 2001-12-02 Fernando Perez <fperez@colorado.edu>
4324 2001-12-02 Fernando Perez <fperez@colorado.edu>
4313
4325
4314 * Made IPython a package. This means people don't have to clutter
4326 * Made IPython a package. This means people don't have to clutter
4315 their sys.path with yet another directory. Changed the INSTALL
4327 their sys.path with yet another directory. Changed the INSTALL
4316 file accordingly.
4328 file accordingly.
4317
4329
4318 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4330 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4319 sorts its output (so @who shows it sorted) and @whos formats the
4331 sorts its output (so @who shows it sorted) and @whos formats the
4320 table according to the width of the first column. Nicer, easier to
4332 table according to the width of the first column. Nicer, easier to
4321 read. Todo: write a generic table_format() which takes a list of
4333 read. Todo: write a generic table_format() which takes a list of
4322 lists and prints it nicely formatted, with optional row/column
4334 lists and prints it nicely formatted, with optional row/column
4323 separators and proper padding and justification.
4335 separators and proper padding and justification.
4324
4336
4325 * Released 0.1.20
4337 * Released 0.1.20
4326
4338
4327 * Fixed bug in @log which would reverse the inputcache list (a
4339 * Fixed bug in @log which would reverse the inputcache list (a
4328 copy operation was missing).
4340 copy operation was missing).
4329
4341
4330 * Code cleanup. @config was changed to use page(). Better, since
4342 * Code cleanup. @config was changed to use page(). Better, since
4331 its output is always quite long.
4343 its output is always quite long.
4332
4344
4333 * Itpl is back as a dependency. I was having too many problems
4345 * Itpl is back as a dependency. I was having too many problems
4334 getting the parametric aliases to work reliably, and it's just
4346 getting the parametric aliases to work reliably, and it's just
4335 easier to code weird string operations with it than playing %()s
4347 easier to code weird string operations with it than playing %()s
4336 games. It's only ~6k, so I don't think it's too big a deal.
4348 games. It's only ~6k, so I don't think it's too big a deal.
4337
4349
4338 * Found (and fixed) a very nasty bug with history. !lines weren't
4350 * Found (and fixed) a very nasty bug with history. !lines weren't
4339 getting cached, and the out of sync caches would crash
4351 getting cached, and the out of sync caches would crash
4340 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4352 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4341 division of labor a bit better. Bug fixed, cleaner structure.
4353 division of labor a bit better. Bug fixed, cleaner structure.
4342
4354
4343 2001-12-01 Fernando Perez <fperez@colorado.edu>
4355 2001-12-01 Fernando Perez <fperez@colorado.edu>
4344
4356
4345 * Released 0.1.19
4357 * Released 0.1.19
4346
4358
4347 * Added option -n to @hist to prevent line number printing. Much
4359 * Added option -n to @hist to prevent line number printing. Much
4348 easier to copy/paste code this way.
4360 easier to copy/paste code this way.
4349
4361
4350 * Created global _il to hold the input list. Allows easy
4362 * Created global _il to hold the input list. Allows easy
4351 re-execution of blocks of code by slicing it (inspired by Janko's
4363 re-execution of blocks of code by slicing it (inspired by Janko's
4352 comment on 'macros').
4364 comment on 'macros').
4353
4365
4354 * Small fixes and doc updates.
4366 * Small fixes and doc updates.
4355
4367
4356 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4368 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4357 much too fragile with automagic. Handles properly multi-line
4369 much too fragile with automagic. Handles properly multi-line
4358 statements and takes parameters.
4370 statements and takes parameters.
4359
4371
4360 2001-11-30 Fernando Perez <fperez@colorado.edu>
4372 2001-11-30 Fernando Perez <fperez@colorado.edu>
4361
4373
4362 * Version 0.1.18 released.
4374 * Version 0.1.18 released.
4363
4375
4364 * Fixed nasty namespace bug in initial module imports.
4376 * Fixed nasty namespace bug in initial module imports.
4365
4377
4366 * Added copyright/license notes to all code files (except
4378 * Added copyright/license notes to all code files (except
4367 DPyGetOpt). For the time being, LGPL. That could change.
4379 DPyGetOpt). For the time being, LGPL. That could change.
4368
4380
4369 * Rewrote a much nicer README, updated INSTALL, cleaned up
4381 * Rewrote a much nicer README, updated INSTALL, cleaned up
4370 ipythonrc-* samples.
4382 ipythonrc-* samples.
4371
4383
4372 * Overall code/documentation cleanup. Basically ready for
4384 * Overall code/documentation cleanup. Basically ready for
4373 release. Only remaining thing: licence decision (LGPL?).
4385 release. Only remaining thing: licence decision (LGPL?).
4374
4386
4375 * Converted load_config to a class, ConfigLoader. Now recursion
4387 * Converted load_config to a class, ConfigLoader. Now recursion
4376 control is better organized. Doesn't include the same file twice.
4388 control is better organized. Doesn't include the same file twice.
4377
4389
4378 2001-11-29 Fernando Perez <fperez@colorado.edu>
4390 2001-11-29 Fernando Perez <fperez@colorado.edu>
4379
4391
4380 * Got input history working. Changed output history variables from
4392 * Got input history working. Changed output history variables from
4381 _p to _o so that _i is for input and _o for output. Just cleaner
4393 _p to _o so that _i is for input and _o for output. Just cleaner
4382 convention.
4394 convention.
4383
4395
4384 * Implemented parametric aliases. This pretty much allows the
4396 * Implemented parametric aliases. This pretty much allows the
4385 alias system to offer full-blown shell convenience, I think.
4397 alias system to offer full-blown shell convenience, I think.
4386
4398
4387 * Version 0.1.17 released, 0.1.18 opened.
4399 * Version 0.1.17 released, 0.1.18 opened.
4388
4400
4389 * dot_ipython/ipythonrc (alias): added documentation.
4401 * dot_ipython/ipythonrc (alias): added documentation.
4390 (xcolor): Fixed small bug (xcolors -> xcolor)
4402 (xcolor): Fixed small bug (xcolors -> xcolor)
4391
4403
4392 * Changed the alias system. Now alias is a magic command to define
4404 * Changed the alias system. Now alias is a magic command to define
4393 aliases just like the shell. Rationale: the builtin magics should
4405 aliases just like the shell. Rationale: the builtin magics should
4394 be there for things deeply connected to IPython's
4406 be there for things deeply connected to IPython's
4395 architecture. And this is a much lighter system for what I think
4407 architecture. And this is a much lighter system for what I think
4396 is the really important feature: allowing users to define quickly
4408 is the really important feature: allowing users to define quickly
4397 magics that will do shell things for them, so they can customize
4409 magics that will do shell things for them, so they can customize
4398 IPython easily to match their work habits. If someone is really
4410 IPython easily to match their work habits. If someone is really
4399 desperate to have another name for a builtin alias, they can
4411 desperate to have another name for a builtin alias, they can
4400 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4412 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4401 works.
4413 works.
4402
4414
4403 2001-11-28 Fernando Perez <fperez@colorado.edu>
4415 2001-11-28 Fernando Perez <fperez@colorado.edu>
4404
4416
4405 * Changed @file so that it opens the source file at the proper
4417 * Changed @file so that it opens the source file at the proper
4406 line. Since it uses less, if your EDITOR environment is
4418 line. Since it uses less, if your EDITOR environment is
4407 configured, typing v will immediately open your editor of choice
4419 configured, typing v will immediately open your editor of choice
4408 right at the line where the object is defined. Not as quick as
4420 right at the line where the object is defined. Not as quick as
4409 having a direct @edit command, but for all intents and purposes it
4421 having a direct @edit command, but for all intents and purposes it
4410 works. And I don't have to worry about writing @edit to deal with
4422 works. And I don't have to worry about writing @edit to deal with
4411 all the editors, less does that.
4423 all the editors, less does that.
4412
4424
4413 * Version 0.1.16 released, 0.1.17 opened.
4425 * Version 0.1.16 released, 0.1.17 opened.
4414
4426
4415 * Fixed some nasty bugs in the page/page_dumb combo that could
4427 * Fixed some nasty bugs in the page/page_dumb combo that could
4416 crash IPython.
4428 crash IPython.
4417
4429
4418 2001-11-27 Fernando Perez <fperez@colorado.edu>
4430 2001-11-27 Fernando Perez <fperez@colorado.edu>
4419
4431
4420 * Version 0.1.15 released, 0.1.16 opened.
4432 * Version 0.1.15 released, 0.1.16 opened.
4421
4433
4422 * Finally got ? and ?? to work for undefined things: now it's
4434 * Finally got ? and ?? to work for undefined things: now it's
4423 possible to type {}.get? and get information about the get method
4435 possible to type {}.get? and get information about the get method
4424 of dicts, or os.path? even if only os is defined (so technically
4436 of dicts, or os.path? even if only os is defined (so technically
4425 os.path isn't). Works at any level. For example, after import os,
4437 os.path isn't). Works at any level. For example, after import os,
4426 os?, os.path?, os.path.abspath? all work. This is great, took some
4438 os?, os.path?, os.path.abspath? all work. This is great, took some
4427 work in _ofind.
4439 work in _ofind.
4428
4440
4429 * Fixed more bugs with logging. The sanest way to do it was to add
4441 * Fixed more bugs with logging. The sanest way to do it was to add
4430 to @log a 'mode' parameter. Killed two in one shot (this mode
4442 to @log a 'mode' parameter. Killed two in one shot (this mode
4431 option was a request of Janko's). I think it's finally clean
4443 option was a request of Janko's). I think it's finally clean
4432 (famous last words).
4444 (famous last words).
4433
4445
4434 * Added a page_dumb() pager which does a decent job of paging on
4446 * Added a page_dumb() pager which does a decent job of paging on
4435 screen, if better things (like less) aren't available. One less
4447 screen, if better things (like less) aren't available. One less
4436 unix dependency (someday maybe somebody will port this to
4448 unix dependency (someday maybe somebody will port this to
4437 windows).
4449 windows).
4438
4450
4439 * Fixed problem in magic_log: would lock of logging out if log
4451 * Fixed problem in magic_log: would lock of logging out if log
4440 creation failed (because it would still think it had succeeded).
4452 creation failed (because it would still think it had succeeded).
4441
4453
4442 * Improved the page() function using curses to auto-detect screen
4454 * Improved the page() function using curses to auto-detect screen
4443 size. Now it can make a much better decision on whether to print
4455 size. Now it can make a much better decision on whether to print
4444 or page a string. Option screen_length was modified: a value 0
4456 or page a string. Option screen_length was modified: a value 0
4445 means auto-detect, and that's the default now.
4457 means auto-detect, and that's the default now.
4446
4458
4447 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4459 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4448 go out. I'll test it for a few days, then talk to Janko about
4460 go out. I'll test it for a few days, then talk to Janko about
4449 licences and announce it.
4461 licences and announce it.
4450
4462
4451 * Fixed the length of the auto-generated ---> prompt which appears
4463 * Fixed the length of the auto-generated ---> prompt which appears
4452 for auto-parens and auto-quotes. Getting this right isn't trivial,
4464 for auto-parens and auto-quotes. Getting this right isn't trivial,
4453 with all the color escapes, different prompt types and optional
4465 with all the color escapes, different prompt types and optional
4454 separators. But it seems to be working in all the combinations.
4466 separators. But it seems to be working in all the combinations.
4455
4467
4456 2001-11-26 Fernando Perez <fperez@colorado.edu>
4468 2001-11-26 Fernando Perez <fperez@colorado.edu>
4457
4469
4458 * Wrote a regexp filter to get option types from the option names
4470 * Wrote a regexp filter to get option types from the option names
4459 string. This eliminates the need to manually keep two duplicate
4471 string. This eliminates the need to manually keep two duplicate
4460 lists.
4472 lists.
4461
4473
4462 * Removed the unneeded check_option_names. Now options are handled
4474 * Removed the unneeded check_option_names. Now options are handled
4463 in a much saner manner and it's easy to visually check that things
4475 in a much saner manner and it's easy to visually check that things
4464 are ok.
4476 are ok.
4465
4477
4466 * Updated version numbers on all files I modified to carry a
4478 * Updated version numbers on all files I modified to carry a
4467 notice so Janko and Nathan have clear version markers.
4479 notice so Janko and Nathan have clear version markers.
4468
4480
4469 * Updated docstring for ultraTB with my changes. I should send
4481 * Updated docstring for ultraTB with my changes. I should send
4470 this to Nathan.
4482 this to Nathan.
4471
4483
4472 * Lots of small fixes. Ran everything through pychecker again.
4484 * Lots of small fixes. Ran everything through pychecker again.
4473
4485
4474 * Made loading of deep_reload an cmd line option. If it's not too
4486 * Made loading of deep_reload an cmd line option. If it's not too
4475 kosher, now people can just disable it. With -nodeep_reload it's
4487 kosher, now people can just disable it. With -nodeep_reload it's
4476 still available as dreload(), it just won't overwrite reload().
4488 still available as dreload(), it just won't overwrite reload().
4477
4489
4478 * Moved many options to the no| form (-opt and -noopt
4490 * Moved many options to the no| form (-opt and -noopt
4479 accepted). Cleaner.
4491 accepted). Cleaner.
4480
4492
4481 * Changed magic_log so that if called with no parameters, it uses
4493 * Changed magic_log so that if called with no parameters, it uses
4482 'rotate' mode. That way auto-generated logs aren't automatically
4494 'rotate' mode. That way auto-generated logs aren't automatically
4483 over-written. For normal logs, now a backup is made if it exists
4495 over-written. For normal logs, now a backup is made if it exists
4484 (only 1 level of backups). A new 'backup' mode was added to the
4496 (only 1 level of backups). A new 'backup' mode was added to the
4485 Logger class to support this. This was a request by Janko.
4497 Logger class to support this. This was a request by Janko.
4486
4498
4487 * Added @logoff/@logon to stop/restart an active log.
4499 * Added @logoff/@logon to stop/restart an active log.
4488
4500
4489 * Fixed a lot of bugs in log saving/replay. It was pretty
4501 * Fixed a lot of bugs in log saving/replay. It was pretty
4490 broken. Now special lines (!@,/) appear properly in the command
4502 broken. Now special lines (!@,/) appear properly in the command
4491 history after a log replay.
4503 history after a log replay.
4492
4504
4493 * Tried and failed to implement full session saving via pickle. My
4505 * Tried and failed to implement full session saving via pickle. My
4494 idea was to pickle __main__.__dict__, but modules can't be
4506 idea was to pickle __main__.__dict__, but modules can't be
4495 pickled. This would be a better alternative to replaying logs, but
4507 pickled. This would be a better alternative to replaying logs, but
4496 seems quite tricky to get to work. Changed -session to be called
4508 seems quite tricky to get to work. Changed -session to be called
4497 -logplay, which more accurately reflects what it does. And if we
4509 -logplay, which more accurately reflects what it does. And if we
4498 ever get real session saving working, -session is now available.
4510 ever get real session saving working, -session is now available.
4499
4511
4500 * Implemented color schemes for prompts also. As for tracebacks,
4512 * Implemented color schemes for prompts also. As for tracebacks,
4501 currently only NoColor and Linux are supported. But now the
4513 currently only NoColor and Linux are supported. But now the
4502 infrastructure is in place, based on a generic ColorScheme
4514 infrastructure is in place, based on a generic ColorScheme
4503 class. So writing and activating new schemes both for the prompts
4515 class. So writing and activating new schemes both for the prompts
4504 and the tracebacks should be straightforward.
4516 and the tracebacks should be straightforward.
4505
4517
4506 * Version 0.1.13 released, 0.1.14 opened.
4518 * Version 0.1.13 released, 0.1.14 opened.
4507
4519
4508 * Changed handling of options for output cache. Now counter is
4520 * Changed handling of options for output cache. Now counter is
4509 hardwired starting at 1 and one specifies the maximum number of
4521 hardwired starting at 1 and one specifies the maximum number of
4510 entries *in the outcache* (not the max prompt counter). This is
4522 entries *in the outcache* (not the max prompt counter). This is
4511 much better, since many statements won't increase the cache
4523 much better, since many statements won't increase the cache
4512 count. It also eliminated some confusing options, now there's only
4524 count. It also eliminated some confusing options, now there's only
4513 one: cache_size.
4525 one: cache_size.
4514
4526
4515 * Added 'alias' magic function and magic_alias option in the
4527 * Added 'alias' magic function and magic_alias option in the
4516 ipythonrc file. Now the user can easily define whatever names he
4528 ipythonrc file. Now the user can easily define whatever names he
4517 wants for the magic functions without having to play weird
4529 wants for the magic functions without having to play weird
4518 namespace games. This gives IPython a real shell-like feel.
4530 namespace games. This gives IPython a real shell-like feel.
4519
4531
4520 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4532 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4521 @ or not).
4533 @ or not).
4522
4534
4523 This was one of the last remaining 'visible' bugs (that I know
4535 This was one of the last remaining 'visible' bugs (that I know
4524 of). I think if I can clean up the session loading so it works
4536 of). I think if I can clean up the session loading so it works
4525 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4537 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4526 about licensing).
4538 about licensing).
4527
4539
4528 2001-11-25 Fernando Perez <fperez@colorado.edu>
4540 2001-11-25 Fernando Perez <fperez@colorado.edu>
4529
4541
4530 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4542 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4531 there's a cleaner distinction between what ? and ?? show.
4543 there's a cleaner distinction between what ? and ?? show.
4532
4544
4533 * Added screen_length option. Now the user can define his own
4545 * Added screen_length option. Now the user can define his own
4534 screen size for page() operations.
4546 screen size for page() operations.
4535
4547
4536 * Implemented magic shell-like functions with automatic code
4548 * Implemented magic shell-like functions with automatic code
4537 generation. Now adding another function is just a matter of adding
4549 generation. Now adding another function is just a matter of adding
4538 an entry to a dict, and the function is dynamically generated at
4550 an entry to a dict, and the function is dynamically generated at
4539 run-time. Python has some really cool features!
4551 run-time. Python has some really cool features!
4540
4552
4541 * Renamed many options to cleanup conventions a little. Now all
4553 * Renamed many options to cleanup conventions a little. Now all
4542 are lowercase, and only underscores where needed. Also in the code
4554 are lowercase, and only underscores where needed. Also in the code
4543 option name tables are clearer.
4555 option name tables are clearer.
4544
4556
4545 * Changed prompts a little. Now input is 'In [n]:' instead of
4557 * Changed prompts a little. Now input is 'In [n]:' instead of
4546 'In[n]:='. This allows it the numbers to be aligned with the
4558 'In[n]:='. This allows it the numbers to be aligned with the
4547 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4559 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4548 Python (it was a Mathematica thing). The '...' continuation prompt
4560 Python (it was a Mathematica thing). The '...' continuation prompt
4549 was also changed a little to align better.
4561 was also changed a little to align better.
4550
4562
4551 * Fixed bug when flushing output cache. Not all _p<n> variables
4563 * Fixed bug when flushing output cache. Not all _p<n> variables
4552 exist, so their deletion needs to be wrapped in a try:
4564 exist, so their deletion needs to be wrapped in a try:
4553
4565
4554 * Figured out how to properly use inspect.formatargspec() (it
4566 * Figured out how to properly use inspect.formatargspec() (it
4555 requires the args preceded by *). So I removed all the code from
4567 requires the args preceded by *). So I removed all the code from
4556 _get_pdef in Magic, which was just replicating that.
4568 _get_pdef in Magic, which was just replicating that.
4557
4569
4558 * Added test to prefilter to allow redefining magic function names
4570 * Added test to prefilter to allow redefining magic function names
4559 as variables. This is ok, since the @ form is always available,
4571 as variables. This is ok, since the @ form is always available,
4560 but whe should allow the user to define a variable called 'ls' if
4572 but whe should allow the user to define a variable called 'ls' if
4561 he needs it.
4573 he needs it.
4562
4574
4563 * Moved the ToDo information from README into a separate ToDo.
4575 * Moved the ToDo information from README into a separate ToDo.
4564
4576
4565 * General code cleanup and small bugfixes. I think it's close to a
4577 * General code cleanup and small bugfixes. I think it's close to a
4566 state where it can be released, obviously with a big 'beta'
4578 state where it can be released, obviously with a big 'beta'
4567 warning on it.
4579 warning on it.
4568
4580
4569 * Got the magic function split to work. Now all magics are defined
4581 * Got the magic function split to work. Now all magics are defined
4570 in a separate class. It just organizes things a bit, and now
4582 in a separate class. It just organizes things a bit, and now
4571 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4583 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4572 was too long).
4584 was too long).
4573
4585
4574 * Changed @clear to @reset to avoid potential confusions with
4586 * Changed @clear to @reset to avoid potential confusions with
4575 the shell command clear. Also renamed @cl to @clear, which does
4587 the shell command clear. Also renamed @cl to @clear, which does
4576 exactly what people expect it to from their shell experience.
4588 exactly what people expect it to from their shell experience.
4577
4589
4578 Added a check to the @reset command (since it's so
4590 Added a check to the @reset command (since it's so
4579 destructive, it's probably a good idea to ask for confirmation).
4591 destructive, it's probably a good idea to ask for confirmation).
4580 But now reset only works for full namespace resetting. Since the
4592 But now reset only works for full namespace resetting. Since the
4581 del keyword is already there for deleting a few specific
4593 del keyword is already there for deleting a few specific
4582 variables, I don't see the point of having a redundant magic
4594 variables, I don't see the point of having a redundant magic
4583 function for the same task.
4595 function for the same task.
4584
4596
4585 2001-11-24 Fernando Perez <fperez@colorado.edu>
4597 2001-11-24 Fernando Perez <fperez@colorado.edu>
4586
4598
4587 * Updated the builtin docs (esp. the ? ones).
4599 * Updated the builtin docs (esp. the ? ones).
4588
4600
4589 * Ran all the code through pychecker. Not terribly impressed with
4601 * Ran all the code through pychecker. Not terribly impressed with
4590 it: lots of spurious warnings and didn't really find anything of
4602 it: lots of spurious warnings and didn't really find anything of
4591 substance (just a few modules being imported and not used).
4603 substance (just a few modules being imported and not used).
4592
4604
4593 * Implemented the new ultraTB functionality into IPython. New
4605 * Implemented the new ultraTB functionality into IPython. New
4594 option: xcolors. This chooses color scheme. xmode now only selects
4606 option: xcolors. This chooses color scheme. xmode now only selects
4595 between Plain and Verbose. Better orthogonality.
4607 between Plain and Verbose. Better orthogonality.
4596
4608
4597 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4609 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4598 mode and color scheme for the exception handlers. Now it's
4610 mode and color scheme for the exception handlers. Now it's
4599 possible to have the verbose traceback with no coloring.
4611 possible to have the verbose traceback with no coloring.
4600
4612
4601 2001-11-23 Fernando Perez <fperez@colorado.edu>
4613 2001-11-23 Fernando Perez <fperez@colorado.edu>
4602
4614
4603 * Version 0.1.12 released, 0.1.13 opened.
4615 * Version 0.1.12 released, 0.1.13 opened.
4604
4616
4605 * Removed option to set auto-quote and auto-paren escapes by
4617 * Removed option to set auto-quote and auto-paren escapes by
4606 user. The chances of breaking valid syntax are just too high. If
4618 user. The chances of breaking valid syntax are just too high. If
4607 someone *really* wants, they can always dig into the code.
4619 someone *really* wants, they can always dig into the code.
4608
4620
4609 * Made prompt separators configurable.
4621 * Made prompt separators configurable.
4610
4622
4611 2001-11-22 Fernando Perez <fperez@colorado.edu>
4623 2001-11-22 Fernando Perez <fperez@colorado.edu>
4612
4624
4613 * Small bugfixes in many places.
4625 * Small bugfixes in many places.
4614
4626
4615 * Removed the MyCompleter class from ipplib. It seemed redundant
4627 * Removed the MyCompleter class from ipplib. It seemed redundant
4616 with the C-p,C-n history search functionality. Less code to
4628 with the C-p,C-n history search functionality. Less code to
4617 maintain.
4629 maintain.
4618
4630
4619 * Moved all the original ipython.py code into ipythonlib.py. Right
4631 * Moved all the original ipython.py code into ipythonlib.py. Right
4620 now it's just one big dump into a function called make_IPython, so
4632 now it's just one big dump into a function called make_IPython, so
4621 no real modularity has been gained. But at least it makes the
4633 no real modularity has been gained. But at least it makes the
4622 wrapper script tiny, and since ipythonlib is a module, it gets
4634 wrapper script tiny, and since ipythonlib is a module, it gets
4623 compiled and startup is much faster.
4635 compiled and startup is much faster.
4624
4636
4625 This is a reasobably 'deep' change, so we should test it for a
4637 This is a reasobably 'deep' change, so we should test it for a
4626 while without messing too much more with the code.
4638 while without messing too much more with the code.
4627
4639
4628 2001-11-21 Fernando Perez <fperez@colorado.edu>
4640 2001-11-21 Fernando Perez <fperez@colorado.edu>
4629
4641
4630 * Version 0.1.11 released, 0.1.12 opened for further work.
4642 * Version 0.1.11 released, 0.1.12 opened for further work.
4631
4643
4632 * Removed dependency on Itpl. It was only needed in one place. It
4644 * Removed dependency on Itpl. It was only needed in one place. It
4633 would be nice if this became part of python, though. It makes life
4645 would be nice if this became part of python, though. It makes life
4634 *a lot* easier in some cases.
4646 *a lot* easier in some cases.
4635
4647
4636 * Simplified the prefilter code a bit. Now all handlers are
4648 * Simplified the prefilter code a bit. Now all handlers are
4637 expected to explicitly return a value (at least a blank string).
4649 expected to explicitly return a value (at least a blank string).
4638
4650
4639 * Heavy edits in ipplib. Removed the help system altogether. Now
4651 * Heavy edits in ipplib. Removed the help system altogether. Now
4640 obj?/?? is used for inspecting objects, a magic @doc prints
4652 obj?/?? is used for inspecting objects, a magic @doc prints
4641 docstrings, and full-blown Python help is accessed via the 'help'
4653 docstrings, and full-blown Python help is accessed via the 'help'
4642 keyword. This cleans up a lot of code (less to maintain) and does
4654 keyword. This cleans up a lot of code (less to maintain) and does
4643 the job. Since 'help' is now a standard Python component, might as
4655 the job. Since 'help' is now a standard Python component, might as
4644 well use it and remove duplicate functionality.
4656 well use it and remove duplicate functionality.
4645
4657
4646 Also removed the option to use ipplib as a standalone program. By
4658 Also removed the option to use ipplib as a standalone program. By
4647 now it's too dependent on other parts of IPython to function alone.
4659 now it's too dependent on other parts of IPython to function alone.
4648
4660
4649 * Fixed bug in genutils.pager. It would crash if the pager was
4661 * Fixed bug in genutils.pager. It would crash if the pager was
4650 exited immediately after opening (broken pipe).
4662 exited immediately after opening (broken pipe).
4651
4663
4652 * Trimmed down the VerboseTB reporting a little. The header is
4664 * Trimmed down the VerboseTB reporting a little. The header is
4653 much shorter now and the repeated exception arguments at the end
4665 much shorter now and the repeated exception arguments at the end
4654 have been removed. For interactive use the old header seemed a bit
4666 have been removed. For interactive use the old header seemed a bit
4655 excessive.
4667 excessive.
4656
4668
4657 * Fixed small bug in output of @whos for variables with multi-word
4669 * Fixed small bug in output of @whos for variables with multi-word
4658 types (only first word was displayed).
4670 types (only first word was displayed).
4659
4671
4660 2001-11-17 Fernando Perez <fperez@colorado.edu>
4672 2001-11-17 Fernando Perez <fperez@colorado.edu>
4661
4673
4662 * Version 0.1.10 released, 0.1.11 opened for further work.
4674 * Version 0.1.10 released, 0.1.11 opened for further work.
4663
4675
4664 * Modified dirs and friends. dirs now *returns* the stack (not
4676 * Modified dirs and friends. dirs now *returns* the stack (not
4665 prints), so one can manipulate it as a variable. Convenient to
4677 prints), so one can manipulate it as a variable. Convenient to
4666 travel along many directories.
4678 travel along many directories.
4667
4679
4668 * Fixed bug in magic_pdef: would only work with functions with
4680 * Fixed bug in magic_pdef: would only work with functions with
4669 arguments with default values.
4681 arguments with default values.
4670
4682
4671 2001-11-14 Fernando Perez <fperez@colorado.edu>
4683 2001-11-14 Fernando Perez <fperez@colorado.edu>
4672
4684
4673 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4685 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4674 example with IPython. Various other minor fixes and cleanups.
4686 example with IPython. Various other minor fixes and cleanups.
4675
4687
4676 * Version 0.1.9 released, 0.1.10 opened for further work.
4688 * Version 0.1.9 released, 0.1.10 opened for further work.
4677
4689
4678 * Added sys.path to the list of directories searched in the
4690 * Added sys.path to the list of directories searched in the
4679 execfile= option. It used to be the current directory and the
4691 execfile= option. It used to be the current directory and the
4680 user's IPYTHONDIR only.
4692 user's IPYTHONDIR only.
4681
4693
4682 2001-11-13 Fernando Perez <fperez@colorado.edu>
4694 2001-11-13 Fernando Perez <fperez@colorado.edu>
4683
4695
4684 * Reinstated the raw_input/prefilter separation that Janko had
4696 * Reinstated the raw_input/prefilter separation that Janko had
4685 initially. This gives a more convenient setup for extending the
4697 initially. This gives a more convenient setup for extending the
4686 pre-processor from the outside: raw_input always gets a string,
4698 pre-processor from the outside: raw_input always gets a string,
4687 and prefilter has to process it. We can then redefine prefilter
4699 and prefilter has to process it. We can then redefine prefilter
4688 from the outside and implement extensions for special
4700 from the outside and implement extensions for special
4689 purposes.
4701 purposes.
4690
4702
4691 Today I got one for inputting PhysicalQuantity objects
4703 Today I got one for inputting PhysicalQuantity objects
4692 (from Scientific) without needing any function calls at
4704 (from Scientific) without needing any function calls at
4693 all. Extremely convenient, and it's all done as a user-level
4705 all. Extremely convenient, and it's all done as a user-level
4694 extension (no IPython code was touched). Now instead of:
4706 extension (no IPython code was touched). Now instead of:
4695 a = PhysicalQuantity(4.2,'m/s**2')
4707 a = PhysicalQuantity(4.2,'m/s**2')
4696 one can simply say
4708 one can simply say
4697 a = 4.2 m/s**2
4709 a = 4.2 m/s**2
4698 or even
4710 or even
4699 a = 4.2 m/s^2
4711 a = 4.2 m/s^2
4700
4712
4701 I use this, but it's also a proof of concept: IPython really is
4713 I use this, but it's also a proof of concept: IPython really is
4702 fully user-extensible, even at the level of the parsing of the
4714 fully user-extensible, even at the level of the parsing of the
4703 command line. It's not trivial, but it's perfectly doable.
4715 command line. It's not trivial, but it's perfectly doable.
4704
4716
4705 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4717 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4706 the problem of modules being loaded in the inverse order in which
4718 the problem of modules being loaded in the inverse order in which
4707 they were defined in
4719 they were defined in
4708
4720
4709 * Version 0.1.8 released, 0.1.9 opened for further work.
4721 * Version 0.1.8 released, 0.1.9 opened for further work.
4710
4722
4711 * Added magics pdef, source and file. They respectively show the
4723 * Added magics pdef, source and file. They respectively show the
4712 definition line ('prototype' in C), source code and full python
4724 definition line ('prototype' in C), source code and full python
4713 file for any callable object. The object inspector oinfo uses
4725 file for any callable object. The object inspector oinfo uses
4714 these to show the same information.
4726 these to show the same information.
4715
4727
4716 * Version 0.1.7 released, 0.1.8 opened for further work.
4728 * Version 0.1.7 released, 0.1.8 opened for further work.
4717
4729
4718 * Separated all the magic functions into a class called Magic. The
4730 * Separated all the magic functions into a class called Magic. The
4719 InteractiveShell class was becoming too big for Xemacs to handle
4731 InteractiveShell class was becoming too big for Xemacs to handle
4720 (de-indenting a line would lock it up for 10 seconds while it
4732 (de-indenting a line would lock it up for 10 seconds while it
4721 backtracked on the whole class!)
4733 backtracked on the whole class!)
4722
4734
4723 FIXME: didn't work. It can be done, but right now namespaces are
4735 FIXME: didn't work. It can be done, but right now namespaces are
4724 all messed up. Do it later (reverted it for now, so at least
4736 all messed up. Do it later (reverted it for now, so at least
4725 everything works as before).
4737 everything works as before).
4726
4738
4727 * Got the object introspection system (magic_oinfo) working! I
4739 * Got the object introspection system (magic_oinfo) working! I
4728 think this is pretty much ready for release to Janko, so he can
4740 think this is pretty much ready for release to Janko, so he can
4729 test it for a while and then announce it. Pretty much 100% of what
4741 test it for a while and then announce it. Pretty much 100% of what
4730 I wanted for the 'phase 1' release is ready. Happy, tired.
4742 I wanted for the 'phase 1' release is ready. Happy, tired.
4731
4743
4732 2001-11-12 Fernando Perez <fperez@colorado.edu>
4744 2001-11-12 Fernando Perez <fperez@colorado.edu>
4733
4745
4734 * Version 0.1.6 released, 0.1.7 opened for further work.
4746 * Version 0.1.6 released, 0.1.7 opened for further work.
4735
4747
4736 * Fixed bug in printing: it used to test for truth before
4748 * Fixed bug in printing: it used to test for truth before
4737 printing, so 0 wouldn't print. Now checks for None.
4749 printing, so 0 wouldn't print. Now checks for None.
4738
4750
4739 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4751 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4740 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4752 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4741 reaches by hand into the outputcache. Think of a better way to do
4753 reaches by hand into the outputcache. Think of a better way to do
4742 this later.
4754 this later.
4743
4755
4744 * Various small fixes thanks to Nathan's comments.
4756 * Various small fixes thanks to Nathan's comments.
4745
4757
4746 * Changed magic_pprint to magic_Pprint. This way it doesn't
4758 * Changed magic_pprint to magic_Pprint. This way it doesn't
4747 collide with pprint() and the name is consistent with the command
4759 collide with pprint() and the name is consistent with the command
4748 line option.
4760 line option.
4749
4761
4750 * Changed prompt counter behavior to be fully like
4762 * Changed prompt counter behavior to be fully like
4751 Mathematica's. That is, even input that doesn't return a result
4763 Mathematica's. That is, even input that doesn't return a result
4752 raises the prompt counter. The old behavior was kind of confusing
4764 raises the prompt counter. The old behavior was kind of confusing
4753 (getting the same prompt number several times if the operation
4765 (getting the same prompt number several times if the operation
4754 didn't return a result).
4766 didn't return a result).
4755
4767
4756 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4768 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4757
4769
4758 * Fixed -Classic mode (wasn't working anymore).
4770 * Fixed -Classic mode (wasn't working anymore).
4759
4771
4760 * Added colored prompts using Nathan's new code. Colors are
4772 * Added colored prompts using Nathan's new code. Colors are
4761 currently hardwired, they can be user-configurable. For
4773 currently hardwired, they can be user-configurable. For
4762 developers, they can be chosen in file ipythonlib.py, at the
4774 developers, they can be chosen in file ipythonlib.py, at the
4763 beginning of the CachedOutput class def.
4775 beginning of the CachedOutput class def.
4764
4776
4765 2001-11-11 Fernando Perez <fperez@colorado.edu>
4777 2001-11-11 Fernando Perez <fperez@colorado.edu>
4766
4778
4767 * Version 0.1.5 released, 0.1.6 opened for further work.
4779 * Version 0.1.5 released, 0.1.6 opened for further work.
4768
4780
4769 * Changed magic_env to *return* the environment as a dict (not to
4781 * Changed magic_env to *return* the environment as a dict (not to
4770 print it). This way it prints, but it can also be processed.
4782 print it). This way it prints, but it can also be processed.
4771
4783
4772 * Added Verbose exception reporting to interactive
4784 * Added Verbose exception reporting to interactive
4773 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4785 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4774 traceback. Had to make some changes to the ultraTB file. This is
4786 traceback. Had to make some changes to the ultraTB file. This is
4775 probably the last 'big' thing in my mental todo list. This ties
4787 probably the last 'big' thing in my mental todo list. This ties
4776 in with the next entry:
4788 in with the next entry:
4777
4789
4778 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4790 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4779 has to specify is Plain, Color or Verbose for all exception
4791 has to specify is Plain, Color or Verbose for all exception
4780 handling.
4792 handling.
4781
4793
4782 * Removed ShellServices option. All this can really be done via
4794 * Removed ShellServices option. All this can really be done via
4783 the magic system. It's easier to extend, cleaner and has automatic
4795 the magic system. It's easier to extend, cleaner and has automatic
4784 namespace protection and documentation.
4796 namespace protection and documentation.
4785
4797
4786 2001-11-09 Fernando Perez <fperez@colorado.edu>
4798 2001-11-09 Fernando Perez <fperez@colorado.edu>
4787
4799
4788 * Fixed bug in output cache flushing (missing parameter to
4800 * Fixed bug in output cache flushing (missing parameter to
4789 __init__). Other small bugs fixed (found using pychecker).
4801 __init__). Other small bugs fixed (found using pychecker).
4790
4802
4791 * Version 0.1.4 opened for bugfixing.
4803 * Version 0.1.4 opened for bugfixing.
4792
4804
4793 2001-11-07 Fernando Perez <fperez@colorado.edu>
4805 2001-11-07 Fernando Perez <fperez@colorado.edu>
4794
4806
4795 * Version 0.1.3 released, mainly because of the raw_input bug.
4807 * Version 0.1.3 released, mainly because of the raw_input bug.
4796
4808
4797 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4809 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4798 and when testing for whether things were callable, a call could
4810 and when testing for whether things were callable, a call could
4799 actually be made to certain functions. They would get called again
4811 actually be made to certain functions. They would get called again
4800 once 'really' executed, with a resulting double call. A disaster
4812 once 'really' executed, with a resulting double call. A disaster
4801 in many cases (list.reverse() would never work!).
4813 in many cases (list.reverse() would never work!).
4802
4814
4803 * Removed prefilter() function, moved its code to raw_input (which
4815 * Removed prefilter() function, moved its code to raw_input (which
4804 after all was just a near-empty caller for prefilter). This saves
4816 after all was just a near-empty caller for prefilter). This saves
4805 a function call on every prompt, and simplifies the class a tiny bit.
4817 a function call on every prompt, and simplifies the class a tiny bit.
4806
4818
4807 * Fix _ip to __ip name in magic example file.
4819 * Fix _ip to __ip name in magic example file.
4808
4820
4809 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4821 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4810 work with non-gnu versions of tar.
4822 work with non-gnu versions of tar.
4811
4823
4812 2001-11-06 Fernando Perez <fperez@colorado.edu>
4824 2001-11-06 Fernando Perez <fperez@colorado.edu>
4813
4825
4814 * Version 0.1.2. Just to keep track of the recent changes.
4826 * Version 0.1.2. Just to keep track of the recent changes.
4815
4827
4816 * Fixed nasty bug in output prompt routine. It used to check 'if
4828 * Fixed nasty bug in output prompt routine. It used to check 'if
4817 arg != None...'. Problem is, this fails if arg implements a
4829 arg != None...'. Problem is, this fails if arg implements a
4818 special comparison (__cmp__) which disallows comparing to
4830 special comparison (__cmp__) which disallows comparing to
4819 None. Found it when trying to use the PhysicalQuantity module from
4831 None. Found it when trying to use the PhysicalQuantity module from
4820 ScientificPython.
4832 ScientificPython.
4821
4833
4822 2001-11-05 Fernando Perez <fperez@colorado.edu>
4834 2001-11-05 Fernando Perez <fperez@colorado.edu>
4823
4835
4824 * Also added dirs. Now the pushd/popd/dirs family functions
4836 * Also added dirs. Now the pushd/popd/dirs family functions
4825 basically like the shell, with the added convenience of going home
4837 basically like the shell, with the added convenience of going home
4826 when called with no args.
4838 when called with no args.
4827
4839
4828 * pushd/popd slightly modified to mimic shell behavior more
4840 * pushd/popd slightly modified to mimic shell behavior more
4829 closely.
4841 closely.
4830
4842
4831 * Added env,pushd,popd from ShellServices as magic functions. I
4843 * Added env,pushd,popd from ShellServices as magic functions. I
4832 think the cleanest will be to port all desired functions from
4844 think the cleanest will be to port all desired functions from
4833 ShellServices as magics and remove ShellServices altogether. This
4845 ShellServices as magics and remove ShellServices altogether. This
4834 will provide a single, clean way of adding functionality
4846 will provide a single, clean way of adding functionality
4835 (shell-type or otherwise) to IP.
4847 (shell-type or otherwise) to IP.
4836
4848
4837 2001-11-04 Fernando Perez <fperez@colorado.edu>
4849 2001-11-04 Fernando Perez <fperez@colorado.edu>
4838
4850
4839 * Added .ipython/ directory to sys.path. This way users can keep
4851 * Added .ipython/ directory to sys.path. This way users can keep
4840 customizations there and access them via import.
4852 customizations there and access them via import.
4841
4853
4842 2001-11-03 Fernando Perez <fperez@colorado.edu>
4854 2001-11-03 Fernando Perez <fperez@colorado.edu>
4843
4855
4844 * Opened version 0.1.1 for new changes.
4856 * Opened version 0.1.1 for new changes.
4845
4857
4846 * Changed version number to 0.1.0: first 'public' release, sent to
4858 * Changed version number to 0.1.0: first 'public' release, sent to
4847 Nathan and Janko.
4859 Nathan and Janko.
4848
4860
4849 * Lots of small fixes and tweaks.
4861 * Lots of small fixes and tweaks.
4850
4862
4851 * Minor changes to whos format. Now strings are shown, snipped if
4863 * Minor changes to whos format. Now strings are shown, snipped if
4852 too long.
4864 too long.
4853
4865
4854 * Changed ShellServices to work on __main__ so they show up in @who
4866 * Changed ShellServices to work on __main__ so they show up in @who
4855
4867
4856 * Help also works with ? at the end of a line:
4868 * Help also works with ? at the end of a line:
4857 ?sin and sin?
4869 ?sin and sin?
4858 both produce the same effect. This is nice, as often I use the
4870 both produce the same effect. This is nice, as often I use the
4859 tab-complete to find the name of a method, but I used to then have
4871 tab-complete to find the name of a method, but I used to then have
4860 to go to the beginning of the line to put a ? if I wanted more
4872 to go to the beginning of the line to put a ? if I wanted more
4861 info. Now I can just add the ? and hit return. Convenient.
4873 info. Now I can just add the ? and hit return. Convenient.
4862
4874
4863 2001-11-02 Fernando Perez <fperez@colorado.edu>
4875 2001-11-02 Fernando Perez <fperez@colorado.edu>
4864
4876
4865 * Python version check (>=2.1) added.
4877 * Python version check (>=2.1) added.
4866
4878
4867 * Added LazyPython documentation. At this point the docs are quite
4879 * Added LazyPython documentation. At this point the docs are quite
4868 a mess. A cleanup is in order.
4880 a mess. A cleanup is in order.
4869
4881
4870 * Auto-installer created. For some bizarre reason, the zipfiles
4882 * Auto-installer created. For some bizarre reason, the zipfiles
4871 module isn't working on my system. So I made a tar version
4883 module isn't working on my system. So I made a tar version
4872 (hopefully the command line options in various systems won't kill
4884 (hopefully the command line options in various systems won't kill
4873 me).
4885 me).
4874
4886
4875 * Fixes to Struct in genutils. Now all dictionary-like methods are
4887 * Fixes to Struct in genutils. Now all dictionary-like methods are
4876 protected (reasonably).
4888 protected (reasonably).
4877
4889
4878 * Added pager function to genutils and changed ? to print usage
4890 * Added pager function to genutils and changed ? to print usage
4879 note through it (it was too long).
4891 note through it (it was too long).
4880
4892
4881 * Added the LazyPython functionality. Works great! I changed the
4893 * Added the LazyPython functionality. Works great! I changed the
4882 auto-quote escape to ';', it's on home row and next to '. But
4894 auto-quote escape to ';', it's on home row and next to '. But
4883 both auto-quote and auto-paren (still /) escapes are command-line
4895 both auto-quote and auto-paren (still /) escapes are command-line
4884 parameters.
4896 parameters.
4885
4897
4886
4898
4887 2001-11-01 Fernando Perez <fperez@colorado.edu>
4899 2001-11-01 Fernando Perez <fperez@colorado.edu>
4888
4900
4889 * Version changed to 0.0.7. Fairly large change: configuration now
4901 * Version changed to 0.0.7. Fairly large change: configuration now
4890 is all stored in a directory, by default .ipython. There, all
4902 is all stored in a directory, by default .ipython. There, all
4891 config files have normal looking names (not .names)
4903 config files have normal looking names (not .names)
4892
4904
4893 * Version 0.0.6 Released first to Lucas and Archie as a test
4905 * Version 0.0.6 Released first to Lucas and Archie as a test
4894 run. Since it's the first 'semi-public' release, change version to
4906 run. Since it's the first 'semi-public' release, change version to
4895 > 0.0.6 for any changes now.
4907 > 0.0.6 for any changes now.
4896
4908
4897 * Stuff I had put in the ipplib.py changelog:
4909 * Stuff I had put in the ipplib.py changelog:
4898
4910
4899 Changes to InteractiveShell:
4911 Changes to InteractiveShell:
4900
4912
4901 - Made the usage message a parameter.
4913 - Made the usage message a parameter.
4902
4914
4903 - Require the name of the shell variable to be given. It's a bit
4915 - Require the name of the shell variable to be given. It's a bit
4904 of a hack, but allows the name 'shell' not to be hardwire in the
4916 of a hack, but allows the name 'shell' not to be hardwire in the
4905 magic (@) handler, which is problematic b/c it requires
4917 magic (@) handler, which is problematic b/c it requires
4906 polluting the global namespace with 'shell'. This in turn is
4918 polluting the global namespace with 'shell'. This in turn is
4907 fragile: if a user redefines a variable called shell, things
4919 fragile: if a user redefines a variable called shell, things
4908 break.
4920 break.
4909
4921
4910 - magic @: all functions available through @ need to be defined
4922 - magic @: all functions available through @ need to be defined
4911 as magic_<name>, even though they can be called simply as
4923 as magic_<name>, even though they can be called simply as
4912 @<name>. This allows the special command @magic to gather
4924 @<name>. This allows the special command @magic to gather
4913 information automatically about all existing magic functions,
4925 information automatically about all existing magic functions,
4914 even if they are run-time user extensions, by parsing the shell
4926 even if they are run-time user extensions, by parsing the shell
4915 instance __dict__ looking for special magic_ names.
4927 instance __dict__ looking for special magic_ names.
4916
4928
4917 - mainloop: added *two* local namespace parameters. This allows
4929 - mainloop: added *two* local namespace parameters. This allows
4918 the class to differentiate between parameters which were there
4930 the class to differentiate between parameters which were there
4919 before and after command line initialization was processed. This
4931 before and after command line initialization was processed. This
4920 way, later @who can show things loaded at startup by the
4932 way, later @who can show things loaded at startup by the
4921 user. This trick was necessary to make session saving/reloading
4933 user. This trick was necessary to make session saving/reloading
4922 really work: ideally after saving/exiting/reloading a session,
4934 really work: ideally after saving/exiting/reloading a session,
4923 *everythin* should look the same, including the output of @who. I
4935 *everythin* should look the same, including the output of @who. I
4924 was only able to make this work with this double namespace
4936 was only able to make this work with this double namespace
4925 trick.
4937 trick.
4926
4938
4927 - added a header to the logfile which allows (almost) full
4939 - added a header to the logfile which allows (almost) full
4928 session restoring.
4940 session restoring.
4929
4941
4930 - prepend lines beginning with @ or !, with a and log
4942 - prepend lines beginning with @ or !, with a and log
4931 them. Why? !lines: may be useful to know what you did @lines:
4943 them. Why? !lines: may be useful to know what you did @lines:
4932 they may affect session state. So when restoring a session, at
4944 they may affect session state. So when restoring a session, at
4933 least inform the user of their presence. I couldn't quite get
4945 least inform the user of their presence. I couldn't quite get
4934 them to properly re-execute, but at least the user is warned.
4946 them to properly re-execute, but at least the user is warned.
4935
4947
4936 * Started ChangeLog.
4948 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now