##// END OF EJS Templates
Get "path" objects via SList LSString mechanism, through...
vivainio -
Show More
@@ -1,1745 +1,1764 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 General purpose utilities.
3 General purpose utilities.
4
4
5 This is a grab-bag of stuff I find useful in most programs I write. Some of
5 This is a grab-bag of stuff I find useful in most programs I write. Some of
6 these things are also convenient when working at the command line.
6 these things are also convenient when working at the command line.
7
7
8 $Id: genutils.py 1013 2006-01-13 08:33:32Z fperez $"""
8 $Id: genutils.py 1028 2006-01-16 21:42:33Z vivainio $"""
9
9
10 #*****************************************************************************
10 #*****************************************************************************
11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
12 #
12 #
13 # Distributed under the terms of the BSD License. The full license is in
13 # Distributed under the terms of the BSD License. The full license is in
14 # the file COPYING, distributed as part of this software.
14 # the file COPYING, distributed as part of this software.
15 #*****************************************************************************
15 #*****************************************************************************
16
16
17 from __future__ import generators # 2.2 compatibility
17 from __future__ import generators # 2.2 compatibility
18
18
19 from IPython import Release
19 from IPython import Release
20 __author__ = '%s <%s>' % Release.authors['Fernando']
20 __author__ = '%s <%s>' % Release.authors['Fernando']
21 __license__ = Release.license
21 __license__ = Release.license
22
22
23 #****************************************************************************
23 #****************************************************************************
24 # required modules from the Python standard library
24 # required modules from the Python standard library
25 import __main__
25 import __main__
26 import commands
26 import commands
27 import os
27 import os
28 import re
28 import re
29 import shlex
29 import shlex
30 import shutil
30 import shutil
31 import sys
31 import sys
32 import tempfile
32 import tempfile
33 import time
33 import time
34 import types
34 import types
35
35
36 # Other IPython utilities
36 # Other IPython utilities
37 from IPython.Itpl import Itpl,itpl,printpl
37 from IPython.Itpl import Itpl,itpl,printpl
38 from IPython import DPyGetOpt
38 from IPython import DPyGetOpt
39
39 from IPython.path import path
40 if os.name == "nt":
40 if os.name == "nt":
41 from IPython.winconsole import get_console_size
41 from IPython.winconsole import get_console_size
42
42
43 # Build objects which appeared in Python 2.3 for 2.2, to make ipython
43 # Build objects which appeared in Python 2.3 for 2.2, to make ipython
44 # 2.2-friendly
44 # 2.2-friendly
45 try:
45 try:
46 basestring
46 basestring
47 except NameError:
47 except NameError:
48 import types
48 import types
49 basestring = (types.StringType, types.UnicodeType)
49 basestring = (types.StringType, types.UnicodeType)
50 True = 1==1
50 True = 1==1
51 False = 1==0
51 False = 1==0
52
52
53 def enumerate(obj):
53 def enumerate(obj):
54 i = -1
54 i = -1
55 for item in obj:
55 for item in obj:
56 i += 1
56 i += 1
57 yield i, item
57 yield i, item
58
58
59 # add these to the builtin namespace, so that all modules find them
59 # add these to the builtin namespace, so that all modules find them
60 import __builtin__
60 import __builtin__
61 __builtin__.basestring = basestring
61 __builtin__.basestring = basestring
62 __builtin__.True = True
62 __builtin__.True = True
63 __builtin__.False = False
63 __builtin__.False = False
64 __builtin__.enumerate = enumerate
64 __builtin__.enumerate = enumerate
65
65
66 # Try to use shlex.split for converting an input string into a sys.argv-type
66 # Try to use shlex.split for converting an input string into a sys.argv-type
67 # list. This appeared in Python 2.3, so here's a quick backport for 2.2.
67 # list. This appeared in Python 2.3, so here's a quick backport for 2.2.
68 try:
68 try:
69 shlex_split = shlex.split
69 shlex_split = shlex.split
70 except AttributeError:
70 except AttributeError:
71 _quotesre = re.compile(r'[\'"](.*)[\'"]')
71 _quotesre = re.compile(r'[\'"](.*)[\'"]')
72 _wordchars = ('abcdfeghijklmnopqrstuvwxyz'
72 _wordchars = ('abcdfeghijklmnopqrstuvwxyz'
73 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.~*?'
73 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.~*?'
74 'ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ'
74 'ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ'
75 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ%s'
75 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ%s'
76 % os.sep)
76 % os.sep)
77
77
78 def shlex_split(s):
78 def shlex_split(s):
79 """Simplified backport to Python 2.2 of shlex.split().
79 """Simplified backport to Python 2.2 of shlex.split().
80
80
81 This is a quick and dirty hack, since the shlex module under 2.2 lacks
81 This is a quick and dirty hack, since the shlex module under 2.2 lacks
82 several of the features needed to really match the functionality of
82 several of the features needed to really match the functionality of
83 shlex.split() in 2.3."""
83 shlex.split() in 2.3."""
84
84
85 lex = shlex.shlex(StringIO(s))
85 lex = shlex.shlex(StringIO(s))
86 # Try to get options, extensions and path separators as characters
86 # Try to get options, extensions and path separators as characters
87 lex.wordchars = _wordchars
87 lex.wordchars = _wordchars
88 lex.commenters = ''
88 lex.commenters = ''
89 # Make a list out of the lexer by hand, since in 2.2 it's not an
89 # Make a list out of the lexer by hand, since in 2.2 it's not an
90 # iterator.
90 # iterator.
91 lout = []
91 lout = []
92 while 1:
92 while 1:
93 token = lex.get_token()
93 token = lex.get_token()
94 if token == '':
94 if token == '':
95 break
95 break
96 # Try to handle quoted tokens correctly
96 # Try to handle quoted tokens correctly
97 quotes = _quotesre.match(token)
97 quotes = _quotesre.match(token)
98 if quotes:
98 if quotes:
99 token = quotes.group(1)
99 token = quotes.group(1)
100 lout.append(token)
100 lout.append(token)
101 return lout
101 return lout
102
102
103 #****************************************************************************
103 #****************************************************************************
104 # Exceptions
104 # Exceptions
105 class Error(Exception):
105 class Error(Exception):
106 """Base class for exceptions in this module."""
106 """Base class for exceptions in this module."""
107 pass
107 pass
108
108
109 #----------------------------------------------------------------------------
109 #----------------------------------------------------------------------------
110 class IOStream:
110 class IOStream:
111 def __init__(self,stream,fallback):
111 def __init__(self,stream,fallback):
112 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
112 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
113 stream = fallback
113 stream = fallback
114 self.stream = stream
114 self.stream = stream
115 self._swrite = stream.write
115 self._swrite = stream.write
116 self.flush = stream.flush
116 self.flush = stream.flush
117
117
118 def write(self,data):
118 def write(self,data):
119 try:
119 try:
120 self._swrite(data)
120 self._swrite(data)
121 except:
121 except:
122 try:
122 try:
123 # print handles some unicode issues which may trip a plain
123 # print handles some unicode issues which may trip a plain
124 # write() call. Attempt to emulate write() by using a
124 # write() call. Attempt to emulate write() by using a
125 # trailing comma
125 # trailing comma
126 print >> self.stream, data,
126 print >> self.stream, data,
127 except:
127 except:
128 # if we get here, something is seriously broken.
128 # if we get here, something is seriously broken.
129 print >> sys.stderr, \
129 print >> sys.stderr, \
130 'ERROR - failed to write data to stream:', stream
130 'ERROR - failed to write data to stream:', stream
131
131
132 class IOTerm:
132 class IOTerm:
133 """ Term holds the file or file-like objects for handling I/O operations.
133 """ Term holds the file or file-like objects for handling I/O operations.
134
134
135 These are normally just sys.stdin, sys.stdout and sys.stderr but for
135 These are normally just sys.stdin, sys.stdout and sys.stderr but for
136 Windows they can can replaced to allow editing the strings before they are
136 Windows they can can replaced to allow editing the strings before they are
137 displayed."""
137 displayed."""
138
138
139 # In the future, having IPython channel all its I/O operations through
139 # In the future, having IPython channel all its I/O operations through
140 # this class will make it easier to embed it into other environments which
140 # this class will make it easier to embed it into other environments which
141 # are not a normal terminal (such as a GUI-based shell)
141 # are not a normal terminal (such as a GUI-based shell)
142 def __init__(self,cin=None,cout=None,cerr=None):
142 def __init__(self,cin=None,cout=None,cerr=None):
143 self.cin = IOStream(cin,sys.stdin)
143 self.cin = IOStream(cin,sys.stdin)
144 self.cout = IOStream(cout,sys.stdout)
144 self.cout = IOStream(cout,sys.stdout)
145 self.cerr = IOStream(cerr,sys.stderr)
145 self.cerr = IOStream(cerr,sys.stderr)
146
146
147 # Global variable to be used for all I/O
147 # Global variable to be used for all I/O
148 Term = IOTerm()
148 Term = IOTerm()
149
149
150 # Windows-specific code to load Gary Bishop's readline and configure it
150 # Windows-specific code to load Gary Bishop's readline and configure it
151 # automatically for the users
151 # automatically for the users
152 # Note: os.name on cygwin returns posix, so this should only pick up 'native'
152 # Note: os.name on cygwin returns posix, so this should only pick up 'native'
153 # windows. Cygwin returns 'cygwin' for sys.platform.
153 # windows. Cygwin returns 'cygwin' for sys.platform.
154 if os.name == 'nt':
154 if os.name == 'nt':
155 try:
155 try:
156 import readline
156 import readline
157 except ImportError:
157 except ImportError:
158 pass
158 pass
159 else:
159 else:
160 try:
160 try:
161 _out = readline.GetOutputFile()
161 _out = readline.GetOutputFile()
162 except AttributeError:
162 except AttributeError:
163 pass
163 pass
164 else:
164 else:
165 # Remake Term to use the readline i/o facilities
165 # Remake Term to use the readline i/o facilities
166 Term = IOTerm(cout=_out,cerr=_out)
166 Term = IOTerm(cout=_out,cerr=_out)
167 del _out
167 del _out
168
168
169 #****************************************************************************
169 #****************************************************************************
170 # Generic warning/error printer, used by everything else
170 # Generic warning/error printer, used by everything else
171 def warn(msg,level=2,exit_val=1):
171 def warn(msg,level=2,exit_val=1):
172 """Standard warning printer. Gives formatting consistency.
172 """Standard warning printer. Gives formatting consistency.
173
173
174 Output is sent to Term.cerr (sys.stderr by default).
174 Output is sent to Term.cerr (sys.stderr by default).
175
175
176 Options:
176 Options:
177
177
178 -level(2): allows finer control:
178 -level(2): allows finer control:
179 0 -> Do nothing, dummy function.
179 0 -> Do nothing, dummy function.
180 1 -> Print message.
180 1 -> Print message.
181 2 -> Print 'WARNING:' + message. (Default level).
181 2 -> Print 'WARNING:' + message. (Default level).
182 3 -> Print 'ERROR:' + message.
182 3 -> Print 'ERROR:' + message.
183 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
183 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
184
184
185 -exit_val (1): exit value returned by sys.exit() for a level 4
185 -exit_val (1): exit value returned by sys.exit() for a level 4
186 warning. Ignored for all other levels."""
186 warning. Ignored for all other levels."""
187
187
188 if level>0:
188 if level>0:
189 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
189 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
190 print >> Term.cerr, '%s%s' % (header[level],msg)
190 print >> Term.cerr, '%s%s' % (header[level],msg)
191 if level == 4:
191 if level == 4:
192 print >> Term.cerr,'Exiting.\n'
192 print >> Term.cerr,'Exiting.\n'
193 sys.exit(exit_val)
193 sys.exit(exit_val)
194
194
195 def info(msg):
195 def info(msg):
196 """Equivalent to warn(msg,level=1)."""
196 """Equivalent to warn(msg,level=1)."""
197
197
198 warn(msg,level=1)
198 warn(msg,level=1)
199
199
200 def error(msg):
200 def error(msg):
201 """Equivalent to warn(msg,level=3)."""
201 """Equivalent to warn(msg,level=3)."""
202
202
203 warn(msg,level=3)
203 warn(msg,level=3)
204
204
205 def fatal(msg,exit_val=1):
205 def fatal(msg,exit_val=1):
206 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
206 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
207
207
208 warn(msg,exit_val=exit_val,level=4)
208 warn(msg,exit_val=exit_val,level=4)
209
209
210
210
211 # useful for debugging
211 # useful for debugging
212 def debugp(expr):
212 def debugp(expr):
213 """Print the value of an expression from the caller's frame.
213 """Print the value of an expression from the caller's frame.
214
214
215 Takes an expression, evaluates it in the caller's frame and prints both
215 Takes an expression, evaluates it in the caller's frame and prints both
216 the given expression and the resulting value. The input must be of a form
216 the given expression and the resulting value. The input must be of a form
217 suitable for eval()."""
217 suitable for eval()."""
218
218
219 cf = sys._getframe(1)
219 cf = sys._getframe(1)
220 print '[DBG] %s -> %r' % (expr,eval(expr,cf.f_globals,cf.f_locals))
220 print '[DBG] %s -> %r' % (expr,eval(expr,cf.f_globals,cf.f_locals))
221
221
222 #----------------------------------------------------------------------------
222 #----------------------------------------------------------------------------
223 StringTypes = types.StringTypes
223 StringTypes = types.StringTypes
224
224
225 # Basic timing functionality
225 # Basic timing functionality
226
226
227 # If possible (Unix), use the resource module instead of time.clock()
227 # If possible (Unix), use the resource module instead of time.clock()
228 try:
228 try:
229 import resource
229 import resource
230 def clock():
230 def clock():
231 """clock() -> floating point number
231 """clock() -> floating point number
232
232
233 Return the CPU time in seconds (user time only, system time is
233 Return the CPU time in seconds (user time only, system time is
234 ignored) since the start of the process. This is done via a call to
234 ignored) since the start of the process. This is done via a call to
235 resource.getrusage, so it avoids the wraparound problems in
235 resource.getrusage, so it avoids the wraparound problems in
236 time.clock()."""
236 time.clock()."""
237
237
238 return resource.getrusage(resource.RUSAGE_SELF)[0]
238 return resource.getrusage(resource.RUSAGE_SELF)[0]
239
239
240 def clock2():
240 def clock2():
241 """clock2() -> (t_user,t_system)
241 """clock2() -> (t_user,t_system)
242
242
243 Similar to clock(), but return a tuple of user/system times."""
243 Similar to clock(), but return a tuple of user/system times."""
244 return resource.getrusage(resource.RUSAGE_SELF)[:2]
244 return resource.getrusage(resource.RUSAGE_SELF)[:2]
245
245
246 except ImportError:
246 except ImportError:
247 clock = time.clock
247 clock = time.clock
248 def clock2():
248 def clock2():
249 """Under windows, system CPU time can't be measured.
249 """Under windows, system CPU time can't be measured.
250
250
251 This just returns clock() and zero."""
251 This just returns clock() and zero."""
252 return time.clock(),0.0
252 return time.clock(),0.0
253
253
254 def timings_out(reps,func,*args,**kw):
254 def timings_out(reps,func,*args,**kw):
255 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
255 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
256
256
257 Execute a function reps times, return a tuple with the elapsed total
257 Execute a function reps times, return a tuple with the elapsed total
258 CPU time in seconds, the time per call and the function's output.
258 CPU time in seconds, the time per call and the function's output.
259
259
260 Under Unix, the return value is the sum of user+system time consumed by
260 Under Unix, the return value is the sum of user+system time consumed by
261 the process, computed via the resource module. This prevents problems
261 the process, computed via the resource module. This prevents problems
262 related to the wraparound effect which the time.clock() function has.
262 related to the wraparound effect which the time.clock() function has.
263
263
264 Under Windows the return value is in wall clock seconds. See the
264 Under Windows the return value is in wall clock seconds. See the
265 documentation for the time module for more details."""
265 documentation for the time module for more details."""
266
266
267 reps = int(reps)
267 reps = int(reps)
268 assert reps >=1, 'reps must be >= 1'
268 assert reps >=1, 'reps must be >= 1'
269 if reps==1:
269 if reps==1:
270 start = clock()
270 start = clock()
271 out = func(*args,**kw)
271 out = func(*args,**kw)
272 tot_time = clock()-start
272 tot_time = clock()-start
273 else:
273 else:
274 rng = xrange(reps-1) # the last time is executed separately to store output
274 rng = xrange(reps-1) # the last time is executed separately to store output
275 start = clock()
275 start = clock()
276 for dummy in rng: func(*args,**kw)
276 for dummy in rng: func(*args,**kw)
277 out = func(*args,**kw) # one last time
277 out = func(*args,**kw) # one last time
278 tot_time = clock()-start
278 tot_time = clock()-start
279 av_time = tot_time / reps
279 av_time = tot_time / reps
280 return tot_time,av_time,out
280 return tot_time,av_time,out
281
281
282 def timings(reps,func,*args,**kw):
282 def timings(reps,func,*args,**kw):
283 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
283 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
284
284
285 Execute a function reps times, return a tuple with the elapsed total CPU
285 Execute a function reps times, return a tuple with the elapsed total CPU
286 time in seconds and the time per call. These are just the first two values
286 time in seconds and the time per call. These are just the first two values
287 in timings_out()."""
287 in timings_out()."""
288
288
289 return timings_out(reps,func,*args,**kw)[0:2]
289 return timings_out(reps,func,*args,**kw)[0:2]
290
290
291 def timing(func,*args,**kw):
291 def timing(func,*args,**kw):
292 """timing(func,*args,**kw) -> t_total
292 """timing(func,*args,**kw) -> t_total
293
293
294 Execute a function once, return the elapsed total CPU time in
294 Execute a function once, return the elapsed total CPU time in
295 seconds. This is just the first value in timings_out()."""
295 seconds. This is just the first value in timings_out()."""
296
296
297 return timings_out(1,func,*args,**kw)[0]
297 return timings_out(1,func,*args,**kw)[0]
298
298
299 #****************************************************************************
299 #****************************************************************************
300 # file and system
300 # file and system
301
301
302 def system(cmd,verbose=0,debug=0,header=''):
302 def system(cmd,verbose=0,debug=0,header=''):
303 """Execute a system command, return its exit status.
303 """Execute a system command, return its exit status.
304
304
305 Options:
305 Options:
306
306
307 - verbose (0): print the command to be executed.
307 - verbose (0): print the command to be executed.
308
308
309 - debug (0): only print, do not actually execute.
309 - debug (0): only print, do not actually execute.
310
310
311 - header (''): Header to print on screen prior to the executed command (it
311 - header (''): Header to print on screen prior to the executed command (it
312 is only prepended to the command, no newlines are added).
312 is only prepended to the command, no newlines are added).
313
313
314 Note: a stateful version of this function is available through the
314 Note: a stateful version of this function is available through the
315 SystemExec class."""
315 SystemExec class."""
316
316
317 stat = 0
317 stat = 0
318 if verbose or debug: print header+cmd
318 if verbose or debug: print header+cmd
319 sys.stdout.flush()
319 sys.stdout.flush()
320 if not debug: stat = os.system(cmd)
320 if not debug: stat = os.system(cmd)
321 return stat
321 return stat
322
322
323 # This function is used by ipython in a lot of places to make system calls.
323 # This function is used by ipython in a lot of places to make system calls.
324 # We need it to be slightly different under win32, due to the vagaries of
324 # We need it to be slightly different under win32, due to the vagaries of
325 # 'network shares'. A win32 override is below.
325 # 'network shares'. A win32 override is below.
326
326
327 def shell(cmd,verbose=0,debug=0,header=''):
327 def shell(cmd,verbose=0,debug=0,header=''):
328 """Execute a command in the system shell, always return None.
328 """Execute a command in the system shell, always return None.
329
329
330 Options:
330 Options:
331
331
332 - verbose (0): print the command to be executed.
332 - verbose (0): print the command to be executed.
333
333
334 - debug (0): only print, do not actually execute.
334 - debug (0): only print, do not actually execute.
335
335
336 - header (''): Header to print on screen prior to the executed command (it
336 - header (''): Header to print on screen prior to the executed command (it
337 is only prepended to the command, no newlines are added).
337 is only prepended to the command, no newlines are added).
338
338
339 Note: this is similar to genutils.system(), but it returns None so it can
339 Note: this is similar to genutils.system(), but it returns None so it can
340 be conveniently used in interactive loops without getting the return value
340 be conveniently used in interactive loops without getting the return value
341 (typically 0) printed many times."""
341 (typically 0) printed many times."""
342
342
343 stat = 0
343 stat = 0
344 if verbose or debug: print header+cmd
344 if verbose or debug: print header+cmd
345 # flush stdout so we don't mangle python's buffering
345 # flush stdout so we don't mangle python's buffering
346 sys.stdout.flush()
346 sys.stdout.flush()
347 if not debug:
347 if not debug:
348 os.system(cmd)
348 os.system(cmd)
349
349
350 # override shell() for win32 to deal with network shares
350 # override shell() for win32 to deal with network shares
351 if os.name in ('nt','dos'):
351 if os.name in ('nt','dos'):
352
352
353 shell_ori = shell
353 shell_ori = shell
354
354
355 def shell(cmd,verbose=0,debug=0,header=''):
355 def shell(cmd,verbose=0,debug=0,header=''):
356 if os.getcwd().startswith(r"\\"):
356 if os.getcwd().startswith(r"\\"):
357 path = os.getcwd()
357 path = os.getcwd()
358 # change to c drive (cannot be on UNC-share when issuing os.system,
358 # change to c drive (cannot be on UNC-share when issuing os.system,
359 # as cmd.exe cannot handle UNC addresses)
359 # as cmd.exe cannot handle UNC addresses)
360 os.chdir("c:")
360 os.chdir("c:")
361 # issue pushd to the UNC-share and then run the command
361 # issue pushd to the UNC-share and then run the command
362 try:
362 try:
363 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
363 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
364 finally:
364 finally:
365 os.chdir(path)
365 os.chdir(path)
366 else:
366 else:
367 shell_ori(cmd,verbose,debug,header)
367 shell_ori(cmd,verbose,debug,header)
368
368
369 shell.__doc__ = shell_ori.__doc__
369 shell.__doc__ = shell_ori.__doc__
370
370
371 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
371 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
372 """Dummy substitute for perl's backquotes.
372 """Dummy substitute for perl's backquotes.
373
373
374 Executes a command and returns the output.
374 Executes a command and returns the output.
375
375
376 Accepts the same arguments as system(), plus:
376 Accepts the same arguments as system(), plus:
377
377
378 - split(0): if true, the output is returned as a list split on newlines.
378 - split(0): if true, the output is returned as a list split on newlines.
379
379
380 Note: a stateful version of this function is available through the
380 Note: a stateful version of this function is available through the
381 SystemExec class."""
381 SystemExec class."""
382
382
383 if verbose or debug: print header+cmd
383 if verbose or debug: print header+cmd
384 if not debug:
384 if not debug:
385 output = commands.getoutput(cmd)
385 output = commands.getoutput(cmd)
386 if split:
386 if split:
387 return output.split('\n')
387 return output.split('\n')
388 else:
388 else:
389 return output
389 return output
390
390
391 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
391 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
392 """Return (standard output,standard error) of executing cmd in a shell.
392 """Return (standard output,standard error) of executing cmd in a shell.
393
393
394 Accepts the same arguments as system(), plus:
394 Accepts the same arguments as system(), plus:
395
395
396 - split(0): if true, each of stdout/err is returned as a list split on
396 - split(0): if true, each of stdout/err is returned as a list split on
397 newlines.
397 newlines.
398
398
399 Note: a stateful version of this function is available through the
399 Note: a stateful version of this function is available through the
400 SystemExec class."""
400 SystemExec class."""
401
401
402 if verbose or debug: print header+cmd
402 if verbose or debug: print header+cmd
403 if not cmd:
403 if not cmd:
404 if split:
404 if split:
405 return [],[]
405 return [],[]
406 else:
406 else:
407 return '',''
407 return '',''
408 if not debug:
408 if not debug:
409 pin,pout,perr = os.popen3(cmd)
409 pin,pout,perr = os.popen3(cmd)
410 tout = pout.read().rstrip()
410 tout = pout.read().rstrip()
411 terr = perr.read().rstrip()
411 terr = perr.read().rstrip()
412 pin.close()
412 pin.close()
413 pout.close()
413 pout.close()
414 perr.close()
414 perr.close()
415 if split:
415 if split:
416 return tout.split('\n'),terr.split('\n')
416 return tout.split('\n'),terr.split('\n')
417 else:
417 else:
418 return tout,terr
418 return tout,terr
419
419
420 # for compatibility with older naming conventions
420 # for compatibility with older naming conventions
421 xsys = system
421 xsys = system
422 bq = getoutput
422 bq = getoutput
423
423
424 class SystemExec:
424 class SystemExec:
425 """Access the system and getoutput functions through a stateful interface.
425 """Access the system and getoutput functions through a stateful interface.
426
426
427 Note: here we refer to the system and getoutput functions from this
427 Note: here we refer to the system and getoutput functions from this
428 library, not the ones from the standard python library.
428 library, not the ones from the standard python library.
429
429
430 This class offers the system and getoutput functions as methods, but the
430 This class offers the system and getoutput functions as methods, but the
431 verbose, debug and header parameters can be set for the instance (at
431 verbose, debug and header parameters can be set for the instance (at
432 creation time or later) so that they don't need to be specified on each
432 creation time or later) so that they don't need to be specified on each
433 call.
433 call.
434
434
435 For efficiency reasons, there's no way to override the parameters on a
435 For efficiency reasons, there's no way to override the parameters on a
436 per-call basis other than by setting instance attributes. If you need
436 per-call basis other than by setting instance attributes. If you need
437 local overrides, it's best to directly call system() or getoutput().
437 local overrides, it's best to directly call system() or getoutput().
438
438
439 The following names are provided as alternate options:
439 The following names are provided as alternate options:
440 - xsys: alias to system
440 - xsys: alias to system
441 - bq: alias to getoutput
441 - bq: alias to getoutput
442
442
443 An instance can then be created as:
443 An instance can then be created as:
444 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
444 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
445
445
446 And used as:
446 And used as:
447 >>> sysexec.xsys('pwd')
447 >>> sysexec.xsys('pwd')
448 >>> dirlist = sysexec.bq('ls -l')
448 >>> dirlist = sysexec.bq('ls -l')
449 """
449 """
450
450
451 def __init__(self,verbose=0,debug=0,header='',split=0):
451 def __init__(self,verbose=0,debug=0,header='',split=0):
452 """Specify the instance's values for verbose, debug and header."""
452 """Specify the instance's values for verbose, debug and header."""
453 setattr_list(self,'verbose debug header split')
453 setattr_list(self,'verbose debug header split')
454
454
455 def system(self,cmd):
455 def system(self,cmd):
456 """Stateful interface to system(), with the same keyword parameters."""
456 """Stateful interface to system(), with the same keyword parameters."""
457
457
458 system(cmd,self.verbose,self.debug,self.header)
458 system(cmd,self.verbose,self.debug,self.header)
459
459
460 def shell(self,cmd):
460 def shell(self,cmd):
461 """Stateful interface to shell(), with the same keyword parameters."""
461 """Stateful interface to shell(), with the same keyword parameters."""
462
462
463 shell(cmd,self.verbose,self.debug,self.header)
463 shell(cmd,self.verbose,self.debug,self.header)
464
464
465 xsys = system # alias
465 xsys = system # alias
466
466
467 def getoutput(self,cmd):
467 def getoutput(self,cmd):
468 """Stateful interface to getoutput()."""
468 """Stateful interface to getoutput()."""
469
469
470 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
470 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
471
471
472 def getoutputerror(self,cmd):
472 def getoutputerror(self,cmd):
473 """Stateful interface to getoutputerror()."""
473 """Stateful interface to getoutputerror()."""
474
474
475 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
475 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
476
476
477 bq = getoutput # alias
477 bq = getoutput # alias
478
478
479 #-----------------------------------------------------------------------------
479 #-----------------------------------------------------------------------------
480 def mutex_opts(dict,ex_op):
480 def mutex_opts(dict,ex_op):
481 """Check for presence of mutually exclusive keys in a dict.
481 """Check for presence of mutually exclusive keys in a dict.
482
482
483 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
483 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
484 for op1,op2 in ex_op:
484 for op1,op2 in ex_op:
485 if op1 in dict and op2 in dict:
485 if op1 in dict and op2 in dict:
486 raise ValueError,'\n*** ERROR in Arguments *** '\
486 raise ValueError,'\n*** ERROR in Arguments *** '\
487 'Options '+op1+' and '+op2+' are mutually exclusive.'
487 'Options '+op1+' and '+op2+' are mutually exclusive.'
488
488
489 #-----------------------------------------------------------------------------
489 #-----------------------------------------------------------------------------
490 def get_py_filename(name):
490 def get_py_filename(name):
491 """Return a valid python filename in the current directory.
491 """Return a valid python filename in the current directory.
492
492
493 If the given name is not a file, it adds '.py' and searches again.
493 If the given name is not a file, it adds '.py' and searches again.
494 Raises IOError with an informative message if the file isn't found."""
494 Raises IOError with an informative message if the file isn't found."""
495
495
496 name = os.path.expanduser(name)
496 name = os.path.expanduser(name)
497 if not os.path.isfile(name) and not name.endswith('.py'):
497 if not os.path.isfile(name) and not name.endswith('.py'):
498 name += '.py'
498 name += '.py'
499 if os.path.isfile(name):
499 if os.path.isfile(name):
500 return name
500 return name
501 else:
501 else:
502 raise IOError,'File `%s` not found.' % name
502 raise IOError,'File `%s` not found.' % name
503
503
504 #-----------------------------------------------------------------------------
504 #-----------------------------------------------------------------------------
505 def filefind(fname,alt_dirs = None):
505 def filefind(fname,alt_dirs = None):
506 """Return the given filename either in the current directory, if it
506 """Return the given filename either in the current directory, if it
507 exists, or in a specified list of directories.
507 exists, or in a specified list of directories.
508
508
509 ~ expansion is done on all file and directory names.
509 ~ expansion is done on all file and directory names.
510
510
511 Upon an unsuccessful search, raise an IOError exception."""
511 Upon an unsuccessful search, raise an IOError exception."""
512
512
513 if alt_dirs is None:
513 if alt_dirs is None:
514 try:
514 try:
515 alt_dirs = get_home_dir()
515 alt_dirs = get_home_dir()
516 except HomeDirError:
516 except HomeDirError:
517 alt_dirs = os.getcwd()
517 alt_dirs = os.getcwd()
518 search = [fname] + list_strings(alt_dirs)
518 search = [fname] + list_strings(alt_dirs)
519 search = map(os.path.expanduser,search)
519 search = map(os.path.expanduser,search)
520 #print 'search list for',fname,'list:',search # dbg
520 #print 'search list for',fname,'list:',search # dbg
521 fname = search[0]
521 fname = search[0]
522 if os.path.isfile(fname):
522 if os.path.isfile(fname):
523 return fname
523 return fname
524 for direc in search[1:]:
524 for direc in search[1:]:
525 testname = os.path.join(direc,fname)
525 testname = os.path.join(direc,fname)
526 #print 'testname',testname # dbg
526 #print 'testname',testname # dbg
527 if os.path.isfile(testname):
527 if os.path.isfile(testname):
528 return testname
528 return testname
529 raise IOError,'File' + `fname` + \
529 raise IOError,'File' + `fname` + \
530 ' not found in current or supplied directories:' + `alt_dirs`
530 ' not found in current or supplied directories:' + `alt_dirs`
531
531
532 #----------------------------------------------------------------------------
532 #----------------------------------------------------------------------------
533 def file_read(filename):
533 def file_read(filename):
534 """Read a file and close it. Returns the file source."""
534 """Read a file and close it. Returns the file source."""
535 fobj=open(filename,'r');
535 fobj=open(filename,'r');
536 source = fobj.read();
536 source = fobj.read();
537 fobj.close()
537 fobj.close()
538 return source
538 return source
539
539
540 #----------------------------------------------------------------------------
540 #----------------------------------------------------------------------------
541 def target_outdated(target,deps):
541 def target_outdated(target,deps):
542 """Determine whether a target is out of date.
542 """Determine whether a target is out of date.
543
543
544 target_outdated(target,deps) -> 1/0
544 target_outdated(target,deps) -> 1/0
545
545
546 deps: list of filenames which MUST exist.
546 deps: list of filenames which MUST exist.
547 target: single filename which may or may not exist.
547 target: single filename which may or may not exist.
548
548
549 If target doesn't exist or is older than any file listed in deps, return
549 If target doesn't exist or is older than any file listed in deps, return
550 true, otherwise return false.
550 true, otherwise return false.
551 """
551 """
552 try:
552 try:
553 target_time = os.path.getmtime(target)
553 target_time = os.path.getmtime(target)
554 except os.error:
554 except os.error:
555 return 1
555 return 1
556 for dep in deps:
556 for dep in deps:
557 dep_time = os.path.getmtime(dep)
557 dep_time = os.path.getmtime(dep)
558 if dep_time > target_time:
558 if dep_time > target_time:
559 #print "For target",target,"Dep failed:",dep # dbg
559 #print "For target",target,"Dep failed:",dep # dbg
560 #print "times (dep,tar):",dep_time,target_time # dbg
560 #print "times (dep,tar):",dep_time,target_time # dbg
561 return 1
561 return 1
562 return 0
562 return 0
563
563
564 #-----------------------------------------------------------------------------
564 #-----------------------------------------------------------------------------
565 def target_update(target,deps,cmd):
565 def target_update(target,deps,cmd):
566 """Update a target with a given command given a list of dependencies.
566 """Update a target with a given command given a list of dependencies.
567
567
568 target_update(target,deps,cmd) -> runs cmd if target is outdated.
568 target_update(target,deps,cmd) -> runs cmd if target is outdated.
569
569
570 This is just a wrapper around target_outdated() which calls the given
570 This is just a wrapper around target_outdated() which calls the given
571 command if target is outdated."""
571 command if target is outdated."""
572
572
573 if target_outdated(target,deps):
573 if target_outdated(target,deps):
574 xsys(cmd)
574 xsys(cmd)
575
575
576 #----------------------------------------------------------------------------
576 #----------------------------------------------------------------------------
577 def unquote_ends(istr):
577 def unquote_ends(istr):
578 """Remove a single pair of quotes from the endpoints of a string."""
578 """Remove a single pair of quotes from the endpoints of a string."""
579
579
580 if not istr:
580 if not istr:
581 return istr
581 return istr
582 if (istr[0]=="'" and istr[-1]=="'") or \
582 if (istr[0]=="'" and istr[-1]=="'") or \
583 (istr[0]=='"' and istr[-1]=='"'):
583 (istr[0]=='"' and istr[-1]=='"'):
584 return istr[1:-1]
584 return istr[1:-1]
585 else:
585 else:
586 return istr
586 return istr
587
587
588 #----------------------------------------------------------------------------
588 #----------------------------------------------------------------------------
589 def process_cmdline(argv,names=[],defaults={},usage=''):
589 def process_cmdline(argv,names=[],defaults={},usage=''):
590 """ Process command-line options and arguments.
590 """ Process command-line options and arguments.
591
591
592 Arguments:
592 Arguments:
593
593
594 - argv: list of arguments, typically sys.argv.
594 - argv: list of arguments, typically sys.argv.
595
595
596 - names: list of option names. See DPyGetOpt docs for details on options
596 - names: list of option names. See DPyGetOpt docs for details on options
597 syntax.
597 syntax.
598
598
599 - defaults: dict of default values.
599 - defaults: dict of default values.
600
600
601 - usage: optional usage notice to print if a wrong argument is passed.
601 - usage: optional usage notice to print if a wrong argument is passed.
602
602
603 Return a dict of options and a list of free arguments."""
603 Return a dict of options and a list of free arguments."""
604
604
605 getopt = DPyGetOpt.DPyGetOpt()
605 getopt = DPyGetOpt.DPyGetOpt()
606 getopt.setIgnoreCase(0)
606 getopt.setIgnoreCase(0)
607 getopt.parseConfiguration(names)
607 getopt.parseConfiguration(names)
608
608
609 try:
609 try:
610 getopt.processArguments(argv)
610 getopt.processArguments(argv)
611 except:
611 except:
612 print usage
612 print usage
613 warn(`sys.exc_value`,level=4)
613 warn(`sys.exc_value`,level=4)
614
614
615 defaults.update(getopt.optionValues)
615 defaults.update(getopt.optionValues)
616 args = getopt.freeValues
616 args = getopt.freeValues
617
617
618 return defaults,args
618 return defaults,args
619
619
620 #----------------------------------------------------------------------------
620 #----------------------------------------------------------------------------
621 def optstr2types(ostr):
621 def optstr2types(ostr):
622 """Convert a string of option names to a dict of type mappings.
622 """Convert a string of option names to a dict of type mappings.
623
623
624 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
624 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
625
625
626 This is used to get the types of all the options in a string formatted
626 This is used to get the types of all the options in a string formatted
627 with the conventions of DPyGetOpt. The 'type' None is used for options
627 with the conventions of DPyGetOpt. The 'type' None is used for options
628 which are strings (they need no further conversion). This function's main
628 which are strings (they need no further conversion). This function's main
629 use is to get a typemap for use with read_dict().
629 use is to get a typemap for use with read_dict().
630 """
630 """
631
631
632 typeconv = {None:'',int:'',float:''}
632 typeconv = {None:'',int:'',float:''}
633 typemap = {'s':None,'i':int,'f':float}
633 typemap = {'s':None,'i':int,'f':float}
634 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
634 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
635
635
636 for w in ostr.split():
636 for w in ostr.split():
637 oname,alias,otype = opt_re.match(w).groups()
637 oname,alias,otype = opt_re.match(w).groups()
638 if otype == '' or alias == '!': # simple switches are integers too
638 if otype == '' or alias == '!': # simple switches are integers too
639 otype = 'i'
639 otype = 'i'
640 typeconv[typemap[otype]] += oname + ' '
640 typeconv[typemap[otype]] += oname + ' '
641 return typeconv
641 return typeconv
642
642
643 #----------------------------------------------------------------------------
643 #----------------------------------------------------------------------------
644 def read_dict(filename,type_conv=None,**opt):
644 def read_dict(filename,type_conv=None,**opt):
645
645
646 """Read a dictionary of key=value pairs from an input file, optionally
646 """Read a dictionary of key=value pairs from an input file, optionally
647 performing conversions on the resulting values.
647 performing conversions on the resulting values.
648
648
649 read_dict(filename,type_conv,**opt) -> dict
649 read_dict(filename,type_conv,**opt) -> dict
650
650
651 Only one value per line is accepted, the format should be
651 Only one value per line is accepted, the format should be
652 # optional comments are ignored
652 # optional comments are ignored
653 key value\n
653 key value\n
654
654
655 Args:
655 Args:
656
656
657 - type_conv: A dictionary specifying which keys need to be converted to
657 - type_conv: A dictionary specifying which keys need to be converted to
658 which types. By default all keys are read as strings. This dictionary
658 which types. By default all keys are read as strings. This dictionary
659 should have as its keys valid conversion functions for strings
659 should have as its keys valid conversion functions for strings
660 (int,long,float,complex, or your own). The value for each key
660 (int,long,float,complex, or your own). The value for each key
661 (converter) should be a whitespace separated string containing the names
661 (converter) should be a whitespace separated string containing the names
662 of all the entries in the file to be converted using that function. For
662 of all the entries in the file to be converted using that function. For
663 keys to be left alone, use None as the conversion function (only needed
663 keys to be left alone, use None as the conversion function (only needed
664 with purge=1, see below).
664 with purge=1, see below).
665
665
666 - opt: dictionary with extra options as below (default in parens)
666 - opt: dictionary with extra options as below (default in parens)
667
667
668 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
668 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
669 of the dictionary to be returned. If purge is going to be used, the
669 of the dictionary to be returned. If purge is going to be used, the
670 set of keys to be left as strings also has to be explicitly specified
670 set of keys to be left as strings also has to be explicitly specified
671 using the (non-existent) conversion function None.
671 using the (non-existent) conversion function None.
672
672
673 fs(None): field separator. This is the key/value separator to be used
673 fs(None): field separator. This is the key/value separator to be used
674 when parsing the file. The None default means any whitespace [behavior
674 when parsing the file. The None default means any whitespace [behavior
675 of string.split()].
675 of string.split()].
676
676
677 strip(0): if 1, strip string values of leading/trailinig whitespace.
677 strip(0): if 1, strip string values of leading/trailinig whitespace.
678
678
679 warn(1): warning level if requested keys are not found in file.
679 warn(1): warning level if requested keys are not found in file.
680 - 0: silently ignore.
680 - 0: silently ignore.
681 - 1: inform but proceed.
681 - 1: inform but proceed.
682 - 2: raise KeyError exception.
682 - 2: raise KeyError exception.
683
683
684 no_empty(0): if 1, remove keys with whitespace strings as a value.
684 no_empty(0): if 1, remove keys with whitespace strings as a value.
685
685
686 unique([]): list of keys (or space separated string) which can't be
686 unique([]): list of keys (or space separated string) which can't be
687 repeated. If one such key is found in the file, each new instance
687 repeated. If one such key is found in the file, each new instance
688 overwrites the previous one. For keys not listed here, the behavior is
688 overwrites the previous one. For keys not listed here, the behavior is
689 to make a list of all appearances.
689 to make a list of all appearances.
690
690
691 Example:
691 Example:
692 If the input file test.ini has:
692 If the input file test.ini has:
693 i 3
693 i 3
694 x 4.5
694 x 4.5
695 y 5.5
695 y 5.5
696 s hi ho
696 s hi ho
697 Then:
697 Then:
698
698
699 >>> type_conv={int:'i',float:'x',None:'s'}
699 >>> type_conv={int:'i',float:'x',None:'s'}
700 >>> read_dict('test.ini')
700 >>> read_dict('test.ini')
701 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
701 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
702 >>> read_dict('test.ini',type_conv)
702 >>> read_dict('test.ini',type_conv)
703 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
703 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
704 >>> read_dict('test.ini',type_conv,purge=1)
704 >>> read_dict('test.ini',type_conv,purge=1)
705 {'i': 3, 's': 'hi ho', 'x': 4.5}
705 {'i': 3, 's': 'hi ho', 'x': 4.5}
706 """
706 """
707
707
708 # starting config
708 # starting config
709 opt.setdefault('purge',0)
709 opt.setdefault('purge',0)
710 opt.setdefault('fs',None) # field sep defaults to any whitespace
710 opt.setdefault('fs',None) # field sep defaults to any whitespace
711 opt.setdefault('strip',0)
711 opt.setdefault('strip',0)
712 opt.setdefault('warn',1)
712 opt.setdefault('warn',1)
713 opt.setdefault('no_empty',0)
713 opt.setdefault('no_empty',0)
714 opt.setdefault('unique','')
714 opt.setdefault('unique','')
715 if type(opt['unique']) in StringTypes:
715 if type(opt['unique']) in StringTypes:
716 unique_keys = qw(opt['unique'])
716 unique_keys = qw(opt['unique'])
717 elif type(opt['unique']) in (types.TupleType,types.ListType):
717 elif type(opt['unique']) in (types.TupleType,types.ListType):
718 unique_keys = opt['unique']
718 unique_keys = opt['unique']
719 else:
719 else:
720 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
720 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
721
721
722 dict = {}
722 dict = {}
723 # first read in table of values as strings
723 # first read in table of values as strings
724 file = open(filename,'r')
724 file = open(filename,'r')
725 for line in file.readlines():
725 for line in file.readlines():
726 line = line.strip()
726 line = line.strip()
727 if len(line) and line[0]=='#': continue
727 if len(line) and line[0]=='#': continue
728 if len(line)>0:
728 if len(line)>0:
729 lsplit = line.split(opt['fs'],1)
729 lsplit = line.split(opt['fs'],1)
730 try:
730 try:
731 key,val = lsplit
731 key,val = lsplit
732 except ValueError:
732 except ValueError:
733 key,val = lsplit[0],''
733 key,val = lsplit[0],''
734 key = key.strip()
734 key = key.strip()
735 if opt['strip']: val = val.strip()
735 if opt['strip']: val = val.strip()
736 if val == "''" or val == '""': val = ''
736 if val == "''" or val == '""': val = ''
737 if opt['no_empty'] and (val=='' or val.isspace()):
737 if opt['no_empty'] and (val=='' or val.isspace()):
738 continue
738 continue
739 # if a key is found more than once in the file, build a list
739 # if a key is found more than once in the file, build a list
740 # unless it's in the 'unique' list. In that case, last found in file
740 # unless it's in the 'unique' list. In that case, last found in file
741 # takes precedence. User beware.
741 # takes precedence. User beware.
742 try:
742 try:
743 if dict[key] and key in unique_keys:
743 if dict[key] and key in unique_keys:
744 dict[key] = val
744 dict[key] = val
745 elif type(dict[key]) is types.ListType:
745 elif type(dict[key]) is types.ListType:
746 dict[key].append(val)
746 dict[key].append(val)
747 else:
747 else:
748 dict[key] = [dict[key],val]
748 dict[key] = [dict[key],val]
749 except KeyError:
749 except KeyError:
750 dict[key] = val
750 dict[key] = val
751 # purge if requested
751 # purge if requested
752 if opt['purge']:
752 if opt['purge']:
753 accepted_keys = qwflat(type_conv.values())
753 accepted_keys = qwflat(type_conv.values())
754 for key in dict.keys():
754 for key in dict.keys():
755 if key in accepted_keys: continue
755 if key in accepted_keys: continue
756 del(dict[key])
756 del(dict[key])
757 # now convert if requested
757 # now convert if requested
758 if type_conv==None: return dict
758 if type_conv==None: return dict
759 conversions = type_conv.keys()
759 conversions = type_conv.keys()
760 try: conversions.remove(None)
760 try: conversions.remove(None)
761 except: pass
761 except: pass
762 for convert in conversions:
762 for convert in conversions:
763 for val in qw(type_conv[convert]):
763 for val in qw(type_conv[convert]):
764 try:
764 try:
765 dict[val] = convert(dict[val])
765 dict[val] = convert(dict[val])
766 except KeyError,e:
766 except KeyError,e:
767 if opt['warn'] == 0:
767 if opt['warn'] == 0:
768 pass
768 pass
769 elif opt['warn'] == 1:
769 elif opt['warn'] == 1:
770 print >>sys.stderr, 'Warning: key',val,\
770 print >>sys.stderr, 'Warning: key',val,\
771 'not found in file',filename
771 'not found in file',filename
772 elif opt['warn'] == 2:
772 elif opt['warn'] == 2:
773 raise KeyError,e
773 raise KeyError,e
774 else:
774 else:
775 raise ValueError,'Warning level must be 0,1 or 2'
775 raise ValueError,'Warning level must be 0,1 or 2'
776
776
777 return dict
777 return dict
778
778
779 #----------------------------------------------------------------------------
779 #----------------------------------------------------------------------------
780 def flag_calls(func):
780 def flag_calls(func):
781 """Wrap a function to detect and flag when it gets called.
781 """Wrap a function to detect and flag when it gets called.
782
782
783 This is a decorator which takes a function and wraps it in a function with
783 This is a decorator which takes a function and wraps it in a function with
784 a 'called' attribute. wrapper.called is initialized to False.
784 a 'called' attribute. wrapper.called is initialized to False.
785
785
786 The wrapper.called attribute is set to False right before each call to the
786 The wrapper.called attribute is set to False right before each call to the
787 wrapped function, so if the call fails it remains False. After the call
787 wrapped function, so if the call fails it remains False. After the call
788 completes, wrapper.called is set to True and the output is returned.
788 completes, wrapper.called is set to True and the output is returned.
789
789
790 Testing for truth in wrapper.called allows you to determine if a call to
790 Testing for truth in wrapper.called allows you to determine if a call to
791 func() was attempted and succeeded."""
791 func() was attempted and succeeded."""
792
792
793 def wrapper(*args,**kw):
793 def wrapper(*args,**kw):
794 wrapper.called = False
794 wrapper.called = False
795 out = func(*args,**kw)
795 out = func(*args,**kw)
796 wrapper.called = True
796 wrapper.called = True
797 return out
797 return out
798
798
799 wrapper.called = False
799 wrapper.called = False
800 wrapper.__doc__ = func.__doc__
800 wrapper.__doc__ = func.__doc__
801 return wrapper
801 return wrapper
802
802
803 #----------------------------------------------------------------------------
803 #----------------------------------------------------------------------------
804 class HomeDirError(Error):
804 class HomeDirError(Error):
805 pass
805 pass
806
806
807 def get_home_dir():
807 def get_home_dir():
808 """Return the closest possible equivalent to a 'home' directory.
808 """Return the closest possible equivalent to a 'home' directory.
809
809
810 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
810 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
811
811
812 Currently only Posix and NT are implemented, a HomeDirError exception is
812 Currently only Posix and NT are implemented, a HomeDirError exception is
813 raised for all other OSes. """
813 raised for all other OSes. """
814
814
815 isdir = os.path.isdir
815 isdir = os.path.isdir
816 env = os.environ
816 env = os.environ
817 try:
817 try:
818 homedir = env['HOME']
818 homedir = env['HOME']
819 if not isdir(homedir):
819 if not isdir(homedir):
820 # in case a user stuck some string which does NOT resolve to a
820 # in case a user stuck some string which does NOT resolve to a
821 # valid path, it's as good as if we hadn't foud it
821 # valid path, it's as good as if we hadn't foud it
822 raise KeyError
822 raise KeyError
823 return homedir
823 return homedir
824 except KeyError:
824 except KeyError:
825 if os.name == 'posix':
825 if os.name == 'posix':
826 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
826 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
827 elif os.name == 'nt':
827 elif os.name == 'nt':
828 # For some strange reason, win9x returns 'nt' for os.name.
828 # For some strange reason, win9x returns 'nt' for os.name.
829 try:
829 try:
830 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
830 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
831 if not isdir(homedir):
831 if not isdir(homedir):
832 homedir = os.path.join(env['USERPROFILE'])
832 homedir = os.path.join(env['USERPROFILE'])
833 if not isdir(homedir):
833 if not isdir(homedir):
834 raise HomeDirError
834 raise HomeDirError
835 return homedir
835 return homedir
836 except:
836 except:
837 try:
837 try:
838 # Use the registry to get the 'My Documents' folder.
838 # Use the registry to get the 'My Documents' folder.
839 import _winreg as wreg
839 import _winreg as wreg
840 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
840 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
841 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
841 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
842 homedir = wreg.QueryValueEx(key,'Personal')[0]
842 homedir = wreg.QueryValueEx(key,'Personal')[0]
843 key.Close()
843 key.Close()
844 if not isdir(homedir):
844 if not isdir(homedir):
845 e = ('Invalid "Personal" folder registry key '
845 e = ('Invalid "Personal" folder registry key '
846 'typically "My Documents".\n'
846 'typically "My Documents".\n'
847 'Value: %s\n'
847 'Value: %s\n'
848 'This is not a valid directory on your system.' %
848 'This is not a valid directory on your system.' %
849 homedir)
849 homedir)
850 raise HomeDirError(e)
850 raise HomeDirError(e)
851 return homedir
851 return homedir
852 except HomeDirError:
852 except HomeDirError:
853 raise
853 raise
854 except:
854 except:
855 return 'C:\\'
855 return 'C:\\'
856 elif os.name == 'dos':
856 elif os.name == 'dos':
857 # Desperate, may do absurd things in classic MacOS. May work under DOS.
857 # Desperate, may do absurd things in classic MacOS. May work under DOS.
858 return 'C:\\'
858 return 'C:\\'
859 else:
859 else:
860 raise HomeDirError,'support for your operating system not implemented.'
860 raise HomeDirError,'support for your operating system not implemented.'
861
861
862 #****************************************************************************
862 #****************************************************************************
863 # strings and text
863 # strings and text
864
864
865 class LSString(str):
865 class LSString(str):
866 """String derivative with a special access attributes.
866 """String derivative with a special access attributes.
867
867
868 These are normal strings, but with the special attributes:
868 These are normal strings, but with the special attributes:
869
869
870 .l (or .list) : value as list (split on newlines).
870 .l (or .list) : value as list (split on newlines).
871 .n (or .nlstr): original value (the string itself).
871 .n (or .nlstr): original value (the string itself).
872 .s (or .spstr): value as whitespace-separated string.
872 .s (or .spstr): value as whitespace-separated string.
873
873
874 Any values which require transformations are computed only once and
874 Any values which require transformations are computed only once and
875 cached.
875 cached.
876
876
877 Such strings are very useful to efficiently interact with the shell, which
877 Such strings are very useful to efficiently interact with the shell, which
878 typically only understands whitespace-separated options for commands."""
878 typically only understands whitespace-separated options for commands."""
879
879
880 def get_list(self):
880 def get_list(self):
881 try:
881 try:
882 return self.__list
882 return self.__list
883 except AttributeError:
883 except AttributeError:
884 self.__list = self.split('\n')
884 self.__list = self.split('\n')
885 return self.__list
885 return self.__list
886
886
887 l = list = property(get_list)
887 l = list = property(get_list)
888
888
889 def get_spstr(self):
889 def get_spstr(self):
890 try:
890 try:
891 return self.__spstr
891 return self.__spstr
892 except AttributeError:
892 except AttributeError:
893 self.__spstr = self.replace('\n',' ')
893 self.__spstr = self.replace('\n',' ')
894 return self.__spstr
894 return self.__spstr
895
895
896 s = spstr = property(get_spstr)
896 s = spstr = property(get_spstr)
897
897
898 def get_nlstr(self):
898 def get_nlstr(self):
899 return self
899 return self
900
900
901 n = nlstr = property(get_nlstr)
901 n = nlstr = property(get_nlstr)
902
902
903 def get_paths(self):
904 try:
905 return self.__paths
906 except AttributeError:
907 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
908 return self.__paths
909
910 p = paths = property(get_paths)
911
912
903 #----------------------------------------------------------------------------
913 #----------------------------------------------------------------------------
904 class SList(list):
914 class SList(list):
905 """List derivative with a special access attributes.
915 """List derivative with a special access attributes.
906
916
907 These are normal lists, but with the special attributes:
917 These are normal lists, but with the special attributes:
908
918
909 .l (or .list) : value as list (the list itself).
919 .l (or .list) : value as list (the list itself).
910 .n (or .nlstr): value as a string, joined on newlines.
920 .n (or .nlstr): value as a string, joined on newlines.
911 .s (or .spstr): value as a string, joined on spaces.
921 .s (or .spstr): value as a string, joined on spaces.
912
922
913 Any values which require transformations are computed only once and
923 Any values which require transformations are computed only once and
914 cached."""
924 cached."""
915
925
916 def get_list(self):
926 def get_list(self):
917 return self
927 return self
918
928
919 l = list = property(get_list)
929 l = list = property(get_list)
920
930
921 def get_spstr(self):
931 def get_spstr(self):
922 try:
932 try:
923 return self.__spstr
933 return self.__spstr
924 except AttributeError:
934 except AttributeError:
925 self.__spstr = ' '.join(self)
935 self.__spstr = ' '.join(self)
926 return self.__spstr
936 return self.__spstr
927
937
928 s = spstr = property(get_spstr)
938 s = spstr = property(get_spstr)
929
939
930 def get_nlstr(self):
940 def get_nlstr(self):
931 try:
941 try:
932 return self.__nlstr
942 return self.__nlstr
933 except AttributeError:
943 except AttributeError:
934 self.__nlstr = '\n'.join(self)
944 self.__nlstr = '\n'.join(self)
935 return self.__nlstr
945 return self.__nlstr
936
946
937 n = nlstr = property(get_nlstr)
947 n = nlstr = property(get_nlstr)
948
949 def get_paths(self):
950 try:
951 return self.__paths
952 except AttributeError:
953 self.__paths = [path(p) for p in self if os.path.exists(p)]
954 return self.__paths
955
956 p = paths = property(get_paths)
938
957
939 #----------------------------------------------------------------------------
958 #----------------------------------------------------------------------------
940 def esc_quotes(strng):
959 def esc_quotes(strng):
941 """Return the input string with single and double quotes escaped out"""
960 """Return the input string with single and double quotes escaped out"""
942
961
943 return strng.replace('"','\\"').replace("'","\\'")
962 return strng.replace('"','\\"').replace("'","\\'")
944
963
945 #----------------------------------------------------------------------------
964 #----------------------------------------------------------------------------
946 def make_quoted_expr(s):
965 def make_quoted_expr(s):
947 """Return string s in appropriate quotes, using raw string if possible.
966 """Return string s in appropriate quotes, using raw string if possible.
948
967
949 Effectively this turns string: cd \ao\ao\
968 Effectively this turns string: cd \ao\ao\
950 to: r"cd \ao\ao\_"[:-1]
969 to: r"cd \ao\ao\_"[:-1]
951
970
952 Note the use of raw string and padding at the end to allow trailing backslash.
971 Note the use of raw string and padding at the end to allow trailing backslash.
953
972
954 """
973 """
955
974
956 tail = ''
975 tail = ''
957 tailpadding = ''
976 tailpadding = ''
958 raw = ''
977 raw = ''
959 if "\\" in s:
978 if "\\" in s:
960 raw = 'r'
979 raw = 'r'
961 if s.endswith('\\'):
980 if s.endswith('\\'):
962 tail = '[:-1]'
981 tail = '[:-1]'
963 tailpadding = '_'
982 tailpadding = '_'
964 if '"' not in s:
983 if '"' not in s:
965 quote = '"'
984 quote = '"'
966 elif "'" not in s:
985 elif "'" not in s:
967 quote = "'"
986 quote = "'"
968 elif '"""' not in s and not s.endswith('"'):
987 elif '"""' not in s and not s.endswith('"'):
969 quote = '"""'
988 quote = '"""'
970 elif "'''" not in s and not s.endswith("'"):
989 elif "'''" not in s and not s.endswith("'"):
971 quote = "'''"
990 quote = "'''"
972 else:
991 else:
973 # give up, backslash-escaped string will do
992 # give up, backslash-escaped string will do
974 return '"%s"' % esc_quotes(s)
993 return '"%s"' % esc_quotes(s)
975 res = itpl("$raw$quote$s$tailpadding$quote$tail")
994 res = itpl("$raw$quote$s$tailpadding$quote$tail")
976 return res
995 return res
977
996
978
997
979 #----------------------------------------------------------------------------
998 #----------------------------------------------------------------------------
980 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
999 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
981 """Take multiple lines of input.
1000 """Take multiple lines of input.
982
1001
983 A list with each line of input as a separate element is returned when a
1002 A list with each line of input as a separate element is returned when a
984 termination string is entered (defaults to a single '.'). Input can also
1003 termination string is entered (defaults to a single '.'). Input can also
985 terminate via EOF (^D in Unix, ^Z-RET in Windows).
1004 terminate via EOF (^D in Unix, ^Z-RET in Windows).
986
1005
987 Lines of input which end in \\ are joined into single entries (and a
1006 Lines of input which end in \\ are joined into single entries (and a
988 secondary continuation prompt is issued as long as the user terminates
1007 secondary continuation prompt is issued as long as the user terminates
989 lines with \\). This allows entering very long strings which are still
1008 lines with \\). This allows entering very long strings which are still
990 meant to be treated as single entities.
1009 meant to be treated as single entities.
991 """
1010 """
992
1011
993 try:
1012 try:
994 if header:
1013 if header:
995 header += '\n'
1014 header += '\n'
996 lines = [raw_input(header + ps1)]
1015 lines = [raw_input(header + ps1)]
997 except EOFError:
1016 except EOFError:
998 return []
1017 return []
999 terminate = [terminate_str]
1018 terminate = [terminate_str]
1000 try:
1019 try:
1001 while lines[-1:] != terminate:
1020 while lines[-1:] != terminate:
1002 new_line = raw_input(ps1)
1021 new_line = raw_input(ps1)
1003 while new_line.endswith('\\'):
1022 while new_line.endswith('\\'):
1004 new_line = new_line[:-1] + raw_input(ps2)
1023 new_line = new_line[:-1] + raw_input(ps2)
1005 lines.append(new_line)
1024 lines.append(new_line)
1006
1025
1007 return lines[:-1] # don't return the termination command
1026 return lines[:-1] # don't return the termination command
1008 except EOFError:
1027 except EOFError:
1009 print
1028 print
1010 return lines
1029 return lines
1011
1030
1012 #----------------------------------------------------------------------------
1031 #----------------------------------------------------------------------------
1013 def raw_input_ext(prompt='', ps2='... '):
1032 def raw_input_ext(prompt='', ps2='... '):
1014 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1033 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1015
1034
1016 line = raw_input(prompt)
1035 line = raw_input(prompt)
1017 while line.endswith('\\'):
1036 while line.endswith('\\'):
1018 line = line[:-1] + raw_input(ps2)
1037 line = line[:-1] + raw_input(ps2)
1019 return line
1038 return line
1020
1039
1021 #----------------------------------------------------------------------------
1040 #----------------------------------------------------------------------------
1022 def ask_yes_no(prompt,default=None):
1041 def ask_yes_no(prompt,default=None):
1023 """Asks a question and returns an integer 1/0 (y/n) answer.
1042 """Asks a question and returns an integer 1/0 (y/n) answer.
1024
1043
1025 If default is given (one of 'y','n'), it is used if the user input is
1044 If default is given (one of 'y','n'), it is used if the user input is
1026 empty. Otherwise the question is repeated until an answer is given.
1045 empty. Otherwise the question is repeated until an answer is given.
1027 If EOF occurs 20 times consecutively, the default answer is assumed,
1046 If EOF occurs 20 times consecutively, the default answer is assumed,
1028 or if there is no default, an exception is raised to prevent infinite
1047 or if there is no default, an exception is raised to prevent infinite
1029 loops.
1048 loops.
1030
1049
1031 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1050 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1032
1051
1033 answers = {'y':True,'n':False,'yes':True,'no':False}
1052 answers = {'y':True,'n':False,'yes':True,'no':False}
1034 ans = None
1053 ans = None
1035 eofs, max_eofs = 0, 20
1054 eofs, max_eofs = 0, 20
1036 while ans not in answers.keys():
1055 while ans not in answers.keys():
1037 try:
1056 try:
1038 ans = raw_input(prompt+' ').lower()
1057 ans = raw_input(prompt+' ').lower()
1039 if not ans: # response was an empty string
1058 if not ans: # response was an empty string
1040 ans = default
1059 ans = default
1041 eofs = 0
1060 eofs = 0
1042 except (EOFError,KeyboardInterrupt):
1061 except (EOFError,KeyboardInterrupt):
1043 eofs = eofs + 1
1062 eofs = eofs + 1
1044 if eofs >= max_eofs:
1063 if eofs >= max_eofs:
1045 if default in answers.keys():
1064 if default in answers.keys():
1046 ans = default
1065 ans = default
1047 else:
1066 else:
1048 raise
1067 raise
1049
1068
1050 return answers[ans]
1069 return answers[ans]
1051
1070
1052 #----------------------------------------------------------------------------
1071 #----------------------------------------------------------------------------
1053 def marquee(txt='',width=78,mark='*'):
1072 def marquee(txt='',width=78,mark='*'):
1054 """Return the input string centered in a 'marquee'."""
1073 """Return the input string centered in a 'marquee'."""
1055 if not txt:
1074 if not txt:
1056 return (mark*width)[:width]
1075 return (mark*width)[:width]
1057 nmark = (width-len(txt)-2)/len(mark)/2
1076 nmark = (width-len(txt)-2)/len(mark)/2
1058 if nmark < 0: nmark =0
1077 if nmark < 0: nmark =0
1059 marks = mark*nmark
1078 marks = mark*nmark
1060 return '%s %s %s' % (marks,txt,marks)
1079 return '%s %s %s' % (marks,txt,marks)
1061
1080
1062 #----------------------------------------------------------------------------
1081 #----------------------------------------------------------------------------
1063 class EvalDict:
1082 class EvalDict:
1064 """
1083 """
1065 Emulate a dict which evaluates its contents in the caller's frame.
1084 Emulate a dict which evaluates its contents in the caller's frame.
1066
1085
1067 Usage:
1086 Usage:
1068 >>>number = 19
1087 >>>number = 19
1069 >>>text = "python"
1088 >>>text = "python"
1070 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1089 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1071 """
1090 """
1072
1091
1073 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1092 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1074 # modified (shorter) version of:
1093 # modified (shorter) version of:
1075 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1094 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1076 # Skip Montanaro (skip@pobox.com).
1095 # Skip Montanaro (skip@pobox.com).
1077
1096
1078 def __getitem__(self, name):
1097 def __getitem__(self, name):
1079 frame = sys._getframe(1)
1098 frame = sys._getframe(1)
1080 return eval(name, frame.f_globals, frame.f_locals)
1099 return eval(name, frame.f_globals, frame.f_locals)
1081
1100
1082 EvalString = EvalDict # for backwards compatibility
1101 EvalString = EvalDict # for backwards compatibility
1083 #----------------------------------------------------------------------------
1102 #----------------------------------------------------------------------------
1084 def qw(words,flat=0,sep=None,maxsplit=-1):
1103 def qw(words,flat=0,sep=None,maxsplit=-1):
1085 """Similar to Perl's qw() operator, but with some more options.
1104 """Similar to Perl's qw() operator, but with some more options.
1086
1105
1087 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1106 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1088
1107
1089 words can also be a list itself, and with flat=1, the output will be
1108 words can also be a list itself, and with flat=1, the output will be
1090 recursively flattened. Examples:
1109 recursively flattened. Examples:
1091
1110
1092 >>> qw('1 2')
1111 >>> qw('1 2')
1093 ['1', '2']
1112 ['1', '2']
1094 >>> qw(['a b','1 2',['m n','p q']])
1113 >>> qw(['a b','1 2',['m n','p q']])
1095 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1114 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1096 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1115 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1097 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1116 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1098
1117
1099 if type(words) in StringTypes:
1118 if type(words) in StringTypes:
1100 return [word.strip() for word in words.split(sep,maxsplit)
1119 return [word.strip() for word in words.split(sep,maxsplit)
1101 if word and not word.isspace() ]
1120 if word and not word.isspace() ]
1102 if flat:
1121 if flat:
1103 return flatten(map(qw,words,[1]*len(words)))
1122 return flatten(map(qw,words,[1]*len(words)))
1104 return map(qw,words)
1123 return map(qw,words)
1105
1124
1106 #----------------------------------------------------------------------------
1125 #----------------------------------------------------------------------------
1107 def qwflat(words,sep=None,maxsplit=-1):
1126 def qwflat(words,sep=None,maxsplit=-1):
1108 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1127 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1109 return qw(words,1,sep,maxsplit)
1128 return qw(words,1,sep,maxsplit)
1110
1129
1111 #----------------------------------------------------------------------------
1130 #----------------------------------------------------------------------------
1112 def qw_lol(indata):
1131 def qw_lol(indata):
1113 """qw_lol('a b') -> [['a','b']],
1132 """qw_lol('a b') -> [['a','b']],
1114 otherwise it's just a call to qw().
1133 otherwise it's just a call to qw().
1115
1134
1116 We need this to make sure the modules_some keys *always* end up as a
1135 We need this to make sure the modules_some keys *always* end up as a
1117 list of lists."""
1136 list of lists."""
1118
1137
1119 if type(indata) in StringTypes:
1138 if type(indata) in StringTypes:
1120 return [qw(indata)]
1139 return [qw(indata)]
1121 else:
1140 else:
1122 return qw(indata)
1141 return qw(indata)
1123
1142
1124 #-----------------------------------------------------------------------------
1143 #-----------------------------------------------------------------------------
1125 def list_strings(arg):
1144 def list_strings(arg):
1126 """Always return a list of strings, given a string or list of strings
1145 """Always return a list of strings, given a string or list of strings
1127 as input."""
1146 as input."""
1128
1147
1129 if type(arg) in StringTypes: return [arg]
1148 if type(arg) in StringTypes: return [arg]
1130 else: return arg
1149 else: return arg
1131
1150
1132 #----------------------------------------------------------------------------
1151 #----------------------------------------------------------------------------
1133 def grep(pat,list,case=1):
1152 def grep(pat,list,case=1):
1134 """Simple minded grep-like function.
1153 """Simple minded grep-like function.
1135 grep(pat,list) returns occurrences of pat in list, None on failure.
1154 grep(pat,list) returns occurrences of pat in list, None on failure.
1136
1155
1137 It only does simple string matching, with no support for regexps. Use the
1156 It only does simple string matching, with no support for regexps. Use the
1138 option case=0 for case-insensitive matching."""
1157 option case=0 for case-insensitive matching."""
1139
1158
1140 # This is pretty crude. At least it should implement copying only references
1159 # This is pretty crude. At least it should implement copying only references
1141 # to the original data in case it's big. Now it copies the data for output.
1160 # to the original data in case it's big. Now it copies the data for output.
1142 out=[]
1161 out=[]
1143 if case:
1162 if case:
1144 for term in list:
1163 for term in list:
1145 if term.find(pat)>-1: out.append(term)
1164 if term.find(pat)>-1: out.append(term)
1146 else:
1165 else:
1147 lpat=pat.lower()
1166 lpat=pat.lower()
1148 for term in list:
1167 for term in list:
1149 if term.lower().find(lpat)>-1: out.append(term)
1168 if term.lower().find(lpat)>-1: out.append(term)
1150
1169
1151 if len(out): return out
1170 if len(out): return out
1152 else: return None
1171 else: return None
1153
1172
1154 #----------------------------------------------------------------------------
1173 #----------------------------------------------------------------------------
1155 def dgrep(pat,*opts):
1174 def dgrep(pat,*opts):
1156 """Return grep() on dir()+dir(__builtins__).
1175 """Return grep() on dir()+dir(__builtins__).
1157
1176
1158 A very common use of grep() when working interactively."""
1177 A very common use of grep() when working interactively."""
1159
1178
1160 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1179 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1161
1180
1162 #----------------------------------------------------------------------------
1181 #----------------------------------------------------------------------------
1163 def idgrep(pat):
1182 def idgrep(pat):
1164 """Case-insensitive dgrep()"""
1183 """Case-insensitive dgrep()"""
1165
1184
1166 return dgrep(pat,0)
1185 return dgrep(pat,0)
1167
1186
1168 #----------------------------------------------------------------------------
1187 #----------------------------------------------------------------------------
1169 def igrep(pat,list):
1188 def igrep(pat,list):
1170 """Synonym for case-insensitive grep."""
1189 """Synonym for case-insensitive grep."""
1171
1190
1172 return grep(pat,list,case=0)
1191 return grep(pat,list,case=0)
1173
1192
1174 #----------------------------------------------------------------------------
1193 #----------------------------------------------------------------------------
1175 def indent(str,nspaces=4,ntabs=0):
1194 def indent(str,nspaces=4,ntabs=0):
1176 """Indent a string a given number of spaces or tabstops.
1195 """Indent a string a given number of spaces or tabstops.
1177
1196
1178 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1197 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1179 """
1198 """
1180 if str is None:
1199 if str is None:
1181 return
1200 return
1182 ind = '\t'*ntabs+' '*nspaces
1201 ind = '\t'*ntabs+' '*nspaces
1183 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1202 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1184 if outstr.endswith(os.linesep+ind):
1203 if outstr.endswith(os.linesep+ind):
1185 return outstr[:-len(ind)]
1204 return outstr[:-len(ind)]
1186 else:
1205 else:
1187 return outstr
1206 return outstr
1188
1207
1189 #-----------------------------------------------------------------------------
1208 #-----------------------------------------------------------------------------
1190 def native_line_ends(filename,backup=1):
1209 def native_line_ends(filename,backup=1):
1191 """Convert (in-place) a file to line-ends native to the current OS.
1210 """Convert (in-place) a file to line-ends native to the current OS.
1192
1211
1193 If the optional backup argument is given as false, no backup of the
1212 If the optional backup argument is given as false, no backup of the
1194 original file is left. """
1213 original file is left. """
1195
1214
1196 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1215 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1197
1216
1198 bak_filename = filename + backup_suffixes[os.name]
1217 bak_filename = filename + backup_suffixes[os.name]
1199
1218
1200 original = open(filename).read()
1219 original = open(filename).read()
1201 shutil.copy2(filename,bak_filename)
1220 shutil.copy2(filename,bak_filename)
1202 try:
1221 try:
1203 new = open(filename,'wb')
1222 new = open(filename,'wb')
1204 new.write(os.linesep.join(original.splitlines()))
1223 new.write(os.linesep.join(original.splitlines()))
1205 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1224 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1206 new.close()
1225 new.close()
1207 except:
1226 except:
1208 os.rename(bak_filename,filename)
1227 os.rename(bak_filename,filename)
1209 if not backup:
1228 if not backup:
1210 try:
1229 try:
1211 os.remove(bak_filename)
1230 os.remove(bak_filename)
1212 except:
1231 except:
1213 pass
1232 pass
1214
1233
1215 #----------------------------------------------------------------------------
1234 #----------------------------------------------------------------------------
1216 def get_pager_cmd(pager_cmd = None):
1235 def get_pager_cmd(pager_cmd = None):
1217 """Return a pager command.
1236 """Return a pager command.
1218
1237
1219 Makes some attempts at finding an OS-correct one."""
1238 Makes some attempts at finding an OS-correct one."""
1220
1239
1221 if os.name == 'posix':
1240 if os.name == 'posix':
1222 default_pager_cmd = 'less -r' # -r for color control sequences
1241 default_pager_cmd = 'less -r' # -r for color control sequences
1223 elif os.name in ['nt','dos']:
1242 elif os.name in ['nt','dos']:
1224 default_pager_cmd = 'type'
1243 default_pager_cmd = 'type'
1225
1244
1226 if pager_cmd is None:
1245 if pager_cmd is None:
1227 try:
1246 try:
1228 pager_cmd = os.environ['PAGER']
1247 pager_cmd = os.environ['PAGER']
1229 except:
1248 except:
1230 pager_cmd = default_pager_cmd
1249 pager_cmd = default_pager_cmd
1231 return pager_cmd
1250 return pager_cmd
1232
1251
1233 #-----------------------------------------------------------------------------
1252 #-----------------------------------------------------------------------------
1234 def get_pager_start(pager,start):
1253 def get_pager_start(pager,start):
1235 """Return the string for paging files with an offset.
1254 """Return the string for paging files with an offset.
1236
1255
1237 This is the '+N' argument which less and more (under Unix) accept.
1256 This is the '+N' argument which less and more (under Unix) accept.
1238 """
1257 """
1239
1258
1240 if pager in ['less','more']:
1259 if pager in ['less','more']:
1241 if start:
1260 if start:
1242 start_string = '+' + str(start)
1261 start_string = '+' + str(start)
1243 else:
1262 else:
1244 start_string = ''
1263 start_string = ''
1245 else:
1264 else:
1246 start_string = ''
1265 start_string = ''
1247 return start_string
1266 return start_string
1248
1267
1249 #----------------------------------------------------------------------------
1268 #----------------------------------------------------------------------------
1250 if os.name == "nt":
1269 if os.name == "nt":
1251 import msvcrt
1270 import msvcrt
1252 def page_more():
1271 def page_more():
1253 """ Smart pausing between pages
1272 """ Smart pausing between pages
1254
1273
1255 @return: True if need print more lines, False if quit
1274 @return: True if need print more lines, False if quit
1256 """
1275 """
1257 Term.cout.write('---Return to continue, q to quit--- ')
1276 Term.cout.write('---Return to continue, q to quit--- ')
1258 ans = msvcrt.getch()
1277 ans = msvcrt.getch()
1259 if ans in ("q", "Q"):
1278 if ans in ("q", "Q"):
1260 result = False
1279 result = False
1261 else:
1280 else:
1262 result = True
1281 result = True
1263 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1282 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1264 return result
1283 return result
1265 else:
1284 else:
1266 def page_more():
1285 def page_more():
1267 ans = raw_input('---Return to continue, q to quit--- ')
1286 ans = raw_input('---Return to continue, q to quit--- ')
1268 if ans.lower().startswith('q'):
1287 if ans.lower().startswith('q'):
1269 return False
1288 return False
1270 else:
1289 else:
1271 return True
1290 return True
1272
1291
1273 esc_re = re.compile(r"(\x1b[^m]+m)")
1292 esc_re = re.compile(r"(\x1b[^m]+m)")
1274
1293
1275 def page_dumb(strng,start=0,screen_lines=25):
1294 def page_dumb(strng,start=0,screen_lines=25):
1276 """Very dumb 'pager' in Python, for when nothing else works.
1295 """Very dumb 'pager' in Python, for when nothing else works.
1277
1296
1278 Only moves forward, same interface as page(), except for pager_cmd and
1297 Only moves forward, same interface as page(), except for pager_cmd and
1279 mode."""
1298 mode."""
1280
1299
1281 out_ln = strng.splitlines()[start:]
1300 out_ln = strng.splitlines()[start:]
1282 screens = chop(out_ln,screen_lines-1)
1301 screens = chop(out_ln,screen_lines-1)
1283 if len(screens) == 1:
1302 if len(screens) == 1:
1284 print >>Term.cout, os.linesep.join(screens[0])
1303 print >>Term.cout, os.linesep.join(screens[0])
1285 else:
1304 else:
1286 last_escape = ""
1305 last_escape = ""
1287 for scr in screens[0:-1]:
1306 for scr in screens[0:-1]:
1288 hunk = os.linesep.join(scr)
1307 hunk = os.linesep.join(scr)
1289 print >>Term.cout, last_escape + hunk
1308 print >>Term.cout, last_escape + hunk
1290 if not page_more():
1309 if not page_more():
1291 return
1310 return
1292 esc_list = esc_re.findall(hunk)
1311 esc_list = esc_re.findall(hunk)
1293 if len(esc_list) > 0:
1312 if len(esc_list) > 0:
1294 last_escape = esc_list[-1]
1313 last_escape = esc_list[-1]
1295 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1314 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1296
1315
1297 #----------------------------------------------------------------------------
1316 #----------------------------------------------------------------------------
1298 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1317 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1299 """Print a string, piping through a pager after a certain length.
1318 """Print a string, piping through a pager after a certain length.
1300
1319
1301 The screen_lines parameter specifies the number of *usable* lines of your
1320 The screen_lines parameter specifies the number of *usable* lines of your
1302 terminal screen (total lines minus lines you need to reserve to show other
1321 terminal screen (total lines minus lines you need to reserve to show other
1303 information).
1322 information).
1304
1323
1305 If you set screen_lines to a number <=0, page() will try to auto-determine
1324 If you set screen_lines to a number <=0, page() will try to auto-determine
1306 your screen size and will only use up to (screen_size+screen_lines) for
1325 your screen size and will only use up to (screen_size+screen_lines) for
1307 printing, paging after that. That is, if you want auto-detection but need
1326 printing, paging after that. That is, if you want auto-detection but need
1308 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1327 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1309 auto-detection without any lines reserved simply use screen_lines = 0.
1328 auto-detection without any lines reserved simply use screen_lines = 0.
1310
1329
1311 If a string won't fit in the allowed lines, it is sent through the
1330 If a string won't fit in the allowed lines, it is sent through the
1312 specified pager command. If none given, look for PAGER in the environment,
1331 specified pager command. If none given, look for PAGER in the environment,
1313 and ultimately default to less.
1332 and ultimately default to less.
1314
1333
1315 If no system pager works, the string is sent through a 'dumb pager'
1334 If no system pager works, the string is sent through a 'dumb pager'
1316 written in python, very simplistic.
1335 written in python, very simplistic.
1317 """
1336 """
1318
1337
1319 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1338 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1320 TERM = os.environ.get('TERM','dumb')
1339 TERM = os.environ.get('TERM','dumb')
1321 if TERM in ['dumb','emacs'] and os.name != 'nt':
1340 if TERM in ['dumb','emacs'] and os.name != 'nt':
1322 print strng
1341 print strng
1323 return
1342 return
1324 # chop off the topmost part of the string we don't want to see
1343 # chop off the topmost part of the string we don't want to see
1325 str_lines = strng.split(os.linesep)[start:]
1344 str_lines = strng.split(os.linesep)[start:]
1326 str_toprint = os.linesep.join(str_lines)
1345 str_toprint = os.linesep.join(str_lines)
1327 num_newlines = len(str_lines)
1346 num_newlines = len(str_lines)
1328 len_str = len(str_toprint)
1347 len_str = len(str_toprint)
1329
1348
1330 # Dumb heuristics to guesstimate number of on-screen lines the string
1349 # Dumb heuristics to guesstimate number of on-screen lines the string
1331 # takes. Very basic, but good enough for docstrings in reasonable
1350 # takes. Very basic, but good enough for docstrings in reasonable
1332 # terminals. If someone later feels like refining it, it's not hard.
1351 # terminals. If someone later feels like refining it, it's not hard.
1333 numlines = max(num_newlines,int(len_str/80)+1)
1352 numlines = max(num_newlines,int(len_str/80)+1)
1334
1353
1335 if os.name == "nt":
1354 if os.name == "nt":
1336 screen_lines_def = get_console_size(defaulty=25)[1]
1355 screen_lines_def = get_console_size(defaulty=25)[1]
1337 else:
1356 else:
1338 screen_lines_def = 25 # default value if we can't auto-determine
1357 screen_lines_def = 25 # default value if we can't auto-determine
1339
1358
1340 # auto-determine screen size
1359 # auto-determine screen size
1341 if screen_lines <= 0:
1360 if screen_lines <= 0:
1342 if TERM=='xterm':
1361 if TERM=='xterm':
1343 try:
1362 try:
1344 import curses
1363 import curses
1345 if hasattr(curses,'initscr'):
1364 if hasattr(curses,'initscr'):
1346 use_curses = 1
1365 use_curses = 1
1347 else:
1366 else:
1348 use_curses = 0
1367 use_curses = 0
1349 except ImportError:
1368 except ImportError:
1350 use_curses = 0
1369 use_curses = 0
1351 else:
1370 else:
1352 # curses causes problems on many terminals other than xterm.
1371 # curses causes problems on many terminals other than xterm.
1353 use_curses = 0
1372 use_curses = 0
1354 if use_curses:
1373 if use_curses:
1355 scr = curses.initscr()
1374 scr = curses.initscr()
1356 screen_lines_real,screen_cols = scr.getmaxyx()
1375 screen_lines_real,screen_cols = scr.getmaxyx()
1357 curses.endwin()
1376 curses.endwin()
1358 screen_lines += screen_lines_real
1377 screen_lines += screen_lines_real
1359 #print '***Screen size:',screen_lines_real,'lines x',\
1378 #print '***Screen size:',screen_lines_real,'lines x',\
1360 #screen_cols,'columns.' # dbg
1379 #screen_cols,'columns.' # dbg
1361 else:
1380 else:
1362 screen_lines += screen_lines_def
1381 screen_lines += screen_lines_def
1363
1382
1364 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1383 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1365 if numlines <= screen_lines :
1384 if numlines <= screen_lines :
1366 #print '*** normal print' # dbg
1385 #print '*** normal print' # dbg
1367 print >>Term.cout, str_toprint
1386 print >>Term.cout, str_toprint
1368 else:
1387 else:
1369 # Try to open pager and default to internal one if that fails.
1388 # Try to open pager and default to internal one if that fails.
1370 # All failure modes are tagged as 'retval=1', to match the return
1389 # All failure modes are tagged as 'retval=1', to match the return
1371 # value of a failed system command. If any intermediate attempt
1390 # value of a failed system command. If any intermediate attempt
1372 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1391 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1373 pager_cmd = get_pager_cmd(pager_cmd)
1392 pager_cmd = get_pager_cmd(pager_cmd)
1374 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1393 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1375 if os.name == 'nt':
1394 if os.name == 'nt':
1376 if pager_cmd.startswith('type'):
1395 if pager_cmd.startswith('type'):
1377 # The default WinXP 'type' command is failing on complex strings.
1396 # The default WinXP 'type' command is failing on complex strings.
1378 retval = 1
1397 retval = 1
1379 else:
1398 else:
1380 tmpname = tempfile.mktemp('.txt')
1399 tmpname = tempfile.mktemp('.txt')
1381 tmpfile = file(tmpname,'wt')
1400 tmpfile = file(tmpname,'wt')
1382 tmpfile.write(strng)
1401 tmpfile.write(strng)
1383 tmpfile.close()
1402 tmpfile.close()
1384 cmd = "%s < %s" % (pager_cmd,tmpname)
1403 cmd = "%s < %s" % (pager_cmd,tmpname)
1385 if os.system(cmd):
1404 if os.system(cmd):
1386 retval = 1
1405 retval = 1
1387 else:
1406 else:
1388 retval = None
1407 retval = None
1389 os.remove(tmpname)
1408 os.remove(tmpname)
1390 else:
1409 else:
1391 try:
1410 try:
1392 retval = None
1411 retval = None
1393 # if I use popen4, things hang. No idea why.
1412 # if I use popen4, things hang. No idea why.
1394 #pager,shell_out = os.popen4(pager_cmd)
1413 #pager,shell_out = os.popen4(pager_cmd)
1395 pager = os.popen(pager_cmd,'w')
1414 pager = os.popen(pager_cmd,'w')
1396 pager.write(strng)
1415 pager.write(strng)
1397 pager.close()
1416 pager.close()
1398 retval = pager.close() # success returns None
1417 retval = pager.close() # success returns None
1399 except IOError,msg: # broken pipe when user quits
1418 except IOError,msg: # broken pipe when user quits
1400 if msg.args == (32,'Broken pipe'):
1419 if msg.args == (32,'Broken pipe'):
1401 retval = None
1420 retval = None
1402 else:
1421 else:
1403 retval = 1
1422 retval = 1
1404 except OSError:
1423 except OSError:
1405 # Other strange problems, sometimes seen in Win2k/cygwin
1424 # Other strange problems, sometimes seen in Win2k/cygwin
1406 retval = 1
1425 retval = 1
1407 if retval is not None:
1426 if retval is not None:
1408 page_dumb(strng,screen_lines=screen_lines)
1427 page_dumb(strng,screen_lines=screen_lines)
1409
1428
1410 #----------------------------------------------------------------------------
1429 #----------------------------------------------------------------------------
1411 def page_file(fname,start = 0, pager_cmd = None):
1430 def page_file(fname,start = 0, pager_cmd = None):
1412 """Page a file, using an optional pager command and starting line.
1431 """Page a file, using an optional pager command and starting line.
1413 """
1432 """
1414
1433
1415 pager_cmd = get_pager_cmd(pager_cmd)
1434 pager_cmd = get_pager_cmd(pager_cmd)
1416 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1435 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1417
1436
1418 try:
1437 try:
1419 if os.environ['TERM'] in ['emacs','dumb']:
1438 if os.environ['TERM'] in ['emacs','dumb']:
1420 raise EnvironmentError
1439 raise EnvironmentError
1421 xsys(pager_cmd + ' ' + fname)
1440 xsys(pager_cmd + ' ' + fname)
1422 except:
1441 except:
1423 try:
1442 try:
1424 if start > 0:
1443 if start > 0:
1425 start -= 1
1444 start -= 1
1426 page(open(fname).read(),start)
1445 page(open(fname).read(),start)
1427 except:
1446 except:
1428 print 'Unable to show file',`fname`
1447 print 'Unable to show file',`fname`
1429
1448
1430 #----------------------------------------------------------------------------
1449 #----------------------------------------------------------------------------
1431 def snip_print(str,width = 75,print_full = 0,header = ''):
1450 def snip_print(str,width = 75,print_full = 0,header = ''):
1432 """Print a string snipping the midsection to fit in width.
1451 """Print a string snipping the midsection to fit in width.
1433
1452
1434 print_full: mode control:
1453 print_full: mode control:
1435 - 0: only snip long strings
1454 - 0: only snip long strings
1436 - 1: send to page() directly.
1455 - 1: send to page() directly.
1437 - 2: snip long strings and ask for full length viewing with page()
1456 - 2: snip long strings and ask for full length viewing with page()
1438 Return 1 if snipping was necessary, 0 otherwise."""
1457 Return 1 if snipping was necessary, 0 otherwise."""
1439
1458
1440 if print_full == 1:
1459 if print_full == 1:
1441 page(header+str)
1460 page(header+str)
1442 return 0
1461 return 0
1443
1462
1444 print header,
1463 print header,
1445 if len(str) < width:
1464 if len(str) < width:
1446 print str
1465 print str
1447 snip = 0
1466 snip = 0
1448 else:
1467 else:
1449 whalf = int((width -5)/2)
1468 whalf = int((width -5)/2)
1450 print str[:whalf] + ' <...> ' + str[-whalf:]
1469 print str[:whalf] + ' <...> ' + str[-whalf:]
1451 snip = 1
1470 snip = 1
1452 if snip and print_full == 2:
1471 if snip and print_full == 2:
1453 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1472 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1454 page(str)
1473 page(str)
1455 return snip
1474 return snip
1456
1475
1457 #****************************************************************************
1476 #****************************************************************************
1458 # lists, dicts and structures
1477 # lists, dicts and structures
1459
1478
1460 def belong(candidates,checklist):
1479 def belong(candidates,checklist):
1461 """Check whether a list of items appear in a given list of options.
1480 """Check whether a list of items appear in a given list of options.
1462
1481
1463 Returns a list of 1 and 0, one for each candidate given."""
1482 Returns a list of 1 and 0, one for each candidate given."""
1464
1483
1465 return [x in checklist for x in candidates]
1484 return [x in checklist for x in candidates]
1466
1485
1467 #----------------------------------------------------------------------------
1486 #----------------------------------------------------------------------------
1468 def uniq_stable(elems):
1487 def uniq_stable(elems):
1469 """uniq_stable(elems) -> list
1488 """uniq_stable(elems) -> list
1470
1489
1471 Return from an iterable, a list of all the unique elements in the input,
1490 Return from an iterable, a list of all the unique elements in the input,
1472 but maintaining the order in which they first appear.
1491 but maintaining the order in which they first appear.
1473
1492
1474 A naive solution to this problem which just makes a dictionary with the
1493 A naive solution to this problem which just makes a dictionary with the
1475 elements as keys fails to respect the stability condition, since
1494 elements as keys fails to respect the stability condition, since
1476 dictionaries are unsorted by nature.
1495 dictionaries are unsorted by nature.
1477
1496
1478 Note: All elements in the input must be valid dictionary keys for this
1497 Note: All elements in the input must be valid dictionary keys for this
1479 routine to work, as it internally uses a dictionary for efficiency
1498 routine to work, as it internally uses a dictionary for efficiency
1480 reasons."""
1499 reasons."""
1481
1500
1482 unique = []
1501 unique = []
1483 unique_dict = {}
1502 unique_dict = {}
1484 for nn in elems:
1503 for nn in elems:
1485 if nn not in unique_dict:
1504 if nn not in unique_dict:
1486 unique.append(nn)
1505 unique.append(nn)
1487 unique_dict[nn] = None
1506 unique_dict[nn] = None
1488 return unique
1507 return unique
1489
1508
1490 #----------------------------------------------------------------------------
1509 #----------------------------------------------------------------------------
1491 class NLprinter:
1510 class NLprinter:
1492 """Print an arbitrarily nested list, indicating index numbers.
1511 """Print an arbitrarily nested list, indicating index numbers.
1493
1512
1494 An instance of this class called nlprint is available and callable as a
1513 An instance of this class called nlprint is available and callable as a
1495 function.
1514 function.
1496
1515
1497 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1516 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1498 and using 'sep' to separate the index from the value. """
1517 and using 'sep' to separate the index from the value. """
1499
1518
1500 def __init__(self):
1519 def __init__(self):
1501 self.depth = 0
1520 self.depth = 0
1502
1521
1503 def __call__(self,lst,pos='',**kw):
1522 def __call__(self,lst,pos='',**kw):
1504 """Prints the nested list numbering levels."""
1523 """Prints the nested list numbering levels."""
1505 kw.setdefault('indent',' ')
1524 kw.setdefault('indent',' ')
1506 kw.setdefault('sep',': ')
1525 kw.setdefault('sep',': ')
1507 kw.setdefault('start',0)
1526 kw.setdefault('start',0)
1508 kw.setdefault('stop',len(lst))
1527 kw.setdefault('stop',len(lst))
1509 # we need to remove start and stop from kw so they don't propagate
1528 # we need to remove start and stop from kw so they don't propagate
1510 # into a recursive call for a nested list.
1529 # into a recursive call for a nested list.
1511 start = kw['start']; del kw['start']
1530 start = kw['start']; del kw['start']
1512 stop = kw['stop']; del kw['stop']
1531 stop = kw['stop']; del kw['stop']
1513 if self.depth == 0 and 'header' in kw.keys():
1532 if self.depth == 0 and 'header' in kw.keys():
1514 print kw['header']
1533 print kw['header']
1515
1534
1516 for idx in range(start,stop):
1535 for idx in range(start,stop):
1517 elem = lst[idx]
1536 elem = lst[idx]
1518 if type(elem)==type([]):
1537 if type(elem)==type([]):
1519 self.depth += 1
1538 self.depth += 1
1520 self.__call__(elem,itpl('$pos$idx,'),**kw)
1539 self.__call__(elem,itpl('$pos$idx,'),**kw)
1521 self.depth -= 1
1540 self.depth -= 1
1522 else:
1541 else:
1523 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1542 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1524
1543
1525 nlprint = NLprinter()
1544 nlprint = NLprinter()
1526 #----------------------------------------------------------------------------
1545 #----------------------------------------------------------------------------
1527 def all_belong(candidates,checklist):
1546 def all_belong(candidates,checklist):
1528 """Check whether a list of items ALL appear in a given list of options.
1547 """Check whether a list of items ALL appear in a given list of options.
1529
1548
1530 Returns a single 1 or 0 value."""
1549 Returns a single 1 or 0 value."""
1531
1550
1532 return 1-(0 in [x in checklist for x in candidates])
1551 return 1-(0 in [x in checklist for x in candidates])
1533
1552
1534 #----------------------------------------------------------------------------
1553 #----------------------------------------------------------------------------
1535 def sort_compare(lst1,lst2,inplace = 1):
1554 def sort_compare(lst1,lst2,inplace = 1):
1536 """Sort and compare two lists.
1555 """Sort and compare two lists.
1537
1556
1538 By default it does it in place, thus modifying the lists. Use inplace = 0
1557 By default it does it in place, thus modifying the lists. Use inplace = 0
1539 to avoid that (at the cost of temporary copy creation)."""
1558 to avoid that (at the cost of temporary copy creation)."""
1540 if not inplace:
1559 if not inplace:
1541 lst1 = lst1[:]
1560 lst1 = lst1[:]
1542 lst2 = lst2[:]
1561 lst2 = lst2[:]
1543 lst1.sort(); lst2.sort()
1562 lst1.sort(); lst2.sort()
1544 return lst1 == lst2
1563 return lst1 == lst2
1545
1564
1546 #----------------------------------------------------------------------------
1565 #----------------------------------------------------------------------------
1547 def mkdict(**kwargs):
1566 def mkdict(**kwargs):
1548 """Return a dict from a keyword list.
1567 """Return a dict from a keyword list.
1549
1568
1550 It's just syntactic sugar for making ditcionary creation more convenient:
1569 It's just syntactic sugar for making ditcionary creation more convenient:
1551 # the standard way
1570 # the standard way
1552 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1571 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1553 # a cleaner way
1572 # a cleaner way
1554 >>>data = dict(red=1, green=2, blue=3)
1573 >>>data = dict(red=1, green=2, blue=3)
1555
1574
1556 If you need more than this, look at the Struct() class."""
1575 If you need more than this, look at the Struct() class."""
1557
1576
1558 return kwargs
1577 return kwargs
1559
1578
1560 #----------------------------------------------------------------------------
1579 #----------------------------------------------------------------------------
1561 def list2dict(lst):
1580 def list2dict(lst):
1562 """Takes a list of (key,value) pairs and turns it into a dict."""
1581 """Takes a list of (key,value) pairs and turns it into a dict."""
1563
1582
1564 dic = {}
1583 dic = {}
1565 for k,v in lst: dic[k] = v
1584 for k,v in lst: dic[k] = v
1566 return dic
1585 return dic
1567
1586
1568 #----------------------------------------------------------------------------
1587 #----------------------------------------------------------------------------
1569 def list2dict2(lst,default=''):
1588 def list2dict2(lst,default=''):
1570 """Takes a list and turns it into a dict.
1589 """Takes a list and turns it into a dict.
1571 Much slower than list2dict, but more versatile. This version can take
1590 Much slower than list2dict, but more versatile. This version can take
1572 lists with sublists of arbitrary length (including sclars)."""
1591 lists with sublists of arbitrary length (including sclars)."""
1573
1592
1574 dic = {}
1593 dic = {}
1575 for elem in lst:
1594 for elem in lst:
1576 if type(elem) in (types.ListType,types.TupleType):
1595 if type(elem) in (types.ListType,types.TupleType):
1577 size = len(elem)
1596 size = len(elem)
1578 if size == 0:
1597 if size == 0:
1579 pass
1598 pass
1580 elif size == 1:
1599 elif size == 1:
1581 dic[elem] = default
1600 dic[elem] = default
1582 else:
1601 else:
1583 k,v = elem[0], elem[1:]
1602 k,v = elem[0], elem[1:]
1584 if len(v) == 1: v = v[0]
1603 if len(v) == 1: v = v[0]
1585 dic[k] = v
1604 dic[k] = v
1586 else:
1605 else:
1587 dic[elem] = default
1606 dic[elem] = default
1588 return dic
1607 return dic
1589
1608
1590 #----------------------------------------------------------------------------
1609 #----------------------------------------------------------------------------
1591 def flatten(seq):
1610 def flatten(seq):
1592 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1611 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1593
1612
1594 # bug in python??? (YES. Fixed in 2.2, let's leave the kludgy fix in).
1613 # bug in python??? (YES. Fixed in 2.2, let's leave the kludgy fix in).
1595
1614
1596 # if the x=0 isn't made, a *global* variable x is left over after calling
1615 # if the x=0 isn't made, a *global* variable x is left over after calling
1597 # this function, with the value of the last element in the return
1616 # this function, with the value of the last element in the return
1598 # list. This does seem like a bug big time to me.
1617 # list. This does seem like a bug big time to me.
1599
1618
1600 # the problem is fixed with the x=0, which seems to force the creation of
1619 # the problem is fixed with the x=0, which seems to force the creation of
1601 # a local name
1620 # a local name
1602
1621
1603 x = 0
1622 x = 0
1604 return [x for subseq in seq for x in subseq]
1623 return [x for subseq in seq for x in subseq]
1605
1624
1606 #----------------------------------------------------------------------------
1625 #----------------------------------------------------------------------------
1607 def get_slice(seq,start=0,stop=None,step=1):
1626 def get_slice(seq,start=0,stop=None,step=1):
1608 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1627 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1609 if stop == None:
1628 if stop == None:
1610 stop = len(seq)
1629 stop = len(seq)
1611 item = lambda i: seq[i]
1630 item = lambda i: seq[i]
1612 return map(item,xrange(start,stop,step))
1631 return map(item,xrange(start,stop,step))
1613
1632
1614 #----------------------------------------------------------------------------
1633 #----------------------------------------------------------------------------
1615 def chop(seq,size):
1634 def chop(seq,size):
1616 """Chop a sequence into chunks of the given size."""
1635 """Chop a sequence into chunks of the given size."""
1617 chunk = lambda i: seq[i:i+size]
1636 chunk = lambda i: seq[i:i+size]
1618 return map(chunk,xrange(0,len(seq),size))
1637 return map(chunk,xrange(0,len(seq),size))
1619
1638
1620 #----------------------------------------------------------------------------
1639 #----------------------------------------------------------------------------
1621 def with(object, **args):
1640 def with(object, **args):
1622 """Set multiple attributes for an object, similar to Pascal's with.
1641 """Set multiple attributes for an object, similar to Pascal's with.
1623
1642
1624 Example:
1643 Example:
1625 with(jim,
1644 with(jim,
1626 born = 1960,
1645 born = 1960,
1627 haircolour = 'Brown',
1646 haircolour = 'Brown',
1628 eyecolour = 'Green')
1647 eyecolour = 'Green')
1629
1648
1630 Credit: Greg Ewing, in
1649 Credit: Greg Ewing, in
1631 http://mail.python.org/pipermail/python-list/2001-May/040703.html"""
1650 http://mail.python.org/pipermail/python-list/2001-May/040703.html"""
1632
1651
1633 object.__dict__.update(args)
1652 object.__dict__.update(args)
1634
1653
1635 #----------------------------------------------------------------------------
1654 #----------------------------------------------------------------------------
1636 def setattr_list(obj,alist,nspace = None):
1655 def setattr_list(obj,alist,nspace = None):
1637 """Set a list of attributes for an object taken from a namespace.
1656 """Set a list of attributes for an object taken from a namespace.
1638
1657
1639 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1658 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1640 alist with their values taken from nspace, which must be a dict (something
1659 alist with their values taken from nspace, which must be a dict (something
1641 like locals() will often do) If nspace isn't given, locals() of the
1660 like locals() will often do) If nspace isn't given, locals() of the
1642 *caller* is used, so in most cases you can omit it.
1661 *caller* is used, so in most cases you can omit it.
1643
1662
1644 Note that alist can be given as a string, which will be automatically
1663 Note that alist can be given as a string, which will be automatically
1645 split into a list on whitespace. If given as a list, it must be a list of
1664 split into a list on whitespace. If given as a list, it must be a list of
1646 *strings* (the variable names themselves), not of variables."""
1665 *strings* (the variable names themselves), not of variables."""
1647
1666
1648 # this grabs the local variables from the *previous* call frame -- that is
1667 # this grabs the local variables from the *previous* call frame -- that is
1649 # the locals from the function that called setattr_list().
1668 # the locals from the function that called setattr_list().
1650 # - snipped from weave.inline()
1669 # - snipped from weave.inline()
1651 if nspace is None:
1670 if nspace is None:
1652 call_frame = sys._getframe().f_back
1671 call_frame = sys._getframe().f_back
1653 nspace = call_frame.f_locals
1672 nspace = call_frame.f_locals
1654
1673
1655 if type(alist) in StringTypes:
1674 if type(alist) in StringTypes:
1656 alist = alist.split()
1675 alist = alist.split()
1657 for attr in alist:
1676 for attr in alist:
1658 val = eval(attr,nspace)
1677 val = eval(attr,nspace)
1659 setattr(obj,attr,val)
1678 setattr(obj,attr,val)
1660
1679
1661 #----------------------------------------------------------------------------
1680 #----------------------------------------------------------------------------
1662 def getattr_list(obj,alist,*args):
1681 def getattr_list(obj,alist,*args):
1663 """getattr_list(obj,alist[, default]) -> attribute list.
1682 """getattr_list(obj,alist[, default]) -> attribute list.
1664
1683
1665 Get a list of named attributes for an object. When a default argument is
1684 Get a list of named attributes for an object. When a default argument is
1666 given, it is returned when the attribute doesn't exist; without it, an
1685 given, it is returned when the attribute doesn't exist; without it, an
1667 exception is raised in that case.
1686 exception is raised in that case.
1668
1687
1669 Note that alist can be given as a string, which will be automatically
1688 Note that alist can be given as a string, which will be automatically
1670 split into a list on whitespace. If given as a list, it must be a list of
1689 split into a list on whitespace. If given as a list, it must be a list of
1671 *strings* (the variable names themselves), not of variables."""
1690 *strings* (the variable names themselves), not of variables."""
1672
1691
1673 if type(alist) in StringTypes:
1692 if type(alist) in StringTypes:
1674 alist = alist.split()
1693 alist = alist.split()
1675 if args:
1694 if args:
1676 if len(args)==1:
1695 if len(args)==1:
1677 default = args[0]
1696 default = args[0]
1678 return map(lambda attr: getattr(obj,attr,default),alist)
1697 return map(lambda attr: getattr(obj,attr,default),alist)
1679 else:
1698 else:
1680 raise ValueError,'getattr_list() takes only one optional argument'
1699 raise ValueError,'getattr_list() takes only one optional argument'
1681 else:
1700 else:
1682 return map(lambda attr: getattr(obj,attr),alist)
1701 return map(lambda attr: getattr(obj,attr),alist)
1683
1702
1684 #----------------------------------------------------------------------------
1703 #----------------------------------------------------------------------------
1685 def map_method(method,object_list,*argseq,**kw):
1704 def map_method(method,object_list,*argseq,**kw):
1686 """map_method(method,object_list,*args,**kw) -> list
1705 """map_method(method,object_list,*args,**kw) -> list
1687
1706
1688 Return a list of the results of applying the methods to the items of the
1707 Return a list of the results of applying the methods to the items of the
1689 argument sequence(s). If more than one sequence is given, the method is
1708 argument sequence(s). If more than one sequence is given, the method is
1690 called with an argument list consisting of the corresponding item of each
1709 called with an argument list consisting of the corresponding item of each
1691 sequence. All sequences must be of the same length.
1710 sequence. All sequences must be of the same length.
1692
1711
1693 Keyword arguments are passed verbatim to all objects called.
1712 Keyword arguments are passed verbatim to all objects called.
1694
1713
1695 This is Python code, so it's not nearly as fast as the builtin map()."""
1714 This is Python code, so it's not nearly as fast as the builtin map()."""
1696
1715
1697 out_list = []
1716 out_list = []
1698 idx = 0
1717 idx = 0
1699 for object in object_list:
1718 for object in object_list:
1700 try:
1719 try:
1701 handler = getattr(object, method)
1720 handler = getattr(object, method)
1702 except AttributeError:
1721 except AttributeError:
1703 out_list.append(None)
1722 out_list.append(None)
1704 else:
1723 else:
1705 if argseq:
1724 if argseq:
1706 args = map(lambda lst:lst[idx],argseq)
1725 args = map(lambda lst:lst[idx],argseq)
1707 #print 'ob',object,'hand',handler,'ar',args # dbg
1726 #print 'ob',object,'hand',handler,'ar',args # dbg
1708 out_list.append(handler(args,**kw))
1727 out_list.append(handler(args,**kw))
1709 else:
1728 else:
1710 out_list.append(handler(**kw))
1729 out_list.append(handler(**kw))
1711 idx += 1
1730 idx += 1
1712 return out_list
1731 return out_list
1713
1732
1714 #----------------------------------------------------------------------------
1733 #----------------------------------------------------------------------------
1715 def import_fail_info(mod_name,fns=None):
1734 def import_fail_info(mod_name,fns=None):
1716 """Inform load failure for a module."""
1735 """Inform load failure for a module."""
1717
1736
1718 if fns == None:
1737 if fns == None:
1719 warn("Loading of %s failed.\n" % (mod_name,))
1738 warn("Loading of %s failed.\n" % (mod_name,))
1720 else:
1739 else:
1721 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1740 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1722
1741
1723 #----------------------------------------------------------------------------
1742 #----------------------------------------------------------------------------
1724 # Proposed popitem() extension, written as a method
1743 # Proposed popitem() extension, written as a method
1725
1744
1726 class NotGiven: pass
1745 class NotGiven: pass
1727
1746
1728 def popkey(dct,key,default=NotGiven):
1747 def popkey(dct,key,default=NotGiven):
1729 """Return dct[key] and delete dct[key].
1748 """Return dct[key] and delete dct[key].
1730
1749
1731 If default is given, return it if dct[key] doesn't exist, otherwise raise
1750 If default is given, return it if dct[key] doesn't exist, otherwise raise
1732 KeyError. """
1751 KeyError. """
1733
1752
1734 try:
1753 try:
1735 val = dct[key]
1754 val = dct[key]
1736 except KeyError:
1755 except KeyError:
1737 if default is NotGiven:
1756 if default is NotGiven:
1738 raise
1757 raise
1739 else:
1758 else:
1740 return default
1759 return default
1741 else:
1760 else:
1742 del dct[key]
1761 del dct[key]
1743 return val
1762 return val
1744 #*************************** end of file <genutils.py> **********************
1763 #*************************** end of file <genutils.py> **********************
1745
1764
@@ -1,4932 +1,4936 b''
1 2006-01-16 Ville Vainio <vivainio@gmail.com>
1 2006-01-16 Ville Vainio <vivainio@gmail.com>
2
2
3 * Ipython/magic.py:Reverted back to old %edit functionality
3 * Ipython/magic.py:Reverted back to old %edit functionality
4 that returns file contents on exit.
4 that returns file contents on exit.
5
5
6 * IPython/path.py: Added Jason Orendorff's "path" module to
6 * IPython/path.py: Added Jason Orendorff's "path" module to
7 IPython tree, http://www.jorendorff.com/articles/python/path/
7 IPython tree, http://www.jorendorff.com/articles/python/path/.
8 You can get path objects conveniently through %sc, and !!, e.g.:
9 sc files=ls
10 for p in files.paths: # or files.p
11 print p,p.mtime
8
12
9 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
13 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
10 now work again without considering the exclusion regexp -
14 now work again without considering the exclusion regexp -
11 hence, things like ',foo my/path' turn to 'foo("my/path")'
15 hence, things like ',foo my/path' turn to 'foo("my/path")'
12 instead of syntax error.
16 instead of syntax error.
13
17
14
18
15 2006-01-14 Ville Vainio <vivainio@gmail.com>
19 2006-01-14 Ville Vainio <vivainio@gmail.com>
16
20
17 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
21 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
18 ipapi decorators for python 2.4 users, options() provides access to rc
22 ipapi decorators for python 2.4 users, options() provides access to rc
19 data.
23 data.
20
24
21 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
25 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
22 as path separators (even on Linux ;-). Space character after
26 as path separators (even on Linux ;-). Space character after
23 backslash (as yielded by tab completer) is still space;
27 backslash (as yielded by tab completer) is still space;
24 "%cd long\ name" works as expected.
28 "%cd long\ name" works as expected.
25
29
26 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
30 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
27 as "chain of command", with priority. API stays the same,
31 as "chain of command", with priority. API stays the same,
28 TryNext exception raised by a hook function signals that
32 TryNext exception raised by a hook function signals that
29 current hook failed and next hook should try handling it, as
33 current hook failed and next hook should try handling it, as
30 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
34 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
31 requested configurable display hook, which is now implemented.
35 requested configurable display hook, which is now implemented.
32
36
33 2006-01-13 Ville Vainio <vivainio@gmail.com>
37 2006-01-13 Ville Vainio <vivainio@gmail.com>
34
38
35 * IPython/platutils*.py: platform specific utility functions,
39 * IPython/platutils*.py: platform specific utility functions,
36 so far only set_term_title is implemented (change terminal
40 so far only set_term_title is implemented (change terminal
37 label in windowing systems). %cd now changes the title to
41 label in windowing systems). %cd now changes the title to
38 current dir.
42 current dir.
39
43
40 * IPython/Release.py: Added myself to "authors" list,
44 * IPython/Release.py: Added myself to "authors" list,
41 had to create new files.
45 had to create new files.
42
46
43 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
47 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
44 shell escape; not a known bug but had potential to be one in the
48 shell escape; not a known bug but had potential to be one in the
45 future.
49 future.
46
50
47 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
51 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
48 extension API for IPython! See the module for usage example. Fix
52 extension API for IPython! See the module for usage example. Fix
49 OInspect for docstring-less magic functions.
53 OInspect for docstring-less magic functions.
50
54
51
55
52 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
56 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
53
57
54 * IPython/iplib.py (raw_input): temporarily deactivate all
58 * IPython/iplib.py (raw_input): temporarily deactivate all
55 attempts at allowing pasting of code with autoindent on. It
59 attempts at allowing pasting of code with autoindent on. It
56 introduced bugs (reported by Prabhu) and I can't seem to find a
60 introduced bugs (reported by Prabhu) and I can't seem to find a
57 robust combination which works in all cases. Will have to revisit
61 robust combination which works in all cases. Will have to revisit
58 later.
62 later.
59
63
60 * IPython/genutils.py: remove isspace() function. We've dropped
64 * IPython/genutils.py: remove isspace() function. We've dropped
61 2.2 compatibility, so it's OK to use the string method.
65 2.2 compatibility, so it's OK to use the string method.
62
66
63 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
67 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
64
68
65 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
69 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
66 matching what NOT to autocall on, to include all python binary
70 matching what NOT to autocall on, to include all python binary
67 operators (including things like 'and', 'or', 'is' and 'in').
71 operators (including things like 'and', 'or', 'is' and 'in').
68 Prompted by a bug report on 'foo & bar', but I realized we had
72 Prompted by a bug report on 'foo & bar', but I realized we had
69 many more potential bug cases with other operators. The regexp is
73 many more potential bug cases with other operators. The regexp is
70 self.re_exclude_auto, it's fairly commented.
74 self.re_exclude_auto, it's fairly commented.
71
75
72 2006-01-12 Ville Vainio <vivainio@gmail.com>
76 2006-01-12 Ville Vainio <vivainio@gmail.com>
73
77
74 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
78 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
75 Prettified and hardened string/backslash quoting with ipsystem(),
79 Prettified and hardened string/backslash quoting with ipsystem(),
76 ipalias() and ipmagic(). Now even \ characters are passed to
80 ipalias() and ipmagic(). Now even \ characters are passed to
77 %magics, !shell escapes and aliases exactly as they are in the
81 %magics, !shell escapes and aliases exactly as they are in the
78 ipython command line. Should improve backslash experience,
82 ipython command line. Should improve backslash experience,
79 particularly in Windows (path delimiter for some commands that
83 particularly in Windows (path delimiter for some commands that
80 won't understand '/'), but Unix benefits as well (regexps). %cd
84 won't understand '/'), but Unix benefits as well (regexps). %cd
81 magic still doesn't support backslash path delimiters, though. Also
85 magic still doesn't support backslash path delimiters, though. Also
82 deleted all pretense of supporting multiline command strings in
86 deleted all pretense of supporting multiline command strings in
83 !system or %magic commands. Thanks to Jerry McRae for suggestions.
87 !system or %magic commands. Thanks to Jerry McRae for suggestions.
84
88
85 * doc/build_doc_instructions.txt added. Documentation on how to
89 * doc/build_doc_instructions.txt added. Documentation on how to
86 use doc/update_manual.py, added yesterday. Both files contributed
90 use doc/update_manual.py, added yesterday. Both files contributed
87 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
91 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
88 doc/*.sh for deprecation at a later date.
92 doc/*.sh for deprecation at a later date.
89
93
90 * /ipython.py Added ipython.py to root directory for
94 * /ipython.py Added ipython.py to root directory for
91 zero-installation (tar xzvf ipython.tgz; cd ipython; python
95 zero-installation (tar xzvf ipython.tgz; cd ipython; python
92 ipython.py) and development convenience (no need to kee doing
96 ipython.py) and development convenience (no need to kee doing
93 "setup.py install" between changes).
97 "setup.py install" between changes).
94
98
95 * Made ! and !! shell escapes work (again) in multiline expressions:
99 * Made ! and !! shell escapes work (again) in multiline expressions:
96 if 1:
100 if 1:
97 !ls
101 !ls
98 !!ls
102 !!ls
99
103
100 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
104 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
101
105
102 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
106 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
103 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
107 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
104 module in case-insensitive installation. Was causing crashes
108 module in case-insensitive installation. Was causing crashes
105 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
109 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
106
110
107 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
111 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
108 <marienz-AT-gentoo.org>, closes
112 <marienz-AT-gentoo.org>, closes
109 http://www.scipy.net/roundup/ipython/issue51.
113 http://www.scipy.net/roundup/ipython/issue51.
110
114
111 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
115 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
112
116
113 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
117 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
114 problem of excessive CPU usage under *nix and keyboard lag under
118 problem of excessive CPU usage under *nix and keyboard lag under
115 win32.
119 win32.
116
120
117 2006-01-10 *** Released version 0.7.0
121 2006-01-10 *** Released version 0.7.0
118
122
119 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
123 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
120
124
121 * IPython/Release.py (revision): tag version number to 0.7.0,
125 * IPython/Release.py (revision): tag version number to 0.7.0,
122 ready for release.
126 ready for release.
123
127
124 * IPython/Magic.py (magic_edit): Add print statement to %edit so
128 * IPython/Magic.py (magic_edit): Add print statement to %edit so
125 it informs the user of the name of the temp. file used. This can
129 it informs the user of the name of the temp. file used. This can
126 help if you decide later to reuse that same file, so you know
130 help if you decide later to reuse that same file, so you know
127 where to copy the info from.
131 where to copy the info from.
128
132
129 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
133 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
130
134
131 * setup_bdist_egg.py: little script to build an egg. Added
135 * setup_bdist_egg.py: little script to build an egg. Added
132 support in the release tools as well.
136 support in the release tools as well.
133
137
134 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
138 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
135
139
136 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
140 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
137 version selection (new -wxversion command line and ipythonrc
141 version selection (new -wxversion command line and ipythonrc
138 parameter). Patch contributed by Arnd Baecker
142 parameter). Patch contributed by Arnd Baecker
139 <arnd.baecker-AT-web.de>.
143 <arnd.baecker-AT-web.de>.
140
144
141 * IPython/iplib.py (embed_mainloop): fix tab-completion in
145 * IPython/iplib.py (embed_mainloop): fix tab-completion in
142 embedded instances, for variables defined at the interactive
146 embedded instances, for variables defined at the interactive
143 prompt of the embedded ipython. Reported by Arnd.
147 prompt of the embedded ipython. Reported by Arnd.
144
148
145 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
149 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
146 it can be used as a (stateful) toggle, or with a direct parameter.
150 it can be used as a (stateful) toggle, or with a direct parameter.
147
151
148 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
152 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
149 could be triggered in certain cases and cause the traceback
153 could be triggered in certain cases and cause the traceback
150 printer not to work.
154 printer not to work.
151
155
152 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
156 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
153
157
154 * IPython/iplib.py (_should_recompile): Small fix, closes
158 * IPython/iplib.py (_should_recompile): Small fix, closes
155 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
159 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
156
160
157 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
161 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
158
162
159 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
163 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
160 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
164 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
161 Moad for help with tracking it down.
165 Moad for help with tracking it down.
162
166
163 * IPython/iplib.py (handle_auto): fix autocall handling for
167 * IPython/iplib.py (handle_auto): fix autocall handling for
164 objects which support BOTH __getitem__ and __call__ (so that f [x]
168 objects which support BOTH __getitem__ and __call__ (so that f [x]
165 is left alone, instead of becoming f([x]) automatically).
169 is left alone, instead of becoming f([x]) automatically).
166
170
167 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
171 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
168 Ville's patch.
172 Ville's patch.
169
173
170 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
174 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
171
175
172 * IPython/iplib.py (handle_auto): changed autocall semantics to
176 * IPython/iplib.py (handle_auto): changed autocall semantics to
173 include 'smart' mode, where the autocall transformation is NOT
177 include 'smart' mode, where the autocall transformation is NOT
174 applied if there are no arguments on the line. This allows you to
178 applied if there are no arguments on the line. This allows you to
175 just type 'foo' if foo is a callable to see its internal form,
179 just type 'foo' if foo is a callable to see its internal form,
176 instead of having it called with no arguments (typically a
180 instead of having it called with no arguments (typically a
177 mistake). The old 'full' autocall still exists: for that, you
181 mistake). The old 'full' autocall still exists: for that, you
178 need to set the 'autocall' parameter to 2 in your ipythonrc file.
182 need to set the 'autocall' parameter to 2 in your ipythonrc file.
179
183
180 * IPython/completer.py (Completer.attr_matches): add
184 * IPython/completer.py (Completer.attr_matches): add
181 tab-completion support for Enthoughts' traits. After a report by
185 tab-completion support for Enthoughts' traits. After a report by
182 Arnd and a patch by Prabhu.
186 Arnd and a patch by Prabhu.
183
187
184 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
188 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
185
189
186 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
190 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
187 Schmolck's patch to fix inspect.getinnerframes().
191 Schmolck's patch to fix inspect.getinnerframes().
188
192
189 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
193 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
190 for embedded instances, regarding handling of namespaces and items
194 for embedded instances, regarding handling of namespaces and items
191 added to the __builtin__ one. Multiple embedded instances and
195 added to the __builtin__ one. Multiple embedded instances and
192 recursive embeddings should work better now (though I'm not sure
196 recursive embeddings should work better now (though I'm not sure
193 I've got all the corner cases fixed, that code is a bit of a brain
197 I've got all the corner cases fixed, that code is a bit of a brain
194 twister).
198 twister).
195
199
196 * IPython/Magic.py (magic_edit): added support to edit in-memory
200 * IPython/Magic.py (magic_edit): added support to edit in-memory
197 macros (automatically creates the necessary temp files). %edit
201 macros (automatically creates the necessary temp files). %edit
198 also doesn't return the file contents anymore, it's just noise.
202 also doesn't return the file contents anymore, it's just noise.
199
203
200 * IPython/completer.py (Completer.attr_matches): revert change to
204 * IPython/completer.py (Completer.attr_matches): revert change to
201 complete only on attributes listed in __all__. I realized it
205 complete only on attributes listed in __all__. I realized it
202 cripples the tab-completion system as a tool for exploring the
206 cripples the tab-completion system as a tool for exploring the
203 internals of unknown libraries (it renders any non-__all__
207 internals of unknown libraries (it renders any non-__all__
204 attribute off-limits). I got bit by this when trying to see
208 attribute off-limits). I got bit by this when trying to see
205 something inside the dis module.
209 something inside the dis module.
206
210
207 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
211 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
208
212
209 * IPython/iplib.py (InteractiveShell.__init__): add .meta
213 * IPython/iplib.py (InteractiveShell.__init__): add .meta
210 namespace for users and extension writers to hold data in. This
214 namespace for users and extension writers to hold data in. This
211 follows the discussion in
215 follows the discussion in
212 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
216 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
213
217
214 * IPython/completer.py (IPCompleter.complete): small patch to help
218 * IPython/completer.py (IPCompleter.complete): small patch to help
215 tab-completion under Emacs, after a suggestion by John Barnard
219 tab-completion under Emacs, after a suggestion by John Barnard
216 <barnarj-AT-ccf.org>.
220 <barnarj-AT-ccf.org>.
217
221
218 * IPython/Magic.py (Magic.extract_input_slices): added support for
222 * IPython/Magic.py (Magic.extract_input_slices): added support for
219 the slice notation in magics to use N-M to represent numbers N...M
223 the slice notation in magics to use N-M to represent numbers N...M
220 (closed endpoints). This is used by %macro and %save.
224 (closed endpoints). This is used by %macro and %save.
221
225
222 * IPython/completer.py (Completer.attr_matches): for modules which
226 * IPython/completer.py (Completer.attr_matches): for modules which
223 define __all__, complete only on those. After a patch by Jeffrey
227 define __all__, complete only on those. After a patch by Jeffrey
224 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
228 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
225 speed up this routine.
229 speed up this routine.
226
230
227 * IPython/Logger.py (Logger.log): fix a history handling bug. I
231 * IPython/Logger.py (Logger.log): fix a history handling bug. I
228 don't know if this is the end of it, but the behavior now is
232 don't know if this is the end of it, but the behavior now is
229 certainly much more correct. Note that coupled with macros,
233 certainly much more correct. Note that coupled with macros,
230 slightly surprising (at first) behavior may occur: a macro will in
234 slightly surprising (at first) behavior may occur: a macro will in
231 general expand to multiple lines of input, so upon exiting, the
235 general expand to multiple lines of input, so upon exiting, the
232 in/out counters will both be bumped by the corresponding amount
236 in/out counters will both be bumped by the corresponding amount
233 (as if the macro's contents had been typed interactively). Typing
237 (as if the macro's contents had been typed interactively). Typing
234 %hist will reveal the intermediate (silently processed) lines.
238 %hist will reveal the intermediate (silently processed) lines.
235
239
236 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
240 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
237 pickle to fail (%run was overwriting __main__ and not restoring
241 pickle to fail (%run was overwriting __main__ and not restoring
238 it, but pickle relies on __main__ to operate).
242 it, but pickle relies on __main__ to operate).
239
243
240 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
244 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
241 using properties, but forgot to make the main InteractiveShell
245 using properties, but forgot to make the main InteractiveShell
242 class a new-style class. Properties fail silently, and
246 class a new-style class. Properties fail silently, and
243 misteriously, with old-style class (getters work, but
247 misteriously, with old-style class (getters work, but
244 setters don't do anything).
248 setters don't do anything).
245
249
246 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
250 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
247
251
248 * IPython/Magic.py (magic_history): fix history reporting bug (I
252 * IPython/Magic.py (magic_history): fix history reporting bug (I
249 know some nasties are still there, I just can't seem to find a
253 know some nasties are still there, I just can't seem to find a
250 reproducible test case to track them down; the input history is
254 reproducible test case to track them down; the input history is
251 falling out of sync...)
255 falling out of sync...)
252
256
253 * IPython/iplib.py (handle_shell_escape): fix bug where both
257 * IPython/iplib.py (handle_shell_escape): fix bug where both
254 aliases and system accesses where broken for indented code (such
258 aliases and system accesses where broken for indented code (such
255 as loops).
259 as loops).
256
260
257 * IPython/genutils.py (shell): fix small but critical bug for
261 * IPython/genutils.py (shell): fix small but critical bug for
258 win32 system access.
262 win32 system access.
259
263
260 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
264 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
261
265
262 * IPython/iplib.py (showtraceback): remove use of the
266 * IPython/iplib.py (showtraceback): remove use of the
263 sys.last_{type/value/traceback} structures, which are non
267 sys.last_{type/value/traceback} structures, which are non
264 thread-safe.
268 thread-safe.
265 (_prefilter): change control flow to ensure that we NEVER
269 (_prefilter): change control flow to ensure that we NEVER
266 introspect objects when autocall is off. This will guarantee that
270 introspect objects when autocall is off. This will guarantee that
267 having an input line of the form 'x.y', where access to attribute
271 having an input line of the form 'x.y', where access to attribute
268 'y' has side effects, doesn't trigger the side effect TWICE. It
272 'y' has side effects, doesn't trigger the side effect TWICE. It
269 is important to note that, with autocall on, these side effects
273 is important to note that, with autocall on, these side effects
270 can still happen.
274 can still happen.
271 (ipsystem): new builtin, to complete the ip{magic/alias/system}
275 (ipsystem): new builtin, to complete the ip{magic/alias/system}
272 trio. IPython offers these three kinds of special calls which are
276 trio. IPython offers these three kinds of special calls which are
273 not python code, and it's a good thing to have their call method
277 not python code, and it's a good thing to have their call method
274 be accessible as pure python functions (not just special syntax at
278 be accessible as pure python functions (not just special syntax at
275 the command line). It gives us a better internal implementation
279 the command line). It gives us a better internal implementation
276 structure, as well as exposing these for user scripting more
280 structure, as well as exposing these for user scripting more
277 cleanly.
281 cleanly.
278
282
279 * IPython/macro.py (Macro.__init__): moved macros to a standalone
283 * IPython/macro.py (Macro.__init__): moved macros to a standalone
280 file. Now that they'll be more likely to be used with the
284 file. Now that they'll be more likely to be used with the
281 persistance system (%store), I want to make sure their module path
285 persistance system (%store), I want to make sure their module path
282 doesn't change in the future, so that we don't break things for
286 doesn't change in the future, so that we don't break things for
283 users' persisted data.
287 users' persisted data.
284
288
285 * IPython/iplib.py (autoindent_update): move indentation
289 * IPython/iplib.py (autoindent_update): move indentation
286 management into the _text_ processing loop, not the keyboard
290 management into the _text_ processing loop, not the keyboard
287 interactive one. This is necessary to correctly process non-typed
291 interactive one. This is necessary to correctly process non-typed
288 multiline input (such as macros).
292 multiline input (such as macros).
289
293
290 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
294 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
291 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
295 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
292 which was producing problems in the resulting manual.
296 which was producing problems in the resulting manual.
293 (magic_whos): improve reporting of instances (show their class,
297 (magic_whos): improve reporting of instances (show their class,
294 instead of simply printing 'instance' which isn't terribly
298 instead of simply printing 'instance' which isn't terribly
295 informative).
299 informative).
296
300
297 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
301 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
298 (minor mods) to support network shares under win32.
302 (minor mods) to support network shares under win32.
299
303
300 * IPython/winconsole.py (get_console_size): add new winconsole
304 * IPython/winconsole.py (get_console_size): add new winconsole
301 module and fixes to page_dumb() to improve its behavior under
305 module and fixes to page_dumb() to improve its behavior under
302 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
306 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
303
307
304 * IPython/Magic.py (Macro): simplified Macro class to just
308 * IPython/Magic.py (Macro): simplified Macro class to just
305 subclass list. We've had only 2.2 compatibility for a very long
309 subclass list. We've had only 2.2 compatibility for a very long
306 time, yet I was still avoiding subclassing the builtin types. No
310 time, yet I was still avoiding subclassing the builtin types. No
307 more (I'm also starting to use properties, though I won't shift to
311 more (I'm also starting to use properties, though I won't shift to
308 2.3-specific features quite yet).
312 2.3-specific features quite yet).
309 (magic_store): added Ville's patch for lightweight variable
313 (magic_store): added Ville's patch for lightweight variable
310 persistence, after a request on the user list by Matt Wilkie
314 persistence, after a request on the user list by Matt Wilkie
311 <maphew-AT-gmail.com>. The new %store magic's docstring has full
315 <maphew-AT-gmail.com>. The new %store magic's docstring has full
312 details.
316 details.
313
317
314 * IPython/iplib.py (InteractiveShell.post_config_initialization):
318 * IPython/iplib.py (InteractiveShell.post_config_initialization):
315 changed the default logfile name from 'ipython.log' to
319 changed the default logfile name from 'ipython.log' to
316 'ipython_log.py'. These logs are real python files, and now that
320 'ipython_log.py'. These logs are real python files, and now that
317 we have much better multiline support, people are more likely to
321 we have much better multiline support, people are more likely to
318 want to use them as such. Might as well name them correctly.
322 want to use them as such. Might as well name them correctly.
319
323
320 * IPython/Magic.py: substantial cleanup. While we can't stop
324 * IPython/Magic.py: substantial cleanup. While we can't stop
321 using magics as mixins, due to the existing customizations 'out
325 using magics as mixins, due to the existing customizations 'out
322 there' which rely on the mixin naming conventions, at least I
326 there' which rely on the mixin naming conventions, at least I
323 cleaned out all cross-class name usage. So once we are OK with
327 cleaned out all cross-class name usage. So once we are OK with
324 breaking compatibility, the two systems can be separated.
328 breaking compatibility, the two systems can be separated.
325
329
326 * IPython/Logger.py: major cleanup. This one is NOT a mixin
330 * IPython/Logger.py: major cleanup. This one is NOT a mixin
327 anymore, and the class is a fair bit less hideous as well. New
331 anymore, and the class is a fair bit less hideous as well. New
328 features were also introduced: timestamping of input, and logging
332 features were also introduced: timestamping of input, and logging
329 of output results. These are user-visible with the -t and -o
333 of output results. These are user-visible with the -t and -o
330 options to %logstart. Closes
334 options to %logstart. Closes
331 http://www.scipy.net/roundup/ipython/issue11 and a request by
335 http://www.scipy.net/roundup/ipython/issue11 and a request by
332 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
336 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
333
337
334 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
338 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
335
339
336 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
340 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
337 better hadnle backslashes in paths. See the thread 'More Windows
341 better hadnle backslashes in paths. See the thread 'More Windows
338 questions part 2 - \/ characters revisited' on the iypthon user
342 questions part 2 - \/ characters revisited' on the iypthon user
339 list:
343 list:
340 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
344 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
341
345
342 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
346 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
343
347
344 (InteractiveShell.__init__): change threaded shells to not use the
348 (InteractiveShell.__init__): change threaded shells to not use the
345 ipython crash handler. This was causing more problems than not,
349 ipython crash handler. This was causing more problems than not,
346 as exceptions in the main thread (GUI code, typically) would
350 as exceptions in the main thread (GUI code, typically) would
347 always show up as a 'crash', when they really weren't.
351 always show up as a 'crash', when they really weren't.
348
352
349 The colors and exception mode commands (%colors/%xmode) have been
353 The colors and exception mode commands (%colors/%xmode) have been
350 synchronized to also take this into account, so users can get
354 synchronized to also take this into account, so users can get
351 verbose exceptions for their threaded code as well. I also added
355 verbose exceptions for their threaded code as well. I also added
352 support for activating pdb inside this exception handler as well,
356 support for activating pdb inside this exception handler as well,
353 so now GUI authors can use IPython's enhanced pdb at runtime.
357 so now GUI authors can use IPython's enhanced pdb at runtime.
354
358
355 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
359 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
356 true by default, and add it to the shipped ipythonrc file. Since
360 true by default, and add it to the shipped ipythonrc file. Since
357 this asks the user before proceeding, I think it's OK to make it
361 this asks the user before proceeding, I think it's OK to make it
358 true by default.
362 true by default.
359
363
360 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
364 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
361 of the previous special-casing of input in the eval loop. I think
365 of the previous special-casing of input in the eval loop. I think
362 this is cleaner, as they really are commands and shouldn't have
366 this is cleaner, as they really are commands and shouldn't have
363 a special role in the middle of the core code.
367 a special role in the middle of the core code.
364
368
365 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
369 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
366
370
367 * IPython/iplib.py (edit_syntax_error): added support for
371 * IPython/iplib.py (edit_syntax_error): added support for
368 automatically reopening the editor if the file had a syntax error
372 automatically reopening the editor if the file had a syntax error
369 in it. Thanks to scottt who provided the patch at:
373 in it. Thanks to scottt who provided the patch at:
370 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
374 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
371 version committed).
375 version committed).
372
376
373 * IPython/iplib.py (handle_normal): add suport for multi-line
377 * IPython/iplib.py (handle_normal): add suport for multi-line
374 input with emtpy lines. This fixes
378 input with emtpy lines. This fixes
375 http://www.scipy.net/roundup/ipython/issue43 and a similar
379 http://www.scipy.net/roundup/ipython/issue43 and a similar
376 discussion on the user list.
380 discussion on the user list.
377
381
378 WARNING: a behavior change is necessarily introduced to support
382 WARNING: a behavior change is necessarily introduced to support
379 blank lines: now a single blank line with whitespace does NOT
383 blank lines: now a single blank line with whitespace does NOT
380 break the input loop, which means that when autoindent is on, by
384 break the input loop, which means that when autoindent is on, by
381 default hitting return on the next (indented) line does NOT exit.
385 default hitting return on the next (indented) line does NOT exit.
382
386
383 Instead, to exit a multiline input you can either have:
387 Instead, to exit a multiline input you can either have:
384
388
385 - TWO whitespace lines (just hit return again), or
389 - TWO whitespace lines (just hit return again), or
386 - a single whitespace line of a different length than provided
390 - a single whitespace line of a different length than provided
387 by the autoindent (add or remove a space).
391 by the autoindent (add or remove a space).
388
392
389 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
393 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
390 module to better organize all readline-related functionality.
394 module to better organize all readline-related functionality.
391 I've deleted FlexCompleter and put all completion clases here.
395 I've deleted FlexCompleter and put all completion clases here.
392
396
393 * IPython/iplib.py (raw_input): improve indentation management.
397 * IPython/iplib.py (raw_input): improve indentation management.
394 It is now possible to paste indented code with autoindent on, and
398 It is now possible to paste indented code with autoindent on, and
395 the code is interpreted correctly (though it still looks bad on
399 the code is interpreted correctly (though it still looks bad on
396 screen, due to the line-oriented nature of ipython).
400 screen, due to the line-oriented nature of ipython).
397 (MagicCompleter.complete): change behavior so that a TAB key on an
401 (MagicCompleter.complete): change behavior so that a TAB key on an
398 otherwise empty line actually inserts a tab, instead of completing
402 otherwise empty line actually inserts a tab, instead of completing
399 on the entire global namespace. This makes it easier to use the
403 on the entire global namespace. This makes it easier to use the
400 TAB key for indentation. After a request by Hans Meine
404 TAB key for indentation. After a request by Hans Meine
401 <hans_meine-AT-gmx.net>
405 <hans_meine-AT-gmx.net>
402 (_prefilter): add support so that typing plain 'exit' or 'quit'
406 (_prefilter): add support so that typing plain 'exit' or 'quit'
403 does a sensible thing. Originally I tried to deviate as little as
407 does a sensible thing. Originally I tried to deviate as little as
404 possible from the default python behavior, but even that one may
408 possible from the default python behavior, but even that one may
405 change in this direction (thread on python-dev to that effect).
409 change in this direction (thread on python-dev to that effect).
406 Regardless, ipython should do the right thing even if CPython's
410 Regardless, ipython should do the right thing even if CPython's
407 '>>>' prompt doesn't.
411 '>>>' prompt doesn't.
408 (InteractiveShell): removed subclassing code.InteractiveConsole
412 (InteractiveShell): removed subclassing code.InteractiveConsole
409 class. By now we'd overridden just about all of its methods: I've
413 class. By now we'd overridden just about all of its methods: I've
410 copied the remaining two over, and now ipython is a standalone
414 copied the remaining two over, and now ipython is a standalone
411 class. This will provide a clearer picture for the chainsaw
415 class. This will provide a clearer picture for the chainsaw
412 branch refactoring.
416 branch refactoring.
413
417
414 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
418 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
415
419
416 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
420 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
417 failures for objects which break when dir() is called on them.
421 failures for objects which break when dir() is called on them.
418
422
419 * IPython/FlexCompleter.py (Completer.__init__): Added support for
423 * IPython/FlexCompleter.py (Completer.__init__): Added support for
420 distinct local and global namespaces in the completer API. This
424 distinct local and global namespaces in the completer API. This
421 change allows us top properly handle completion with distinct
425 change allows us top properly handle completion with distinct
422 scopes, including in embedded instances (this had never really
426 scopes, including in embedded instances (this had never really
423 worked correctly).
427 worked correctly).
424
428
425 Note: this introduces a change in the constructor for
429 Note: this introduces a change in the constructor for
426 MagicCompleter, as a new global_namespace parameter is now the
430 MagicCompleter, as a new global_namespace parameter is now the
427 second argument (the others were bumped one position).
431 second argument (the others were bumped one position).
428
432
429 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
433 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
430
434
431 * IPython/iplib.py (embed_mainloop): fix tab-completion in
435 * IPython/iplib.py (embed_mainloop): fix tab-completion in
432 embedded instances (which can be done now thanks to Vivian's
436 embedded instances (which can be done now thanks to Vivian's
433 frame-handling fixes for pdb).
437 frame-handling fixes for pdb).
434 (InteractiveShell.__init__): Fix namespace handling problem in
438 (InteractiveShell.__init__): Fix namespace handling problem in
435 embedded instances. We were overwriting __main__ unconditionally,
439 embedded instances. We were overwriting __main__ unconditionally,
436 and this should only be done for 'full' (non-embedded) IPython;
440 and this should only be done for 'full' (non-embedded) IPython;
437 embedded instances must respect the caller's __main__. Thanks to
441 embedded instances must respect the caller's __main__. Thanks to
438 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
442 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
439
443
440 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
444 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
441
445
442 * setup.py: added download_url to setup(). This registers the
446 * setup.py: added download_url to setup(). This registers the
443 download address at PyPI, which is not only useful to humans
447 download address at PyPI, which is not only useful to humans
444 browsing the site, but is also picked up by setuptools (the Eggs
448 browsing the site, but is also picked up by setuptools (the Eggs
445 machinery). Thanks to Ville and R. Kern for the info/discussion
449 machinery). Thanks to Ville and R. Kern for the info/discussion
446 on this.
450 on this.
447
451
448 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
452 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
449
453
450 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
454 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
451 This brings a lot of nice functionality to the pdb mode, which now
455 This brings a lot of nice functionality to the pdb mode, which now
452 has tab-completion, syntax highlighting, and better stack handling
456 has tab-completion, syntax highlighting, and better stack handling
453 than before. Many thanks to Vivian De Smedt
457 than before. Many thanks to Vivian De Smedt
454 <vivian-AT-vdesmedt.com> for the original patches.
458 <vivian-AT-vdesmedt.com> for the original patches.
455
459
456 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
460 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
457
461
458 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
462 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
459 sequence to consistently accept the banner argument. The
463 sequence to consistently accept the banner argument. The
460 inconsistency was tripping SAGE, thanks to Gary Zablackis
464 inconsistency was tripping SAGE, thanks to Gary Zablackis
461 <gzabl-AT-yahoo.com> for the report.
465 <gzabl-AT-yahoo.com> for the report.
462
466
463 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
467 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
464
468
465 * IPython/iplib.py (InteractiveShell.post_config_initialization):
469 * IPython/iplib.py (InteractiveShell.post_config_initialization):
466 Fix bug where a naked 'alias' call in the ipythonrc file would
470 Fix bug where a naked 'alias' call in the ipythonrc file would
467 cause a crash. Bug reported by Jorgen Stenarson.
471 cause a crash. Bug reported by Jorgen Stenarson.
468
472
469 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
473 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
470
474
471 * IPython/ipmaker.py (make_IPython): cleanups which should improve
475 * IPython/ipmaker.py (make_IPython): cleanups which should improve
472 startup time.
476 startup time.
473
477
474 * IPython/iplib.py (runcode): my globals 'fix' for embedded
478 * IPython/iplib.py (runcode): my globals 'fix' for embedded
475 instances had introduced a bug with globals in normal code. Now
479 instances had introduced a bug with globals in normal code. Now
476 it's working in all cases.
480 it's working in all cases.
477
481
478 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
482 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
479 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
483 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
480 has been introduced to set the default case sensitivity of the
484 has been introduced to set the default case sensitivity of the
481 searches. Users can still select either mode at runtime on a
485 searches. Users can still select either mode at runtime on a
482 per-search basis.
486 per-search basis.
483
487
484 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
488 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
485
489
486 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
490 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
487 attributes in wildcard searches for subclasses. Modified version
491 attributes in wildcard searches for subclasses. Modified version
488 of a patch by Jorgen.
492 of a patch by Jorgen.
489
493
490 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
494 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
491
495
492 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
496 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
493 embedded instances. I added a user_global_ns attribute to the
497 embedded instances. I added a user_global_ns attribute to the
494 InteractiveShell class to handle this.
498 InteractiveShell class to handle this.
495
499
496 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
500 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
497
501
498 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
502 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
499 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
503 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
500 (reported under win32, but may happen also in other platforms).
504 (reported under win32, but may happen also in other platforms).
501 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
505 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
502
506
503 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
507 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
504
508
505 * IPython/Magic.py (magic_psearch): new support for wildcard
509 * IPython/Magic.py (magic_psearch): new support for wildcard
506 patterns. Now, typing ?a*b will list all names which begin with a
510 patterns. Now, typing ?a*b will list all names which begin with a
507 and end in b, for example. The %psearch magic has full
511 and end in b, for example. The %psearch magic has full
508 docstrings. Many thanks to Jörgen Stenarson
512 docstrings. Many thanks to Jörgen Stenarson
509 <jorgen.stenarson-AT-bostream.nu>, author of the patches
513 <jorgen.stenarson-AT-bostream.nu>, author of the patches
510 implementing this functionality.
514 implementing this functionality.
511
515
512 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
516 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
513
517
514 * Manual: fixed long-standing annoyance of double-dashes (as in
518 * Manual: fixed long-standing annoyance of double-dashes (as in
515 --prefix=~, for example) being stripped in the HTML version. This
519 --prefix=~, for example) being stripped in the HTML version. This
516 is a latex2html bug, but a workaround was provided. Many thanks
520 is a latex2html bug, but a workaround was provided. Many thanks
517 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
521 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
518 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
522 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
519 rolling. This seemingly small issue had tripped a number of users
523 rolling. This seemingly small issue had tripped a number of users
520 when first installing, so I'm glad to see it gone.
524 when first installing, so I'm glad to see it gone.
521
525
522 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
526 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
523
527
524 * IPython/Extensions/numeric_formats.py: fix missing import,
528 * IPython/Extensions/numeric_formats.py: fix missing import,
525 reported by Stephen Walton.
529 reported by Stephen Walton.
526
530
527 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
531 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
528
532
529 * IPython/demo.py: finish demo module, fully documented now.
533 * IPython/demo.py: finish demo module, fully documented now.
530
534
531 * IPython/genutils.py (file_read): simple little utility to read a
535 * IPython/genutils.py (file_read): simple little utility to read a
532 file and ensure it's closed afterwards.
536 file and ensure it's closed afterwards.
533
537
534 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
538 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
535
539
536 * IPython/demo.py (Demo.__init__): added support for individually
540 * IPython/demo.py (Demo.__init__): added support for individually
537 tagging blocks for automatic execution.
541 tagging blocks for automatic execution.
538
542
539 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
543 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
540 syntax-highlighted python sources, requested by John.
544 syntax-highlighted python sources, requested by John.
541
545
542 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
546 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
543
547
544 * IPython/demo.py (Demo.again): fix bug where again() blocks after
548 * IPython/demo.py (Demo.again): fix bug where again() blocks after
545 finishing.
549 finishing.
546
550
547 * IPython/genutils.py (shlex_split): moved from Magic to here,
551 * IPython/genutils.py (shlex_split): moved from Magic to here,
548 where all 2.2 compatibility stuff lives. I needed it for demo.py.
552 where all 2.2 compatibility stuff lives. I needed it for demo.py.
549
553
550 * IPython/demo.py (Demo.__init__): added support for silent
554 * IPython/demo.py (Demo.__init__): added support for silent
551 blocks, improved marks as regexps, docstrings written.
555 blocks, improved marks as regexps, docstrings written.
552 (Demo.__init__): better docstring, added support for sys.argv.
556 (Demo.__init__): better docstring, added support for sys.argv.
553
557
554 * IPython/genutils.py (marquee): little utility used by the demo
558 * IPython/genutils.py (marquee): little utility used by the demo
555 code, handy in general.
559 code, handy in general.
556
560
557 * IPython/demo.py (Demo.__init__): new class for interactive
561 * IPython/demo.py (Demo.__init__): new class for interactive
558 demos. Not documented yet, I just wrote it in a hurry for
562 demos. Not documented yet, I just wrote it in a hurry for
559 scipy'05. Will docstring later.
563 scipy'05. Will docstring later.
560
564
561 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
565 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
562
566
563 * IPython/Shell.py (sigint_handler): Drastic simplification which
567 * IPython/Shell.py (sigint_handler): Drastic simplification which
564 also seems to make Ctrl-C work correctly across threads! This is
568 also seems to make Ctrl-C work correctly across threads! This is
565 so simple, that I can't beleive I'd missed it before. Needs more
569 so simple, that I can't beleive I'd missed it before. Needs more
566 testing, though.
570 testing, though.
567 (KBINT): Never mind, revert changes. I'm sure I'd tried something
571 (KBINT): Never mind, revert changes. I'm sure I'd tried something
568 like this before...
572 like this before...
569
573
570 * IPython/genutils.py (get_home_dir): add protection against
574 * IPython/genutils.py (get_home_dir): add protection against
571 non-dirs in win32 registry.
575 non-dirs in win32 registry.
572
576
573 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
577 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
574 bug where dict was mutated while iterating (pysh crash).
578 bug where dict was mutated while iterating (pysh crash).
575
579
576 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
580 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
577
581
578 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
582 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
579 spurious newlines added by this routine. After a report by
583 spurious newlines added by this routine. After a report by
580 F. Mantegazza.
584 F. Mantegazza.
581
585
582 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
586 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
583
587
584 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
588 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
585 calls. These were a leftover from the GTK 1.x days, and can cause
589 calls. These were a leftover from the GTK 1.x days, and can cause
586 problems in certain cases (after a report by John Hunter).
590 problems in certain cases (after a report by John Hunter).
587
591
588 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
592 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
589 os.getcwd() fails at init time. Thanks to patch from David Remahl
593 os.getcwd() fails at init time. Thanks to patch from David Remahl
590 <chmod007-AT-mac.com>.
594 <chmod007-AT-mac.com>.
591 (InteractiveShell.__init__): prevent certain special magics from
595 (InteractiveShell.__init__): prevent certain special magics from
592 being shadowed by aliases. Closes
596 being shadowed by aliases. Closes
593 http://www.scipy.net/roundup/ipython/issue41.
597 http://www.scipy.net/roundup/ipython/issue41.
594
598
595 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
599 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
596
600
597 * IPython/iplib.py (InteractiveShell.complete): Added new
601 * IPython/iplib.py (InteractiveShell.complete): Added new
598 top-level completion method to expose the completion mechanism
602 top-level completion method to expose the completion mechanism
599 beyond readline-based environments.
603 beyond readline-based environments.
600
604
601 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
605 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
602
606
603 * tools/ipsvnc (svnversion): fix svnversion capture.
607 * tools/ipsvnc (svnversion): fix svnversion capture.
604
608
605 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
609 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
606 attribute to self, which was missing. Before, it was set by a
610 attribute to self, which was missing. Before, it was set by a
607 routine which in certain cases wasn't being called, so the
611 routine which in certain cases wasn't being called, so the
608 instance could end up missing the attribute. This caused a crash.
612 instance could end up missing the attribute. This caused a crash.
609 Closes http://www.scipy.net/roundup/ipython/issue40.
613 Closes http://www.scipy.net/roundup/ipython/issue40.
610
614
611 2005-08-16 Fernando Perez <fperez@colorado.edu>
615 2005-08-16 Fernando Perez <fperez@colorado.edu>
612
616
613 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
617 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
614 contains non-string attribute. Closes
618 contains non-string attribute. Closes
615 http://www.scipy.net/roundup/ipython/issue38.
619 http://www.scipy.net/roundup/ipython/issue38.
616
620
617 2005-08-14 Fernando Perez <fperez@colorado.edu>
621 2005-08-14 Fernando Perez <fperez@colorado.edu>
618
622
619 * tools/ipsvnc: Minor improvements, to add changeset info.
623 * tools/ipsvnc: Minor improvements, to add changeset info.
620
624
621 2005-08-12 Fernando Perez <fperez@colorado.edu>
625 2005-08-12 Fernando Perez <fperez@colorado.edu>
622
626
623 * IPython/iplib.py (runsource): remove self.code_to_run_src
627 * IPython/iplib.py (runsource): remove self.code_to_run_src
624 attribute. I realized this is nothing more than
628 attribute. I realized this is nothing more than
625 '\n'.join(self.buffer), and having the same data in two different
629 '\n'.join(self.buffer), and having the same data in two different
626 places is just asking for synchronization bugs. This may impact
630 places is just asking for synchronization bugs. This may impact
627 people who have custom exception handlers, so I need to warn
631 people who have custom exception handlers, so I need to warn
628 ipython-dev about it (F. Mantegazza may use them).
632 ipython-dev about it (F. Mantegazza may use them).
629
633
630 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
634 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
631
635
632 * IPython/genutils.py: fix 2.2 compatibility (generators)
636 * IPython/genutils.py: fix 2.2 compatibility (generators)
633
637
634 2005-07-18 Fernando Perez <fperez@colorado.edu>
638 2005-07-18 Fernando Perez <fperez@colorado.edu>
635
639
636 * IPython/genutils.py (get_home_dir): fix to help users with
640 * IPython/genutils.py (get_home_dir): fix to help users with
637 invalid $HOME under win32.
641 invalid $HOME under win32.
638
642
639 2005-07-17 Fernando Perez <fperez@colorado.edu>
643 2005-07-17 Fernando Perez <fperez@colorado.edu>
640
644
641 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
645 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
642 some old hacks and clean up a bit other routines; code should be
646 some old hacks and clean up a bit other routines; code should be
643 simpler and a bit faster.
647 simpler and a bit faster.
644
648
645 * IPython/iplib.py (interact): removed some last-resort attempts
649 * IPython/iplib.py (interact): removed some last-resort attempts
646 to survive broken stdout/stderr. That code was only making it
650 to survive broken stdout/stderr. That code was only making it
647 harder to abstract out the i/o (necessary for gui integration),
651 harder to abstract out the i/o (necessary for gui integration),
648 and the crashes it could prevent were extremely rare in practice
652 and the crashes it could prevent were extremely rare in practice
649 (besides being fully user-induced in a pretty violent manner).
653 (besides being fully user-induced in a pretty violent manner).
650
654
651 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
655 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
652 Nothing major yet, but the code is simpler to read; this should
656 Nothing major yet, but the code is simpler to read; this should
653 make it easier to do more serious modifications in the future.
657 make it easier to do more serious modifications in the future.
654
658
655 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
659 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
656 which broke in .15 (thanks to a report by Ville).
660 which broke in .15 (thanks to a report by Ville).
657
661
658 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
662 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
659 be quite correct, I know next to nothing about unicode). This
663 be quite correct, I know next to nothing about unicode). This
660 will allow unicode strings to be used in prompts, amongst other
664 will allow unicode strings to be used in prompts, amongst other
661 cases. It also will prevent ipython from crashing when unicode
665 cases. It also will prevent ipython from crashing when unicode
662 shows up unexpectedly in many places. If ascii encoding fails, we
666 shows up unexpectedly in many places. If ascii encoding fails, we
663 assume utf_8. Currently the encoding is not a user-visible
667 assume utf_8. Currently the encoding is not a user-visible
664 setting, though it could be made so if there is demand for it.
668 setting, though it could be made so if there is demand for it.
665
669
666 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
670 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
667
671
668 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
672 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
669
673
670 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
674 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
671
675
672 * IPython/genutils.py: Add 2.2 compatibility here, so all other
676 * IPython/genutils.py: Add 2.2 compatibility here, so all other
673 code can work transparently for 2.2/2.3.
677 code can work transparently for 2.2/2.3.
674
678
675 2005-07-16 Fernando Perez <fperez@colorado.edu>
679 2005-07-16 Fernando Perez <fperez@colorado.edu>
676
680
677 * IPython/ultraTB.py (ExceptionColors): Make a global variable
681 * IPython/ultraTB.py (ExceptionColors): Make a global variable
678 out of the color scheme table used for coloring exception
682 out of the color scheme table used for coloring exception
679 tracebacks. This allows user code to add new schemes at runtime.
683 tracebacks. This allows user code to add new schemes at runtime.
680 This is a minimally modified version of the patch at
684 This is a minimally modified version of the patch at
681 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
685 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
682 for the contribution.
686 for the contribution.
683
687
684 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
688 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
685 slightly modified version of the patch in
689 slightly modified version of the patch in
686 http://www.scipy.net/roundup/ipython/issue34, which also allows me
690 http://www.scipy.net/roundup/ipython/issue34, which also allows me
687 to remove the previous try/except solution (which was costlier).
691 to remove the previous try/except solution (which was costlier).
688 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
692 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
689
693
690 2005-06-08 Fernando Perez <fperez@colorado.edu>
694 2005-06-08 Fernando Perez <fperez@colorado.edu>
691
695
692 * IPython/iplib.py (write/write_err): Add methods to abstract all
696 * IPython/iplib.py (write/write_err): Add methods to abstract all
693 I/O a bit more.
697 I/O a bit more.
694
698
695 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
699 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
696 warning, reported by Aric Hagberg, fix by JD Hunter.
700 warning, reported by Aric Hagberg, fix by JD Hunter.
697
701
698 2005-06-02 *** Released version 0.6.15
702 2005-06-02 *** Released version 0.6.15
699
703
700 2005-06-01 Fernando Perez <fperez@colorado.edu>
704 2005-06-01 Fernando Perez <fperez@colorado.edu>
701
705
702 * IPython/iplib.py (MagicCompleter.file_matches): Fix
706 * IPython/iplib.py (MagicCompleter.file_matches): Fix
703 tab-completion of filenames within open-quoted strings. Note that
707 tab-completion of filenames within open-quoted strings. Note that
704 this requires that in ~/.ipython/ipythonrc, users change the
708 this requires that in ~/.ipython/ipythonrc, users change the
705 readline delimiters configuration to read:
709 readline delimiters configuration to read:
706
710
707 readline_remove_delims -/~
711 readline_remove_delims -/~
708
712
709
713
710 2005-05-31 *** Released version 0.6.14
714 2005-05-31 *** Released version 0.6.14
711
715
712 2005-05-29 Fernando Perez <fperez@colorado.edu>
716 2005-05-29 Fernando Perez <fperez@colorado.edu>
713
717
714 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
718 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
715 with files not on the filesystem. Reported by Eliyahu Sandler
719 with files not on the filesystem. Reported by Eliyahu Sandler
716 <eli@gondolin.net>
720 <eli@gondolin.net>
717
721
718 2005-05-22 Fernando Perez <fperez@colorado.edu>
722 2005-05-22 Fernando Perez <fperez@colorado.edu>
719
723
720 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
724 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
721 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
725 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
722
726
723 2005-05-19 Fernando Perez <fperez@colorado.edu>
727 2005-05-19 Fernando Perez <fperez@colorado.edu>
724
728
725 * IPython/iplib.py (safe_execfile): close a file which could be
729 * IPython/iplib.py (safe_execfile): close a file which could be
726 left open (causing problems in win32, which locks open files).
730 left open (causing problems in win32, which locks open files).
727 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
731 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
728
732
729 2005-05-18 Fernando Perez <fperez@colorado.edu>
733 2005-05-18 Fernando Perez <fperez@colorado.edu>
730
734
731 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
735 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
732 keyword arguments correctly to safe_execfile().
736 keyword arguments correctly to safe_execfile().
733
737
734 2005-05-13 Fernando Perez <fperez@colorado.edu>
738 2005-05-13 Fernando Perez <fperez@colorado.edu>
735
739
736 * ipython.1: Added info about Qt to manpage, and threads warning
740 * ipython.1: Added info about Qt to manpage, and threads warning
737 to usage page (invoked with --help).
741 to usage page (invoked with --help).
738
742
739 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
743 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
740 new matcher (it goes at the end of the priority list) to do
744 new matcher (it goes at the end of the priority list) to do
741 tab-completion on named function arguments. Submitted by George
745 tab-completion on named function arguments. Submitted by George
742 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
746 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
743 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
747 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
744 for more details.
748 for more details.
745
749
746 * IPython/Magic.py (magic_run): Added new -e flag to ignore
750 * IPython/Magic.py (magic_run): Added new -e flag to ignore
747 SystemExit exceptions in the script being run. Thanks to a report
751 SystemExit exceptions in the script being run. Thanks to a report
748 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
752 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
749 producing very annoying behavior when running unit tests.
753 producing very annoying behavior when running unit tests.
750
754
751 2005-05-12 Fernando Perez <fperez@colorado.edu>
755 2005-05-12 Fernando Perez <fperez@colorado.edu>
752
756
753 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
757 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
754 which I'd broken (again) due to a changed regexp. In the process,
758 which I'd broken (again) due to a changed regexp. In the process,
755 added ';' as an escape to auto-quote the whole line without
759 added ';' as an escape to auto-quote the whole line without
756 splitting its arguments. Thanks to a report by Jerry McRae
760 splitting its arguments. Thanks to a report by Jerry McRae
757 <qrs0xyc02-AT-sneakemail.com>.
761 <qrs0xyc02-AT-sneakemail.com>.
758
762
759 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
763 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
760 possible crashes caused by a TokenError. Reported by Ed Schofield
764 possible crashes caused by a TokenError. Reported by Ed Schofield
761 <schofield-AT-ftw.at>.
765 <schofield-AT-ftw.at>.
762
766
763 2005-05-06 Fernando Perez <fperez@colorado.edu>
767 2005-05-06 Fernando Perez <fperez@colorado.edu>
764
768
765 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
769 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
766
770
767 2005-04-29 Fernando Perez <fperez@colorado.edu>
771 2005-04-29 Fernando Perez <fperez@colorado.edu>
768
772
769 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
773 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
770 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
774 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
771 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
775 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
772 which provides support for Qt interactive usage (similar to the
776 which provides support for Qt interactive usage (similar to the
773 existing one for WX and GTK). This had been often requested.
777 existing one for WX and GTK). This had been often requested.
774
778
775 2005-04-14 *** Released version 0.6.13
779 2005-04-14 *** Released version 0.6.13
776
780
777 2005-04-08 Fernando Perez <fperez@colorado.edu>
781 2005-04-08 Fernando Perez <fperez@colorado.edu>
778
782
779 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
783 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
780 from _ofind, which gets called on almost every input line. Now,
784 from _ofind, which gets called on almost every input line. Now,
781 we only try to get docstrings if they are actually going to be
785 we only try to get docstrings if they are actually going to be
782 used (the overhead of fetching unnecessary docstrings can be
786 used (the overhead of fetching unnecessary docstrings can be
783 noticeable for certain objects, such as Pyro proxies).
787 noticeable for certain objects, such as Pyro proxies).
784
788
785 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
789 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
786 for completers. For some reason I had been passing them the state
790 for completers. For some reason I had been passing them the state
787 variable, which completers never actually need, and was in
791 variable, which completers never actually need, and was in
788 conflict with the rlcompleter API. Custom completers ONLY need to
792 conflict with the rlcompleter API. Custom completers ONLY need to
789 take the text parameter.
793 take the text parameter.
790
794
791 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
795 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
792 work correctly in pysh. I've also moved all the logic which used
796 work correctly in pysh. I've also moved all the logic which used
793 to be in pysh.py here, which will prevent problems with future
797 to be in pysh.py here, which will prevent problems with future
794 upgrades. However, this time I must warn users to update their
798 upgrades. However, this time I must warn users to update their
795 pysh profile to include the line
799 pysh profile to include the line
796
800
797 import_all IPython.Extensions.InterpreterExec
801 import_all IPython.Extensions.InterpreterExec
798
802
799 because otherwise things won't work for them. They MUST also
803 because otherwise things won't work for them. They MUST also
800 delete pysh.py and the line
804 delete pysh.py and the line
801
805
802 execfile pysh.py
806 execfile pysh.py
803
807
804 from their ipythonrc-pysh.
808 from their ipythonrc-pysh.
805
809
806 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
810 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
807 robust in the face of objects whose dir() returns non-strings
811 robust in the face of objects whose dir() returns non-strings
808 (which it shouldn't, but some broken libs like ITK do). Thanks to
812 (which it shouldn't, but some broken libs like ITK do). Thanks to
809 a patch by John Hunter (implemented differently, though). Also
813 a patch by John Hunter (implemented differently, though). Also
810 minor improvements by using .extend instead of + on lists.
814 minor improvements by using .extend instead of + on lists.
811
815
812 * pysh.py:
816 * pysh.py:
813
817
814 2005-04-06 Fernando Perez <fperez@colorado.edu>
818 2005-04-06 Fernando Perez <fperez@colorado.edu>
815
819
816 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
820 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
817 by default, so that all users benefit from it. Those who don't
821 by default, so that all users benefit from it. Those who don't
818 want it can still turn it off.
822 want it can still turn it off.
819
823
820 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
824 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
821 config file, I'd forgotten about this, so users were getting it
825 config file, I'd forgotten about this, so users were getting it
822 off by default.
826 off by default.
823
827
824 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
828 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
825 consistency. Now magics can be called in multiline statements,
829 consistency. Now magics can be called in multiline statements,
826 and python variables can be expanded in magic calls via $var.
830 and python variables can be expanded in magic calls via $var.
827 This makes the magic system behave just like aliases or !system
831 This makes the magic system behave just like aliases or !system
828 calls.
832 calls.
829
833
830 2005-03-28 Fernando Perez <fperez@colorado.edu>
834 2005-03-28 Fernando Perez <fperez@colorado.edu>
831
835
832 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
836 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
833 expensive string additions for building command. Add support for
837 expensive string additions for building command. Add support for
834 trailing ';' when autocall is used.
838 trailing ';' when autocall is used.
835
839
836 2005-03-26 Fernando Perez <fperez@colorado.edu>
840 2005-03-26 Fernando Perez <fperez@colorado.edu>
837
841
838 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
842 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
839 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
843 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
840 ipython.el robust against prompts with any number of spaces
844 ipython.el robust against prompts with any number of spaces
841 (including 0) after the ':' character.
845 (including 0) after the ':' character.
842
846
843 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
847 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
844 continuation prompt, which misled users to think the line was
848 continuation prompt, which misled users to think the line was
845 already indented. Closes debian Bug#300847, reported to me by
849 already indented. Closes debian Bug#300847, reported to me by
846 Norbert Tretkowski <tretkowski-AT-inittab.de>.
850 Norbert Tretkowski <tretkowski-AT-inittab.de>.
847
851
848 2005-03-23 Fernando Perez <fperez@colorado.edu>
852 2005-03-23 Fernando Perez <fperez@colorado.edu>
849
853
850 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
854 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
851 properly aligned if they have embedded newlines.
855 properly aligned if they have embedded newlines.
852
856
853 * IPython/iplib.py (runlines): Add a public method to expose
857 * IPython/iplib.py (runlines): Add a public method to expose
854 IPython's code execution machinery, so that users can run strings
858 IPython's code execution machinery, so that users can run strings
855 as if they had been typed at the prompt interactively.
859 as if they had been typed at the prompt interactively.
856 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
860 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
857 methods which can call the system shell, but with python variable
861 methods which can call the system shell, but with python variable
858 expansion. The three such methods are: __IPYTHON__.system,
862 expansion. The three such methods are: __IPYTHON__.system,
859 .getoutput and .getoutputerror. These need to be documented in a
863 .getoutput and .getoutputerror. These need to be documented in a
860 'public API' section (to be written) of the manual.
864 'public API' section (to be written) of the manual.
861
865
862 2005-03-20 Fernando Perez <fperez@colorado.edu>
866 2005-03-20 Fernando Perez <fperez@colorado.edu>
863
867
864 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
868 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
865 for custom exception handling. This is quite powerful, and it
869 for custom exception handling. This is quite powerful, and it
866 allows for user-installable exception handlers which can trap
870 allows for user-installable exception handlers which can trap
867 custom exceptions at runtime and treat them separately from
871 custom exceptions at runtime and treat them separately from
868 IPython's default mechanisms. At the request of Frédéric
872 IPython's default mechanisms. At the request of Frédéric
869 Mantegazza <mantegazza-AT-ill.fr>.
873 Mantegazza <mantegazza-AT-ill.fr>.
870 (InteractiveShell.set_custom_completer): public API function to
874 (InteractiveShell.set_custom_completer): public API function to
871 add new completers at runtime.
875 add new completers at runtime.
872
876
873 2005-03-19 Fernando Perez <fperez@colorado.edu>
877 2005-03-19 Fernando Perez <fperez@colorado.edu>
874
878
875 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
879 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
876 allow objects which provide their docstrings via non-standard
880 allow objects which provide their docstrings via non-standard
877 mechanisms (like Pyro proxies) to still be inspected by ipython's
881 mechanisms (like Pyro proxies) to still be inspected by ipython's
878 ? system.
882 ? system.
879
883
880 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
884 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
881 automatic capture system. I tried quite hard to make it work
885 automatic capture system. I tried quite hard to make it work
882 reliably, and simply failed. I tried many combinations with the
886 reliably, and simply failed. I tried many combinations with the
883 subprocess module, but eventually nothing worked in all needed
887 subprocess module, but eventually nothing worked in all needed
884 cases (not blocking stdin for the child, duplicating stdout
888 cases (not blocking stdin for the child, duplicating stdout
885 without blocking, etc). The new %sc/%sx still do capture to these
889 without blocking, etc). The new %sc/%sx still do capture to these
886 magical list/string objects which make shell use much more
890 magical list/string objects which make shell use much more
887 conveninent, so not all is lost.
891 conveninent, so not all is lost.
888
892
889 XXX - FIX MANUAL for the change above!
893 XXX - FIX MANUAL for the change above!
890
894
891 (runsource): I copied code.py's runsource() into ipython to modify
895 (runsource): I copied code.py's runsource() into ipython to modify
892 it a bit. Now the code object and source to be executed are
896 it a bit. Now the code object and source to be executed are
893 stored in ipython. This makes this info accessible to third-party
897 stored in ipython. This makes this info accessible to third-party
894 tools, like custom exception handlers. After a request by Frédéric
898 tools, like custom exception handlers. After a request by Frédéric
895 Mantegazza <mantegazza-AT-ill.fr>.
899 Mantegazza <mantegazza-AT-ill.fr>.
896
900
897 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
901 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
898 history-search via readline (like C-p/C-n). I'd wanted this for a
902 history-search via readline (like C-p/C-n). I'd wanted this for a
899 long time, but only recently found out how to do it. For users
903 long time, but only recently found out how to do it. For users
900 who already have their ipythonrc files made and want this, just
904 who already have their ipythonrc files made and want this, just
901 add:
905 add:
902
906
903 readline_parse_and_bind "\e[A": history-search-backward
907 readline_parse_and_bind "\e[A": history-search-backward
904 readline_parse_and_bind "\e[B": history-search-forward
908 readline_parse_and_bind "\e[B": history-search-forward
905
909
906 2005-03-18 Fernando Perez <fperez@colorado.edu>
910 2005-03-18 Fernando Perez <fperez@colorado.edu>
907
911
908 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
912 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
909 LSString and SList classes which allow transparent conversions
913 LSString and SList classes which allow transparent conversions
910 between list mode and whitespace-separated string.
914 between list mode and whitespace-separated string.
911 (magic_r): Fix recursion problem in %r.
915 (magic_r): Fix recursion problem in %r.
912
916
913 * IPython/genutils.py (LSString): New class to be used for
917 * IPython/genutils.py (LSString): New class to be used for
914 automatic storage of the results of all alias/system calls in _o
918 automatic storage of the results of all alias/system calls in _o
915 and _e (stdout/err). These provide a .l/.list attribute which
919 and _e (stdout/err). These provide a .l/.list attribute which
916 does automatic splitting on newlines. This means that for most
920 does automatic splitting on newlines. This means that for most
917 uses, you'll never need to do capturing of output with %sc/%sx
921 uses, you'll never need to do capturing of output with %sc/%sx
918 anymore, since ipython keeps this always done for you. Note that
922 anymore, since ipython keeps this always done for you. Note that
919 only the LAST results are stored, the _o/e variables are
923 only the LAST results are stored, the _o/e variables are
920 overwritten on each call. If you need to save their contents
924 overwritten on each call. If you need to save their contents
921 further, simply bind them to any other name.
925 further, simply bind them to any other name.
922
926
923 2005-03-17 Fernando Perez <fperez@colorado.edu>
927 2005-03-17 Fernando Perez <fperez@colorado.edu>
924
928
925 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
929 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
926 prompt namespace handling.
930 prompt namespace handling.
927
931
928 2005-03-16 Fernando Perez <fperez@colorado.edu>
932 2005-03-16 Fernando Perez <fperez@colorado.edu>
929
933
930 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
934 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
931 classic prompts to be '>>> ' (final space was missing, and it
935 classic prompts to be '>>> ' (final space was missing, and it
932 trips the emacs python mode).
936 trips the emacs python mode).
933 (BasePrompt.__str__): Added safe support for dynamic prompt
937 (BasePrompt.__str__): Added safe support for dynamic prompt
934 strings. Now you can set your prompt string to be '$x', and the
938 strings. Now you can set your prompt string to be '$x', and the
935 value of x will be printed from your interactive namespace. The
939 value of x will be printed from your interactive namespace. The
936 interpolation syntax includes the full Itpl support, so
940 interpolation syntax includes the full Itpl support, so
937 ${foo()+x+bar()} is a valid prompt string now, and the function
941 ${foo()+x+bar()} is a valid prompt string now, and the function
938 calls will be made at runtime.
942 calls will be made at runtime.
939
943
940 2005-03-15 Fernando Perez <fperez@colorado.edu>
944 2005-03-15 Fernando Perez <fperez@colorado.edu>
941
945
942 * IPython/Magic.py (magic_history): renamed %hist to %history, to
946 * IPython/Magic.py (magic_history): renamed %hist to %history, to
943 avoid name clashes in pylab. %hist still works, it just forwards
947 avoid name clashes in pylab. %hist still works, it just forwards
944 the call to %history.
948 the call to %history.
945
949
946 2005-03-02 *** Released version 0.6.12
950 2005-03-02 *** Released version 0.6.12
947
951
948 2005-03-02 Fernando Perez <fperez@colorado.edu>
952 2005-03-02 Fernando Perez <fperez@colorado.edu>
949
953
950 * IPython/iplib.py (handle_magic): log magic calls properly as
954 * IPython/iplib.py (handle_magic): log magic calls properly as
951 ipmagic() function calls.
955 ipmagic() function calls.
952
956
953 * IPython/Magic.py (magic_time): Improved %time to support
957 * IPython/Magic.py (magic_time): Improved %time to support
954 statements and provide wall-clock as well as CPU time.
958 statements and provide wall-clock as well as CPU time.
955
959
956 2005-02-27 Fernando Perez <fperez@colorado.edu>
960 2005-02-27 Fernando Perez <fperez@colorado.edu>
957
961
958 * IPython/hooks.py: New hooks module, to expose user-modifiable
962 * IPython/hooks.py: New hooks module, to expose user-modifiable
959 IPython functionality in a clean manner. For now only the editor
963 IPython functionality in a clean manner. For now only the editor
960 hook is actually written, and other thigns which I intend to turn
964 hook is actually written, and other thigns which I intend to turn
961 into proper hooks aren't yet there. The display and prefilter
965 into proper hooks aren't yet there. The display and prefilter
962 stuff, for example, should be hooks. But at least now the
966 stuff, for example, should be hooks. But at least now the
963 framework is in place, and the rest can be moved here with more
967 framework is in place, and the rest can be moved here with more
964 time later. IPython had had a .hooks variable for a long time for
968 time later. IPython had had a .hooks variable for a long time for
965 this purpose, but I'd never actually used it for anything.
969 this purpose, but I'd never actually used it for anything.
966
970
967 2005-02-26 Fernando Perez <fperez@colorado.edu>
971 2005-02-26 Fernando Perez <fperez@colorado.edu>
968
972
969 * IPython/ipmaker.py (make_IPython): make the default ipython
973 * IPython/ipmaker.py (make_IPython): make the default ipython
970 directory be called _ipython under win32, to follow more the
974 directory be called _ipython under win32, to follow more the
971 naming peculiarities of that platform (where buggy software like
975 naming peculiarities of that platform (where buggy software like
972 Visual Sourcesafe breaks with .named directories). Reported by
976 Visual Sourcesafe breaks with .named directories). Reported by
973 Ville Vainio.
977 Ville Vainio.
974
978
975 2005-02-23 Fernando Perez <fperez@colorado.edu>
979 2005-02-23 Fernando Perez <fperez@colorado.edu>
976
980
977 * IPython/iplib.py (InteractiveShell.__init__): removed a few
981 * IPython/iplib.py (InteractiveShell.__init__): removed a few
978 auto_aliases for win32 which were causing problems. Users can
982 auto_aliases for win32 which were causing problems. Users can
979 define the ones they personally like.
983 define the ones they personally like.
980
984
981 2005-02-21 Fernando Perez <fperez@colorado.edu>
985 2005-02-21 Fernando Perez <fperez@colorado.edu>
982
986
983 * IPython/Magic.py (magic_time): new magic to time execution of
987 * IPython/Magic.py (magic_time): new magic to time execution of
984 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
988 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
985
989
986 2005-02-19 Fernando Perez <fperez@colorado.edu>
990 2005-02-19 Fernando Perez <fperez@colorado.edu>
987
991
988 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
992 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
989 into keys (for prompts, for example).
993 into keys (for prompts, for example).
990
994
991 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
995 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
992 prompts in case users want them. This introduces a small behavior
996 prompts in case users want them. This introduces a small behavior
993 change: ipython does not automatically add a space to all prompts
997 change: ipython does not automatically add a space to all prompts
994 anymore. To get the old prompts with a space, users should add it
998 anymore. To get the old prompts with a space, users should add it
995 manually to their ipythonrc file, so for example prompt_in1 should
999 manually to their ipythonrc file, so for example prompt_in1 should
996 now read 'In [\#]: ' instead of 'In [\#]:'.
1000 now read 'In [\#]: ' instead of 'In [\#]:'.
997 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1001 (BasePrompt.__init__): New option prompts_pad_left (only in rc
998 file) to control left-padding of secondary prompts.
1002 file) to control left-padding of secondary prompts.
999
1003
1000 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1004 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1001 the profiler can't be imported. Fix for Debian, which removed
1005 the profiler can't be imported. Fix for Debian, which removed
1002 profile.py because of License issues. I applied a slightly
1006 profile.py because of License issues. I applied a slightly
1003 modified version of the original Debian patch at
1007 modified version of the original Debian patch at
1004 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1008 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1005
1009
1006 2005-02-17 Fernando Perez <fperez@colorado.edu>
1010 2005-02-17 Fernando Perez <fperez@colorado.edu>
1007
1011
1008 * IPython/genutils.py (native_line_ends): Fix bug which would
1012 * IPython/genutils.py (native_line_ends): Fix bug which would
1009 cause improper line-ends under win32 b/c I was not opening files
1013 cause improper line-ends under win32 b/c I was not opening files
1010 in binary mode. Bug report and fix thanks to Ville.
1014 in binary mode. Bug report and fix thanks to Ville.
1011
1015
1012 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1016 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1013 trying to catch spurious foo[1] autocalls. My fix actually broke
1017 trying to catch spurious foo[1] autocalls. My fix actually broke
1014 ',/' autoquote/call with explicit escape (bad regexp).
1018 ',/' autoquote/call with explicit escape (bad regexp).
1015
1019
1016 2005-02-15 *** Released version 0.6.11
1020 2005-02-15 *** Released version 0.6.11
1017
1021
1018 2005-02-14 Fernando Perez <fperez@colorado.edu>
1022 2005-02-14 Fernando Perez <fperez@colorado.edu>
1019
1023
1020 * IPython/background_jobs.py: New background job management
1024 * IPython/background_jobs.py: New background job management
1021 subsystem. This is implemented via a new set of classes, and
1025 subsystem. This is implemented via a new set of classes, and
1022 IPython now provides a builtin 'jobs' object for background job
1026 IPython now provides a builtin 'jobs' object for background job
1023 execution. A convenience %bg magic serves as a lightweight
1027 execution. A convenience %bg magic serves as a lightweight
1024 frontend for starting the more common type of calls. This was
1028 frontend for starting the more common type of calls. This was
1025 inspired by discussions with B. Granger and the BackgroundCommand
1029 inspired by discussions with B. Granger and the BackgroundCommand
1026 class described in the book Python Scripting for Computational
1030 class described in the book Python Scripting for Computational
1027 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1031 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1028 (although ultimately no code from this text was used, as IPython's
1032 (although ultimately no code from this text was used, as IPython's
1029 system is a separate implementation).
1033 system is a separate implementation).
1030
1034
1031 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1035 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1032 to control the completion of single/double underscore names
1036 to control the completion of single/double underscore names
1033 separately. As documented in the example ipytonrc file, the
1037 separately. As documented in the example ipytonrc file, the
1034 readline_omit__names variable can now be set to 2, to omit even
1038 readline_omit__names variable can now be set to 2, to omit even
1035 single underscore names. Thanks to a patch by Brian Wong
1039 single underscore names. Thanks to a patch by Brian Wong
1036 <BrianWong-AT-AirgoNetworks.Com>.
1040 <BrianWong-AT-AirgoNetworks.Com>.
1037 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1041 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1038 be autocalled as foo([1]) if foo were callable. A problem for
1042 be autocalled as foo([1]) if foo were callable. A problem for
1039 things which are both callable and implement __getitem__.
1043 things which are both callable and implement __getitem__.
1040 (init_readline): Fix autoindentation for win32. Thanks to a patch
1044 (init_readline): Fix autoindentation for win32. Thanks to a patch
1041 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1045 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1042
1046
1043 2005-02-12 Fernando Perez <fperez@colorado.edu>
1047 2005-02-12 Fernando Perez <fperez@colorado.edu>
1044
1048
1045 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1049 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1046 which I had written long ago to sort out user error messages which
1050 which I had written long ago to sort out user error messages which
1047 may occur during startup. This seemed like a good idea initially,
1051 may occur during startup. This seemed like a good idea initially,
1048 but it has proven a disaster in retrospect. I don't want to
1052 but it has proven a disaster in retrospect. I don't want to
1049 change much code for now, so my fix is to set the internal 'debug'
1053 change much code for now, so my fix is to set the internal 'debug'
1050 flag to true everywhere, whose only job was precisely to control
1054 flag to true everywhere, whose only job was precisely to control
1051 this subsystem. This closes issue 28 (as well as avoiding all
1055 this subsystem. This closes issue 28 (as well as avoiding all
1052 sorts of strange hangups which occur from time to time).
1056 sorts of strange hangups which occur from time to time).
1053
1057
1054 2005-02-07 Fernando Perez <fperez@colorado.edu>
1058 2005-02-07 Fernando Perez <fperez@colorado.edu>
1055
1059
1056 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1060 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1057 previous call produced a syntax error.
1061 previous call produced a syntax error.
1058
1062
1059 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1063 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1060 classes without constructor.
1064 classes without constructor.
1061
1065
1062 2005-02-06 Fernando Perez <fperez@colorado.edu>
1066 2005-02-06 Fernando Perez <fperez@colorado.edu>
1063
1067
1064 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1068 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1065 completions with the results of each matcher, so we return results
1069 completions with the results of each matcher, so we return results
1066 to the user from all namespaces. This breaks with ipython
1070 to the user from all namespaces. This breaks with ipython
1067 tradition, but I think it's a nicer behavior. Now you get all
1071 tradition, but I think it's a nicer behavior. Now you get all
1068 possible completions listed, from all possible namespaces (python,
1072 possible completions listed, from all possible namespaces (python,
1069 filesystem, magics...) After a request by John Hunter
1073 filesystem, magics...) After a request by John Hunter
1070 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1074 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1071
1075
1072 2005-02-05 Fernando Perez <fperez@colorado.edu>
1076 2005-02-05 Fernando Perez <fperez@colorado.edu>
1073
1077
1074 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1078 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1075 the call had quote characters in it (the quotes were stripped).
1079 the call had quote characters in it (the quotes were stripped).
1076
1080
1077 2005-01-31 Fernando Perez <fperez@colorado.edu>
1081 2005-01-31 Fernando Perez <fperez@colorado.edu>
1078
1082
1079 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1083 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1080 Itpl.itpl() to make the code more robust against psyco
1084 Itpl.itpl() to make the code more robust against psyco
1081 optimizations.
1085 optimizations.
1082
1086
1083 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1087 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1084 of causing an exception. Quicker, cleaner.
1088 of causing an exception. Quicker, cleaner.
1085
1089
1086 2005-01-28 Fernando Perez <fperez@colorado.edu>
1090 2005-01-28 Fernando Perez <fperez@colorado.edu>
1087
1091
1088 * scripts/ipython_win_post_install.py (install): hardcode
1092 * scripts/ipython_win_post_install.py (install): hardcode
1089 sys.prefix+'python.exe' as the executable path. It turns out that
1093 sys.prefix+'python.exe' as the executable path. It turns out that
1090 during the post-installation run, sys.executable resolves to the
1094 during the post-installation run, sys.executable resolves to the
1091 name of the binary installer! I should report this as a distutils
1095 name of the binary installer! I should report this as a distutils
1092 bug, I think. I updated the .10 release with this tiny fix, to
1096 bug, I think. I updated the .10 release with this tiny fix, to
1093 avoid annoying the lists further.
1097 avoid annoying the lists further.
1094
1098
1095 2005-01-27 *** Released version 0.6.10
1099 2005-01-27 *** Released version 0.6.10
1096
1100
1097 2005-01-27 Fernando Perez <fperez@colorado.edu>
1101 2005-01-27 Fernando Perez <fperez@colorado.edu>
1098
1102
1099 * IPython/numutils.py (norm): Added 'inf' as optional name for
1103 * IPython/numutils.py (norm): Added 'inf' as optional name for
1100 L-infinity norm, included references to mathworld.com for vector
1104 L-infinity norm, included references to mathworld.com for vector
1101 norm definitions.
1105 norm definitions.
1102 (amin/amax): added amin/amax for array min/max. Similar to what
1106 (amin/amax): added amin/amax for array min/max. Similar to what
1103 pylab ships with after the recent reorganization of names.
1107 pylab ships with after the recent reorganization of names.
1104 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1108 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1105
1109
1106 * ipython.el: committed Alex's recent fixes and improvements.
1110 * ipython.el: committed Alex's recent fixes and improvements.
1107 Tested with python-mode from CVS, and it looks excellent. Since
1111 Tested with python-mode from CVS, and it looks excellent. Since
1108 python-mode hasn't released anything in a while, I'm temporarily
1112 python-mode hasn't released anything in a while, I'm temporarily
1109 putting a copy of today's CVS (v 4.70) of python-mode in:
1113 putting a copy of today's CVS (v 4.70) of python-mode in:
1110 http://ipython.scipy.org/tmp/python-mode.el
1114 http://ipython.scipy.org/tmp/python-mode.el
1111
1115
1112 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1116 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1113 sys.executable for the executable name, instead of assuming it's
1117 sys.executable for the executable name, instead of assuming it's
1114 called 'python.exe' (the post-installer would have produced broken
1118 called 'python.exe' (the post-installer would have produced broken
1115 setups on systems with a differently named python binary).
1119 setups on systems with a differently named python binary).
1116
1120
1117 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1121 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1118 references to os.linesep, to make the code more
1122 references to os.linesep, to make the code more
1119 platform-independent. This is also part of the win32 coloring
1123 platform-independent. This is also part of the win32 coloring
1120 fixes.
1124 fixes.
1121
1125
1122 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1126 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1123 lines, which actually cause coloring bugs because the length of
1127 lines, which actually cause coloring bugs because the length of
1124 the line is very difficult to correctly compute with embedded
1128 the line is very difficult to correctly compute with embedded
1125 escapes. This was the source of all the coloring problems under
1129 escapes. This was the source of all the coloring problems under
1126 Win32. I think that _finally_, Win32 users have a properly
1130 Win32. I think that _finally_, Win32 users have a properly
1127 working ipython in all respects. This would never have happened
1131 working ipython in all respects. This would never have happened
1128 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1132 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1129
1133
1130 2005-01-26 *** Released version 0.6.9
1134 2005-01-26 *** Released version 0.6.9
1131
1135
1132 2005-01-25 Fernando Perez <fperez@colorado.edu>
1136 2005-01-25 Fernando Perez <fperez@colorado.edu>
1133
1137
1134 * setup.py: finally, we have a true Windows installer, thanks to
1138 * setup.py: finally, we have a true Windows installer, thanks to
1135 the excellent work of Viktor Ransmayr
1139 the excellent work of Viktor Ransmayr
1136 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1140 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1137 Windows users. The setup routine is quite a bit cleaner thanks to
1141 Windows users. The setup routine is quite a bit cleaner thanks to
1138 this, and the post-install script uses the proper functions to
1142 this, and the post-install script uses the proper functions to
1139 allow a clean de-installation using the standard Windows Control
1143 allow a clean de-installation using the standard Windows Control
1140 Panel.
1144 Panel.
1141
1145
1142 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1146 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1143 environment variable under all OSes (including win32) if
1147 environment variable under all OSes (including win32) if
1144 available. This will give consistency to win32 users who have set
1148 available. This will give consistency to win32 users who have set
1145 this variable for any reason. If os.environ['HOME'] fails, the
1149 this variable for any reason. If os.environ['HOME'] fails, the
1146 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1150 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1147
1151
1148 2005-01-24 Fernando Perez <fperez@colorado.edu>
1152 2005-01-24 Fernando Perez <fperez@colorado.edu>
1149
1153
1150 * IPython/numutils.py (empty_like): add empty_like(), similar to
1154 * IPython/numutils.py (empty_like): add empty_like(), similar to
1151 zeros_like() but taking advantage of the new empty() Numeric routine.
1155 zeros_like() but taking advantage of the new empty() Numeric routine.
1152
1156
1153 2005-01-23 *** Released version 0.6.8
1157 2005-01-23 *** Released version 0.6.8
1154
1158
1155 2005-01-22 Fernando Perez <fperez@colorado.edu>
1159 2005-01-22 Fernando Perez <fperez@colorado.edu>
1156
1160
1157 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1161 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1158 automatic show() calls. After discussing things with JDH, it
1162 automatic show() calls. After discussing things with JDH, it
1159 turns out there are too many corner cases where this can go wrong.
1163 turns out there are too many corner cases where this can go wrong.
1160 It's best not to try to be 'too smart', and simply have ipython
1164 It's best not to try to be 'too smart', and simply have ipython
1161 reproduce as much as possible the default behavior of a normal
1165 reproduce as much as possible the default behavior of a normal
1162 python shell.
1166 python shell.
1163
1167
1164 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1168 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1165 line-splitting regexp and _prefilter() to avoid calling getattr()
1169 line-splitting regexp and _prefilter() to avoid calling getattr()
1166 on assignments. This closes
1170 on assignments. This closes
1167 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1171 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1168 readline uses getattr(), so a simple <TAB> keypress is still
1172 readline uses getattr(), so a simple <TAB> keypress is still
1169 enough to trigger getattr() calls on an object.
1173 enough to trigger getattr() calls on an object.
1170
1174
1171 2005-01-21 Fernando Perez <fperez@colorado.edu>
1175 2005-01-21 Fernando Perez <fperez@colorado.edu>
1172
1176
1173 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1177 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1174 docstring under pylab so it doesn't mask the original.
1178 docstring under pylab so it doesn't mask the original.
1175
1179
1176 2005-01-21 *** Released version 0.6.7
1180 2005-01-21 *** Released version 0.6.7
1177
1181
1178 2005-01-21 Fernando Perez <fperez@colorado.edu>
1182 2005-01-21 Fernando Perez <fperez@colorado.edu>
1179
1183
1180 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1184 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1181 signal handling for win32 users in multithreaded mode.
1185 signal handling for win32 users in multithreaded mode.
1182
1186
1183 2005-01-17 Fernando Perez <fperez@colorado.edu>
1187 2005-01-17 Fernando Perez <fperez@colorado.edu>
1184
1188
1185 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1189 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1186 instances with no __init__. After a crash report by Norbert Nemec
1190 instances with no __init__. After a crash report by Norbert Nemec
1187 <Norbert-AT-nemec-online.de>.
1191 <Norbert-AT-nemec-online.de>.
1188
1192
1189 2005-01-14 Fernando Perez <fperez@colorado.edu>
1193 2005-01-14 Fernando Perez <fperez@colorado.edu>
1190
1194
1191 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1195 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1192 names for verbose exceptions, when multiple dotted names and the
1196 names for verbose exceptions, when multiple dotted names and the
1193 'parent' object were present on the same line.
1197 'parent' object were present on the same line.
1194
1198
1195 2005-01-11 Fernando Perez <fperez@colorado.edu>
1199 2005-01-11 Fernando Perez <fperez@colorado.edu>
1196
1200
1197 * IPython/genutils.py (flag_calls): new utility to trap and flag
1201 * IPython/genutils.py (flag_calls): new utility to trap and flag
1198 calls in functions. I need it to clean up matplotlib support.
1202 calls in functions. I need it to clean up matplotlib support.
1199 Also removed some deprecated code in genutils.
1203 Also removed some deprecated code in genutils.
1200
1204
1201 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1205 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1202 that matplotlib scripts called with %run, which don't call show()
1206 that matplotlib scripts called with %run, which don't call show()
1203 themselves, still have their plotting windows open.
1207 themselves, still have their plotting windows open.
1204
1208
1205 2005-01-05 Fernando Perez <fperez@colorado.edu>
1209 2005-01-05 Fernando Perez <fperez@colorado.edu>
1206
1210
1207 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1211 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1208 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1212 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1209
1213
1210 2004-12-19 Fernando Perez <fperez@colorado.edu>
1214 2004-12-19 Fernando Perez <fperez@colorado.edu>
1211
1215
1212 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1216 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1213 parent_runcode, which was an eyesore. The same result can be
1217 parent_runcode, which was an eyesore. The same result can be
1214 obtained with Python's regular superclass mechanisms.
1218 obtained with Python's regular superclass mechanisms.
1215
1219
1216 2004-12-17 Fernando Perez <fperez@colorado.edu>
1220 2004-12-17 Fernando Perez <fperez@colorado.edu>
1217
1221
1218 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1222 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1219 reported by Prabhu.
1223 reported by Prabhu.
1220 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1224 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1221 sys.stderr) instead of explicitly calling sys.stderr. This helps
1225 sys.stderr) instead of explicitly calling sys.stderr. This helps
1222 maintain our I/O abstractions clean, for future GUI embeddings.
1226 maintain our I/O abstractions clean, for future GUI embeddings.
1223
1227
1224 * IPython/genutils.py (info): added new utility for sys.stderr
1228 * IPython/genutils.py (info): added new utility for sys.stderr
1225 unified info message handling (thin wrapper around warn()).
1229 unified info message handling (thin wrapper around warn()).
1226
1230
1227 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1231 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1228 composite (dotted) names on verbose exceptions.
1232 composite (dotted) names on verbose exceptions.
1229 (VerboseTB.nullrepr): harden against another kind of errors which
1233 (VerboseTB.nullrepr): harden against another kind of errors which
1230 Python's inspect module can trigger, and which were crashing
1234 Python's inspect module can trigger, and which were crashing
1231 IPython. Thanks to a report by Marco Lombardi
1235 IPython. Thanks to a report by Marco Lombardi
1232 <mlombard-AT-ma010192.hq.eso.org>.
1236 <mlombard-AT-ma010192.hq.eso.org>.
1233
1237
1234 2004-12-13 *** Released version 0.6.6
1238 2004-12-13 *** Released version 0.6.6
1235
1239
1236 2004-12-12 Fernando Perez <fperez@colorado.edu>
1240 2004-12-12 Fernando Perez <fperez@colorado.edu>
1237
1241
1238 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1242 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1239 generated by pygtk upon initialization if it was built without
1243 generated by pygtk upon initialization if it was built without
1240 threads (for matplotlib users). After a crash reported by
1244 threads (for matplotlib users). After a crash reported by
1241 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1245 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1242
1246
1243 * IPython/ipmaker.py (make_IPython): fix small bug in the
1247 * IPython/ipmaker.py (make_IPython): fix small bug in the
1244 import_some parameter for multiple imports.
1248 import_some parameter for multiple imports.
1245
1249
1246 * IPython/iplib.py (ipmagic): simplified the interface of
1250 * IPython/iplib.py (ipmagic): simplified the interface of
1247 ipmagic() to take a single string argument, just as it would be
1251 ipmagic() to take a single string argument, just as it would be
1248 typed at the IPython cmd line.
1252 typed at the IPython cmd line.
1249 (ipalias): Added new ipalias() with an interface identical to
1253 (ipalias): Added new ipalias() with an interface identical to
1250 ipmagic(). This completes exposing a pure python interface to the
1254 ipmagic(). This completes exposing a pure python interface to the
1251 alias and magic system, which can be used in loops or more complex
1255 alias and magic system, which can be used in loops or more complex
1252 code where IPython's automatic line mangling is not active.
1256 code where IPython's automatic line mangling is not active.
1253
1257
1254 * IPython/genutils.py (timing): changed interface of timing to
1258 * IPython/genutils.py (timing): changed interface of timing to
1255 simply run code once, which is the most common case. timings()
1259 simply run code once, which is the most common case. timings()
1256 remains unchanged, for the cases where you want multiple runs.
1260 remains unchanged, for the cases where you want multiple runs.
1257
1261
1258 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1262 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1259 bug where Python2.2 crashes with exec'ing code which does not end
1263 bug where Python2.2 crashes with exec'ing code which does not end
1260 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1264 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1261 before.
1265 before.
1262
1266
1263 2004-12-10 Fernando Perez <fperez@colorado.edu>
1267 2004-12-10 Fernando Perez <fperez@colorado.edu>
1264
1268
1265 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1269 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1266 -t to -T, to accomodate the new -t flag in %run (the %run and
1270 -t to -T, to accomodate the new -t flag in %run (the %run and
1267 %prun options are kind of intermixed, and it's not easy to change
1271 %prun options are kind of intermixed, and it's not easy to change
1268 this with the limitations of python's getopt).
1272 this with the limitations of python's getopt).
1269
1273
1270 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1274 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1271 the execution of scripts. It's not as fine-tuned as timeit.py,
1275 the execution of scripts. It's not as fine-tuned as timeit.py,
1272 but it works from inside ipython (and under 2.2, which lacks
1276 but it works from inside ipython (and under 2.2, which lacks
1273 timeit.py). Optionally a number of runs > 1 can be given for
1277 timeit.py). Optionally a number of runs > 1 can be given for
1274 timing very short-running code.
1278 timing very short-running code.
1275
1279
1276 * IPython/genutils.py (uniq_stable): new routine which returns a
1280 * IPython/genutils.py (uniq_stable): new routine which returns a
1277 list of unique elements in any iterable, but in stable order of
1281 list of unique elements in any iterable, but in stable order of
1278 appearance. I needed this for the ultraTB fixes, and it's a handy
1282 appearance. I needed this for the ultraTB fixes, and it's a handy
1279 utility.
1283 utility.
1280
1284
1281 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1285 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1282 dotted names in Verbose exceptions. This had been broken since
1286 dotted names in Verbose exceptions. This had been broken since
1283 the very start, now x.y will properly be printed in a Verbose
1287 the very start, now x.y will properly be printed in a Verbose
1284 traceback, instead of x being shown and y appearing always as an
1288 traceback, instead of x being shown and y appearing always as an
1285 'undefined global'. Getting this to work was a bit tricky,
1289 'undefined global'. Getting this to work was a bit tricky,
1286 because by default python tokenizers are stateless. Saved by
1290 because by default python tokenizers are stateless. Saved by
1287 python's ability to easily add a bit of state to an arbitrary
1291 python's ability to easily add a bit of state to an arbitrary
1288 function (without needing to build a full-blown callable object).
1292 function (without needing to build a full-blown callable object).
1289
1293
1290 Also big cleanup of this code, which had horrendous runtime
1294 Also big cleanup of this code, which had horrendous runtime
1291 lookups of zillions of attributes for colorization. Moved all
1295 lookups of zillions of attributes for colorization. Moved all
1292 this code into a few templates, which make it cleaner and quicker.
1296 this code into a few templates, which make it cleaner and quicker.
1293
1297
1294 Printout quality was also improved for Verbose exceptions: one
1298 Printout quality was also improved for Verbose exceptions: one
1295 variable per line, and memory addresses are printed (this can be
1299 variable per line, and memory addresses are printed (this can be
1296 quite handy in nasty debugging situations, which is what Verbose
1300 quite handy in nasty debugging situations, which is what Verbose
1297 is for).
1301 is for).
1298
1302
1299 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1303 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1300 the command line as scripts to be loaded by embedded instances.
1304 the command line as scripts to be loaded by embedded instances.
1301 Doing so has the potential for an infinite recursion if there are
1305 Doing so has the potential for an infinite recursion if there are
1302 exceptions thrown in the process. This fixes a strange crash
1306 exceptions thrown in the process. This fixes a strange crash
1303 reported by Philippe MULLER <muller-AT-irit.fr>.
1307 reported by Philippe MULLER <muller-AT-irit.fr>.
1304
1308
1305 2004-12-09 Fernando Perez <fperez@colorado.edu>
1309 2004-12-09 Fernando Perez <fperez@colorado.edu>
1306
1310
1307 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1311 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1308 to reflect new names in matplotlib, which now expose the
1312 to reflect new names in matplotlib, which now expose the
1309 matlab-compatible interface via a pylab module instead of the
1313 matlab-compatible interface via a pylab module instead of the
1310 'matlab' name. The new code is backwards compatible, so users of
1314 'matlab' name. The new code is backwards compatible, so users of
1311 all matplotlib versions are OK. Patch by J. Hunter.
1315 all matplotlib versions are OK. Patch by J. Hunter.
1312
1316
1313 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1317 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1314 of __init__ docstrings for instances (class docstrings are already
1318 of __init__ docstrings for instances (class docstrings are already
1315 automatically printed). Instances with customized docstrings
1319 automatically printed). Instances with customized docstrings
1316 (indep. of the class) are also recognized and all 3 separate
1320 (indep. of the class) are also recognized and all 3 separate
1317 docstrings are printed (instance, class, constructor). After some
1321 docstrings are printed (instance, class, constructor). After some
1318 comments/suggestions by J. Hunter.
1322 comments/suggestions by J. Hunter.
1319
1323
1320 2004-12-05 Fernando Perez <fperez@colorado.edu>
1324 2004-12-05 Fernando Perez <fperez@colorado.edu>
1321
1325
1322 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1326 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1323 warnings when tab-completion fails and triggers an exception.
1327 warnings when tab-completion fails and triggers an exception.
1324
1328
1325 2004-12-03 Fernando Perez <fperez@colorado.edu>
1329 2004-12-03 Fernando Perez <fperez@colorado.edu>
1326
1330
1327 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1331 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1328 be triggered when using 'run -p'. An incorrect option flag was
1332 be triggered when using 'run -p'. An incorrect option flag was
1329 being set ('d' instead of 'D').
1333 being set ('d' instead of 'D').
1330 (manpage): fix missing escaped \- sign.
1334 (manpage): fix missing escaped \- sign.
1331
1335
1332 2004-11-30 *** Released version 0.6.5
1336 2004-11-30 *** Released version 0.6.5
1333
1337
1334 2004-11-30 Fernando Perez <fperez@colorado.edu>
1338 2004-11-30 Fernando Perez <fperez@colorado.edu>
1335
1339
1336 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1340 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1337 setting with -d option.
1341 setting with -d option.
1338
1342
1339 * setup.py (docfiles): Fix problem where the doc glob I was using
1343 * setup.py (docfiles): Fix problem where the doc glob I was using
1340 was COMPLETELY BROKEN. It was giving the right files by pure
1344 was COMPLETELY BROKEN. It was giving the right files by pure
1341 accident, but failed once I tried to include ipython.el. Note:
1345 accident, but failed once I tried to include ipython.el. Note:
1342 glob() does NOT allow you to do exclusion on multiple endings!
1346 glob() does NOT allow you to do exclusion on multiple endings!
1343
1347
1344 2004-11-29 Fernando Perez <fperez@colorado.edu>
1348 2004-11-29 Fernando Perez <fperez@colorado.edu>
1345
1349
1346 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1350 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1347 the manpage as the source. Better formatting & consistency.
1351 the manpage as the source. Better formatting & consistency.
1348
1352
1349 * IPython/Magic.py (magic_run): Added new -d option, to run
1353 * IPython/Magic.py (magic_run): Added new -d option, to run
1350 scripts under the control of the python pdb debugger. Note that
1354 scripts under the control of the python pdb debugger. Note that
1351 this required changing the %prun option -d to -D, to avoid a clash
1355 this required changing the %prun option -d to -D, to avoid a clash
1352 (since %run must pass options to %prun, and getopt is too dumb to
1356 (since %run must pass options to %prun, and getopt is too dumb to
1353 handle options with string values with embedded spaces). Thanks
1357 handle options with string values with embedded spaces). Thanks
1354 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1358 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1355 (magic_who_ls): added type matching to %who and %whos, so that one
1359 (magic_who_ls): added type matching to %who and %whos, so that one
1356 can filter their output to only include variables of certain
1360 can filter their output to only include variables of certain
1357 types. Another suggestion by Matthew.
1361 types. Another suggestion by Matthew.
1358 (magic_whos): Added memory summaries in kb and Mb for arrays.
1362 (magic_whos): Added memory summaries in kb and Mb for arrays.
1359 (magic_who): Improve formatting (break lines every 9 vars).
1363 (magic_who): Improve formatting (break lines every 9 vars).
1360
1364
1361 2004-11-28 Fernando Perez <fperez@colorado.edu>
1365 2004-11-28 Fernando Perez <fperez@colorado.edu>
1362
1366
1363 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1367 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1364 cache when empty lines were present.
1368 cache when empty lines were present.
1365
1369
1366 2004-11-24 Fernando Perez <fperez@colorado.edu>
1370 2004-11-24 Fernando Perez <fperez@colorado.edu>
1367
1371
1368 * IPython/usage.py (__doc__): document the re-activated threading
1372 * IPython/usage.py (__doc__): document the re-activated threading
1369 options for WX and GTK.
1373 options for WX and GTK.
1370
1374
1371 2004-11-23 Fernando Perez <fperez@colorado.edu>
1375 2004-11-23 Fernando Perez <fperez@colorado.edu>
1372
1376
1373 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1377 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1374 the -wthread and -gthread options, along with a new -tk one to try
1378 the -wthread and -gthread options, along with a new -tk one to try
1375 and coordinate Tk threading with wx/gtk. The tk support is very
1379 and coordinate Tk threading with wx/gtk. The tk support is very
1376 platform dependent, since it seems to require Tcl and Tk to be
1380 platform dependent, since it seems to require Tcl and Tk to be
1377 built with threads (Fedora1/2 appears NOT to have it, but in
1381 built with threads (Fedora1/2 appears NOT to have it, but in
1378 Prabhu's Debian boxes it works OK). But even with some Tk
1382 Prabhu's Debian boxes it works OK). But even with some Tk
1379 limitations, this is a great improvement.
1383 limitations, this is a great improvement.
1380
1384
1381 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1385 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1382 info in user prompts. Patch by Prabhu.
1386 info in user prompts. Patch by Prabhu.
1383
1387
1384 2004-11-18 Fernando Perez <fperez@colorado.edu>
1388 2004-11-18 Fernando Perez <fperez@colorado.edu>
1385
1389
1386 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1390 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1387 EOFErrors and bail, to avoid infinite loops if a non-terminating
1391 EOFErrors and bail, to avoid infinite loops if a non-terminating
1388 file is fed into ipython. Patch submitted in issue 19 by user,
1392 file is fed into ipython. Patch submitted in issue 19 by user,
1389 many thanks.
1393 many thanks.
1390
1394
1391 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1395 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1392 autoquote/parens in continuation prompts, which can cause lots of
1396 autoquote/parens in continuation prompts, which can cause lots of
1393 problems. Closes roundup issue 20.
1397 problems. Closes roundup issue 20.
1394
1398
1395 2004-11-17 Fernando Perez <fperez@colorado.edu>
1399 2004-11-17 Fernando Perez <fperez@colorado.edu>
1396
1400
1397 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1401 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1398 reported as debian bug #280505. I'm not sure my local changelog
1402 reported as debian bug #280505. I'm not sure my local changelog
1399 entry has the proper debian format (Jack?).
1403 entry has the proper debian format (Jack?).
1400
1404
1401 2004-11-08 *** Released version 0.6.4
1405 2004-11-08 *** Released version 0.6.4
1402
1406
1403 2004-11-08 Fernando Perez <fperez@colorado.edu>
1407 2004-11-08 Fernando Perez <fperez@colorado.edu>
1404
1408
1405 * IPython/iplib.py (init_readline): Fix exit message for Windows
1409 * IPython/iplib.py (init_readline): Fix exit message for Windows
1406 when readline is active. Thanks to a report by Eric Jones
1410 when readline is active. Thanks to a report by Eric Jones
1407 <eric-AT-enthought.com>.
1411 <eric-AT-enthought.com>.
1408
1412
1409 2004-11-07 Fernando Perez <fperez@colorado.edu>
1413 2004-11-07 Fernando Perez <fperez@colorado.edu>
1410
1414
1411 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1415 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1412 sometimes seen by win2k/cygwin users.
1416 sometimes seen by win2k/cygwin users.
1413
1417
1414 2004-11-06 Fernando Perez <fperez@colorado.edu>
1418 2004-11-06 Fernando Perez <fperez@colorado.edu>
1415
1419
1416 * IPython/iplib.py (interact): Change the handling of %Exit from
1420 * IPython/iplib.py (interact): Change the handling of %Exit from
1417 trying to propagate a SystemExit to an internal ipython flag.
1421 trying to propagate a SystemExit to an internal ipython flag.
1418 This is less elegant than using Python's exception mechanism, but
1422 This is less elegant than using Python's exception mechanism, but
1419 I can't get that to work reliably with threads, so under -pylab
1423 I can't get that to work reliably with threads, so under -pylab
1420 %Exit was hanging IPython. Cross-thread exception handling is
1424 %Exit was hanging IPython. Cross-thread exception handling is
1421 really a bitch. Thaks to a bug report by Stephen Walton
1425 really a bitch. Thaks to a bug report by Stephen Walton
1422 <stephen.walton-AT-csun.edu>.
1426 <stephen.walton-AT-csun.edu>.
1423
1427
1424 2004-11-04 Fernando Perez <fperez@colorado.edu>
1428 2004-11-04 Fernando Perez <fperez@colorado.edu>
1425
1429
1426 * IPython/iplib.py (raw_input_original): store a pointer to the
1430 * IPython/iplib.py (raw_input_original): store a pointer to the
1427 true raw_input to harden against code which can modify it
1431 true raw_input to harden against code which can modify it
1428 (wx.py.PyShell does this and would otherwise crash ipython).
1432 (wx.py.PyShell does this and would otherwise crash ipython).
1429 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1433 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1430
1434
1431 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1435 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1432 Ctrl-C problem, which does not mess up the input line.
1436 Ctrl-C problem, which does not mess up the input line.
1433
1437
1434 2004-11-03 Fernando Perez <fperez@colorado.edu>
1438 2004-11-03 Fernando Perez <fperez@colorado.edu>
1435
1439
1436 * IPython/Release.py: Changed licensing to BSD, in all files.
1440 * IPython/Release.py: Changed licensing to BSD, in all files.
1437 (name): lowercase name for tarball/RPM release.
1441 (name): lowercase name for tarball/RPM release.
1438
1442
1439 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1443 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1440 use throughout ipython.
1444 use throughout ipython.
1441
1445
1442 * IPython/Magic.py (Magic._ofind): Switch to using the new
1446 * IPython/Magic.py (Magic._ofind): Switch to using the new
1443 OInspect.getdoc() function.
1447 OInspect.getdoc() function.
1444
1448
1445 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1449 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1446 of the line currently being canceled via Ctrl-C. It's extremely
1450 of the line currently being canceled via Ctrl-C. It's extremely
1447 ugly, but I don't know how to do it better (the problem is one of
1451 ugly, but I don't know how to do it better (the problem is one of
1448 handling cross-thread exceptions).
1452 handling cross-thread exceptions).
1449
1453
1450 2004-10-28 Fernando Perez <fperez@colorado.edu>
1454 2004-10-28 Fernando Perez <fperez@colorado.edu>
1451
1455
1452 * IPython/Shell.py (signal_handler): add signal handlers to trap
1456 * IPython/Shell.py (signal_handler): add signal handlers to trap
1453 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1457 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1454 report by Francesc Alted.
1458 report by Francesc Alted.
1455
1459
1456 2004-10-21 Fernando Perez <fperez@colorado.edu>
1460 2004-10-21 Fernando Perez <fperez@colorado.edu>
1457
1461
1458 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1462 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1459 to % for pysh syntax extensions.
1463 to % for pysh syntax extensions.
1460
1464
1461 2004-10-09 Fernando Perez <fperez@colorado.edu>
1465 2004-10-09 Fernando Perez <fperez@colorado.edu>
1462
1466
1463 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1467 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1464 arrays to print a more useful summary, without calling str(arr).
1468 arrays to print a more useful summary, without calling str(arr).
1465 This avoids the problem of extremely lengthy computations which
1469 This avoids the problem of extremely lengthy computations which
1466 occur if arr is large, and appear to the user as a system lockup
1470 occur if arr is large, and appear to the user as a system lockup
1467 with 100% cpu activity. After a suggestion by Kristian Sandberg
1471 with 100% cpu activity. After a suggestion by Kristian Sandberg
1468 <Kristian.Sandberg@colorado.edu>.
1472 <Kristian.Sandberg@colorado.edu>.
1469 (Magic.__init__): fix bug in global magic escapes not being
1473 (Magic.__init__): fix bug in global magic escapes not being
1470 correctly set.
1474 correctly set.
1471
1475
1472 2004-10-08 Fernando Perez <fperez@colorado.edu>
1476 2004-10-08 Fernando Perez <fperez@colorado.edu>
1473
1477
1474 * IPython/Magic.py (__license__): change to absolute imports of
1478 * IPython/Magic.py (__license__): change to absolute imports of
1475 ipython's own internal packages, to start adapting to the absolute
1479 ipython's own internal packages, to start adapting to the absolute
1476 import requirement of PEP-328.
1480 import requirement of PEP-328.
1477
1481
1478 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1482 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1479 files, and standardize author/license marks through the Release
1483 files, and standardize author/license marks through the Release
1480 module instead of having per/file stuff (except for files with
1484 module instead of having per/file stuff (except for files with
1481 particular licenses, like the MIT/PSF-licensed codes).
1485 particular licenses, like the MIT/PSF-licensed codes).
1482
1486
1483 * IPython/Debugger.py: remove dead code for python 2.1
1487 * IPython/Debugger.py: remove dead code for python 2.1
1484
1488
1485 2004-10-04 Fernando Perez <fperez@colorado.edu>
1489 2004-10-04 Fernando Perez <fperez@colorado.edu>
1486
1490
1487 * IPython/iplib.py (ipmagic): New function for accessing magics
1491 * IPython/iplib.py (ipmagic): New function for accessing magics
1488 via a normal python function call.
1492 via a normal python function call.
1489
1493
1490 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1494 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1491 from '@' to '%', to accomodate the new @decorator syntax of python
1495 from '@' to '%', to accomodate the new @decorator syntax of python
1492 2.4.
1496 2.4.
1493
1497
1494 2004-09-29 Fernando Perez <fperez@colorado.edu>
1498 2004-09-29 Fernando Perez <fperez@colorado.edu>
1495
1499
1496 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1500 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1497 matplotlib.use to prevent running scripts which try to switch
1501 matplotlib.use to prevent running scripts which try to switch
1498 interactive backends from within ipython. This will just crash
1502 interactive backends from within ipython. This will just crash
1499 the python interpreter, so we can't allow it (but a detailed error
1503 the python interpreter, so we can't allow it (but a detailed error
1500 is given to the user).
1504 is given to the user).
1501
1505
1502 2004-09-28 Fernando Perez <fperez@colorado.edu>
1506 2004-09-28 Fernando Perez <fperez@colorado.edu>
1503
1507
1504 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1508 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1505 matplotlib-related fixes so that using @run with non-matplotlib
1509 matplotlib-related fixes so that using @run with non-matplotlib
1506 scripts doesn't pop up spurious plot windows. This requires
1510 scripts doesn't pop up spurious plot windows. This requires
1507 matplotlib >= 0.63, where I had to make some changes as well.
1511 matplotlib >= 0.63, where I had to make some changes as well.
1508
1512
1509 * IPython/ipmaker.py (make_IPython): update version requirement to
1513 * IPython/ipmaker.py (make_IPython): update version requirement to
1510 python 2.2.
1514 python 2.2.
1511
1515
1512 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1516 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1513 banner arg for embedded customization.
1517 banner arg for embedded customization.
1514
1518
1515 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1519 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1516 explicit uses of __IP as the IPython's instance name. Now things
1520 explicit uses of __IP as the IPython's instance name. Now things
1517 are properly handled via the shell.name value. The actual code
1521 are properly handled via the shell.name value. The actual code
1518 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1522 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1519 is much better than before. I'll clean things completely when the
1523 is much better than before. I'll clean things completely when the
1520 magic stuff gets a real overhaul.
1524 magic stuff gets a real overhaul.
1521
1525
1522 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1526 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1523 minor changes to debian dir.
1527 minor changes to debian dir.
1524
1528
1525 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1529 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1526 pointer to the shell itself in the interactive namespace even when
1530 pointer to the shell itself in the interactive namespace even when
1527 a user-supplied dict is provided. This is needed for embedding
1531 a user-supplied dict is provided. This is needed for embedding
1528 purposes (found by tests with Michel Sanner).
1532 purposes (found by tests with Michel Sanner).
1529
1533
1530 2004-09-27 Fernando Perez <fperez@colorado.edu>
1534 2004-09-27 Fernando Perez <fperez@colorado.edu>
1531
1535
1532 * IPython/UserConfig/ipythonrc: remove []{} from
1536 * IPython/UserConfig/ipythonrc: remove []{} from
1533 readline_remove_delims, so that things like [modname.<TAB> do
1537 readline_remove_delims, so that things like [modname.<TAB> do
1534 proper completion. This disables [].TAB, but that's a less common
1538 proper completion. This disables [].TAB, but that's a less common
1535 case than module names in list comprehensions, for example.
1539 case than module names in list comprehensions, for example.
1536 Thanks to a report by Andrea Riciputi.
1540 Thanks to a report by Andrea Riciputi.
1537
1541
1538 2004-09-09 Fernando Perez <fperez@colorado.edu>
1542 2004-09-09 Fernando Perez <fperez@colorado.edu>
1539
1543
1540 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1544 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1541 blocking problems in win32 and osx. Fix by John.
1545 blocking problems in win32 and osx. Fix by John.
1542
1546
1543 2004-09-08 Fernando Perez <fperez@colorado.edu>
1547 2004-09-08 Fernando Perez <fperez@colorado.edu>
1544
1548
1545 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1549 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1546 for Win32 and OSX. Fix by John Hunter.
1550 for Win32 and OSX. Fix by John Hunter.
1547
1551
1548 2004-08-30 *** Released version 0.6.3
1552 2004-08-30 *** Released version 0.6.3
1549
1553
1550 2004-08-30 Fernando Perez <fperez@colorado.edu>
1554 2004-08-30 Fernando Perez <fperez@colorado.edu>
1551
1555
1552 * setup.py (isfile): Add manpages to list of dependent files to be
1556 * setup.py (isfile): Add manpages to list of dependent files to be
1553 updated.
1557 updated.
1554
1558
1555 2004-08-27 Fernando Perez <fperez@colorado.edu>
1559 2004-08-27 Fernando Perez <fperez@colorado.edu>
1556
1560
1557 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1561 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1558 for now. They don't really work with standalone WX/GTK code
1562 for now. They don't really work with standalone WX/GTK code
1559 (though matplotlib IS working fine with both of those backends).
1563 (though matplotlib IS working fine with both of those backends).
1560 This will neeed much more testing. I disabled most things with
1564 This will neeed much more testing. I disabled most things with
1561 comments, so turning it back on later should be pretty easy.
1565 comments, so turning it back on later should be pretty easy.
1562
1566
1563 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1567 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1564 autocalling of expressions like r'foo', by modifying the line
1568 autocalling of expressions like r'foo', by modifying the line
1565 split regexp. Closes
1569 split regexp. Closes
1566 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1570 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1567 Riley <ipythonbugs-AT-sabi.net>.
1571 Riley <ipythonbugs-AT-sabi.net>.
1568 (InteractiveShell.mainloop): honor --nobanner with banner
1572 (InteractiveShell.mainloop): honor --nobanner with banner
1569 extensions.
1573 extensions.
1570
1574
1571 * IPython/Shell.py: Significant refactoring of all classes, so
1575 * IPython/Shell.py: Significant refactoring of all classes, so
1572 that we can really support ALL matplotlib backends and threading
1576 that we can really support ALL matplotlib backends and threading
1573 models (John spotted a bug with Tk which required this). Now we
1577 models (John spotted a bug with Tk which required this). Now we
1574 should support single-threaded, WX-threads and GTK-threads, both
1578 should support single-threaded, WX-threads and GTK-threads, both
1575 for generic code and for matplotlib.
1579 for generic code and for matplotlib.
1576
1580
1577 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1581 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1578 -pylab, to simplify things for users. Will also remove the pylab
1582 -pylab, to simplify things for users. Will also remove the pylab
1579 profile, since now all of matplotlib configuration is directly
1583 profile, since now all of matplotlib configuration is directly
1580 handled here. This also reduces startup time.
1584 handled here. This also reduces startup time.
1581
1585
1582 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1586 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1583 shell wasn't being correctly called. Also in IPShellWX.
1587 shell wasn't being correctly called. Also in IPShellWX.
1584
1588
1585 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1589 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1586 fine-tune banner.
1590 fine-tune banner.
1587
1591
1588 * IPython/numutils.py (spike): Deprecate these spike functions,
1592 * IPython/numutils.py (spike): Deprecate these spike functions,
1589 delete (long deprecated) gnuplot_exec handler.
1593 delete (long deprecated) gnuplot_exec handler.
1590
1594
1591 2004-08-26 Fernando Perez <fperez@colorado.edu>
1595 2004-08-26 Fernando Perez <fperez@colorado.edu>
1592
1596
1593 * ipython.1: Update for threading options, plus some others which
1597 * ipython.1: Update for threading options, plus some others which
1594 were missing.
1598 were missing.
1595
1599
1596 * IPython/ipmaker.py (__call__): Added -wthread option for
1600 * IPython/ipmaker.py (__call__): Added -wthread option for
1597 wxpython thread handling. Make sure threading options are only
1601 wxpython thread handling. Make sure threading options are only
1598 valid at the command line.
1602 valid at the command line.
1599
1603
1600 * scripts/ipython: moved shell selection into a factory function
1604 * scripts/ipython: moved shell selection into a factory function
1601 in Shell.py, to keep the starter script to a minimum.
1605 in Shell.py, to keep the starter script to a minimum.
1602
1606
1603 2004-08-25 Fernando Perez <fperez@colorado.edu>
1607 2004-08-25 Fernando Perez <fperez@colorado.edu>
1604
1608
1605 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1609 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1606 John. Along with some recent changes he made to matplotlib, the
1610 John. Along with some recent changes he made to matplotlib, the
1607 next versions of both systems should work very well together.
1611 next versions of both systems should work very well together.
1608
1612
1609 2004-08-24 Fernando Perez <fperez@colorado.edu>
1613 2004-08-24 Fernando Perez <fperez@colorado.edu>
1610
1614
1611 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1615 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1612 tried to switch the profiling to using hotshot, but I'm getting
1616 tried to switch the profiling to using hotshot, but I'm getting
1613 strange errors from prof.runctx() there. I may be misreading the
1617 strange errors from prof.runctx() there. I may be misreading the
1614 docs, but it looks weird. For now the profiling code will
1618 docs, but it looks weird. For now the profiling code will
1615 continue to use the standard profiler.
1619 continue to use the standard profiler.
1616
1620
1617 2004-08-23 Fernando Perez <fperez@colorado.edu>
1621 2004-08-23 Fernando Perez <fperez@colorado.edu>
1618
1622
1619 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1623 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1620 threaded shell, by John Hunter. It's not quite ready yet, but
1624 threaded shell, by John Hunter. It's not quite ready yet, but
1621 close.
1625 close.
1622
1626
1623 2004-08-22 Fernando Perez <fperez@colorado.edu>
1627 2004-08-22 Fernando Perez <fperez@colorado.edu>
1624
1628
1625 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1629 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1626 in Magic and ultraTB.
1630 in Magic and ultraTB.
1627
1631
1628 * ipython.1: document threading options in manpage.
1632 * ipython.1: document threading options in manpage.
1629
1633
1630 * scripts/ipython: Changed name of -thread option to -gthread,
1634 * scripts/ipython: Changed name of -thread option to -gthread,
1631 since this is GTK specific. I want to leave the door open for a
1635 since this is GTK specific. I want to leave the door open for a
1632 -wthread option for WX, which will most likely be necessary. This
1636 -wthread option for WX, which will most likely be necessary. This
1633 change affects usage and ipmaker as well.
1637 change affects usage and ipmaker as well.
1634
1638
1635 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1639 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1636 handle the matplotlib shell issues. Code by John Hunter
1640 handle the matplotlib shell issues. Code by John Hunter
1637 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1641 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1638 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1642 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1639 broken (and disabled for end users) for now, but it puts the
1643 broken (and disabled for end users) for now, but it puts the
1640 infrastructure in place.
1644 infrastructure in place.
1641
1645
1642 2004-08-21 Fernando Perez <fperez@colorado.edu>
1646 2004-08-21 Fernando Perez <fperez@colorado.edu>
1643
1647
1644 * ipythonrc-pylab: Add matplotlib support.
1648 * ipythonrc-pylab: Add matplotlib support.
1645
1649
1646 * matplotlib_config.py: new files for matplotlib support, part of
1650 * matplotlib_config.py: new files for matplotlib support, part of
1647 the pylab profile.
1651 the pylab profile.
1648
1652
1649 * IPython/usage.py (__doc__): documented the threading options.
1653 * IPython/usage.py (__doc__): documented the threading options.
1650
1654
1651 2004-08-20 Fernando Perez <fperez@colorado.edu>
1655 2004-08-20 Fernando Perez <fperez@colorado.edu>
1652
1656
1653 * ipython: Modified the main calling routine to handle the -thread
1657 * ipython: Modified the main calling routine to handle the -thread
1654 and -mpthread options. This needs to be done as a top-level hack,
1658 and -mpthread options. This needs to be done as a top-level hack,
1655 because it determines which class to instantiate for IPython
1659 because it determines which class to instantiate for IPython
1656 itself.
1660 itself.
1657
1661
1658 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1662 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1659 classes to support multithreaded GTK operation without blocking,
1663 classes to support multithreaded GTK operation without blocking,
1660 and matplotlib with all backends. This is a lot of still very
1664 and matplotlib with all backends. This is a lot of still very
1661 experimental code, and threads are tricky. So it may still have a
1665 experimental code, and threads are tricky. So it may still have a
1662 few rough edges... This code owes a lot to
1666 few rough edges... This code owes a lot to
1663 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1667 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1664 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1668 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1665 to John Hunter for all the matplotlib work.
1669 to John Hunter for all the matplotlib work.
1666
1670
1667 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1671 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1668 options for gtk thread and matplotlib support.
1672 options for gtk thread and matplotlib support.
1669
1673
1670 2004-08-16 Fernando Perez <fperez@colorado.edu>
1674 2004-08-16 Fernando Perez <fperez@colorado.edu>
1671
1675
1672 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1676 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1673 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1677 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1674 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1678 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1675
1679
1676 2004-08-11 Fernando Perez <fperez@colorado.edu>
1680 2004-08-11 Fernando Perez <fperez@colorado.edu>
1677
1681
1678 * setup.py (isfile): Fix build so documentation gets updated for
1682 * setup.py (isfile): Fix build so documentation gets updated for
1679 rpms (it was only done for .tgz builds).
1683 rpms (it was only done for .tgz builds).
1680
1684
1681 2004-08-10 Fernando Perez <fperez@colorado.edu>
1685 2004-08-10 Fernando Perez <fperez@colorado.edu>
1682
1686
1683 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1687 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1684
1688
1685 * iplib.py : Silence syntax error exceptions in tab-completion.
1689 * iplib.py : Silence syntax error exceptions in tab-completion.
1686
1690
1687 2004-08-05 Fernando Perez <fperez@colorado.edu>
1691 2004-08-05 Fernando Perez <fperez@colorado.edu>
1688
1692
1689 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1693 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1690 'color off' mark for continuation prompts. This was causing long
1694 'color off' mark for continuation prompts. This was causing long
1691 continuation lines to mis-wrap.
1695 continuation lines to mis-wrap.
1692
1696
1693 2004-08-01 Fernando Perez <fperez@colorado.edu>
1697 2004-08-01 Fernando Perez <fperez@colorado.edu>
1694
1698
1695 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1699 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1696 for building ipython to be a parameter. All this is necessary
1700 for building ipython to be a parameter. All this is necessary
1697 right now to have a multithreaded version, but this insane
1701 right now to have a multithreaded version, but this insane
1698 non-design will be cleaned up soon. For now, it's a hack that
1702 non-design will be cleaned up soon. For now, it's a hack that
1699 works.
1703 works.
1700
1704
1701 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1705 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1702 args in various places. No bugs so far, but it's a dangerous
1706 args in various places. No bugs so far, but it's a dangerous
1703 practice.
1707 practice.
1704
1708
1705 2004-07-31 Fernando Perez <fperez@colorado.edu>
1709 2004-07-31 Fernando Perez <fperez@colorado.edu>
1706
1710
1707 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1711 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1708 fix completion of files with dots in their names under most
1712 fix completion of files with dots in their names under most
1709 profiles (pysh was OK because the completion order is different).
1713 profiles (pysh was OK because the completion order is different).
1710
1714
1711 2004-07-27 Fernando Perez <fperez@colorado.edu>
1715 2004-07-27 Fernando Perez <fperez@colorado.edu>
1712
1716
1713 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1717 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1714 keywords manually, b/c the one in keyword.py was removed in python
1718 keywords manually, b/c the one in keyword.py was removed in python
1715 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1719 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1716 This is NOT a bug under python 2.3 and earlier.
1720 This is NOT a bug under python 2.3 and earlier.
1717
1721
1718 2004-07-26 Fernando Perez <fperez@colorado.edu>
1722 2004-07-26 Fernando Perez <fperez@colorado.edu>
1719
1723
1720 * IPython/ultraTB.py (VerboseTB.text): Add another
1724 * IPython/ultraTB.py (VerboseTB.text): Add another
1721 linecache.checkcache() call to try to prevent inspect.py from
1725 linecache.checkcache() call to try to prevent inspect.py from
1722 crashing under python 2.3. I think this fixes
1726 crashing under python 2.3. I think this fixes
1723 http://www.scipy.net/roundup/ipython/issue17.
1727 http://www.scipy.net/roundup/ipython/issue17.
1724
1728
1725 2004-07-26 *** Released version 0.6.2
1729 2004-07-26 *** Released version 0.6.2
1726
1730
1727 2004-07-26 Fernando Perez <fperez@colorado.edu>
1731 2004-07-26 Fernando Perez <fperez@colorado.edu>
1728
1732
1729 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1733 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1730 fail for any number.
1734 fail for any number.
1731 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1735 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1732 empty bookmarks.
1736 empty bookmarks.
1733
1737
1734 2004-07-26 *** Released version 0.6.1
1738 2004-07-26 *** Released version 0.6.1
1735
1739
1736 2004-07-26 Fernando Perez <fperez@colorado.edu>
1740 2004-07-26 Fernando Perez <fperez@colorado.edu>
1737
1741
1738 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1742 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1739
1743
1740 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1744 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1741 escaping '()[]{}' in filenames.
1745 escaping '()[]{}' in filenames.
1742
1746
1743 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1747 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1744 Python 2.2 users who lack a proper shlex.split.
1748 Python 2.2 users who lack a proper shlex.split.
1745
1749
1746 2004-07-19 Fernando Perez <fperez@colorado.edu>
1750 2004-07-19 Fernando Perez <fperez@colorado.edu>
1747
1751
1748 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1752 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1749 for reading readline's init file. I follow the normal chain:
1753 for reading readline's init file. I follow the normal chain:
1750 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1754 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1751 report by Mike Heeter. This closes
1755 report by Mike Heeter. This closes
1752 http://www.scipy.net/roundup/ipython/issue16.
1756 http://www.scipy.net/roundup/ipython/issue16.
1753
1757
1754 2004-07-18 Fernando Perez <fperez@colorado.edu>
1758 2004-07-18 Fernando Perez <fperez@colorado.edu>
1755
1759
1756 * IPython/iplib.py (__init__): Add better handling of '\' under
1760 * IPython/iplib.py (__init__): Add better handling of '\' under
1757 Win32 for filenames. After a patch by Ville.
1761 Win32 for filenames. After a patch by Ville.
1758
1762
1759 2004-07-17 Fernando Perez <fperez@colorado.edu>
1763 2004-07-17 Fernando Perez <fperez@colorado.edu>
1760
1764
1761 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1765 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1762 autocalling would be triggered for 'foo is bar' if foo is
1766 autocalling would be triggered for 'foo is bar' if foo is
1763 callable. I also cleaned up the autocall detection code to use a
1767 callable. I also cleaned up the autocall detection code to use a
1764 regexp, which is faster. Bug reported by Alexander Schmolck.
1768 regexp, which is faster. Bug reported by Alexander Schmolck.
1765
1769
1766 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1770 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1767 '?' in them would confuse the help system. Reported by Alex
1771 '?' in them would confuse the help system. Reported by Alex
1768 Schmolck.
1772 Schmolck.
1769
1773
1770 2004-07-16 Fernando Perez <fperez@colorado.edu>
1774 2004-07-16 Fernando Perez <fperez@colorado.edu>
1771
1775
1772 * IPython/GnuplotInteractive.py (__all__): added plot2.
1776 * IPython/GnuplotInteractive.py (__all__): added plot2.
1773
1777
1774 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1778 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1775 plotting dictionaries, lists or tuples of 1d arrays.
1779 plotting dictionaries, lists or tuples of 1d arrays.
1776
1780
1777 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1781 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1778 optimizations.
1782 optimizations.
1779
1783
1780 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1784 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1781 the information which was there from Janko's original IPP code:
1785 the information which was there from Janko's original IPP code:
1782
1786
1783 03.05.99 20:53 porto.ifm.uni-kiel.de
1787 03.05.99 20:53 porto.ifm.uni-kiel.de
1784 --Started changelog.
1788 --Started changelog.
1785 --make clear do what it say it does
1789 --make clear do what it say it does
1786 --added pretty output of lines from inputcache
1790 --added pretty output of lines from inputcache
1787 --Made Logger a mixin class, simplifies handling of switches
1791 --Made Logger a mixin class, simplifies handling of switches
1788 --Added own completer class. .string<TAB> expands to last history
1792 --Added own completer class. .string<TAB> expands to last history
1789 line which starts with string. The new expansion is also present
1793 line which starts with string. The new expansion is also present
1790 with Ctrl-r from the readline library. But this shows, who this
1794 with Ctrl-r from the readline library. But this shows, who this
1791 can be done for other cases.
1795 can be done for other cases.
1792 --Added convention that all shell functions should accept a
1796 --Added convention that all shell functions should accept a
1793 parameter_string This opens the door for different behaviour for
1797 parameter_string This opens the door for different behaviour for
1794 each function. @cd is a good example of this.
1798 each function. @cd is a good example of this.
1795
1799
1796 04.05.99 12:12 porto.ifm.uni-kiel.de
1800 04.05.99 12:12 porto.ifm.uni-kiel.de
1797 --added logfile rotation
1801 --added logfile rotation
1798 --added new mainloop method which freezes first the namespace
1802 --added new mainloop method which freezes first the namespace
1799
1803
1800 07.05.99 21:24 porto.ifm.uni-kiel.de
1804 07.05.99 21:24 porto.ifm.uni-kiel.de
1801 --added the docreader classes. Now there is a help system.
1805 --added the docreader classes. Now there is a help system.
1802 -This is only a first try. Currently it's not easy to put new
1806 -This is only a first try. Currently it's not easy to put new
1803 stuff in the indices. But this is the way to go. Info would be
1807 stuff in the indices. But this is the way to go. Info would be
1804 better, but HTML is every where and not everybody has an info
1808 better, but HTML is every where and not everybody has an info
1805 system installed and it's not so easy to change html-docs to info.
1809 system installed and it's not so easy to change html-docs to info.
1806 --added global logfile option
1810 --added global logfile option
1807 --there is now a hook for object inspection method pinfo needs to
1811 --there is now a hook for object inspection method pinfo needs to
1808 be provided for this. Can be reached by two '??'.
1812 be provided for this. Can be reached by two '??'.
1809
1813
1810 08.05.99 20:51 porto.ifm.uni-kiel.de
1814 08.05.99 20:51 porto.ifm.uni-kiel.de
1811 --added a README
1815 --added a README
1812 --bug in rc file. Something has changed so functions in the rc
1816 --bug in rc file. Something has changed so functions in the rc
1813 file need to reference the shell and not self. Not clear if it's a
1817 file need to reference the shell and not self. Not clear if it's a
1814 bug or feature.
1818 bug or feature.
1815 --changed rc file for new behavior
1819 --changed rc file for new behavior
1816
1820
1817 2004-07-15 Fernando Perez <fperez@colorado.edu>
1821 2004-07-15 Fernando Perez <fperez@colorado.edu>
1818
1822
1819 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1823 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1820 cache was falling out of sync in bizarre manners when multi-line
1824 cache was falling out of sync in bizarre manners when multi-line
1821 input was present. Minor optimizations and cleanup.
1825 input was present. Minor optimizations and cleanup.
1822
1826
1823 (Logger): Remove old Changelog info for cleanup. This is the
1827 (Logger): Remove old Changelog info for cleanup. This is the
1824 information which was there from Janko's original code:
1828 information which was there from Janko's original code:
1825
1829
1826 Changes to Logger: - made the default log filename a parameter
1830 Changes to Logger: - made the default log filename a parameter
1827
1831
1828 - put a check for lines beginning with !@? in log(). Needed
1832 - put a check for lines beginning with !@? in log(). Needed
1829 (even if the handlers properly log their lines) for mid-session
1833 (even if the handlers properly log their lines) for mid-session
1830 logging activation to work properly. Without this, lines logged
1834 logging activation to work properly. Without this, lines logged
1831 in mid session, which get read from the cache, would end up
1835 in mid session, which get read from the cache, would end up
1832 'bare' (with !@? in the open) in the log. Now they are caught
1836 'bare' (with !@? in the open) in the log. Now they are caught
1833 and prepended with a #.
1837 and prepended with a #.
1834
1838
1835 * IPython/iplib.py (InteractiveShell.init_readline): added check
1839 * IPython/iplib.py (InteractiveShell.init_readline): added check
1836 in case MagicCompleter fails to be defined, so we don't crash.
1840 in case MagicCompleter fails to be defined, so we don't crash.
1837
1841
1838 2004-07-13 Fernando Perez <fperez@colorado.edu>
1842 2004-07-13 Fernando Perez <fperez@colorado.edu>
1839
1843
1840 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1844 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1841 of EPS if the requested filename ends in '.eps'.
1845 of EPS if the requested filename ends in '.eps'.
1842
1846
1843 2004-07-04 Fernando Perez <fperez@colorado.edu>
1847 2004-07-04 Fernando Perez <fperez@colorado.edu>
1844
1848
1845 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1849 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1846 escaping of quotes when calling the shell.
1850 escaping of quotes when calling the shell.
1847
1851
1848 2004-07-02 Fernando Perez <fperez@colorado.edu>
1852 2004-07-02 Fernando Perez <fperez@colorado.edu>
1849
1853
1850 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1854 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1851 gettext not working because we were clobbering '_'. Fixes
1855 gettext not working because we were clobbering '_'. Fixes
1852 http://www.scipy.net/roundup/ipython/issue6.
1856 http://www.scipy.net/roundup/ipython/issue6.
1853
1857
1854 2004-07-01 Fernando Perez <fperez@colorado.edu>
1858 2004-07-01 Fernando Perez <fperez@colorado.edu>
1855
1859
1856 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1860 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1857 into @cd. Patch by Ville.
1861 into @cd. Patch by Ville.
1858
1862
1859 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1863 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1860 new function to store things after ipmaker runs. Patch by Ville.
1864 new function to store things after ipmaker runs. Patch by Ville.
1861 Eventually this will go away once ipmaker is removed and the class
1865 Eventually this will go away once ipmaker is removed and the class
1862 gets cleaned up, but for now it's ok. Key functionality here is
1866 gets cleaned up, but for now it's ok. Key functionality here is
1863 the addition of the persistent storage mechanism, a dict for
1867 the addition of the persistent storage mechanism, a dict for
1864 keeping data across sessions (for now just bookmarks, but more can
1868 keeping data across sessions (for now just bookmarks, but more can
1865 be implemented later).
1869 be implemented later).
1866
1870
1867 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1871 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1868 persistent across sections. Patch by Ville, I modified it
1872 persistent across sections. Patch by Ville, I modified it
1869 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1873 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1870 added a '-l' option to list all bookmarks.
1874 added a '-l' option to list all bookmarks.
1871
1875
1872 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1876 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1873 center for cleanup. Registered with atexit.register(). I moved
1877 center for cleanup. Registered with atexit.register(). I moved
1874 here the old exit_cleanup(). After a patch by Ville.
1878 here the old exit_cleanup(). After a patch by Ville.
1875
1879
1876 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1880 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1877 characters in the hacked shlex_split for python 2.2.
1881 characters in the hacked shlex_split for python 2.2.
1878
1882
1879 * IPython/iplib.py (file_matches): more fixes to filenames with
1883 * IPython/iplib.py (file_matches): more fixes to filenames with
1880 whitespace in them. It's not perfect, but limitations in python's
1884 whitespace in them. It's not perfect, but limitations in python's
1881 readline make it impossible to go further.
1885 readline make it impossible to go further.
1882
1886
1883 2004-06-29 Fernando Perez <fperez@colorado.edu>
1887 2004-06-29 Fernando Perez <fperez@colorado.edu>
1884
1888
1885 * IPython/iplib.py (file_matches): escape whitespace correctly in
1889 * IPython/iplib.py (file_matches): escape whitespace correctly in
1886 filename completions. Bug reported by Ville.
1890 filename completions. Bug reported by Ville.
1887
1891
1888 2004-06-28 Fernando Perez <fperez@colorado.edu>
1892 2004-06-28 Fernando Perez <fperez@colorado.edu>
1889
1893
1890 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1894 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1891 the history file will be called 'history-PROFNAME' (or just
1895 the history file will be called 'history-PROFNAME' (or just
1892 'history' if no profile is loaded). I was getting annoyed at
1896 'history' if no profile is loaded). I was getting annoyed at
1893 getting my Numerical work history clobbered by pysh sessions.
1897 getting my Numerical work history clobbered by pysh sessions.
1894
1898
1895 * IPython/iplib.py (InteractiveShell.__init__): Internal
1899 * IPython/iplib.py (InteractiveShell.__init__): Internal
1896 getoutputerror() function so that we can honor the system_verbose
1900 getoutputerror() function so that we can honor the system_verbose
1897 flag for _all_ system calls. I also added escaping of #
1901 flag for _all_ system calls. I also added escaping of #
1898 characters here to avoid confusing Itpl.
1902 characters here to avoid confusing Itpl.
1899
1903
1900 * IPython/Magic.py (shlex_split): removed call to shell in
1904 * IPython/Magic.py (shlex_split): removed call to shell in
1901 parse_options and replaced it with shlex.split(). The annoying
1905 parse_options and replaced it with shlex.split(). The annoying
1902 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1906 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1903 to backport it from 2.3, with several frail hacks (the shlex
1907 to backport it from 2.3, with several frail hacks (the shlex
1904 module is rather limited in 2.2). Thanks to a suggestion by Ville
1908 module is rather limited in 2.2). Thanks to a suggestion by Ville
1905 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1909 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1906 problem.
1910 problem.
1907
1911
1908 (Magic.magic_system_verbose): new toggle to print the actual
1912 (Magic.magic_system_verbose): new toggle to print the actual
1909 system calls made by ipython. Mainly for debugging purposes.
1913 system calls made by ipython. Mainly for debugging purposes.
1910
1914
1911 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1915 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1912 doesn't support persistence. Reported (and fix suggested) by
1916 doesn't support persistence. Reported (and fix suggested) by
1913 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1917 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1914
1918
1915 2004-06-26 Fernando Perez <fperez@colorado.edu>
1919 2004-06-26 Fernando Perez <fperez@colorado.edu>
1916
1920
1917 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1921 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1918 continue prompts.
1922 continue prompts.
1919
1923
1920 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1924 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1921 function (basically a big docstring) and a few more things here to
1925 function (basically a big docstring) and a few more things here to
1922 speedup startup. pysh.py is now very lightweight. We want because
1926 speedup startup. pysh.py is now very lightweight. We want because
1923 it gets execfile'd, while InterpreterExec gets imported, so
1927 it gets execfile'd, while InterpreterExec gets imported, so
1924 byte-compilation saves time.
1928 byte-compilation saves time.
1925
1929
1926 2004-06-25 Fernando Perez <fperez@colorado.edu>
1930 2004-06-25 Fernando Perez <fperez@colorado.edu>
1927
1931
1928 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1932 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1929 -NUM', which was recently broken.
1933 -NUM', which was recently broken.
1930
1934
1931 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1935 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1932 in multi-line input (but not !!, which doesn't make sense there).
1936 in multi-line input (but not !!, which doesn't make sense there).
1933
1937
1934 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1938 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1935 It's just too useful, and people can turn it off in the less
1939 It's just too useful, and people can turn it off in the less
1936 common cases where it's a problem.
1940 common cases where it's a problem.
1937
1941
1938 2004-06-24 Fernando Perez <fperez@colorado.edu>
1942 2004-06-24 Fernando Perez <fperez@colorado.edu>
1939
1943
1940 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1944 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1941 special syntaxes (like alias calling) is now allied in multi-line
1945 special syntaxes (like alias calling) is now allied in multi-line
1942 input. This is still _very_ experimental, but it's necessary for
1946 input. This is still _very_ experimental, but it's necessary for
1943 efficient shell usage combining python looping syntax with system
1947 efficient shell usage combining python looping syntax with system
1944 calls. For now it's restricted to aliases, I don't think it
1948 calls. For now it's restricted to aliases, I don't think it
1945 really even makes sense to have this for magics.
1949 really even makes sense to have this for magics.
1946
1950
1947 2004-06-23 Fernando Perez <fperez@colorado.edu>
1951 2004-06-23 Fernando Perez <fperez@colorado.edu>
1948
1952
1949 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1953 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1950 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1954 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1951
1955
1952 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1956 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1953 extensions under Windows (after code sent by Gary Bishop). The
1957 extensions under Windows (after code sent by Gary Bishop). The
1954 extensions considered 'executable' are stored in IPython's rc
1958 extensions considered 'executable' are stored in IPython's rc
1955 structure as win_exec_ext.
1959 structure as win_exec_ext.
1956
1960
1957 * IPython/genutils.py (shell): new function, like system() but
1961 * IPython/genutils.py (shell): new function, like system() but
1958 without return value. Very useful for interactive shell work.
1962 without return value. Very useful for interactive shell work.
1959
1963
1960 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1964 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1961 delete aliases.
1965 delete aliases.
1962
1966
1963 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1967 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1964 sure that the alias table doesn't contain python keywords.
1968 sure that the alias table doesn't contain python keywords.
1965
1969
1966 2004-06-21 Fernando Perez <fperez@colorado.edu>
1970 2004-06-21 Fernando Perez <fperez@colorado.edu>
1967
1971
1968 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1972 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1969 non-existent items are found in $PATH. Reported by Thorsten.
1973 non-existent items are found in $PATH. Reported by Thorsten.
1970
1974
1971 2004-06-20 Fernando Perez <fperez@colorado.edu>
1975 2004-06-20 Fernando Perez <fperez@colorado.edu>
1972
1976
1973 * IPython/iplib.py (complete): modified the completer so that the
1977 * IPython/iplib.py (complete): modified the completer so that the
1974 order of priorities can be easily changed at runtime.
1978 order of priorities can be easily changed at runtime.
1975
1979
1976 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1980 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1977 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1981 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1978
1982
1979 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1983 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1980 expand Python variables prepended with $ in all system calls. The
1984 expand Python variables prepended with $ in all system calls. The
1981 same was done to InteractiveShell.handle_shell_escape. Now all
1985 same was done to InteractiveShell.handle_shell_escape. Now all
1982 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1986 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1983 expansion of python variables and expressions according to the
1987 expansion of python variables and expressions according to the
1984 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1988 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1985
1989
1986 Though PEP-215 has been rejected, a similar (but simpler) one
1990 Though PEP-215 has been rejected, a similar (but simpler) one
1987 seems like it will go into Python 2.4, PEP-292 -
1991 seems like it will go into Python 2.4, PEP-292 -
1988 http://www.python.org/peps/pep-0292.html.
1992 http://www.python.org/peps/pep-0292.html.
1989
1993
1990 I'll keep the full syntax of PEP-215, since IPython has since the
1994 I'll keep the full syntax of PEP-215, since IPython has since the
1991 start used Ka-Ping Yee's reference implementation discussed there
1995 start used Ka-Ping Yee's reference implementation discussed there
1992 (Itpl), and I actually like the powerful semantics it offers.
1996 (Itpl), and I actually like the powerful semantics it offers.
1993
1997
1994 In order to access normal shell variables, the $ has to be escaped
1998 In order to access normal shell variables, the $ has to be escaped
1995 via an extra $. For example:
1999 via an extra $. For example:
1996
2000
1997 In [7]: PATH='a python variable'
2001 In [7]: PATH='a python variable'
1998
2002
1999 In [8]: !echo $PATH
2003 In [8]: !echo $PATH
2000 a python variable
2004 a python variable
2001
2005
2002 In [9]: !echo $$PATH
2006 In [9]: !echo $$PATH
2003 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2007 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2004
2008
2005 (Magic.parse_options): escape $ so the shell doesn't evaluate
2009 (Magic.parse_options): escape $ so the shell doesn't evaluate
2006 things prematurely.
2010 things prematurely.
2007
2011
2008 * IPython/iplib.py (InteractiveShell.call_alias): added the
2012 * IPython/iplib.py (InteractiveShell.call_alias): added the
2009 ability for aliases to expand python variables via $.
2013 ability for aliases to expand python variables via $.
2010
2014
2011 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2015 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2012 system, now there's a @rehash/@rehashx pair of magics. These work
2016 system, now there's a @rehash/@rehashx pair of magics. These work
2013 like the csh rehash command, and can be invoked at any time. They
2017 like the csh rehash command, and can be invoked at any time. They
2014 build a table of aliases to everything in the user's $PATH
2018 build a table of aliases to everything in the user's $PATH
2015 (@rehash uses everything, @rehashx is slower but only adds
2019 (@rehash uses everything, @rehashx is slower but only adds
2016 executable files). With this, the pysh.py-based shell profile can
2020 executable files). With this, the pysh.py-based shell profile can
2017 now simply call rehash upon startup, and full access to all
2021 now simply call rehash upon startup, and full access to all
2018 programs in the user's path is obtained.
2022 programs in the user's path is obtained.
2019
2023
2020 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2024 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2021 functionality is now fully in place. I removed the old dynamic
2025 functionality is now fully in place. I removed the old dynamic
2022 code generation based approach, in favor of a much lighter one
2026 code generation based approach, in favor of a much lighter one
2023 based on a simple dict. The advantage is that this allows me to
2027 based on a simple dict. The advantage is that this allows me to
2024 now have thousands of aliases with negligible cost (unthinkable
2028 now have thousands of aliases with negligible cost (unthinkable
2025 with the old system).
2029 with the old system).
2026
2030
2027 2004-06-19 Fernando Perez <fperez@colorado.edu>
2031 2004-06-19 Fernando Perez <fperez@colorado.edu>
2028
2032
2029 * IPython/iplib.py (__init__): extended MagicCompleter class to
2033 * IPython/iplib.py (__init__): extended MagicCompleter class to
2030 also complete (last in priority) on user aliases.
2034 also complete (last in priority) on user aliases.
2031
2035
2032 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2036 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2033 call to eval.
2037 call to eval.
2034 (ItplNS.__init__): Added a new class which functions like Itpl,
2038 (ItplNS.__init__): Added a new class which functions like Itpl,
2035 but allows configuring the namespace for the evaluation to occur
2039 but allows configuring the namespace for the evaluation to occur
2036 in.
2040 in.
2037
2041
2038 2004-06-18 Fernando Perez <fperez@colorado.edu>
2042 2004-06-18 Fernando Perez <fperez@colorado.edu>
2039
2043
2040 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2044 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2041 better message when 'exit' or 'quit' are typed (a common newbie
2045 better message when 'exit' or 'quit' are typed (a common newbie
2042 confusion).
2046 confusion).
2043
2047
2044 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2048 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2045 check for Windows users.
2049 check for Windows users.
2046
2050
2047 * IPython/iplib.py (InteractiveShell.user_setup): removed
2051 * IPython/iplib.py (InteractiveShell.user_setup): removed
2048 disabling of colors for Windows. I'll test at runtime and issue a
2052 disabling of colors for Windows. I'll test at runtime and issue a
2049 warning if Gary's readline isn't found, as to nudge users to
2053 warning if Gary's readline isn't found, as to nudge users to
2050 download it.
2054 download it.
2051
2055
2052 2004-06-16 Fernando Perez <fperez@colorado.edu>
2056 2004-06-16 Fernando Perez <fperez@colorado.edu>
2053
2057
2054 * IPython/genutils.py (Stream.__init__): changed to print errors
2058 * IPython/genutils.py (Stream.__init__): changed to print errors
2055 to sys.stderr. I had a circular dependency here. Now it's
2059 to sys.stderr. I had a circular dependency here. Now it's
2056 possible to run ipython as IDLE's shell (consider this pre-alpha,
2060 possible to run ipython as IDLE's shell (consider this pre-alpha,
2057 since true stdout things end up in the starting terminal instead
2061 since true stdout things end up in the starting terminal instead
2058 of IDLE's out).
2062 of IDLE's out).
2059
2063
2060 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2064 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2061 users who haven't # updated their prompt_in2 definitions. Remove
2065 users who haven't # updated their prompt_in2 definitions. Remove
2062 eventually.
2066 eventually.
2063 (multiple_replace): added credit to original ASPN recipe.
2067 (multiple_replace): added credit to original ASPN recipe.
2064
2068
2065 2004-06-15 Fernando Perez <fperez@colorado.edu>
2069 2004-06-15 Fernando Perez <fperez@colorado.edu>
2066
2070
2067 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2071 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2068 list of auto-defined aliases.
2072 list of auto-defined aliases.
2069
2073
2070 2004-06-13 Fernando Perez <fperez@colorado.edu>
2074 2004-06-13 Fernando Perez <fperez@colorado.edu>
2071
2075
2072 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2076 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2073 install was really requested (so setup.py can be used for other
2077 install was really requested (so setup.py can be used for other
2074 things under Windows).
2078 things under Windows).
2075
2079
2076 2004-06-10 Fernando Perez <fperez@colorado.edu>
2080 2004-06-10 Fernando Perez <fperez@colorado.edu>
2077
2081
2078 * IPython/Logger.py (Logger.create_log): Manually remove any old
2082 * IPython/Logger.py (Logger.create_log): Manually remove any old
2079 backup, since os.remove may fail under Windows. Fixes bug
2083 backup, since os.remove may fail under Windows. Fixes bug
2080 reported by Thorsten.
2084 reported by Thorsten.
2081
2085
2082 2004-06-09 Fernando Perez <fperez@colorado.edu>
2086 2004-06-09 Fernando Perez <fperez@colorado.edu>
2083
2087
2084 * examples/example-embed.py: fixed all references to %n (replaced
2088 * examples/example-embed.py: fixed all references to %n (replaced
2085 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2089 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2086 for all examples and the manual as well.
2090 for all examples and the manual as well.
2087
2091
2088 2004-06-08 Fernando Perez <fperez@colorado.edu>
2092 2004-06-08 Fernando Perez <fperez@colorado.edu>
2089
2093
2090 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2094 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2091 alignment and color management. All 3 prompt subsystems now
2095 alignment and color management. All 3 prompt subsystems now
2092 inherit from BasePrompt.
2096 inherit from BasePrompt.
2093
2097
2094 * tools/release: updates for windows installer build and tag rpms
2098 * tools/release: updates for windows installer build and tag rpms
2095 with python version (since paths are fixed).
2099 with python version (since paths are fixed).
2096
2100
2097 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2101 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2098 which will become eventually obsolete. Also fixed the default
2102 which will become eventually obsolete. Also fixed the default
2099 prompt_in2 to use \D, so at least new users start with the correct
2103 prompt_in2 to use \D, so at least new users start with the correct
2100 defaults.
2104 defaults.
2101 WARNING: Users with existing ipythonrc files will need to apply
2105 WARNING: Users with existing ipythonrc files will need to apply
2102 this fix manually!
2106 this fix manually!
2103
2107
2104 * setup.py: make windows installer (.exe). This is finally the
2108 * setup.py: make windows installer (.exe). This is finally the
2105 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2109 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2106 which I hadn't included because it required Python 2.3 (or recent
2110 which I hadn't included because it required Python 2.3 (or recent
2107 distutils).
2111 distutils).
2108
2112
2109 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2113 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2110 usage of new '\D' escape.
2114 usage of new '\D' escape.
2111
2115
2112 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2116 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2113 lacks os.getuid())
2117 lacks os.getuid())
2114 (CachedOutput.set_colors): Added the ability to turn coloring
2118 (CachedOutput.set_colors): Added the ability to turn coloring
2115 on/off with @colors even for manually defined prompt colors. It
2119 on/off with @colors even for manually defined prompt colors. It
2116 uses a nasty global, but it works safely and via the generic color
2120 uses a nasty global, but it works safely and via the generic color
2117 handling mechanism.
2121 handling mechanism.
2118 (Prompt2.__init__): Introduced new escape '\D' for continuation
2122 (Prompt2.__init__): Introduced new escape '\D' for continuation
2119 prompts. It represents the counter ('\#') as dots.
2123 prompts. It represents the counter ('\#') as dots.
2120 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2124 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2121 need to update their ipythonrc files and replace '%n' with '\D' in
2125 need to update their ipythonrc files and replace '%n' with '\D' in
2122 their prompt_in2 settings everywhere. Sorry, but there's
2126 their prompt_in2 settings everywhere. Sorry, but there's
2123 otherwise no clean way to get all prompts to properly align. The
2127 otherwise no clean way to get all prompts to properly align. The
2124 ipythonrc shipped with IPython has been updated.
2128 ipythonrc shipped with IPython has been updated.
2125
2129
2126 2004-06-07 Fernando Perez <fperez@colorado.edu>
2130 2004-06-07 Fernando Perez <fperez@colorado.edu>
2127
2131
2128 * setup.py (isfile): Pass local_icons option to latex2html, so the
2132 * setup.py (isfile): Pass local_icons option to latex2html, so the
2129 resulting HTML file is self-contained. Thanks to
2133 resulting HTML file is self-contained. Thanks to
2130 dryice-AT-liu.com.cn for the tip.
2134 dryice-AT-liu.com.cn for the tip.
2131
2135
2132 * pysh.py: I created a new profile 'shell', which implements a
2136 * pysh.py: I created a new profile 'shell', which implements a
2133 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2137 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2134 system shell, nor will it become one anytime soon. It's mainly
2138 system shell, nor will it become one anytime soon. It's mainly
2135 meant to illustrate the use of the new flexible bash-like prompts.
2139 meant to illustrate the use of the new flexible bash-like prompts.
2136 I guess it could be used by hardy souls for true shell management,
2140 I guess it could be used by hardy souls for true shell management,
2137 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2141 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2138 profile. This uses the InterpreterExec extension provided by
2142 profile. This uses the InterpreterExec extension provided by
2139 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2143 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2140
2144
2141 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2145 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2142 auto-align itself with the length of the previous input prompt
2146 auto-align itself with the length of the previous input prompt
2143 (taking into account the invisible color escapes).
2147 (taking into account the invisible color escapes).
2144 (CachedOutput.__init__): Large restructuring of this class. Now
2148 (CachedOutput.__init__): Large restructuring of this class. Now
2145 all three prompts (primary1, primary2, output) are proper objects,
2149 all three prompts (primary1, primary2, output) are proper objects,
2146 managed by the 'parent' CachedOutput class. The code is still a
2150 managed by the 'parent' CachedOutput class. The code is still a
2147 bit hackish (all prompts share state via a pointer to the cache),
2151 bit hackish (all prompts share state via a pointer to the cache),
2148 but it's overall far cleaner than before.
2152 but it's overall far cleaner than before.
2149
2153
2150 * IPython/genutils.py (getoutputerror): modified to add verbose,
2154 * IPython/genutils.py (getoutputerror): modified to add verbose,
2151 debug and header options. This makes the interface of all getout*
2155 debug and header options. This makes the interface of all getout*
2152 functions uniform.
2156 functions uniform.
2153 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2157 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2154
2158
2155 * IPython/Magic.py (Magic.default_option): added a function to
2159 * IPython/Magic.py (Magic.default_option): added a function to
2156 allow registering default options for any magic command. This
2160 allow registering default options for any magic command. This
2157 makes it easy to have profiles which customize the magics globally
2161 makes it easy to have profiles which customize the magics globally
2158 for a certain use. The values set through this function are
2162 for a certain use. The values set through this function are
2159 picked up by the parse_options() method, which all magics should
2163 picked up by the parse_options() method, which all magics should
2160 use to parse their options.
2164 use to parse their options.
2161
2165
2162 * IPython/genutils.py (warn): modified the warnings framework to
2166 * IPython/genutils.py (warn): modified the warnings framework to
2163 use the Term I/O class. I'm trying to slowly unify all of
2167 use the Term I/O class. I'm trying to slowly unify all of
2164 IPython's I/O operations to pass through Term.
2168 IPython's I/O operations to pass through Term.
2165
2169
2166 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2170 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2167 the secondary prompt to correctly match the length of the primary
2171 the secondary prompt to correctly match the length of the primary
2168 one for any prompt. Now multi-line code will properly line up
2172 one for any prompt. Now multi-line code will properly line up
2169 even for path dependent prompts, such as the new ones available
2173 even for path dependent prompts, such as the new ones available
2170 via the prompt_specials.
2174 via the prompt_specials.
2171
2175
2172 2004-06-06 Fernando Perez <fperez@colorado.edu>
2176 2004-06-06 Fernando Perez <fperez@colorado.edu>
2173
2177
2174 * IPython/Prompts.py (prompt_specials): Added the ability to have
2178 * IPython/Prompts.py (prompt_specials): Added the ability to have
2175 bash-like special sequences in the prompts, which get
2179 bash-like special sequences in the prompts, which get
2176 automatically expanded. Things like hostname, current working
2180 automatically expanded. Things like hostname, current working
2177 directory and username are implemented already, but it's easy to
2181 directory and username are implemented already, but it's easy to
2178 add more in the future. Thanks to a patch by W.J. van der Laan
2182 add more in the future. Thanks to a patch by W.J. van der Laan
2179 <gnufnork-AT-hetdigitalegat.nl>
2183 <gnufnork-AT-hetdigitalegat.nl>
2180 (prompt_specials): Added color support for prompt strings, so
2184 (prompt_specials): Added color support for prompt strings, so
2181 users can define arbitrary color setups for their prompts.
2185 users can define arbitrary color setups for their prompts.
2182
2186
2183 2004-06-05 Fernando Perez <fperez@colorado.edu>
2187 2004-06-05 Fernando Perez <fperez@colorado.edu>
2184
2188
2185 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2189 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2186 code to load Gary Bishop's readline and configure it
2190 code to load Gary Bishop's readline and configure it
2187 automatically. Thanks to Gary for help on this.
2191 automatically. Thanks to Gary for help on this.
2188
2192
2189 2004-06-01 Fernando Perez <fperez@colorado.edu>
2193 2004-06-01 Fernando Perez <fperez@colorado.edu>
2190
2194
2191 * IPython/Logger.py (Logger.create_log): fix bug for logging
2195 * IPython/Logger.py (Logger.create_log): fix bug for logging
2192 with no filename (previous fix was incomplete).
2196 with no filename (previous fix was incomplete).
2193
2197
2194 2004-05-25 Fernando Perez <fperez@colorado.edu>
2198 2004-05-25 Fernando Perez <fperez@colorado.edu>
2195
2199
2196 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2200 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2197 parens would get passed to the shell.
2201 parens would get passed to the shell.
2198
2202
2199 2004-05-20 Fernando Perez <fperez@colorado.edu>
2203 2004-05-20 Fernando Perez <fperez@colorado.edu>
2200
2204
2201 * IPython/Magic.py (Magic.magic_prun): changed default profile
2205 * IPython/Magic.py (Magic.magic_prun): changed default profile
2202 sort order to 'time' (the more common profiling need).
2206 sort order to 'time' (the more common profiling need).
2203
2207
2204 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2208 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2205 so that source code shown is guaranteed in sync with the file on
2209 so that source code shown is guaranteed in sync with the file on
2206 disk (also changed in psource). Similar fix to the one for
2210 disk (also changed in psource). Similar fix to the one for
2207 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2211 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2208 <yann.ledu-AT-noos.fr>.
2212 <yann.ledu-AT-noos.fr>.
2209
2213
2210 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2214 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2211 with a single option would not be correctly parsed. Closes
2215 with a single option would not be correctly parsed. Closes
2212 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2216 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2213 introduced in 0.6.0 (on 2004-05-06).
2217 introduced in 0.6.0 (on 2004-05-06).
2214
2218
2215 2004-05-13 *** Released version 0.6.0
2219 2004-05-13 *** Released version 0.6.0
2216
2220
2217 2004-05-13 Fernando Perez <fperez@colorado.edu>
2221 2004-05-13 Fernando Perez <fperez@colorado.edu>
2218
2222
2219 * debian/: Added debian/ directory to CVS, so that debian support
2223 * debian/: Added debian/ directory to CVS, so that debian support
2220 is publicly accessible. The debian package is maintained by Jack
2224 is publicly accessible. The debian package is maintained by Jack
2221 Moffit <jack-AT-xiph.org>.
2225 Moffit <jack-AT-xiph.org>.
2222
2226
2223 * Documentation: included the notes about an ipython-based system
2227 * Documentation: included the notes about an ipython-based system
2224 shell (the hypothetical 'pysh') into the new_design.pdf document,
2228 shell (the hypothetical 'pysh') into the new_design.pdf document,
2225 so that these ideas get distributed to users along with the
2229 so that these ideas get distributed to users along with the
2226 official documentation.
2230 official documentation.
2227
2231
2228 2004-05-10 Fernando Perez <fperez@colorado.edu>
2232 2004-05-10 Fernando Perez <fperez@colorado.edu>
2229
2233
2230 * IPython/Logger.py (Logger.create_log): fix recently introduced
2234 * IPython/Logger.py (Logger.create_log): fix recently introduced
2231 bug (misindented line) where logstart would fail when not given an
2235 bug (misindented line) where logstart would fail when not given an
2232 explicit filename.
2236 explicit filename.
2233
2237
2234 2004-05-09 Fernando Perez <fperez@colorado.edu>
2238 2004-05-09 Fernando Perez <fperez@colorado.edu>
2235
2239
2236 * IPython/Magic.py (Magic.parse_options): skip system call when
2240 * IPython/Magic.py (Magic.parse_options): skip system call when
2237 there are no options to look for. Faster, cleaner for the common
2241 there are no options to look for. Faster, cleaner for the common
2238 case.
2242 case.
2239
2243
2240 * Documentation: many updates to the manual: describing Windows
2244 * Documentation: many updates to the manual: describing Windows
2241 support better, Gnuplot updates, credits, misc small stuff. Also
2245 support better, Gnuplot updates, credits, misc small stuff. Also
2242 updated the new_design doc a bit.
2246 updated the new_design doc a bit.
2243
2247
2244 2004-05-06 *** Released version 0.6.0.rc1
2248 2004-05-06 *** Released version 0.6.0.rc1
2245
2249
2246 2004-05-06 Fernando Perez <fperez@colorado.edu>
2250 2004-05-06 Fernando Perez <fperez@colorado.edu>
2247
2251
2248 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2252 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2249 operations to use the vastly more efficient list/''.join() method.
2253 operations to use the vastly more efficient list/''.join() method.
2250 (FormattedTB.text): Fix
2254 (FormattedTB.text): Fix
2251 http://www.scipy.net/roundup/ipython/issue12 - exception source
2255 http://www.scipy.net/roundup/ipython/issue12 - exception source
2252 extract not updated after reload. Thanks to Mike Salib
2256 extract not updated after reload. Thanks to Mike Salib
2253 <msalib-AT-mit.edu> for pinning the source of the problem.
2257 <msalib-AT-mit.edu> for pinning the source of the problem.
2254 Fortunately, the solution works inside ipython and doesn't require
2258 Fortunately, the solution works inside ipython and doesn't require
2255 any changes to python proper.
2259 any changes to python proper.
2256
2260
2257 * IPython/Magic.py (Magic.parse_options): Improved to process the
2261 * IPython/Magic.py (Magic.parse_options): Improved to process the
2258 argument list as a true shell would (by actually using the
2262 argument list as a true shell would (by actually using the
2259 underlying system shell). This way, all @magics automatically get
2263 underlying system shell). This way, all @magics automatically get
2260 shell expansion for variables. Thanks to a comment by Alex
2264 shell expansion for variables. Thanks to a comment by Alex
2261 Schmolck.
2265 Schmolck.
2262
2266
2263 2004-04-04 Fernando Perez <fperez@colorado.edu>
2267 2004-04-04 Fernando Perez <fperez@colorado.edu>
2264
2268
2265 * IPython/iplib.py (InteractiveShell.interact): Added a special
2269 * IPython/iplib.py (InteractiveShell.interact): Added a special
2266 trap for a debugger quit exception, which is basically impossible
2270 trap for a debugger quit exception, which is basically impossible
2267 to handle by normal mechanisms, given what pdb does to the stack.
2271 to handle by normal mechanisms, given what pdb does to the stack.
2268 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2272 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2269
2273
2270 2004-04-03 Fernando Perez <fperez@colorado.edu>
2274 2004-04-03 Fernando Perez <fperez@colorado.edu>
2271
2275
2272 * IPython/genutils.py (Term): Standardized the names of the Term
2276 * IPython/genutils.py (Term): Standardized the names of the Term
2273 class streams to cin/cout/cerr, following C++ naming conventions
2277 class streams to cin/cout/cerr, following C++ naming conventions
2274 (I can't use in/out/err because 'in' is not a valid attribute
2278 (I can't use in/out/err because 'in' is not a valid attribute
2275 name).
2279 name).
2276
2280
2277 * IPython/iplib.py (InteractiveShell.interact): don't increment
2281 * IPython/iplib.py (InteractiveShell.interact): don't increment
2278 the prompt if there's no user input. By Daniel 'Dang' Griffith
2282 the prompt if there's no user input. By Daniel 'Dang' Griffith
2279 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2283 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2280 Francois Pinard.
2284 Francois Pinard.
2281
2285
2282 2004-04-02 Fernando Perez <fperez@colorado.edu>
2286 2004-04-02 Fernando Perez <fperez@colorado.edu>
2283
2287
2284 * IPython/genutils.py (Stream.__init__): Modified to survive at
2288 * IPython/genutils.py (Stream.__init__): Modified to survive at
2285 least importing in contexts where stdin/out/err aren't true file
2289 least importing in contexts where stdin/out/err aren't true file
2286 objects, such as PyCrust (they lack fileno() and mode). However,
2290 objects, such as PyCrust (they lack fileno() and mode). However,
2287 the recovery facilities which rely on these things existing will
2291 the recovery facilities which rely on these things existing will
2288 not work.
2292 not work.
2289
2293
2290 2004-04-01 Fernando Perez <fperez@colorado.edu>
2294 2004-04-01 Fernando Perez <fperez@colorado.edu>
2291
2295
2292 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2296 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2293 use the new getoutputerror() function, so it properly
2297 use the new getoutputerror() function, so it properly
2294 distinguishes stdout/err.
2298 distinguishes stdout/err.
2295
2299
2296 * IPython/genutils.py (getoutputerror): added a function to
2300 * IPython/genutils.py (getoutputerror): added a function to
2297 capture separately the standard output and error of a command.
2301 capture separately the standard output and error of a command.
2298 After a comment from dang on the mailing lists. This code is
2302 After a comment from dang on the mailing lists. This code is
2299 basically a modified version of commands.getstatusoutput(), from
2303 basically a modified version of commands.getstatusoutput(), from
2300 the standard library.
2304 the standard library.
2301
2305
2302 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2306 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2303 '!!' as a special syntax (shorthand) to access @sx.
2307 '!!' as a special syntax (shorthand) to access @sx.
2304
2308
2305 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2309 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2306 command and return its output as a list split on '\n'.
2310 command and return its output as a list split on '\n'.
2307
2311
2308 2004-03-31 Fernando Perez <fperez@colorado.edu>
2312 2004-03-31 Fernando Perez <fperez@colorado.edu>
2309
2313
2310 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2314 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2311 method to dictionaries used as FakeModule instances if they lack
2315 method to dictionaries used as FakeModule instances if they lack
2312 it. At least pydoc in python2.3 breaks for runtime-defined
2316 it. At least pydoc in python2.3 breaks for runtime-defined
2313 functions without this hack. At some point I need to _really_
2317 functions without this hack. At some point I need to _really_
2314 understand what FakeModule is doing, because it's a gross hack.
2318 understand what FakeModule is doing, because it's a gross hack.
2315 But it solves Arnd's problem for now...
2319 But it solves Arnd's problem for now...
2316
2320
2317 2004-02-27 Fernando Perez <fperez@colorado.edu>
2321 2004-02-27 Fernando Perez <fperez@colorado.edu>
2318
2322
2319 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2323 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2320 mode would behave erratically. Also increased the number of
2324 mode would behave erratically. Also increased the number of
2321 possible logs in rotate mod to 999. Thanks to Rod Holland
2325 possible logs in rotate mod to 999. Thanks to Rod Holland
2322 <rhh@StructureLABS.com> for the report and fixes.
2326 <rhh@StructureLABS.com> for the report and fixes.
2323
2327
2324 2004-02-26 Fernando Perez <fperez@colorado.edu>
2328 2004-02-26 Fernando Perez <fperez@colorado.edu>
2325
2329
2326 * IPython/genutils.py (page): Check that the curses module really
2330 * IPython/genutils.py (page): Check that the curses module really
2327 has the initscr attribute before trying to use it. For some
2331 has the initscr attribute before trying to use it. For some
2328 reason, the Solaris curses module is missing this. I think this
2332 reason, the Solaris curses module is missing this. I think this
2329 should be considered a Solaris python bug, but I'm not sure.
2333 should be considered a Solaris python bug, but I'm not sure.
2330
2334
2331 2004-01-17 Fernando Perez <fperez@colorado.edu>
2335 2004-01-17 Fernando Perez <fperez@colorado.edu>
2332
2336
2333 * IPython/genutils.py (Stream.__init__): Changes to try to make
2337 * IPython/genutils.py (Stream.__init__): Changes to try to make
2334 ipython robust against stdin/out/err being closed by the user.
2338 ipython robust against stdin/out/err being closed by the user.
2335 This is 'user error' (and blocks a normal python session, at least
2339 This is 'user error' (and blocks a normal python session, at least
2336 the stdout case). However, Ipython should be able to survive such
2340 the stdout case). However, Ipython should be able to survive such
2337 instances of abuse as gracefully as possible. To simplify the
2341 instances of abuse as gracefully as possible. To simplify the
2338 coding and maintain compatibility with Gary Bishop's Term
2342 coding and maintain compatibility with Gary Bishop's Term
2339 contributions, I've made use of classmethods for this. I think
2343 contributions, I've made use of classmethods for this. I think
2340 this introduces a dependency on python 2.2.
2344 this introduces a dependency on python 2.2.
2341
2345
2342 2004-01-13 Fernando Perez <fperez@colorado.edu>
2346 2004-01-13 Fernando Perez <fperez@colorado.edu>
2343
2347
2344 * IPython/numutils.py (exp_safe): simplified the code a bit and
2348 * IPython/numutils.py (exp_safe): simplified the code a bit and
2345 removed the need for importing the kinds module altogether.
2349 removed the need for importing the kinds module altogether.
2346
2350
2347 2004-01-06 Fernando Perez <fperez@colorado.edu>
2351 2004-01-06 Fernando Perez <fperez@colorado.edu>
2348
2352
2349 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2353 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2350 a magic function instead, after some community feedback. No
2354 a magic function instead, after some community feedback. No
2351 special syntax will exist for it, but its name is deliberately
2355 special syntax will exist for it, but its name is deliberately
2352 very short.
2356 very short.
2353
2357
2354 2003-12-20 Fernando Perez <fperez@colorado.edu>
2358 2003-12-20 Fernando Perez <fperez@colorado.edu>
2355
2359
2356 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2360 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2357 new functionality, to automagically assign the result of a shell
2361 new functionality, to automagically assign the result of a shell
2358 command to a variable. I'll solicit some community feedback on
2362 command to a variable. I'll solicit some community feedback on
2359 this before making it permanent.
2363 this before making it permanent.
2360
2364
2361 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2365 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2362 requested about callables for which inspect couldn't obtain a
2366 requested about callables for which inspect couldn't obtain a
2363 proper argspec. Thanks to a crash report sent by Etienne
2367 proper argspec. Thanks to a crash report sent by Etienne
2364 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2368 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2365
2369
2366 2003-12-09 Fernando Perez <fperez@colorado.edu>
2370 2003-12-09 Fernando Perez <fperez@colorado.edu>
2367
2371
2368 * IPython/genutils.py (page): patch for the pager to work across
2372 * IPython/genutils.py (page): patch for the pager to work across
2369 various versions of Windows. By Gary Bishop.
2373 various versions of Windows. By Gary Bishop.
2370
2374
2371 2003-12-04 Fernando Perez <fperez@colorado.edu>
2375 2003-12-04 Fernando Perez <fperez@colorado.edu>
2372
2376
2373 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2377 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2374 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2378 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2375 While I tested this and it looks ok, there may still be corner
2379 While I tested this and it looks ok, there may still be corner
2376 cases I've missed.
2380 cases I've missed.
2377
2381
2378 2003-12-01 Fernando Perez <fperez@colorado.edu>
2382 2003-12-01 Fernando Perez <fperez@colorado.edu>
2379
2383
2380 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2384 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2381 where a line like 'p,q=1,2' would fail because the automagic
2385 where a line like 'p,q=1,2' would fail because the automagic
2382 system would be triggered for @p.
2386 system would be triggered for @p.
2383
2387
2384 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2388 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2385 cleanups, code unmodified.
2389 cleanups, code unmodified.
2386
2390
2387 * IPython/genutils.py (Term): added a class for IPython to handle
2391 * IPython/genutils.py (Term): added a class for IPython to handle
2388 output. In most cases it will just be a proxy for stdout/err, but
2392 output. In most cases it will just be a proxy for stdout/err, but
2389 having this allows modifications to be made for some platforms,
2393 having this allows modifications to be made for some platforms,
2390 such as handling color escapes under Windows. All of this code
2394 such as handling color escapes under Windows. All of this code
2391 was contributed by Gary Bishop, with minor modifications by me.
2395 was contributed by Gary Bishop, with minor modifications by me.
2392 The actual changes affect many files.
2396 The actual changes affect many files.
2393
2397
2394 2003-11-30 Fernando Perez <fperez@colorado.edu>
2398 2003-11-30 Fernando Perez <fperez@colorado.edu>
2395
2399
2396 * IPython/iplib.py (file_matches): new completion code, courtesy
2400 * IPython/iplib.py (file_matches): new completion code, courtesy
2397 of Jeff Collins. This enables filename completion again under
2401 of Jeff Collins. This enables filename completion again under
2398 python 2.3, which disabled it at the C level.
2402 python 2.3, which disabled it at the C level.
2399
2403
2400 2003-11-11 Fernando Perez <fperez@colorado.edu>
2404 2003-11-11 Fernando Perez <fperez@colorado.edu>
2401
2405
2402 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2406 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2403 for Numeric.array(map(...)), but often convenient.
2407 for Numeric.array(map(...)), but often convenient.
2404
2408
2405 2003-11-05 Fernando Perez <fperez@colorado.edu>
2409 2003-11-05 Fernando Perez <fperez@colorado.edu>
2406
2410
2407 * IPython/numutils.py (frange): Changed a call from int() to
2411 * IPython/numutils.py (frange): Changed a call from int() to
2408 int(round()) to prevent a problem reported with arange() in the
2412 int(round()) to prevent a problem reported with arange() in the
2409 numpy list.
2413 numpy list.
2410
2414
2411 2003-10-06 Fernando Perez <fperez@colorado.edu>
2415 2003-10-06 Fernando Perez <fperez@colorado.edu>
2412
2416
2413 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2417 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2414 prevent crashes if sys lacks an argv attribute (it happens with
2418 prevent crashes if sys lacks an argv attribute (it happens with
2415 embedded interpreters which build a bare-bones sys module).
2419 embedded interpreters which build a bare-bones sys module).
2416 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2420 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2417
2421
2418 2003-09-24 Fernando Perez <fperez@colorado.edu>
2422 2003-09-24 Fernando Perez <fperez@colorado.edu>
2419
2423
2420 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2424 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2421 to protect against poorly written user objects where __getattr__
2425 to protect against poorly written user objects where __getattr__
2422 raises exceptions other than AttributeError. Thanks to a bug
2426 raises exceptions other than AttributeError. Thanks to a bug
2423 report by Oliver Sander <osander-AT-gmx.de>.
2427 report by Oliver Sander <osander-AT-gmx.de>.
2424
2428
2425 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2429 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2426 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2430 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2427
2431
2428 2003-09-09 Fernando Perez <fperez@colorado.edu>
2432 2003-09-09 Fernando Perez <fperez@colorado.edu>
2429
2433
2430 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2434 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2431 unpacking a list whith a callable as first element would
2435 unpacking a list whith a callable as first element would
2432 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2436 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2433 Collins.
2437 Collins.
2434
2438
2435 2003-08-25 *** Released version 0.5.0
2439 2003-08-25 *** Released version 0.5.0
2436
2440
2437 2003-08-22 Fernando Perez <fperez@colorado.edu>
2441 2003-08-22 Fernando Perez <fperez@colorado.edu>
2438
2442
2439 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2443 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2440 improperly defined user exceptions. Thanks to feedback from Mark
2444 improperly defined user exceptions. Thanks to feedback from Mark
2441 Russell <mrussell-AT-verio.net>.
2445 Russell <mrussell-AT-verio.net>.
2442
2446
2443 2003-08-20 Fernando Perez <fperez@colorado.edu>
2447 2003-08-20 Fernando Perez <fperez@colorado.edu>
2444
2448
2445 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2449 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2446 printing so that it would print multi-line string forms starting
2450 printing so that it would print multi-line string forms starting
2447 with a new line. This way the formatting is better respected for
2451 with a new line. This way the formatting is better respected for
2448 objects which work hard to make nice string forms.
2452 objects which work hard to make nice string forms.
2449
2453
2450 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2454 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2451 autocall would overtake data access for objects with both
2455 autocall would overtake data access for objects with both
2452 __getitem__ and __call__.
2456 __getitem__ and __call__.
2453
2457
2454 2003-08-19 *** Released version 0.5.0-rc1
2458 2003-08-19 *** Released version 0.5.0-rc1
2455
2459
2456 2003-08-19 Fernando Perez <fperez@colorado.edu>
2460 2003-08-19 Fernando Perez <fperez@colorado.edu>
2457
2461
2458 * IPython/deep_reload.py (load_tail): single tiny change here
2462 * IPython/deep_reload.py (load_tail): single tiny change here
2459 seems to fix the long-standing bug of dreload() failing to work
2463 seems to fix the long-standing bug of dreload() failing to work
2460 for dotted names. But this module is pretty tricky, so I may have
2464 for dotted names. But this module is pretty tricky, so I may have
2461 missed some subtlety. Needs more testing!.
2465 missed some subtlety. Needs more testing!.
2462
2466
2463 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2467 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2464 exceptions which have badly implemented __str__ methods.
2468 exceptions which have badly implemented __str__ methods.
2465 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2469 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2466 which I've been getting reports about from Python 2.3 users. I
2470 which I've been getting reports about from Python 2.3 users. I
2467 wish I had a simple test case to reproduce the problem, so I could
2471 wish I had a simple test case to reproduce the problem, so I could
2468 either write a cleaner workaround or file a bug report if
2472 either write a cleaner workaround or file a bug report if
2469 necessary.
2473 necessary.
2470
2474
2471 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2475 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2472 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2476 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2473 a bug report by Tjabo Kloppenburg.
2477 a bug report by Tjabo Kloppenburg.
2474
2478
2475 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2479 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2476 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2480 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2477 seems rather unstable. Thanks to a bug report by Tjabo
2481 seems rather unstable. Thanks to a bug report by Tjabo
2478 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2482 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2479
2483
2480 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2484 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2481 this out soon because of the critical fixes in the inner loop for
2485 this out soon because of the critical fixes in the inner loop for
2482 generators.
2486 generators.
2483
2487
2484 * IPython/Magic.py (Magic.getargspec): removed. This (and
2488 * IPython/Magic.py (Magic.getargspec): removed. This (and
2485 _get_def) have been obsoleted by OInspect for a long time, I
2489 _get_def) have been obsoleted by OInspect for a long time, I
2486 hadn't noticed that they were dead code.
2490 hadn't noticed that they were dead code.
2487 (Magic._ofind): restored _ofind functionality for a few literals
2491 (Magic._ofind): restored _ofind functionality for a few literals
2488 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2492 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2489 for things like "hello".capitalize?, since that would require a
2493 for things like "hello".capitalize?, since that would require a
2490 potentially dangerous eval() again.
2494 potentially dangerous eval() again.
2491
2495
2492 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2496 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2493 logic a bit more to clean up the escapes handling and minimize the
2497 logic a bit more to clean up the escapes handling and minimize the
2494 use of _ofind to only necessary cases. The interactive 'feel' of
2498 use of _ofind to only necessary cases. The interactive 'feel' of
2495 IPython should have improved quite a bit with the changes in
2499 IPython should have improved quite a bit with the changes in
2496 _prefilter and _ofind (besides being far safer than before).
2500 _prefilter and _ofind (besides being far safer than before).
2497
2501
2498 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2502 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2499 obscure, never reported). Edit would fail to find the object to
2503 obscure, never reported). Edit would fail to find the object to
2500 edit under some circumstances.
2504 edit under some circumstances.
2501 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2505 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2502 which were causing double-calling of generators. Those eval calls
2506 which were causing double-calling of generators. Those eval calls
2503 were _very_ dangerous, since code with side effects could be
2507 were _very_ dangerous, since code with side effects could be
2504 triggered. As they say, 'eval is evil'... These were the
2508 triggered. As they say, 'eval is evil'... These were the
2505 nastiest evals in IPython. Besides, _ofind is now far simpler,
2509 nastiest evals in IPython. Besides, _ofind is now far simpler,
2506 and it should also be quite a bit faster. Its use of inspect is
2510 and it should also be quite a bit faster. Its use of inspect is
2507 also safer, so perhaps some of the inspect-related crashes I've
2511 also safer, so perhaps some of the inspect-related crashes I've
2508 seen lately with Python 2.3 might be taken care of. That will
2512 seen lately with Python 2.3 might be taken care of. That will
2509 need more testing.
2513 need more testing.
2510
2514
2511 2003-08-17 Fernando Perez <fperez@colorado.edu>
2515 2003-08-17 Fernando Perez <fperez@colorado.edu>
2512
2516
2513 * IPython/iplib.py (InteractiveShell._prefilter): significant
2517 * IPython/iplib.py (InteractiveShell._prefilter): significant
2514 simplifications to the logic for handling user escapes. Faster
2518 simplifications to the logic for handling user escapes. Faster
2515 and simpler code.
2519 and simpler code.
2516
2520
2517 2003-08-14 Fernando Perez <fperez@colorado.edu>
2521 2003-08-14 Fernando Perez <fperez@colorado.edu>
2518
2522
2519 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2523 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2520 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2524 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2521 but it should be quite a bit faster. And the recursive version
2525 but it should be quite a bit faster. And the recursive version
2522 generated O(log N) intermediate storage for all rank>1 arrays,
2526 generated O(log N) intermediate storage for all rank>1 arrays,
2523 even if they were contiguous.
2527 even if they were contiguous.
2524 (l1norm): Added this function.
2528 (l1norm): Added this function.
2525 (norm): Added this function for arbitrary norms (including
2529 (norm): Added this function for arbitrary norms (including
2526 l-infinity). l1 and l2 are still special cases for convenience
2530 l-infinity). l1 and l2 are still special cases for convenience
2527 and speed.
2531 and speed.
2528
2532
2529 2003-08-03 Fernando Perez <fperez@colorado.edu>
2533 2003-08-03 Fernando Perez <fperez@colorado.edu>
2530
2534
2531 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2535 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2532 exceptions, which now raise PendingDeprecationWarnings in Python
2536 exceptions, which now raise PendingDeprecationWarnings in Python
2533 2.3. There were some in Magic and some in Gnuplot2.
2537 2.3. There were some in Magic and some in Gnuplot2.
2534
2538
2535 2003-06-30 Fernando Perez <fperez@colorado.edu>
2539 2003-06-30 Fernando Perez <fperez@colorado.edu>
2536
2540
2537 * IPython/genutils.py (page): modified to call curses only for
2541 * IPython/genutils.py (page): modified to call curses only for
2538 terminals where TERM=='xterm'. After problems under many other
2542 terminals where TERM=='xterm'. After problems under many other
2539 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2543 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2540
2544
2541 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2545 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2542 would be triggered when readline was absent. This was just an old
2546 would be triggered when readline was absent. This was just an old
2543 debugging statement I'd forgotten to take out.
2547 debugging statement I'd forgotten to take out.
2544
2548
2545 2003-06-20 Fernando Perez <fperez@colorado.edu>
2549 2003-06-20 Fernando Perez <fperez@colorado.edu>
2546
2550
2547 * IPython/genutils.py (clock): modified to return only user time
2551 * IPython/genutils.py (clock): modified to return only user time
2548 (not counting system time), after a discussion on scipy. While
2552 (not counting system time), after a discussion on scipy. While
2549 system time may be a useful quantity occasionally, it may much
2553 system time may be a useful quantity occasionally, it may much
2550 more easily be skewed by occasional swapping or other similar
2554 more easily be skewed by occasional swapping or other similar
2551 activity.
2555 activity.
2552
2556
2553 2003-06-05 Fernando Perez <fperez@colorado.edu>
2557 2003-06-05 Fernando Perez <fperez@colorado.edu>
2554
2558
2555 * IPython/numutils.py (identity): new function, for building
2559 * IPython/numutils.py (identity): new function, for building
2556 arbitrary rank Kronecker deltas (mostly backwards compatible with
2560 arbitrary rank Kronecker deltas (mostly backwards compatible with
2557 Numeric.identity)
2561 Numeric.identity)
2558
2562
2559 2003-06-03 Fernando Perez <fperez@colorado.edu>
2563 2003-06-03 Fernando Perez <fperez@colorado.edu>
2560
2564
2561 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2565 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2562 arguments passed to magics with spaces, to allow trailing '\' to
2566 arguments passed to magics with spaces, to allow trailing '\' to
2563 work normally (mainly for Windows users).
2567 work normally (mainly for Windows users).
2564
2568
2565 2003-05-29 Fernando Perez <fperez@colorado.edu>
2569 2003-05-29 Fernando Perez <fperez@colorado.edu>
2566
2570
2567 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2571 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2568 instead of pydoc.help. This fixes a bizarre behavior where
2572 instead of pydoc.help. This fixes a bizarre behavior where
2569 printing '%s' % locals() would trigger the help system. Now
2573 printing '%s' % locals() would trigger the help system. Now
2570 ipython behaves like normal python does.
2574 ipython behaves like normal python does.
2571
2575
2572 Note that if one does 'from pydoc import help', the bizarre
2576 Note that if one does 'from pydoc import help', the bizarre
2573 behavior returns, but this will also happen in normal python, so
2577 behavior returns, but this will also happen in normal python, so
2574 it's not an ipython bug anymore (it has to do with how pydoc.help
2578 it's not an ipython bug anymore (it has to do with how pydoc.help
2575 is implemented).
2579 is implemented).
2576
2580
2577 2003-05-22 Fernando Perez <fperez@colorado.edu>
2581 2003-05-22 Fernando Perez <fperez@colorado.edu>
2578
2582
2579 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2583 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2580 return [] instead of None when nothing matches, also match to end
2584 return [] instead of None when nothing matches, also match to end
2581 of line. Patch by Gary Bishop.
2585 of line. Patch by Gary Bishop.
2582
2586
2583 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2587 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2584 protection as before, for files passed on the command line. This
2588 protection as before, for files passed on the command line. This
2585 prevents the CrashHandler from kicking in if user files call into
2589 prevents the CrashHandler from kicking in if user files call into
2586 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2590 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2587 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2591 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2588
2592
2589 2003-05-20 *** Released version 0.4.0
2593 2003-05-20 *** Released version 0.4.0
2590
2594
2591 2003-05-20 Fernando Perez <fperez@colorado.edu>
2595 2003-05-20 Fernando Perez <fperez@colorado.edu>
2592
2596
2593 * setup.py: added support for manpages. It's a bit hackish b/c of
2597 * setup.py: added support for manpages. It's a bit hackish b/c of
2594 a bug in the way the bdist_rpm distutils target handles gzipped
2598 a bug in the way the bdist_rpm distutils target handles gzipped
2595 manpages, but it works. After a patch by Jack.
2599 manpages, but it works. After a patch by Jack.
2596
2600
2597 2003-05-19 Fernando Perez <fperez@colorado.edu>
2601 2003-05-19 Fernando Perez <fperez@colorado.edu>
2598
2602
2599 * IPython/numutils.py: added a mockup of the kinds module, since
2603 * IPython/numutils.py: added a mockup of the kinds module, since
2600 it was recently removed from Numeric. This way, numutils will
2604 it was recently removed from Numeric. This way, numutils will
2601 work for all users even if they are missing kinds.
2605 work for all users even if they are missing kinds.
2602
2606
2603 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2607 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2604 failure, which can occur with SWIG-wrapped extensions. After a
2608 failure, which can occur with SWIG-wrapped extensions. After a
2605 crash report from Prabhu.
2609 crash report from Prabhu.
2606
2610
2607 2003-05-16 Fernando Perez <fperez@colorado.edu>
2611 2003-05-16 Fernando Perez <fperez@colorado.edu>
2608
2612
2609 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2613 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2610 protect ipython from user code which may call directly
2614 protect ipython from user code which may call directly
2611 sys.excepthook (this looks like an ipython crash to the user, even
2615 sys.excepthook (this looks like an ipython crash to the user, even
2612 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2616 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2613 This is especially important to help users of WxWindows, but may
2617 This is especially important to help users of WxWindows, but may
2614 also be useful in other cases.
2618 also be useful in other cases.
2615
2619
2616 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2620 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2617 an optional tb_offset to be specified, and to preserve exception
2621 an optional tb_offset to be specified, and to preserve exception
2618 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2622 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2619
2623
2620 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2624 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2621
2625
2622 2003-05-15 Fernando Perez <fperez@colorado.edu>
2626 2003-05-15 Fernando Perez <fperez@colorado.edu>
2623
2627
2624 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2628 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2625 installing for a new user under Windows.
2629 installing for a new user under Windows.
2626
2630
2627 2003-05-12 Fernando Perez <fperez@colorado.edu>
2631 2003-05-12 Fernando Perez <fperez@colorado.edu>
2628
2632
2629 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2633 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2630 handler for Emacs comint-based lines. Currently it doesn't do
2634 handler for Emacs comint-based lines. Currently it doesn't do
2631 much (but importantly, it doesn't update the history cache). In
2635 much (but importantly, it doesn't update the history cache). In
2632 the future it may be expanded if Alex needs more functionality
2636 the future it may be expanded if Alex needs more functionality
2633 there.
2637 there.
2634
2638
2635 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2639 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2636 info to crash reports.
2640 info to crash reports.
2637
2641
2638 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2642 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2639 just like Python's -c. Also fixed crash with invalid -color
2643 just like Python's -c. Also fixed crash with invalid -color
2640 option value at startup. Thanks to Will French
2644 option value at startup. Thanks to Will French
2641 <wfrench-AT-bestweb.net> for the bug report.
2645 <wfrench-AT-bestweb.net> for the bug report.
2642
2646
2643 2003-05-09 Fernando Perez <fperez@colorado.edu>
2647 2003-05-09 Fernando Perez <fperez@colorado.edu>
2644
2648
2645 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2649 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2646 to EvalDict (it's a mapping, after all) and simplified its code
2650 to EvalDict (it's a mapping, after all) and simplified its code
2647 quite a bit, after a nice discussion on c.l.py where Gustavo
2651 quite a bit, after a nice discussion on c.l.py where Gustavo
2648 Córdova <gcordova-AT-sismex.com> suggested the new version.
2652 Córdova <gcordova-AT-sismex.com> suggested the new version.
2649
2653
2650 2003-04-30 Fernando Perez <fperez@colorado.edu>
2654 2003-04-30 Fernando Perez <fperez@colorado.edu>
2651
2655
2652 * IPython/genutils.py (timings_out): modified it to reduce its
2656 * IPython/genutils.py (timings_out): modified it to reduce its
2653 overhead in the common reps==1 case.
2657 overhead in the common reps==1 case.
2654
2658
2655 2003-04-29 Fernando Perez <fperez@colorado.edu>
2659 2003-04-29 Fernando Perez <fperez@colorado.edu>
2656
2660
2657 * IPython/genutils.py (timings_out): Modified to use the resource
2661 * IPython/genutils.py (timings_out): Modified to use the resource
2658 module, which avoids the wraparound problems of time.clock().
2662 module, which avoids the wraparound problems of time.clock().
2659
2663
2660 2003-04-17 *** Released version 0.2.15pre4
2664 2003-04-17 *** Released version 0.2.15pre4
2661
2665
2662 2003-04-17 Fernando Perez <fperez@colorado.edu>
2666 2003-04-17 Fernando Perez <fperez@colorado.edu>
2663
2667
2664 * setup.py (scriptfiles): Split windows-specific stuff over to a
2668 * setup.py (scriptfiles): Split windows-specific stuff over to a
2665 separate file, in an attempt to have a Windows GUI installer.
2669 separate file, in an attempt to have a Windows GUI installer.
2666 That didn't work, but part of the groundwork is done.
2670 That didn't work, but part of the groundwork is done.
2667
2671
2668 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2672 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2669 indent/unindent with 4 spaces. Particularly useful in combination
2673 indent/unindent with 4 spaces. Particularly useful in combination
2670 with the new auto-indent option.
2674 with the new auto-indent option.
2671
2675
2672 2003-04-16 Fernando Perez <fperez@colorado.edu>
2676 2003-04-16 Fernando Perez <fperez@colorado.edu>
2673
2677
2674 * IPython/Magic.py: various replacements of self.rc for
2678 * IPython/Magic.py: various replacements of self.rc for
2675 self.shell.rc. A lot more remains to be done to fully disentangle
2679 self.shell.rc. A lot more remains to be done to fully disentangle
2676 this class from the main Shell class.
2680 this class from the main Shell class.
2677
2681
2678 * IPython/GnuplotRuntime.py: added checks for mouse support so
2682 * IPython/GnuplotRuntime.py: added checks for mouse support so
2679 that we don't try to enable it if the current gnuplot doesn't
2683 that we don't try to enable it if the current gnuplot doesn't
2680 really support it. Also added checks so that we don't try to
2684 really support it. Also added checks so that we don't try to
2681 enable persist under Windows (where Gnuplot doesn't recognize the
2685 enable persist under Windows (where Gnuplot doesn't recognize the
2682 option).
2686 option).
2683
2687
2684 * IPython/iplib.py (InteractiveShell.interact): Added optional
2688 * IPython/iplib.py (InteractiveShell.interact): Added optional
2685 auto-indenting code, after a patch by King C. Shu
2689 auto-indenting code, after a patch by King C. Shu
2686 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2690 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2687 get along well with pasting indented code. If I ever figure out
2691 get along well with pasting indented code. If I ever figure out
2688 how to make that part go well, it will become on by default.
2692 how to make that part go well, it will become on by default.
2689
2693
2690 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2694 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2691 crash ipython if there was an unmatched '%' in the user's prompt
2695 crash ipython if there was an unmatched '%' in the user's prompt
2692 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2696 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2693
2697
2694 * IPython/iplib.py (InteractiveShell.interact): removed the
2698 * IPython/iplib.py (InteractiveShell.interact): removed the
2695 ability to ask the user whether he wants to crash or not at the
2699 ability to ask the user whether he wants to crash or not at the
2696 'last line' exception handler. Calling functions at that point
2700 'last line' exception handler. Calling functions at that point
2697 changes the stack, and the error reports would have incorrect
2701 changes the stack, and the error reports would have incorrect
2698 tracebacks.
2702 tracebacks.
2699
2703
2700 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2704 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2701 pass through a peger a pretty-printed form of any object. After a
2705 pass through a peger a pretty-printed form of any object. After a
2702 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2706 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2703
2707
2704 2003-04-14 Fernando Perez <fperez@colorado.edu>
2708 2003-04-14 Fernando Perez <fperez@colorado.edu>
2705
2709
2706 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2710 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2707 all files in ~ would be modified at first install (instead of
2711 all files in ~ would be modified at first install (instead of
2708 ~/.ipython). This could be potentially disastrous, as the
2712 ~/.ipython). This could be potentially disastrous, as the
2709 modification (make line-endings native) could damage binary files.
2713 modification (make line-endings native) could damage binary files.
2710
2714
2711 2003-04-10 Fernando Perez <fperez@colorado.edu>
2715 2003-04-10 Fernando Perez <fperez@colorado.edu>
2712
2716
2713 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2717 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2714 handle only lines which are invalid python. This now means that
2718 handle only lines which are invalid python. This now means that
2715 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2719 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2716 for the bug report.
2720 for the bug report.
2717
2721
2718 2003-04-01 Fernando Perez <fperez@colorado.edu>
2722 2003-04-01 Fernando Perez <fperez@colorado.edu>
2719
2723
2720 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2724 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2721 where failing to set sys.last_traceback would crash pdb.pm().
2725 where failing to set sys.last_traceback would crash pdb.pm().
2722 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2726 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2723 report.
2727 report.
2724
2728
2725 2003-03-25 Fernando Perez <fperez@colorado.edu>
2729 2003-03-25 Fernando Perez <fperez@colorado.edu>
2726
2730
2727 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2731 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2728 before printing it (it had a lot of spurious blank lines at the
2732 before printing it (it had a lot of spurious blank lines at the
2729 end).
2733 end).
2730
2734
2731 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2735 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2732 output would be sent 21 times! Obviously people don't use this
2736 output would be sent 21 times! Obviously people don't use this
2733 too often, or I would have heard about it.
2737 too often, or I would have heard about it.
2734
2738
2735 2003-03-24 Fernando Perez <fperez@colorado.edu>
2739 2003-03-24 Fernando Perez <fperez@colorado.edu>
2736
2740
2737 * setup.py (scriptfiles): renamed the data_files parameter from
2741 * setup.py (scriptfiles): renamed the data_files parameter from
2738 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2742 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2739 for the patch.
2743 for the patch.
2740
2744
2741 2003-03-20 Fernando Perez <fperez@colorado.edu>
2745 2003-03-20 Fernando Perez <fperez@colorado.edu>
2742
2746
2743 * IPython/genutils.py (error): added error() and fatal()
2747 * IPython/genutils.py (error): added error() and fatal()
2744 functions.
2748 functions.
2745
2749
2746 2003-03-18 *** Released version 0.2.15pre3
2750 2003-03-18 *** Released version 0.2.15pre3
2747
2751
2748 2003-03-18 Fernando Perez <fperez@colorado.edu>
2752 2003-03-18 Fernando Perez <fperez@colorado.edu>
2749
2753
2750 * setupext/install_data_ext.py
2754 * setupext/install_data_ext.py
2751 (install_data_ext.initialize_options): Class contributed by Jack
2755 (install_data_ext.initialize_options): Class contributed by Jack
2752 Moffit for fixing the old distutils hack. He is sending this to
2756 Moffit for fixing the old distutils hack. He is sending this to
2753 the distutils folks so in the future we may not need it as a
2757 the distutils folks so in the future we may not need it as a
2754 private fix.
2758 private fix.
2755
2759
2756 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2760 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2757 changes for Debian packaging. See his patch for full details.
2761 changes for Debian packaging. See his patch for full details.
2758 The old distutils hack of making the ipythonrc* files carry a
2762 The old distutils hack of making the ipythonrc* files carry a
2759 bogus .py extension is gone, at last. Examples were moved to a
2763 bogus .py extension is gone, at last. Examples were moved to a
2760 separate subdir under doc/, and the separate executable scripts
2764 separate subdir under doc/, and the separate executable scripts
2761 now live in their own directory. Overall a great cleanup. The
2765 now live in their own directory. Overall a great cleanup. The
2762 manual was updated to use the new files, and setup.py has been
2766 manual was updated to use the new files, and setup.py has been
2763 fixed for this setup.
2767 fixed for this setup.
2764
2768
2765 * IPython/PyColorize.py (Parser.usage): made non-executable and
2769 * IPython/PyColorize.py (Parser.usage): made non-executable and
2766 created a pycolor wrapper around it to be included as a script.
2770 created a pycolor wrapper around it to be included as a script.
2767
2771
2768 2003-03-12 *** Released version 0.2.15pre2
2772 2003-03-12 *** Released version 0.2.15pre2
2769
2773
2770 2003-03-12 Fernando Perez <fperez@colorado.edu>
2774 2003-03-12 Fernando Perez <fperez@colorado.edu>
2771
2775
2772 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2776 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2773 long-standing problem with garbage characters in some terminals.
2777 long-standing problem with garbage characters in some terminals.
2774 The issue was really that the \001 and \002 escapes must _only_ be
2778 The issue was really that the \001 and \002 escapes must _only_ be
2775 passed to input prompts (which call readline), but _never_ to
2779 passed to input prompts (which call readline), but _never_ to
2776 normal text to be printed on screen. I changed ColorANSI to have
2780 normal text to be printed on screen. I changed ColorANSI to have
2777 two classes: TermColors and InputTermColors, each with the
2781 two classes: TermColors and InputTermColors, each with the
2778 appropriate escapes for input prompts or normal text. The code in
2782 appropriate escapes for input prompts or normal text. The code in
2779 Prompts.py got slightly more complicated, but this very old and
2783 Prompts.py got slightly more complicated, but this very old and
2780 annoying bug is finally fixed.
2784 annoying bug is finally fixed.
2781
2785
2782 All the credit for nailing down the real origin of this problem
2786 All the credit for nailing down the real origin of this problem
2783 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2787 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2784 *Many* thanks to him for spending quite a bit of effort on this.
2788 *Many* thanks to him for spending quite a bit of effort on this.
2785
2789
2786 2003-03-05 *** Released version 0.2.15pre1
2790 2003-03-05 *** Released version 0.2.15pre1
2787
2791
2788 2003-03-03 Fernando Perez <fperez@colorado.edu>
2792 2003-03-03 Fernando Perez <fperez@colorado.edu>
2789
2793
2790 * IPython/FakeModule.py: Moved the former _FakeModule to a
2794 * IPython/FakeModule.py: Moved the former _FakeModule to a
2791 separate file, because it's also needed by Magic (to fix a similar
2795 separate file, because it's also needed by Magic (to fix a similar
2792 pickle-related issue in @run).
2796 pickle-related issue in @run).
2793
2797
2794 2003-03-02 Fernando Perez <fperez@colorado.edu>
2798 2003-03-02 Fernando Perez <fperez@colorado.edu>
2795
2799
2796 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2800 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2797 the autocall option at runtime.
2801 the autocall option at runtime.
2798 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2802 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2799 across Magic.py to start separating Magic from InteractiveShell.
2803 across Magic.py to start separating Magic from InteractiveShell.
2800 (Magic._ofind): Fixed to return proper namespace for dotted
2804 (Magic._ofind): Fixed to return proper namespace for dotted
2801 names. Before, a dotted name would always return 'not currently
2805 names. Before, a dotted name would always return 'not currently
2802 defined', because it would find the 'parent'. s.x would be found,
2806 defined', because it would find the 'parent'. s.x would be found,
2803 but since 'x' isn't defined by itself, it would get confused.
2807 but since 'x' isn't defined by itself, it would get confused.
2804 (Magic.magic_run): Fixed pickling problems reported by Ralf
2808 (Magic.magic_run): Fixed pickling problems reported by Ralf
2805 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2809 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2806 that I'd used when Mike Heeter reported similar issues at the
2810 that I'd used when Mike Heeter reported similar issues at the
2807 top-level, but now for @run. It boils down to injecting the
2811 top-level, but now for @run. It boils down to injecting the
2808 namespace where code is being executed with something that looks
2812 namespace where code is being executed with something that looks
2809 enough like a module to fool pickle.dump(). Since a pickle stores
2813 enough like a module to fool pickle.dump(). Since a pickle stores
2810 a named reference to the importing module, we need this for
2814 a named reference to the importing module, we need this for
2811 pickles to save something sensible.
2815 pickles to save something sensible.
2812
2816
2813 * IPython/ipmaker.py (make_IPython): added an autocall option.
2817 * IPython/ipmaker.py (make_IPython): added an autocall option.
2814
2818
2815 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2819 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2816 the auto-eval code. Now autocalling is an option, and the code is
2820 the auto-eval code. Now autocalling is an option, and the code is
2817 also vastly safer. There is no more eval() involved at all.
2821 also vastly safer. There is no more eval() involved at all.
2818
2822
2819 2003-03-01 Fernando Perez <fperez@colorado.edu>
2823 2003-03-01 Fernando Perez <fperez@colorado.edu>
2820
2824
2821 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2825 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2822 dict with named keys instead of a tuple.
2826 dict with named keys instead of a tuple.
2823
2827
2824 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2828 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2825
2829
2826 * setup.py (make_shortcut): Fixed message about directories
2830 * setup.py (make_shortcut): Fixed message about directories
2827 created during Windows installation (the directories were ok, just
2831 created during Windows installation (the directories were ok, just
2828 the printed message was misleading). Thanks to Chris Liechti
2832 the printed message was misleading). Thanks to Chris Liechti
2829 <cliechti-AT-gmx.net> for the heads up.
2833 <cliechti-AT-gmx.net> for the heads up.
2830
2834
2831 2003-02-21 Fernando Perez <fperez@colorado.edu>
2835 2003-02-21 Fernando Perez <fperez@colorado.edu>
2832
2836
2833 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2837 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2834 of ValueError exception when checking for auto-execution. This
2838 of ValueError exception when checking for auto-execution. This
2835 one is raised by things like Numeric arrays arr.flat when the
2839 one is raised by things like Numeric arrays arr.flat when the
2836 array is non-contiguous.
2840 array is non-contiguous.
2837
2841
2838 2003-01-31 Fernando Perez <fperez@colorado.edu>
2842 2003-01-31 Fernando Perez <fperez@colorado.edu>
2839
2843
2840 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2844 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2841 not return any value at all (even though the command would get
2845 not return any value at all (even though the command would get
2842 executed).
2846 executed).
2843 (xsys): Flush stdout right after printing the command to ensure
2847 (xsys): Flush stdout right after printing the command to ensure
2844 proper ordering of commands and command output in the total
2848 proper ordering of commands and command output in the total
2845 output.
2849 output.
2846 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2850 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2847 system/getoutput as defaults. The old ones are kept for
2851 system/getoutput as defaults. The old ones are kept for
2848 compatibility reasons, so no code which uses this library needs
2852 compatibility reasons, so no code which uses this library needs
2849 changing.
2853 changing.
2850
2854
2851 2003-01-27 *** Released version 0.2.14
2855 2003-01-27 *** Released version 0.2.14
2852
2856
2853 2003-01-25 Fernando Perez <fperez@colorado.edu>
2857 2003-01-25 Fernando Perez <fperez@colorado.edu>
2854
2858
2855 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2859 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2856 functions defined in previous edit sessions could not be re-edited
2860 functions defined in previous edit sessions could not be re-edited
2857 (because the temp files were immediately removed). Now temp files
2861 (because the temp files were immediately removed). Now temp files
2858 are removed only at IPython's exit.
2862 are removed only at IPython's exit.
2859 (Magic.magic_run): Improved @run to perform shell-like expansions
2863 (Magic.magic_run): Improved @run to perform shell-like expansions
2860 on its arguments (~users and $VARS). With this, @run becomes more
2864 on its arguments (~users and $VARS). With this, @run becomes more
2861 like a normal command-line.
2865 like a normal command-line.
2862
2866
2863 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2867 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2864 bugs related to embedding and cleaned up that code. A fairly
2868 bugs related to embedding and cleaned up that code. A fairly
2865 important one was the impossibility to access the global namespace
2869 important one was the impossibility to access the global namespace
2866 through the embedded IPython (only local variables were visible).
2870 through the embedded IPython (only local variables were visible).
2867
2871
2868 2003-01-14 Fernando Perez <fperez@colorado.edu>
2872 2003-01-14 Fernando Perez <fperez@colorado.edu>
2869
2873
2870 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2874 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2871 auto-calling to be a bit more conservative. Now it doesn't get
2875 auto-calling to be a bit more conservative. Now it doesn't get
2872 triggered if any of '!=()<>' are in the rest of the input line, to
2876 triggered if any of '!=()<>' are in the rest of the input line, to
2873 allow comparing callables. Thanks to Alex for the heads up.
2877 allow comparing callables. Thanks to Alex for the heads up.
2874
2878
2875 2003-01-07 Fernando Perez <fperez@colorado.edu>
2879 2003-01-07 Fernando Perez <fperez@colorado.edu>
2876
2880
2877 * IPython/genutils.py (page): fixed estimation of the number of
2881 * IPython/genutils.py (page): fixed estimation of the number of
2878 lines in a string to be paged to simply count newlines. This
2882 lines in a string to be paged to simply count newlines. This
2879 prevents over-guessing due to embedded escape sequences. A better
2883 prevents over-guessing due to embedded escape sequences. A better
2880 long-term solution would involve stripping out the control chars
2884 long-term solution would involve stripping out the control chars
2881 for the count, but it's potentially so expensive I just don't
2885 for the count, but it's potentially so expensive I just don't
2882 think it's worth doing.
2886 think it's worth doing.
2883
2887
2884 2002-12-19 *** Released version 0.2.14pre50
2888 2002-12-19 *** Released version 0.2.14pre50
2885
2889
2886 2002-12-19 Fernando Perez <fperez@colorado.edu>
2890 2002-12-19 Fernando Perez <fperez@colorado.edu>
2887
2891
2888 * tools/release (version): Changed release scripts to inform
2892 * tools/release (version): Changed release scripts to inform
2889 Andrea and build a NEWS file with a list of recent changes.
2893 Andrea and build a NEWS file with a list of recent changes.
2890
2894
2891 * IPython/ColorANSI.py (__all__): changed terminal detection
2895 * IPython/ColorANSI.py (__all__): changed terminal detection
2892 code. Seems to work better for xterms without breaking
2896 code. Seems to work better for xterms without breaking
2893 konsole. Will need more testing to determine if WinXP and Mac OSX
2897 konsole. Will need more testing to determine if WinXP and Mac OSX
2894 also work ok.
2898 also work ok.
2895
2899
2896 2002-12-18 *** Released version 0.2.14pre49
2900 2002-12-18 *** Released version 0.2.14pre49
2897
2901
2898 2002-12-18 Fernando Perez <fperez@colorado.edu>
2902 2002-12-18 Fernando Perez <fperez@colorado.edu>
2899
2903
2900 * Docs: added new info about Mac OSX, from Andrea.
2904 * Docs: added new info about Mac OSX, from Andrea.
2901
2905
2902 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2906 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2903 allow direct plotting of python strings whose format is the same
2907 allow direct plotting of python strings whose format is the same
2904 of gnuplot data files.
2908 of gnuplot data files.
2905
2909
2906 2002-12-16 Fernando Perez <fperez@colorado.edu>
2910 2002-12-16 Fernando Perez <fperez@colorado.edu>
2907
2911
2908 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2912 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2909 value of exit question to be acknowledged.
2913 value of exit question to be acknowledged.
2910
2914
2911 2002-12-03 Fernando Perez <fperez@colorado.edu>
2915 2002-12-03 Fernando Perez <fperez@colorado.edu>
2912
2916
2913 * IPython/ipmaker.py: removed generators, which had been added
2917 * IPython/ipmaker.py: removed generators, which had been added
2914 by mistake in an earlier debugging run. This was causing trouble
2918 by mistake in an earlier debugging run. This was causing trouble
2915 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2919 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2916 for pointing this out.
2920 for pointing this out.
2917
2921
2918 2002-11-17 Fernando Perez <fperez@colorado.edu>
2922 2002-11-17 Fernando Perez <fperez@colorado.edu>
2919
2923
2920 * Manual: updated the Gnuplot section.
2924 * Manual: updated the Gnuplot section.
2921
2925
2922 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2926 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2923 a much better split of what goes in Runtime and what goes in
2927 a much better split of what goes in Runtime and what goes in
2924 Interactive.
2928 Interactive.
2925
2929
2926 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2930 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2927 being imported from iplib.
2931 being imported from iplib.
2928
2932
2929 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2933 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2930 for command-passing. Now the global Gnuplot instance is called
2934 for command-passing. Now the global Gnuplot instance is called
2931 'gp' instead of 'g', which was really a far too fragile and
2935 'gp' instead of 'g', which was really a far too fragile and
2932 common name.
2936 common name.
2933
2937
2934 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2938 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2935 bounding boxes generated by Gnuplot for square plots.
2939 bounding boxes generated by Gnuplot for square plots.
2936
2940
2937 * IPython/genutils.py (popkey): new function added. I should
2941 * IPython/genutils.py (popkey): new function added. I should
2938 suggest this on c.l.py as a dict method, it seems useful.
2942 suggest this on c.l.py as a dict method, it seems useful.
2939
2943
2940 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2944 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2941 to transparently handle PostScript generation. MUCH better than
2945 to transparently handle PostScript generation. MUCH better than
2942 the previous plot_eps/replot_eps (which I removed now). The code
2946 the previous plot_eps/replot_eps (which I removed now). The code
2943 is also fairly clean and well documented now (including
2947 is also fairly clean and well documented now (including
2944 docstrings).
2948 docstrings).
2945
2949
2946 2002-11-13 Fernando Perez <fperez@colorado.edu>
2950 2002-11-13 Fernando Perez <fperez@colorado.edu>
2947
2951
2948 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2952 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2949 (inconsistent with options).
2953 (inconsistent with options).
2950
2954
2951 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2955 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2952 manually disabled, I don't know why. Fixed it.
2956 manually disabled, I don't know why. Fixed it.
2953 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2957 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2954 eps output.
2958 eps output.
2955
2959
2956 2002-11-12 Fernando Perez <fperez@colorado.edu>
2960 2002-11-12 Fernando Perez <fperez@colorado.edu>
2957
2961
2958 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2962 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2959 don't propagate up to caller. Fixes crash reported by François
2963 don't propagate up to caller. Fixes crash reported by François
2960 Pinard.
2964 Pinard.
2961
2965
2962 2002-11-09 Fernando Perez <fperez@colorado.edu>
2966 2002-11-09 Fernando Perez <fperez@colorado.edu>
2963
2967
2964 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2968 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2965 history file for new users.
2969 history file for new users.
2966 (make_IPython): fixed bug where initial install would leave the
2970 (make_IPython): fixed bug where initial install would leave the
2967 user running in the .ipython dir.
2971 user running in the .ipython dir.
2968 (make_IPython): fixed bug where config dir .ipython would be
2972 (make_IPython): fixed bug where config dir .ipython would be
2969 created regardless of the given -ipythondir option. Thanks to Cory
2973 created regardless of the given -ipythondir option. Thanks to Cory
2970 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2974 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2971
2975
2972 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2976 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2973 type confirmations. Will need to use it in all of IPython's code
2977 type confirmations. Will need to use it in all of IPython's code
2974 consistently.
2978 consistently.
2975
2979
2976 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2980 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2977 context to print 31 lines instead of the default 5. This will make
2981 context to print 31 lines instead of the default 5. This will make
2978 the crash reports extremely detailed in case the problem is in
2982 the crash reports extremely detailed in case the problem is in
2979 libraries I don't have access to.
2983 libraries I don't have access to.
2980
2984
2981 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2985 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2982 line of defense' code to still crash, but giving users fair
2986 line of defense' code to still crash, but giving users fair
2983 warning. I don't want internal errors to go unreported: if there's
2987 warning. I don't want internal errors to go unreported: if there's
2984 an internal problem, IPython should crash and generate a full
2988 an internal problem, IPython should crash and generate a full
2985 report.
2989 report.
2986
2990
2987 2002-11-08 Fernando Perez <fperez@colorado.edu>
2991 2002-11-08 Fernando Perez <fperez@colorado.edu>
2988
2992
2989 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2993 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2990 otherwise uncaught exceptions which can appear if people set
2994 otherwise uncaught exceptions which can appear if people set
2991 sys.stdout to something badly broken. Thanks to a crash report
2995 sys.stdout to something badly broken. Thanks to a crash report
2992 from henni-AT-mail.brainbot.com.
2996 from henni-AT-mail.brainbot.com.
2993
2997
2994 2002-11-04 Fernando Perez <fperez@colorado.edu>
2998 2002-11-04 Fernando Perez <fperez@colorado.edu>
2995
2999
2996 * IPython/iplib.py (InteractiveShell.interact): added
3000 * IPython/iplib.py (InteractiveShell.interact): added
2997 __IPYTHON__active to the builtins. It's a flag which goes on when
3001 __IPYTHON__active to the builtins. It's a flag which goes on when
2998 the interaction starts and goes off again when it stops. This
3002 the interaction starts and goes off again when it stops. This
2999 allows embedding code to detect being inside IPython. Before this
3003 allows embedding code to detect being inside IPython. Before this
3000 was done via __IPYTHON__, but that only shows that an IPython
3004 was done via __IPYTHON__, but that only shows that an IPython
3001 instance has been created.
3005 instance has been created.
3002
3006
3003 * IPython/Magic.py (Magic.magic_env): I realized that in a
3007 * IPython/Magic.py (Magic.magic_env): I realized that in a
3004 UserDict, instance.data holds the data as a normal dict. So I
3008 UserDict, instance.data holds the data as a normal dict. So I
3005 modified @env to return os.environ.data instead of rebuilding a
3009 modified @env to return os.environ.data instead of rebuilding a
3006 dict by hand.
3010 dict by hand.
3007
3011
3008 2002-11-02 Fernando Perez <fperez@colorado.edu>
3012 2002-11-02 Fernando Perez <fperez@colorado.edu>
3009
3013
3010 * IPython/genutils.py (warn): changed so that level 1 prints no
3014 * IPython/genutils.py (warn): changed so that level 1 prints no
3011 header. Level 2 is now the default (with 'WARNING' header, as
3015 header. Level 2 is now the default (with 'WARNING' header, as
3012 before). I think I tracked all places where changes were needed in
3016 before). I think I tracked all places where changes were needed in
3013 IPython, but outside code using the old level numbering may have
3017 IPython, but outside code using the old level numbering may have
3014 broken.
3018 broken.
3015
3019
3016 * IPython/iplib.py (InteractiveShell.runcode): added this to
3020 * IPython/iplib.py (InteractiveShell.runcode): added this to
3017 handle the tracebacks in SystemExit traps correctly. The previous
3021 handle the tracebacks in SystemExit traps correctly. The previous
3018 code (through interact) was printing more of the stack than
3022 code (through interact) was printing more of the stack than
3019 necessary, showing IPython internal code to the user.
3023 necessary, showing IPython internal code to the user.
3020
3024
3021 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3025 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3022 default. Now that the default at the confirmation prompt is yes,
3026 default. Now that the default at the confirmation prompt is yes,
3023 it's not so intrusive. François' argument that ipython sessions
3027 it's not so intrusive. François' argument that ipython sessions
3024 tend to be complex enough not to lose them from an accidental C-d,
3028 tend to be complex enough not to lose them from an accidental C-d,
3025 is a valid one.
3029 is a valid one.
3026
3030
3027 * IPython/iplib.py (InteractiveShell.interact): added a
3031 * IPython/iplib.py (InteractiveShell.interact): added a
3028 showtraceback() call to the SystemExit trap, and modified the exit
3032 showtraceback() call to the SystemExit trap, and modified the exit
3029 confirmation to have yes as the default.
3033 confirmation to have yes as the default.
3030
3034
3031 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3035 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3032 this file. It's been gone from the code for a long time, this was
3036 this file. It's been gone from the code for a long time, this was
3033 simply leftover junk.
3037 simply leftover junk.
3034
3038
3035 2002-11-01 Fernando Perez <fperez@colorado.edu>
3039 2002-11-01 Fernando Perez <fperez@colorado.edu>
3036
3040
3037 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3041 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3038 added. If set, IPython now traps EOF and asks for
3042 added. If set, IPython now traps EOF and asks for
3039 confirmation. After a request by François Pinard.
3043 confirmation. After a request by François Pinard.
3040
3044
3041 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3045 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3042 of @abort, and with a new (better) mechanism for handling the
3046 of @abort, and with a new (better) mechanism for handling the
3043 exceptions.
3047 exceptions.
3044
3048
3045 2002-10-27 Fernando Perez <fperez@colorado.edu>
3049 2002-10-27 Fernando Perez <fperez@colorado.edu>
3046
3050
3047 * IPython/usage.py (__doc__): updated the --help information and
3051 * IPython/usage.py (__doc__): updated the --help information and
3048 the ipythonrc file to indicate that -log generates
3052 the ipythonrc file to indicate that -log generates
3049 ./ipython.log. Also fixed the corresponding info in @logstart.
3053 ./ipython.log. Also fixed the corresponding info in @logstart.
3050 This and several other fixes in the manuals thanks to reports by
3054 This and several other fixes in the manuals thanks to reports by
3051 François Pinard <pinard-AT-iro.umontreal.ca>.
3055 François Pinard <pinard-AT-iro.umontreal.ca>.
3052
3056
3053 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3057 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3054 refer to @logstart (instead of @log, which doesn't exist).
3058 refer to @logstart (instead of @log, which doesn't exist).
3055
3059
3056 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3060 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3057 AttributeError crash. Thanks to Christopher Armstrong
3061 AttributeError crash. Thanks to Christopher Armstrong
3058 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3062 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3059 introduced recently (in 0.2.14pre37) with the fix to the eval
3063 introduced recently (in 0.2.14pre37) with the fix to the eval
3060 problem mentioned below.
3064 problem mentioned below.
3061
3065
3062 2002-10-17 Fernando Perez <fperez@colorado.edu>
3066 2002-10-17 Fernando Perez <fperez@colorado.edu>
3063
3067
3064 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3068 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3065 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3069 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3066
3070
3067 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3071 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3068 this function to fix a problem reported by Alex Schmolck. He saw
3072 this function to fix a problem reported by Alex Schmolck. He saw
3069 it with list comprehensions and generators, which were getting
3073 it with list comprehensions and generators, which were getting
3070 called twice. The real problem was an 'eval' call in testing for
3074 called twice. The real problem was an 'eval' call in testing for
3071 automagic which was evaluating the input line silently.
3075 automagic which was evaluating the input line silently.
3072
3076
3073 This is a potentially very nasty bug, if the input has side
3077 This is a potentially very nasty bug, if the input has side
3074 effects which must not be repeated. The code is much cleaner now,
3078 effects which must not be repeated. The code is much cleaner now,
3075 without any blanket 'except' left and with a regexp test for
3079 without any blanket 'except' left and with a regexp test for
3076 actual function names.
3080 actual function names.
3077
3081
3078 But an eval remains, which I'm not fully comfortable with. I just
3082 But an eval remains, which I'm not fully comfortable with. I just
3079 don't know how to find out if an expression could be a callable in
3083 don't know how to find out if an expression could be a callable in
3080 the user's namespace without doing an eval on the string. However
3084 the user's namespace without doing an eval on the string. However
3081 that string is now much more strictly checked so that no code
3085 that string is now much more strictly checked so that no code
3082 slips by, so the eval should only happen for things that can
3086 slips by, so the eval should only happen for things that can
3083 really be only function/method names.
3087 really be only function/method names.
3084
3088
3085 2002-10-15 Fernando Perez <fperez@colorado.edu>
3089 2002-10-15 Fernando Perez <fperez@colorado.edu>
3086
3090
3087 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3091 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3088 OSX information to main manual, removed README_Mac_OSX file from
3092 OSX information to main manual, removed README_Mac_OSX file from
3089 distribution. Also updated credits for recent additions.
3093 distribution. Also updated credits for recent additions.
3090
3094
3091 2002-10-10 Fernando Perez <fperez@colorado.edu>
3095 2002-10-10 Fernando Perez <fperez@colorado.edu>
3092
3096
3093 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3097 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3094 terminal-related issues. Many thanks to Andrea Riciputi
3098 terminal-related issues. Many thanks to Andrea Riciputi
3095 <andrea.riciputi-AT-libero.it> for writing it.
3099 <andrea.riciputi-AT-libero.it> for writing it.
3096
3100
3097 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3101 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3098 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3102 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3099
3103
3100 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3104 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3101 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3105 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3102 <syver-en-AT-online.no> who both submitted patches for this problem.
3106 <syver-en-AT-online.no> who both submitted patches for this problem.
3103
3107
3104 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3108 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3105 global embedding to make sure that things don't overwrite user
3109 global embedding to make sure that things don't overwrite user
3106 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3110 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3107
3111
3108 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3112 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3109 compatibility. Thanks to Hayden Callow
3113 compatibility. Thanks to Hayden Callow
3110 <h.callow-AT-elec.canterbury.ac.nz>
3114 <h.callow-AT-elec.canterbury.ac.nz>
3111
3115
3112 2002-10-04 Fernando Perez <fperez@colorado.edu>
3116 2002-10-04 Fernando Perez <fperez@colorado.edu>
3113
3117
3114 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3118 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3115 Gnuplot.File objects.
3119 Gnuplot.File objects.
3116
3120
3117 2002-07-23 Fernando Perez <fperez@colorado.edu>
3121 2002-07-23 Fernando Perez <fperez@colorado.edu>
3118
3122
3119 * IPython/genutils.py (timing): Added timings() and timing() for
3123 * IPython/genutils.py (timing): Added timings() and timing() for
3120 quick access to the most commonly needed data, the execution
3124 quick access to the most commonly needed data, the execution
3121 times. Old timing() renamed to timings_out().
3125 times. Old timing() renamed to timings_out().
3122
3126
3123 2002-07-18 Fernando Perez <fperez@colorado.edu>
3127 2002-07-18 Fernando Perez <fperez@colorado.edu>
3124
3128
3125 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3129 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3126 bug with nested instances disrupting the parent's tab completion.
3130 bug with nested instances disrupting the parent's tab completion.
3127
3131
3128 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3132 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3129 all_completions code to begin the emacs integration.
3133 all_completions code to begin the emacs integration.
3130
3134
3131 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3135 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3132 argument to allow titling individual arrays when plotting.
3136 argument to allow titling individual arrays when plotting.
3133
3137
3134 2002-07-15 Fernando Perez <fperez@colorado.edu>
3138 2002-07-15 Fernando Perez <fperez@colorado.edu>
3135
3139
3136 * setup.py (make_shortcut): changed to retrieve the value of
3140 * setup.py (make_shortcut): changed to retrieve the value of
3137 'Program Files' directory from the registry (this value changes in
3141 'Program Files' directory from the registry (this value changes in
3138 non-english versions of Windows). Thanks to Thomas Fanslau
3142 non-english versions of Windows). Thanks to Thomas Fanslau
3139 <tfanslau-AT-gmx.de> for the report.
3143 <tfanslau-AT-gmx.de> for the report.
3140
3144
3141 2002-07-10 Fernando Perez <fperez@colorado.edu>
3145 2002-07-10 Fernando Perez <fperez@colorado.edu>
3142
3146
3143 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3147 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3144 a bug in pdb, which crashes if a line with only whitespace is
3148 a bug in pdb, which crashes if a line with only whitespace is
3145 entered. Bug report submitted to sourceforge.
3149 entered. Bug report submitted to sourceforge.
3146
3150
3147 2002-07-09 Fernando Perez <fperez@colorado.edu>
3151 2002-07-09 Fernando Perez <fperez@colorado.edu>
3148
3152
3149 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3153 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3150 reporting exceptions (it's a bug in inspect.py, I just set a
3154 reporting exceptions (it's a bug in inspect.py, I just set a
3151 workaround).
3155 workaround).
3152
3156
3153 2002-07-08 Fernando Perez <fperez@colorado.edu>
3157 2002-07-08 Fernando Perez <fperez@colorado.edu>
3154
3158
3155 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3159 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3156 __IPYTHON__ in __builtins__ to show up in user_ns.
3160 __IPYTHON__ in __builtins__ to show up in user_ns.
3157
3161
3158 2002-07-03 Fernando Perez <fperez@colorado.edu>
3162 2002-07-03 Fernando Perez <fperez@colorado.edu>
3159
3163
3160 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3164 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3161 name from @gp_set_instance to @gp_set_default.
3165 name from @gp_set_instance to @gp_set_default.
3162
3166
3163 * IPython/ipmaker.py (make_IPython): default editor value set to
3167 * IPython/ipmaker.py (make_IPython): default editor value set to
3164 '0' (a string), to match the rc file. Otherwise will crash when
3168 '0' (a string), to match the rc file. Otherwise will crash when
3165 .strip() is called on it.
3169 .strip() is called on it.
3166
3170
3167
3171
3168 2002-06-28 Fernando Perez <fperez@colorado.edu>
3172 2002-06-28 Fernando Perez <fperez@colorado.edu>
3169
3173
3170 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3174 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3171 of files in current directory when a file is executed via
3175 of files in current directory when a file is executed via
3172 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3176 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3173
3177
3174 * setup.py (manfiles): fix for rpm builds, submitted by RA
3178 * setup.py (manfiles): fix for rpm builds, submitted by RA
3175 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3179 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3176
3180
3177 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3181 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3178 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3182 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3179 string!). A. Schmolck caught this one.
3183 string!). A. Schmolck caught this one.
3180
3184
3181 2002-06-27 Fernando Perez <fperez@colorado.edu>
3185 2002-06-27 Fernando Perez <fperez@colorado.edu>
3182
3186
3183 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3187 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3184 defined files at the cmd line. __name__ wasn't being set to
3188 defined files at the cmd line. __name__ wasn't being set to
3185 __main__.
3189 __main__.
3186
3190
3187 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3191 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3188 regular lists and tuples besides Numeric arrays.
3192 regular lists and tuples besides Numeric arrays.
3189
3193
3190 * IPython/Prompts.py (CachedOutput.__call__): Added output
3194 * IPython/Prompts.py (CachedOutput.__call__): Added output
3191 supression for input ending with ';'. Similar to Mathematica and
3195 supression for input ending with ';'. Similar to Mathematica and
3192 Matlab. The _* vars and Out[] list are still updated, just like
3196 Matlab. The _* vars and Out[] list are still updated, just like
3193 Mathematica behaves.
3197 Mathematica behaves.
3194
3198
3195 2002-06-25 Fernando Perez <fperez@colorado.edu>
3199 2002-06-25 Fernando Perez <fperez@colorado.edu>
3196
3200
3197 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3201 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3198 .ini extensions for profiels under Windows.
3202 .ini extensions for profiels under Windows.
3199
3203
3200 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3204 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3201 string form. Fix contributed by Alexander Schmolck
3205 string form. Fix contributed by Alexander Schmolck
3202 <a.schmolck-AT-gmx.net>
3206 <a.schmolck-AT-gmx.net>
3203
3207
3204 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3208 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3205 pre-configured Gnuplot instance.
3209 pre-configured Gnuplot instance.
3206
3210
3207 2002-06-21 Fernando Perez <fperez@colorado.edu>
3211 2002-06-21 Fernando Perez <fperez@colorado.edu>
3208
3212
3209 * IPython/numutils.py (exp_safe): new function, works around the
3213 * IPython/numutils.py (exp_safe): new function, works around the
3210 underflow problems in Numeric.
3214 underflow problems in Numeric.
3211 (log2): New fn. Safe log in base 2: returns exact integer answer
3215 (log2): New fn. Safe log in base 2: returns exact integer answer
3212 for exact integer powers of 2.
3216 for exact integer powers of 2.
3213
3217
3214 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3218 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3215 properly.
3219 properly.
3216
3220
3217 2002-06-20 Fernando Perez <fperez@colorado.edu>
3221 2002-06-20 Fernando Perez <fperez@colorado.edu>
3218
3222
3219 * IPython/genutils.py (timing): new function like
3223 * IPython/genutils.py (timing): new function like
3220 Mathematica's. Similar to time_test, but returns more info.
3224 Mathematica's. Similar to time_test, but returns more info.
3221
3225
3222 2002-06-18 Fernando Perez <fperez@colorado.edu>
3226 2002-06-18 Fernando Perez <fperez@colorado.edu>
3223
3227
3224 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3228 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3225 according to Mike Heeter's suggestions.
3229 according to Mike Heeter's suggestions.
3226
3230
3227 2002-06-16 Fernando Perez <fperez@colorado.edu>
3231 2002-06-16 Fernando Perez <fperez@colorado.edu>
3228
3232
3229 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3233 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3230 system. GnuplotMagic is gone as a user-directory option. New files
3234 system. GnuplotMagic is gone as a user-directory option. New files
3231 make it easier to use all the gnuplot stuff both from external
3235 make it easier to use all the gnuplot stuff both from external
3232 programs as well as from IPython. Had to rewrite part of
3236 programs as well as from IPython. Had to rewrite part of
3233 hardcopy() b/c of a strange bug: often the ps files simply don't
3237 hardcopy() b/c of a strange bug: often the ps files simply don't
3234 get created, and require a repeat of the command (often several
3238 get created, and require a repeat of the command (often several
3235 times).
3239 times).
3236
3240
3237 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3241 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3238 resolve output channel at call time, so that if sys.stderr has
3242 resolve output channel at call time, so that if sys.stderr has
3239 been redirected by user this gets honored.
3243 been redirected by user this gets honored.
3240
3244
3241 2002-06-13 Fernando Perez <fperez@colorado.edu>
3245 2002-06-13 Fernando Perez <fperez@colorado.edu>
3242
3246
3243 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3247 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3244 IPShell. Kept a copy with the old names to avoid breaking people's
3248 IPShell. Kept a copy with the old names to avoid breaking people's
3245 embedded code.
3249 embedded code.
3246
3250
3247 * IPython/ipython: simplified it to the bare minimum after
3251 * IPython/ipython: simplified it to the bare minimum after
3248 Holger's suggestions. Added info about how to use it in
3252 Holger's suggestions. Added info about how to use it in
3249 PYTHONSTARTUP.
3253 PYTHONSTARTUP.
3250
3254
3251 * IPython/Shell.py (IPythonShell): changed the options passing
3255 * IPython/Shell.py (IPythonShell): changed the options passing
3252 from a string with funky %s replacements to a straight list. Maybe
3256 from a string with funky %s replacements to a straight list. Maybe
3253 a bit more typing, but it follows sys.argv conventions, so there's
3257 a bit more typing, but it follows sys.argv conventions, so there's
3254 less special-casing to remember.
3258 less special-casing to remember.
3255
3259
3256 2002-06-12 Fernando Perez <fperez@colorado.edu>
3260 2002-06-12 Fernando Perez <fperez@colorado.edu>
3257
3261
3258 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3262 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3259 command. Thanks to a suggestion by Mike Heeter.
3263 command. Thanks to a suggestion by Mike Heeter.
3260 (Magic.magic_pfile): added behavior to look at filenames if given
3264 (Magic.magic_pfile): added behavior to look at filenames if given
3261 arg is not a defined object.
3265 arg is not a defined object.
3262 (Magic.magic_save): New @save function to save code snippets. Also
3266 (Magic.magic_save): New @save function to save code snippets. Also
3263 a Mike Heeter idea.
3267 a Mike Heeter idea.
3264
3268
3265 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3269 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3266 plot() and replot(). Much more convenient now, especially for
3270 plot() and replot(). Much more convenient now, especially for
3267 interactive use.
3271 interactive use.
3268
3272
3269 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3273 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3270 filenames.
3274 filenames.
3271
3275
3272 2002-06-02 Fernando Perez <fperez@colorado.edu>
3276 2002-06-02 Fernando Perez <fperez@colorado.edu>
3273
3277
3274 * IPython/Struct.py (Struct.__init__): modified to admit
3278 * IPython/Struct.py (Struct.__init__): modified to admit
3275 initialization via another struct.
3279 initialization via another struct.
3276
3280
3277 * IPython/genutils.py (SystemExec.__init__): New stateful
3281 * IPython/genutils.py (SystemExec.__init__): New stateful
3278 interface to xsys and bq. Useful for writing system scripts.
3282 interface to xsys and bq. Useful for writing system scripts.
3279
3283
3280 2002-05-30 Fernando Perez <fperez@colorado.edu>
3284 2002-05-30 Fernando Perez <fperez@colorado.edu>
3281
3285
3282 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3286 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3283 documents. This will make the user download smaller (it's getting
3287 documents. This will make the user download smaller (it's getting
3284 too big).
3288 too big).
3285
3289
3286 2002-05-29 Fernando Perez <fperez@colorado.edu>
3290 2002-05-29 Fernando Perez <fperez@colorado.edu>
3287
3291
3288 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3292 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3289 fix problems with shelve and pickle. Seems to work, but I don't
3293 fix problems with shelve and pickle. Seems to work, but I don't
3290 know if corner cases break it. Thanks to Mike Heeter
3294 know if corner cases break it. Thanks to Mike Heeter
3291 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3295 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3292
3296
3293 2002-05-24 Fernando Perez <fperez@colorado.edu>
3297 2002-05-24 Fernando Perez <fperez@colorado.edu>
3294
3298
3295 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3299 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3296 macros having broken.
3300 macros having broken.
3297
3301
3298 2002-05-21 Fernando Perez <fperez@colorado.edu>
3302 2002-05-21 Fernando Perez <fperez@colorado.edu>
3299
3303
3300 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3304 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3301 introduced logging bug: all history before logging started was
3305 introduced logging bug: all history before logging started was
3302 being written one character per line! This came from the redesign
3306 being written one character per line! This came from the redesign
3303 of the input history as a special list which slices to strings,
3307 of the input history as a special list which slices to strings,
3304 not to lists.
3308 not to lists.
3305
3309
3306 2002-05-20 Fernando Perez <fperez@colorado.edu>
3310 2002-05-20 Fernando Perez <fperez@colorado.edu>
3307
3311
3308 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3312 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3309 be an attribute of all classes in this module. The design of these
3313 be an attribute of all classes in this module. The design of these
3310 classes needs some serious overhauling.
3314 classes needs some serious overhauling.
3311
3315
3312 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3316 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3313 which was ignoring '_' in option names.
3317 which was ignoring '_' in option names.
3314
3318
3315 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3319 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3316 'Verbose_novars' to 'Context' and made it the new default. It's a
3320 'Verbose_novars' to 'Context' and made it the new default. It's a
3317 bit more readable and also safer than verbose.
3321 bit more readable and also safer than verbose.
3318
3322
3319 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3323 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3320 triple-quoted strings.
3324 triple-quoted strings.
3321
3325
3322 * IPython/OInspect.py (__all__): new module exposing the object
3326 * IPython/OInspect.py (__all__): new module exposing the object
3323 introspection facilities. Now the corresponding magics are dummy
3327 introspection facilities. Now the corresponding magics are dummy
3324 wrappers around this. Having this module will make it much easier
3328 wrappers around this. Having this module will make it much easier
3325 to put these functions into our modified pdb.
3329 to put these functions into our modified pdb.
3326 This new object inspector system uses the new colorizing module,
3330 This new object inspector system uses the new colorizing module,
3327 so source code and other things are nicely syntax highlighted.
3331 so source code and other things are nicely syntax highlighted.
3328
3332
3329 2002-05-18 Fernando Perez <fperez@colorado.edu>
3333 2002-05-18 Fernando Perez <fperez@colorado.edu>
3330
3334
3331 * IPython/ColorANSI.py: Split the coloring tools into a separate
3335 * IPython/ColorANSI.py: Split the coloring tools into a separate
3332 module so I can use them in other code easier (they were part of
3336 module so I can use them in other code easier (they were part of
3333 ultraTB).
3337 ultraTB).
3334
3338
3335 2002-05-17 Fernando Perez <fperez@colorado.edu>
3339 2002-05-17 Fernando Perez <fperez@colorado.edu>
3336
3340
3337 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3341 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3338 fixed it to set the global 'g' also to the called instance, as
3342 fixed it to set the global 'g' also to the called instance, as
3339 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3343 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3340 user's 'g' variables).
3344 user's 'g' variables).
3341
3345
3342 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3346 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3343 global variables (aliases to _ih,_oh) so that users which expect
3347 global variables (aliases to _ih,_oh) so that users which expect
3344 In[5] or Out[7] to work aren't unpleasantly surprised.
3348 In[5] or Out[7] to work aren't unpleasantly surprised.
3345 (InputList.__getslice__): new class to allow executing slices of
3349 (InputList.__getslice__): new class to allow executing slices of
3346 input history directly. Very simple class, complements the use of
3350 input history directly. Very simple class, complements the use of
3347 macros.
3351 macros.
3348
3352
3349 2002-05-16 Fernando Perez <fperez@colorado.edu>
3353 2002-05-16 Fernando Perez <fperez@colorado.edu>
3350
3354
3351 * setup.py (docdirbase): make doc directory be just doc/IPython
3355 * setup.py (docdirbase): make doc directory be just doc/IPython
3352 without version numbers, it will reduce clutter for users.
3356 without version numbers, it will reduce clutter for users.
3353
3357
3354 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3358 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3355 execfile call to prevent possible memory leak. See for details:
3359 execfile call to prevent possible memory leak. See for details:
3356 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3360 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3357
3361
3358 2002-05-15 Fernando Perez <fperez@colorado.edu>
3362 2002-05-15 Fernando Perez <fperez@colorado.edu>
3359
3363
3360 * IPython/Magic.py (Magic.magic_psource): made the object
3364 * IPython/Magic.py (Magic.magic_psource): made the object
3361 introspection names be more standard: pdoc, pdef, pfile and
3365 introspection names be more standard: pdoc, pdef, pfile and
3362 psource. They all print/page their output, and it makes
3366 psource. They all print/page their output, and it makes
3363 remembering them easier. Kept old names for compatibility as
3367 remembering them easier. Kept old names for compatibility as
3364 aliases.
3368 aliases.
3365
3369
3366 2002-05-14 Fernando Perez <fperez@colorado.edu>
3370 2002-05-14 Fernando Perez <fperez@colorado.edu>
3367
3371
3368 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3372 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3369 what the mouse problem was. The trick is to use gnuplot with temp
3373 what the mouse problem was. The trick is to use gnuplot with temp
3370 files and NOT with pipes (for data communication), because having
3374 files and NOT with pipes (for data communication), because having
3371 both pipes and the mouse on is bad news.
3375 both pipes and the mouse on is bad news.
3372
3376
3373 2002-05-13 Fernando Perez <fperez@colorado.edu>
3377 2002-05-13 Fernando Perez <fperez@colorado.edu>
3374
3378
3375 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3379 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3376 bug. Information would be reported about builtins even when
3380 bug. Information would be reported about builtins even when
3377 user-defined functions overrode them.
3381 user-defined functions overrode them.
3378
3382
3379 2002-05-11 Fernando Perez <fperez@colorado.edu>
3383 2002-05-11 Fernando Perez <fperez@colorado.edu>
3380
3384
3381 * IPython/__init__.py (__all__): removed FlexCompleter from
3385 * IPython/__init__.py (__all__): removed FlexCompleter from
3382 __all__ so that things don't fail in platforms without readline.
3386 __all__ so that things don't fail in platforms without readline.
3383
3387
3384 2002-05-10 Fernando Perez <fperez@colorado.edu>
3388 2002-05-10 Fernando Perez <fperez@colorado.edu>
3385
3389
3386 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3390 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3387 it requires Numeric, effectively making Numeric a dependency for
3391 it requires Numeric, effectively making Numeric a dependency for
3388 IPython.
3392 IPython.
3389
3393
3390 * Released 0.2.13
3394 * Released 0.2.13
3391
3395
3392 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3396 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3393 profiler interface. Now all the major options from the profiler
3397 profiler interface. Now all the major options from the profiler
3394 module are directly supported in IPython, both for single
3398 module are directly supported in IPython, both for single
3395 expressions (@prun) and for full programs (@run -p).
3399 expressions (@prun) and for full programs (@run -p).
3396
3400
3397 2002-05-09 Fernando Perez <fperez@colorado.edu>
3401 2002-05-09 Fernando Perez <fperez@colorado.edu>
3398
3402
3399 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3403 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3400 magic properly formatted for screen.
3404 magic properly formatted for screen.
3401
3405
3402 * setup.py (make_shortcut): Changed things to put pdf version in
3406 * setup.py (make_shortcut): Changed things to put pdf version in
3403 doc/ instead of doc/manual (had to change lyxport a bit).
3407 doc/ instead of doc/manual (had to change lyxport a bit).
3404
3408
3405 * IPython/Magic.py (Profile.string_stats): made profile runs go
3409 * IPython/Magic.py (Profile.string_stats): made profile runs go
3406 through pager (they are long and a pager allows searching, saving,
3410 through pager (they are long and a pager allows searching, saving,
3407 etc.)
3411 etc.)
3408
3412
3409 2002-05-08 Fernando Perez <fperez@colorado.edu>
3413 2002-05-08 Fernando Perez <fperez@colorado.edu>
3410
3414
3411 * Released 0.2.12
3415 * Released 0.2.12
3412
3416
3413 2002-05-06 Fernando Perez <fperez@colorado.edu>
3417 2002-05-06 Fernando Perez <fperez@colorado.edu>
3414
3418
3415 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3419 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3416 introduced); 'hist n1 n2' was broken.
3420 introduced); 'hist n1 n2' was broken.
3417 (Magic.magic_pdb): added optional on/off arguments to @pdb
3421 (Magic.magic_pdb): added optional on/off arguments to @pdb
3418 (Magic.magic_run): added option -i to @run, which executes code in
3422 (Magic.magic_run): added option -i to @run, which executes code in
3419 the IPython namespace instead of a clean one. Also added @irun as
3423 the IPython namespace instead of a clean one. Also added @irun as
3420 an alias to @run -i.
3424 an alias to @run -i.
3421
3425
3422 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3426 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3423 fixed (it didn't really do anything, the namespaces were wrong).
3427 fixed (it didn't really do anything, the namespaces were wrong).
3424
3428
3425 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3429 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3426
3430
3427 * IPython/__init__.py (__all__): Fixed package namespace, now
3431 * IPython/__init__.py (__all__): Fixed package namespace, now
3428 'import IPython' does give access to IPython.<all> as
3432 'import IPython' does give access to IPython.<all> as
3429 expected. Also renamed __release__ to Release.
3433 expected. Also renamed __release__ to Release.
3430
3434
3431 * IPython/Debugger.py (__license__): created new Pdb class which
3435 * IPython/Debugger.py (__license__): created new Pdb class which
3432 functions like a drop-in for the normal pdb.Pdb but does NOT
3436 functions like a drop-in for the normal pdb.Pdb but does NOT
3433 import readline by default. This way it doesn't muck up IPython's
3437 import readline by default. This way it doesn't muck up IPython's
3434 readline handling, and now tab-completion finally works in the
3438 readline handling, and now tab-completion finally works in the
3435 debugger -- sort of. It completes things globally visible, but the
3439 debugger -- sort of. It completes things globally visible, but the
3436 completer doesn't track the stack as pdb walks it. That's a bit
3440 completer doesn't track the stack as pdb walks it. That's a bit
3437 tricky, and I'll have to implement it later.
3441 tricky, and I'll have to implement it later.
3438
3442
3439 2002-05-05 Fernando Perez <fperez@colorado.edu>
3443 2002-05-05 Fernando Perez <fperez@colorado.edu>
3440
3444
3441 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3445 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3442 magic docstrings when printed via ? (explicit \'s were being
3446 magic docstrings when printed via ? (explicit \'s were being
3443 printed).
3447 printed).
3444
3448
3445 * IPython/ipmaker.py (make_IPython): fixed namespace
3449 * IPython/ipmaker.py (make_IPython): fixed namespace
3446 identification bug. Now variables loaded via logs or command-line
3450 identification bug. Now variables loaded via logs or command-line
3447 files are recognized in the interactive namespace by @who.
3451 files are recognized in the interactive namespace by @who.
3448
3452
3449 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3453 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3450 log replay system stemming from the string form of Structs.
3454 log replay system stemming from the string form of Structs.
3451
3455
3452 * IPython/Magic.py (Macro.__init__): improved macros to properly
3456 * IPython/Magic.py (Macro.__init__): improved macros to properly
3453 handle magic commands in them.
3457 handle magic commands in them.
3454 (Magic.magic_logstart): usernames are now expanded so 'logstart
3458 (Magic.magic_logstart): usernames are now expanded so 'logstart
3455 ~/mylog' now works.
3459 ~/mylog' now works.
3456
3460
3457 * IPython/iplib.py (complete): fixed bug where paths starting with
3461 * IPython/iplib.py (complete): fixed bug where paths starting with
3458 '/' would be completed as magic names.
3462 '/' would be completed as magic names.
3459
3463
3460 2002-05-04 Fernando Perez <fperez@colorado.edu>
3464 2002-05-04 Fernando Perez <fperez@colorado.edu>
3461
3465
3462 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3466 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3463 allow running full programs under the profiler's control.
3467 allow running full programs under the profiler's control.
3464
3468
3465 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3469 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3466 mode to report exceptions verbosely but without formatting
3470 mode to report exceptions verbosely but without formatting
3467 variables. This addresses the issue of ipython 'freezing' (it's
3471 variables. This addresses the issue of ipython 'freezing' (it's
3468 not frozen, but caught in an expensive formatting loop) when huge
3472 not frozen, but caught in an expensive formatting loop) when huge
3469 variables are in the context of an exception.
3473 variables are in the context of an exception.
3470 (VerboseTB.text): Added '--->' markers at line where exception was
3474 (VerboseTB.text): Added '--->' markers at line where exception was
3471 triggered. Much clearer to read, especially in NoColor modes.
3475 triggered. Much clearer to read, especially in NoColor modes.
3472
3476
3473 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3477 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3474 implemented in reverse when changing to the new parse_options().
3478 implemented in reverse when changing to the new parse_options().
3475
3479
3476 2002-05-03 Fernando Perez <fperez@colorado.edu>
3480 2002-05-03 Fernando Perez <fperez@colorado.edu>
3477
3481
3478 * IPython/Magic.py (Magic.parse_options): new function so that
3482 * IPython/Magic.py (Magic.parse_options): new function so that
3479 magics can parse options easier.
3483 magics can parse options easier.
3480 (Magic.magic_prun): new function similar to profile.run(),
3484 (Magic.magic_prun): new function similar to profile.run(),
3481 suggested by Chris Hart.
3485 suggested by Chris Hart.
3482 (Magic.magic_cd): fixed behavior so that it only changes if
3486 (Magic.magic_cd): fixed behavior so that it only changes if
3483 directory actually is in history.
3487 directory actually is in history.
3484
3488
3485 * IPython/usage.py (__doc__): added information about potential
3489 * IPython/usage.py (__doc__): added information about potential
3486 slowness of Verbose exception mode when there are huge data
3490 slowness of Verbose exception mode when there are huge data
3487 structures to be formatted (thanks to Archie Paulson).
3491 structures to be formatted (thanks to Archie Paulson).
3488
3492
3489 * IPython/ipmaker.py (make_IPython): Changed default logging
3493 * IPython/ipmaker.py (make_IPython): Changed default logging
3490 (when simply called with -log) to use curr_dir/ipython.log in
3494 (when simply called with -log) to use curr_dir/ipython.log in
3491 rotate mode. Fixed crash which was occuring with -log before
3495 rotate mode. Fixed crash which was occuring with -log before
3492 (thanks to Jim Boyle).
3496 (thanks to Jim Boyle).
3493
3497
3494 2002-05-01 Fernando Perez <fperez@colorado.edu>
3498 2002-05-01 Fernando Perez <fperez@colorado.edu>
3495
3499
3496 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3500 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3497 was nasty -- though somewhat of a corner case).
3501 was nasty -- though somewhat of a corner case).
3498
3502
3499 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3503 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3500 text (was a bug).
3504 text (was a bug).
3501
3505
3502 2002-04-30 Fernando Perez <fperez@colorado.edu>
3506 2002-04-30 Fernando Perez <fperez@colorado.edu>
3503
3507
3504 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3508 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3505 a print after ^D or ^C from the user so that the In[] prompt
3509 a print after ^D or ^C from the user so that the In[] prompt
3506 doesn't over-run the gnuplot one.
3510 doesn't over-run the gnuplot one.
3507
3511
3508 2002-04-29 Fernando Perez <fperez@colorado.edu>
3512 2002-04-29 Fernando Perez <fperez@colorado.edu>
3509
3513
3510 * Released 0.2.10
3514 * Released 0.2.10
3511
3515
3512 * IPython/__release__.py (version): get date dynamically.
3516 * IPython/__release__.py (version): get date dynamically.
3513
3517
3514 * Misc. documentation updates thanks to Arnd's comments. Also ran
3518 * Misc. documentation updates thanks to Arnd's comments. Also ran
3515 a full spellcheck on the manual (hadn't been done in a while).
3519 a full spellcheck on the manual (hadn't been done in a while).
3516
3520
3517 2002-04-27 Fernando Perez <fperez@colorado.edu>
3521 2002-04-27 Fernando Perez <fperez@colorado.edu>
3518
3522
3519 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3523 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3520 starting a log in mid-session would reset the input history list.
3524 starting a log in mid-session would reset the input history list.
3521
3525
3522 2002-04-26 Fernando Perez <fperez@colorado.edu>
3526 2002-04-26 Fernando Perez <fperez@colorado.edu>
3523
3527
3524 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3528 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3525 all files were being included in an update. Now anything in
3529 all files were being included in an update. Now anything in
3526 UserConfig that matches [A-Za-z]*.py will go (this excludes
3530 UserConfig that matches [A-Za-z]*.py will go (this excludes
3527 __init__.py)
3531 __init__.py)
3528
3532
3529 2002-04-25 Fernando Perez <fperez@colorado.edu>
3533 2002-04-25 Fernando Perez <fperez@colorado.edu>
3530
3534
3531 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3535 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3532 to __builtins__ so that any form of embedded or imported code can
3536 to __builtins__ so that any form of embedded or imported code can
3533 test for being inside IPython.
3537 test for being inside IPython.
3534
3538
3535 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3539 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3536 changed to GnuplotMagic because it's now an importable module,
3540 changed to GnuplotMagic because it's now an importable module,
3537 this makes the name follow that of the standard Gnuplot module.
3541 this makes the name follow that of the standard Gnuplot module.
3538 GnuplotMagic can now be loaded at any time in mid-session.
3542 GnuplotMagic can now be loaded at any time in mid-session.
3539
3543
3540 2002-04-24 Fernando Perez <fperez@colorado.edu>
3544 2002-04-24 Fernando Perez <fperez@colorado.edu>
3541
3545
3542 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3546 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3543 the globals (IPython has its own namespace) and the
3547 the globals (IPython has its own namespace) and the
3544 PhysicalQuantity stuff is much better anyway.
3548 PhysicalQuantity stuff is much better anyway.
3545
3549
3546 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3550 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3547 embedding example to standard user directory for
3551 embedding example to standard user directory for
3548 distribution. Also put it in the manual.
3552 distribution. Also put it in the manual.
3549
3553
3550 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3554 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3551 instance as first argument (so it doesn't rely on some obscure
3555 instance as first argument (so it doesn't rely on some obscure
3552 hidden global).
3556 hidden global).
3553
3557
3554 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3558 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3555 delimiters. While it prevents ().TAB from working, it allows
3559 delimiters. While it prevents ().TAB from working, it allows
3556 completions in open (... expressions. This is by far a more common
3560 completions in open (... expressions. This is by far a more common
3557 case.
3561 case.
3558
3562
3559 2002-04-23 Fernando Perez <fperez@colorado.edu>
3563 2002-04-23 Fernando Perez <fperez@colorado.edu>
3560
3564
3561 * IPython/Extensions/InterpreterPasteInput.py: new
3565 * IPython/Extensions/InterpreterPasteInput.py: new
3562 syntax-processing module for pasting lines with >>> or ... at the
3566 syntax-processing module for pasting lines with >>> or ... at the
3563 start.
3567 start.
3564
3568
3565 * IPython/Extensions/PhysicalQ_Interactive.py
3569 * IPython/Extensions/PhysicalQ_Interactive.py
3566 (PhysicalQuantityInteractive.__int__): fixed to work with either
3570 (PhysicalQuantityInteractive.__int__): fixed to work with either
3567 Numeric or math.
3571 Numeric or math.
3568
3572
3569 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3573 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3570 provided profiles. Now we have:
3574 provided profiles. Now we have:
3571 -math -> math module as * and cmath with its own namespace.
3575 -math -> math module as * and cmath with its own namespace.
3572 -numeric -> Numeric as *, plus gnuplot & grace
3576 -numeric -> Numeric as *, plus gnuplot & grace
3573 -physics -> same as before
3577 -physics -> same as before
3574
3578
3575 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3579 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3576 user-defined magics wouldn't be found by @magic if they were
3580 user-defined magics wouldn't be found by @magic if they were
3577 defined as class methods. Also cleaned up the namespace search
3581 defined as class methods. Also cleaned up the namespace search
3578 logic and the string building (to use %s instead of many repeated
3582 logic and the string building (to use %s instead of many repeated
3579 string adds).
3583 string adds).
3580
3584
3581 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3585 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3582 of user-defined magics to operate with class methods (cleaner, in
3586 of user-defined magics to operate with class methods (cleaner, in
3583 line with the gnuplot code).
3587 line with the gnuplot code).
3584
3588
3585 2002-04-22 Fernando Perez <fperez@colorado.edu>
3589 2002-04-22 Fernando Perez <fperez@colorado.edu>
3586
3590
3587 * setup.py: updated dependency list so that manual is updated when
3591 * setup.py: updated dependency list so that manual is updated when
3588 all included files change.
3592 all included files change.
3589
3593
3590 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3594 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3591 the delimiter removal option (the fix is ugly right now).
3595 the delimiter removal option (the fix is ugly right now).
3592
3596
3593 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3597 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3594 all of the math profile (quicker loading, no conflict between
3598 all of the math profile (quicker loading, no conflict between
3595 g-9.8 and g-gnuplot).
3599 g-9.8 and g-gnuplot).
3596
3600
3597 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3601 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3598 name of post-mortem files to IPython_crash_report.txt.
3602 name of post-mortem files to IPython_crash_report.txt.
3599
3603
3600 * Cleanup/update of the docs. Added all the new readline info and
3604 * Cleanup/update of the docs. Added all the new readline info and
3601 formatted all lists as 'real lists'.
3605 formatted all lists as 'real lists'.
3602
3606
3603 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3607 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3604 tab-completion options, since the full readline parse_and_bind is
3608 tab-completion options, since the full readline parse_and_bind is
3605 now accessible.
3609 now accessible.
3606
3610
3607 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3611 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3608 handling of readline options. Now users can specify any string to
3612 handling of readline options. Now users can specify any string to
3609 be passed to parse_and_bind(), as well as the delimiters to be
3613 be passed to parse_and_bind(), as well as the delimiters to be
3610 removed.
3614 removed.
3611 (InteractiveShell.__init__): Added __name__ to the global
3615 (InteractiveShell.__init__): Added __name__ to the global
3612 namespace so that things like Itpl which rely on its existence
3616 namespace so that things like Itpl which rely on its existence
3613 don't crash.
3617 don't crash.
3614 (InteractiveShell._prefilter): Defined the default with a _ so
3618 (InteractiveShell._prefilter): Defined the default with a _ so
3615 that prefilter() is easier to override, while the default one
3619 that prefilter() is easier to override, while the default one
3616 remains available.
3620 remains available.
3617
3621
3618 2002-04-18 Fernando Perez <fperez@colorado.edu>
3622 2002-04-18 Fernando Perez <fperez@colorado.edu>
3619
3623
3620 * Added information about pdb in the docs.
3624 * Added information about pdb in the docs.
3621
3625
3622 2002-04-17 Fernando Perez <fperez@colorado.edu>
3626 2002-04-17 Fernando Perez <fperez@colorado.edu>
3623
3627
3624 * IPython/ipmaker.py (make_IPython): added rc_override option to
3628 * IPython/ipmaker.py (make_IPython): added rc_override option to
3625 allow passing config options at creation time which may override
3629 allow passing config options at creation time which may override
3626 anything set in the config files or command line. This is
3630 anything set in the config files or command line. This is
3627 particularly useful for configuring embedded instances.
3631 particularly useful for configuring embedded instances.
3628
3632
3629 2002-04-15 Fernando Perez <fperez@colorado.edu>
3633 2002-04-15 Fernando Perez <fperez@colorado.edu>
3630
3634
3631 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3635 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3632 crash embedded instances because of the input cache falling out of
3636 crash embedded instances because of the input cache falling out of
3633 sync with the output counter.
3637 sync with the output counter.
3634
3638
3635 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3639 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3636 mode which calls pdb after an uncaught exception in IPython itself.
3640 mode which calls pdb after an uncaught exception in IPython itself.
3637
3641
3638 2002-04-14 Fernando Perez <fperez@colorado.edu>
3642 2002-04-14 Fernando Perez <fperez@colorado.edu>
3639
3643
3640 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3644 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3641 readline, fix it back after each call.
3645 readline, fix it back after each call.
3642
3646
3643 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3647 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3644 method to force all access via __call__(), which guarantees that
3648 method to force all access via __call__(), which guarantees that
3645 traceback references are properly deleted.
3649 traceback references are properly deleted.
3646
3650
3647 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3651 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3648 improve printing when pprint is in use.
3652 improve printing when pprint is in use.
3649
3653
3650 2002-04-13 Fernando Perez <fperez@colorado.edu>
3654 2002-04-13 Fernando Perez <fperez@colorado.edu>
3651
3655
3652 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3656 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3653 exceptions aren't caught anymore. If the user triggers one, he
3657 exceptions aren't caught anymore. If the user triggers one, he
3654 should know why he's doing it and it should go all the way up,
3658 should know why he's doing it and it should go all the way up,
3655 just like any other exception. So now @abort will fully kill the
3659 just like any other exception. So now @abort will fully kill the
3656 embedded interpreter and the embedding code (unless that happens
3660 embedded interpreter and the embedding code (unless that happens
3657 to catch SystemExit).
3661 to catch SystemExit).
3658
3662
3659 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3663 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3660 and a debugger() method to invoke the interactive pdb debugger
3664 and a debugger() method to invoke the interactive pdb debugger
3661 after printing exception information. Also added the corresponding
3665 after printing exception information. Also added the corresponding
3662 -pdb option and @pdb magic to control this feature, and updated
3666 -pdb option and @pdb magic to control this feature, and updated
3663 the docs. After a suggestion from Christopher Hart
3667 the docs. After a suggestion from Christopher Hart
3664 (hart-AT-caltech.edu).
3668 (hart-AT-caltech.edu).
3665
3669
3666 2002-04-12 Fernando Perez <fperez@colorado.edu>
3670 2002-04-12 Fernando Perez <fperez@colorado.edu>
3667
3671
3668 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3672 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3669 the exception handlers defined by the user (not the CrashHandler)
3673 the exception handlers defined by the user (not the CrashHandler)
3670 so that user exceptions don't trigger an ipython bug report.
3674 so that user exceptions don't trigger an ipython bug report.
3671
3675
3672 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3676 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3673 configurable (it should have always been so).
3677 configurable (it should have always been so).
3674
3678
3675 2002-03-26 Fernando Perez <fperez@colorado.edu>
3679 2002-03-26 Fernando Perez <fperez@colorado.edu>
3676
3680
3677 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3681 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3678 and there to fix embedding namespace issues. This should all be
3682 and there to fix embedding namespace issues. This should all be
3679 done in a more elegant way.
3683 done in a more elegant way.
3680
3684
3681 2002-03-25 Fernando Perez <fperez@colorado.edu>
3685 2002-03-25 Fernando Perez <fperez@colorado.edu>
3682
3686
3683 * IPython/genutils.py (get_home_dir): Try to make it work under
3687 * IPython/genutils.py (get_home_dir): Try to make it work under
3684 win9x also.
3688 win9x also.
3685
3689
3686 2002-03-20 Fernando Perez <fperez@colorado.edu>
3690 2002-03-20 Fernando Perez <fperez@colorado.edu>
3687
3691
3688 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3692 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3689 sys.displayhook untouched upon __init__.
3693 sys.displayhook untouched upon __init__.
3690
3694
3691 2002-03-19 Fernando Perez <fperez@colorado.edu>
3695 2002-03-19 Fernando Perez <fperez@colorado.edu>
3692
3696
3693 * Released 0.2.9 (for embedding bug, basically).
3697 * Released 0.2.9 (for embedding bug, basically).
3694
3698
3695 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3699 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3696 exceptions so that enclosing shell's state can be restored.
3700 exceptions so that enclosing shell's state can be restored.
3697
3701
3698 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3702 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3699 naming conventions in the .ipython/ dir.
3703 naming conventions in the .ipython/ dir.
3700
3704
3701 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3705 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3702 from delimiters list so filenames with - in them get expanded.
3706 from delimiters list so filenames with - in them get expanded.
3703
3707
3704 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3708 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3705 sys.displayhook not being properly restored after an embedded call.
3709 sys.displayhook not being properly restored after an embedded call.
3706
3710
3707 2002-03-18 Fernando Perez <fperez@colorado.edu>
3711 2002-03-18 Fernando Perez <fperez@colorado.edu>
3708
3712
3709 * Released 0.2.8
3713 * Released 0.2.8
3710
3714
3711 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3715 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3712 some files weren't being included in a -upgrade.
3716 some files weren't being included in a -upgrade.
3713 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3717 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3714 on' so that the first tab completes.
3718 on' so that the first tab completes.
3715 (InteractiveShell.handle_magic): fixed bug with spaces around
3719 (InteractiveShell.handle_magic): fixed bug with spaces around
3716 quotes breaking many magic commands.
3720 quotes breaking many magic commands.
3717
3721
3718 * setup.py: added note about ignoring the syntax error messages at
3722 * setup.py: added note about ignoring the syntax error messages at
3719 installation.
3723 installation.
3720
3724
3721 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3725 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3722 streamlining the gnuplot interface, now there's only one magic @gp.
3726 streamlining the gnuplot interface, now there's only one magic @gp.
3723
3727
3724 2002-03-17 Fernando Perez <fperez@colorado.edu>
3728 2002-03-17 Fernando Perez <fperez@colorado.edu>
3725
3729
3726 * IPython/UserConfig/magic_gnuplot.py: new name for the
3730 * IPython/UserConfig/magic_gnuplot.py: new name for the
3727 example-magic_pm.py file. Much enhanced system, now with a shell
3731 example-magic_pm.py file. Much enhanced system, now with a shell
3728 for communicating directly with gnuplot, one command at a time.
3732 for communicating directly with gnuplot, one command at a time.
3729
3733
3730 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3734 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3731 setting __name__=='__main__'.
3735 setting __name__=='__main__'.
3732
3736
3733 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3737 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3734 mini-shell for accessing gnuplot from inside ipython. Should
3738 mini-shell for accessing gnuplot from inside ipython. Should
3735 extend it later for grace access too. Inspired by Arnd's
3739 extend it later for grace access too. Inspired by Arnd's
3736 suggestion.
3740 suggestion.
3737
3741
3738 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3742 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3739 calling magic functions with () in their arguments. Thanks to Arnd
3743 calling magic functions with () in their arguments. Thanks to Arnd
3740 Baecker for pointing this to me.
3744 Baecker for pointing this to me.
3741
3745
3742 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3746 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3743 infinitely for integer or complex arrays (only worked with floats).
3747 infinitely for integer or complex arrays (only worked with floats).
3744
3748
3745 2002-03-16 Fernando Perez <fperez@colorado.edu>
3749 2002-03-16 Fernando Perez <fperez@colorado.edu>
3746
3750
3747 * setup.py: Merged setup and setup_windows into a single script
3751 * setup.py: Merged setup and setup_windows into a single script
3748 which properly handles things for windows users.
3752 which properly handles things for windows users.
3749
3753
3750 2002-03-15 Fernando Perez <fperez@colorado.edu>
3754 2002-03-15 Fernando Perez <fperez@colorado.edu>
3751
3755
3752 * Big change to the manual: now the magics are all automatically
3756 * Big change to the manual: now the magics are all automatically
3753 documented. This information is generated from their docstrings
3757 documented. This information is generated from their docstrings
3754 and put in a latex file included by the manual lyx file. This way
3758 and put in a latex file included by the manual lyx file. This way
3755 we get always up to date information for the magics. The manual
3759 we get always up to date information for the magics. The manual
3756 now also has proper version information, also auto-synced.
3760 now also has proper version information, also auto-synced.
3757
3761
3758 For this to work, an undocumented --magic_docstrings option was added.
3762 For this to work, an undocumented --magic_docstrings option was added.
3759
3763
3760 2002-03-13 Fernando Perez <fperez@colorado.edu>
3764 2002-03-13 Fernando Perez <fperez@colorado.edu>
3761
3765
3762 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3766 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3763 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3767 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3764
3768
3765 2002-03-12 Fernando Perez <fperez@colorado.edu>
3769 2002-03-12 Fernando Perez <fperez@colorado.edu>
3766
3770
3767 * IPython/ultraTB.py (TermColors): changed color escapes again to
3771 * IPython/ultraTB.py (TermColors): changed color escapes again to
3768 fix the (old, reintroduced) line-wrapping bug. Basically, if
3772 fix the (old, reintroduced) line-wrapping bug. Basically, if
3769 \001..\002 aren't given in the color escapes, lines get wrapped
3773 \001..\002 aren't given in the color escapes, lines get wrapped
3770 weirdly. But giving those screws up old xterms and emacs terms. So
3774 weirdly. But giving those screws up old xterms and emacs terms. So
3771 I added some logic for emacs terms to be ok, but I can't identify old
3775 I added some logic for emacs terms to be ok, but I can't identify old
3772 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3776 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3773
3777
3774 2002-03-10 Fernando Perez <fperez@colorado.edu>
3778 2002-03-10 Fernando Perez <fperez@colorado.edu>
3775
3779
3776 * IPython/usage.py (__doc__): Various documentation cleanups and
3780 * IPython/usage.py (__doc__): Various documentation cleanups and
3777 updates, both in usage docstrings and in the manual.
3781 updates, both in usage docstrings and in the manual.
3778
3782
3779 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3783 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3780 handling of caching. Set minimum acceptabe value for having a
3784 handling of caching. Set minimum acceptabe value for having a
3781 cache at 20 values.
3785 cache at 20 values.
3782
3786
3783 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3787 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3784 install_first_time function to a method, renamed it and added an
3788 install_first_time function to a method, renamed it and added an
3785 'upgrade' mode. Now people can update their config directory with
3789 'upgrade' mode. Now people can update their config directory with
3786 a simple command line switch (-upgrade, also new).
3790 a simple command line switch (-upgrade, also new).
3787
3791
3788 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3792 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3789 @file (convenient for automagic users under Python >= 2.2).
3793 @file (convenient for automagic users under Python >= 2.2).
3790 Removed @files (it seemed more like a plural than an abbrev. of
3794 Removed @files (it seemed more like a plural than an abbrev. of
3791 'file show').
3795 'file show').
3792
3796
3793 * IPython/iplib.py (install_first_time): Fixed crash if there were
3797 * IPython/iplib.py (install_first_time): Fixed crash if there were
3794 backup files ('~') in .ipython/ install directory.
3798 backup files ('~') in .ipython/ install directory.
3795
3799
3796 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3800 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3797 system. Things look fine, but these changes are fairly
3801 system. Things look fine, but these changes are fairly
3798 intrusive. Test them for a few days.
3802 intrusive. Test them for a few days.
3799
3803
3800 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3804 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3801 the prompts system. Now all in/out prompt strings are user
3805 the prompts system. Now all in/out prompt strings are user
3802 controllable. This is particularly useful for embedding, as one
3806 controllable. This is particularly useful for embedding, as one
3803 can tag embedded instances with particular prompts.
3807 can tag embedded instances with particular prompts.
3804
3808
3805 Also removed global use of sys.ps1/2, which now allows nested
3809 Also removed global use of sys.ps1/2, which now allows nested
3806 embeddings without any problems. Added command-line options for
3810 embeddings without any problems. Added command-line options for
3807 the prompt strings.
3811 the prompt strings.
3808
3812
3809 2002-03-08 Fernando Perez <fperez@colorado.edu>
3813 2002-03-08 Fernando Perez <fperez@colorado.edu>
3810
3814
3811 * IPython/UserConfig/example-embed-short.py (ipshell): added
3815 * IPython/UserConfig/example-embed-short.py (ipshell): added
3812 example file with the bare minimum code for embedding.
3816 example file with the bare minimum code for embedding.
3813
3817
3814 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3818 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3815 functionality for the embeddable shell to be activated/deactivated
3819 functionality for the embeddable shell to be activated/deactivated
3816 either globally or at each call.
3820 either globally or at each call.
3817
3821
3818 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3822 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3819 rewriting the prompt with '--->' for auto-inputs with proper
3823 rewriting the prompt with '--->' for auto-inputs with proper
3820 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3824 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3821 this is handled by the prompts class itself, as it should.
3825 this is handled by the prompts class itself, as it should.
3822
3826
3823 2002-03-05 Fernando Perez <fperez@colorado.edu>
3827 2002-03-05 Fernando Perez <fperez@colorado.edu>
3824
3828
3825 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3829 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3826 @logstart to avoid name clashes with the math log function.
3830 @logstart to avoid name clashes with the math log function.
3827
3831
3828 * Big updates to X/Emacs section of the manual.
3832 * Big updates to X/Emacs section of the manual.
3829
3833
3830 * Removed ipython_emacs. Milan explained to me how to pass
3834 * Removed ipython_emacs. Milan explained to me how to pass
3831 arguments to ipython through Emacs. Some day I'm going to end up
3835 arguments to ipython through Emacs. Some day I'm going to end up
3832 learning some lisp...
3836 learning some lisp...
3833
3837
3834 2002-03-04 Fernando Perez <fperez@colorado.edu>
3838 2002-03-04 Fernando Perez <fperez@colorado.edu>
3835
3839
3836 * IPython/ipython_emacs: Created script to be used as the
3840 * IPython/ipython_emacs: Created script to be used as the
3837 py-python-command Emacs variable so we can pass IPython
3841 py-python-command Emacs variable so we can pass IPython
3838 parameters. I can't figure out how to tell Emacs directly to pass
3842 parameters. I can't figure out how to tell Emacs directly to pass
3839 parameters to IPython, so a dummy shell script will do it.
3843 parameters to IPython, so a dummy shell script will do it.
3840
3844
3841 Other enhancements made for things to work better under Emacs'
3845 Other enhancements made for things to work better under Emacs'
3842 various types of terminals. Many thanks to Milan Zamazal
3846 various types of terminals. Many thanks to Milan Zamazal
3843 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3847 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3844
3848
3845 2002-03-01 Fernando Perez <fperez@colorado.edu>
3849 2002-03-01 Fernando Perez <fperez@colorado.edu>
3846
3850
3847 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3851 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3848 that loading of readline is now optional. This gives better
3852 that loading of readline is now optional. This gives better
3849 control to emacs users.
3853 control to emacs users.
3850
3854
3851 * IPython/ultraTB.py (__date__): Modified color escape sequences
3855 * IPython/ultraTB.py (__date__): Modified color escape sequences
3852 and now things work fine under xterm and in Emacs' term buffers
3856 and now things work fine under xterm and in Emacs' term buffers
3853 (though not shell ones). Well, in emacs you get colors, but all
3857 (though not shell ones). Well, in emacs you get colors, but all
3854 seem to be 'light' colors (no difference between dark and light
3858 seem to be 'light' colors (no difference between dark and light
3855 ones). But the garbage chars are gone, and also in xterms. It
3859 ones). But the garbage chars are gone, and also in xterms. It
3856 seems that now I'm using 'cleaner' ansi sequences.
3860 seems that now I'm using 'cleaner' ansi sequences.
3857
3861
3858 2002-02-21 Fernando Perez <fperez@colorado.edu>
3862 2002-02-21 Fernando Perez <fperez@colorado.edu>
3859
3863
3860 * Released 0.2.7 (mainly to publish the scoping fix).
3864 * Released 0.2.7 (mainly to publish the scoping fix).
3861
3865
3862 * IPython/Logger.py (Logger.logstate): added. A corresponding
3866 * IPython/Logger.py (Logger.logstate): added. A corresponding
3863 @logstate magic was created.
3867 @logstate magic was created.
3864
3868
3865 * IPython/Magic.py: fixed nested scoping problem under Python
3869 * IPython/Magic.py: fixed nested scoping problem under Python
3866 2.1.x (automagic wasn't working).
3870 2.1.x (automagic wasn't working).
3867
3871
3868 2002-02-20 Fernando Perez <fperez@colorado.edu>
3872 2002-02-20 Fernando Perez <fperez@colorado.edu>
3869
3873
3870 * Released 0.2.6.
3874 * Released 0.2.6.
3871
3875
3872 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3876 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3873 option so that logs can come out without any headers at all.
3877 option so that logs can come out without any headers at all.
3874
3878
3875 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3879 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3876 SciPy.
3880 SciPy.
3877
3881
3878 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3882 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3879 that embedded IPython calls don't require vars() to be explicitly
3883 that embedded IPython calls don't require vars() to be explicitly
3880 passed. Now they are extracted from the caller's frame (code
3884 passed. Now they are extracted from the caller's frame (code
3881 snatched from Eric Jones' weave). Added better documentation to
3885 snatched from Eric Jones' weave). Added better documentation to
3882 the section on embedding and the example file.
3886 the section on embedding and the example file.
3883
3887
3884 * IPython/genutils.py (page): Changed so that under emacs, it just
3888 * IPython/genutils.py (page): Changed so that under emacs, it just
3885 prints the string. You can then page up and down in the emacs
3889 prints the string. You can then page up and down in the emacs
3886 buffer itself. This is how the builtin help() works.
3890 buffer itself. This is how the builtin help() works.
3887
3891
3888 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3892 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3889 macro scoping: macros need to be executed in the user's namespace
3893 macro scoping: macros need to be executed in the user's namespace
3890 to work as if they had been typed by the user.
3894 to work as if they had been typed by the user.
3891
3895
3892 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3896 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3893 execute automatically (no need to type 'exec...'). They then
3897 execute automatically (no need to type 'exec...'). They then
3894 behave like 'true macros'. The printing system was also modified
3898 behave like 'true macros'. The printing system was also modified
3895 for this to work.
3899 for this to work.
3896
3900
3897 2002-02-19 Fernando Perez <fperez@colorado.edu>
3901 2002-02-19 Fernando Perez <fperez@colorado.edu>
3898
3902
3899 * IPython/genutils.py (page_file): new function for paging files
3903 * IPython/genutils.py (page_file): new function for paging files
3900 in an OS-independent way. Also necessary for file viewing to work
3904 in an OS-independent way. Also necessary for file viewing to work
3901 well inside Emacs buffers.
3905 well inside Emacs buffers.
3902 (page): Added checks for being in an emacs buffer.
3906 (page): Added checks for being in an emacs buffer.
3903 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3907 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3904 same bug in iplib.
3908 same bug in iplib.
3905
3909
3906 2002-02-18 Fernando Perez <fperez@colorado.edu>
3910 2002-02-18 Fernando Perez <fperez@colorado.edu>
3907
3911
3908 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3912 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3909 of readline so that IPython can work inside an Emacs buffer.
3913 of readline so that IPython can work inside an Emacs buffer.
3910
3914
3911 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3915 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3912 method signatures (they weren't really bugs, but it looks cleaner
3916 method signatures (they weren't really bugs, but it looks cleaner
3913 and keeps PyChecker happy).
3917 and keeps PyChecker happy).
3914
3918
3915 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3919 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3916 for implementing various user-defined hooks. Currently only
3920 for implementing various user-defined hooks. Currently only
3917 display is done.
3921 display is done.
3918
3922
3919 * IPython/Prompts.py (CachedOutput._display): changed display
3923 * IPython/Prompts.py (CachedOutput._display): changed display
3920 functions so that they can be dynamically changed by users easily.
3924 functions so that they can be dynamically changed by users easily.
3921
3925
3922 * IPython/Extensions/numeric_formats.py (num_display): added an
3926 * IPython/Extensions/numeric_formats.py (num_display): added an
3923 extension for printing NumPy arrays in flexible manners. It
3927 extension for printing NumPy arrays in flexible manners. It
3924 doesn't do anything yet, but all the structure is in
3928 doesn't do anything yet, but all the structure is in
3925 place. Ultimately the plan is to implement output format control
3929 place. Ultimately the plan is to implement output format control
3926 like in Octave.
3930 like in Octave.
3927
3931
3928 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3932 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3929 methods are found at run-time by all the automatic machinery.
3933 methods are found at run-time by all the automatic machinery.
3930
3934
3931 2002-02-17 Fernando Perez <fperez@colorado.edu>
3935 2002-02-17 Fernando Perez <fperez@colorado.edu>
3932
3936
3933 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3937 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3934 whole file a little.
3938 whole file a little.
3935
3939
3936 * ToDo: closed this document. Now there's a new_design.lyx
3940 * ToDo: closed this document. Now there's a new_design.lyx
3937 document for all new ideas. Added making a pdf of it for the
3941 document for all new ideas. Added making a pdf of it for the
3938 end-user distro.
3942 end-user distro.
3939
3943
3940 * IPython/Logger.py (Logger.switch_log): Created this to replace
3944 * IPython/Logger.py (Logger.switch_log): Created this to replace
3941 logon() and logoff(). It also fixes a nasty crash reported by
3945 logon() and logoff(). It also fixes a nasty crash reported by
3942 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3946 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3943
3947
3944 * IPython/iplib.py (complete): got auto-completion to work with
3948 * IPython/iplib.py (complete): got auto-completion to work with
3945 automagic (I had wanted this for a long time).
3949 automagic (I had wanted this for a long time).
3946
3950
3947 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3951 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3948 to @file, since file() is now a builtin and clashes with automagic
3952 to @file, since file() is now a builtin and clashes with automagic
3949 for @file.
3953 for @file.
3950
3954
3951 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3955 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3952 of this was previously in iplib, which had grown to more than 2000
3956 of this was previously in iplib, which had grown to more than 2000
3953 lines, way too long. No new functionality, but it makes managing
3957 lines, way too long. No new functionality, but it makes managing
3954 the code a bit easier.
3958 the code a bit easier.
3955
3959
3956 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3960 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3957 information to crash reports.
3961 information to crash reports.
3958
3962
3959 2002-02-12 Fernando Perez <fperez@colorado.edu>
3963 2002-02-12 Fernando Perez <fperez@colorado.edu>
3960
3964
3961 * Released 0.2.5.
3965 * Released 0.2.5.
3962
3966
3963 2002-02-11 Fernando Perez <fperez@colorado.edu>
3967 2002-02-11 Fernando Perez <fperez@colorado.edu>
3964
3968
3965 * Wrote a relatively complete Windows installer. It puts
3969 * Wrote a relatively complete Windows installer. It puts
3966 everything in place, creates Start Menu entries and fixes the
3970 everything in place, creates Start Menu entries and fixes the
3967 color issues. Nothing fancy, but it works.
3971 color issues. Nothing fancy, but it works.
3968
3972
3969 2002-02-10 Fernando Perez <fperez@colorado.edu>
3973 2002-02-10 Fernando Perez <fperez@colorado.edu>
3970
3974
3971 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3975 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3972 os.path.expanduser() call so that we can type @run ~/myfile.py and
3976 os.path.expanduser() call so that we can type @run ~/myfile.py and
3973 have thigs work as expected.
3977 have thigs work as expected.
3974
3978
3975 * IPython/genutils.py (page): fixed exception handling so things
3979 * IPython/genutils.py (page): fixed exception handling so things
3976 work both in Unix and Windows correctly. Quitting a pager triggers
3980 work both in Unix and Windows correctly. Quitting a pager triggers
3977 an IOError/broken pipe in Unix, and in windows not finding a pager
3981 an IOError/broken pipe in Unix, and in windows not finding a pager
3978 is also an IOError, so I had to actually look at the return value
3982 is also an IOError, so I had to actually look at the return value
3979 of the exception, not just the exception itself. Should be ok now.
3983 of the exception, not just the exception itself. Should be ok now.
3980
3984
3981 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3985 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3982 modified to allow case-insensitive color scheme changes.
3986 modified to allow case-insensitive color scheme changes.
3983
3987
3984 2002-02-09 Fernando Perez <fperez@colorado.edu>
3988 2002-02-09 Fernando Perez <fperez@colorado.edu>
3985
3989
3986 * IPython/genutils.py (native_line_ends): new function to leave
3990 * IPython/genutils.py (native_line_ends): new function to leave
3987 user config files with os-native line-endings.
3991 user config files with os-native line-endings.
3988
3992
3989 * README and manual updates.
3993 * README and manual updates.
3990
3994
3991 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3995 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3992 instead of StringType to catch Unicode strings.
3996 instead of StringType to catch Unicode strings.
3993
3997
3994 * IPython/genutils.py (filefind): fixed bug for paths with
3998 * IPython/genutils.py (filefind): fixed bug for paths with
3995 embedded spaces (very common in Windows).
3999 embedded spaces (very common in Windows).
3996
4000
3997 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4001 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3998 files under Windows, so that they get automatically associated
4002 files under Windows, so that they get automatically associated
3999 with a text editor. Windows makes it a pain to handle
4003 with a text editor. Windows makes it a pain to handle
4000 extension-less files.
4004 extension-less files.
4001
4005
4002 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4006 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4003 warning about readline only occur for Posix. In Windows there's no
4007 warning about readline only occur for Posix. In Windows there's no
4004 way to get readline, so why bother with the warning.
4008 way to get readline, so why bother with the warning.
4005
4009
4006 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4010 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4007 for __str__ instead of dir(self), since dir() changed in 2.2.
4011 for __str__ instead of dir(self), since dir() changed in 2.2.
4008
4012
4009 * Ported to Windows! Tested on XP, I suspect it should work fine
4013 * Ported to Windows! Tested on XP, I suspect it should work fine
4010 on NT/2000, but I don't think it will work on 98 et al. That
4014 on NT/2000, but I don't think it will work on 98 et al. That
4011 series of Windows is such a piece of junk anyway that I won't try
4015 series of Windows is such a piece of junk anyway that I won't try
4012 porting it there. The XP port was straightforward, showed a few
4016 porting it there. The XP port was straightforward, showed a few
4013 bugs here and there (fixed all), in particular some string
4017 bugs here and there (fixed all), in particular some string
4014 handling stuff which required considering Unicode strings (which
4018 handling stuff which required considering Unicode strings (which
4015 Windows uses). This is good, but hasn't been too tested :) No
4019 Windows uses). This is good, but hasn't been too tested :) No
4016 fancy installer yet, I'll put a note in the manual so people at
4020 fancy installer yet, I'll put a note in the manual so people at
4017 least make manually a shortcut.
4021 least make manually a shortcut.
4018
4022
4019 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4023 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4020 into a single one, "colors". This now controls both prompt and
4024 into a single one, "colors". This now controls both prompt and
4021 exception color schemes, and can be changed both at startup
4025 exception color schemes, and can be changed both at startup
4022 (either via command-line switches or via ipythonrc files) and at
4026 (either via command-line switches or via ipythonrc files) and at
4023 runtime, with @colors.
4027 runtime, with @colors.
4024 (Magic.magic_run): renamed @prun to @run and removed the old
4028 (Magic.magic_run): renamed @prun to @run and removed the old
4025 @run. The two were too similar to warrant keeping both.
4029 @run. The two were too similar to warrant keeping both.
4026
4030
4027 2002-02-03 Fernando Perez <fperez@colorado.edu>
4031 2002-02-03 Fernando Perez <fperez@colorado.edu>
4028
4032
4029 * IPython/iplib.py (install_first_time): Added comment on how to
4033 * IPython/iplib.py (install_first_time): Added comment on how to
4030 configure the color options for first-time users. Put a <return>
4034 configure the color options for first-time users. Put a <return>
4031 request at the end so that small-terminal users get a chance to
4035 request at the end so that small-terminal users get a chance to
4032 read the startup info.
4036 read the startup info.
4033
4037
4034 2002-01-23 Fernando Perez <fperez@colorado.edu>
4038 2002-01-23 Fernando Perez <fperez@colorado.edu>
4035
4039
4036 * IPython/iplib.py (CachedOutput.update): Changed output memory
4040 * IPython/iplib.py (CachedOutput.update): Changed output memory
4037 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4041 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4038 input history we still use _i. Did this b/c these variable are
4042 input history we still use _i. Did this b/c these variable are
4039 very commonly used in interactive work, so the less we need to
4043 very commonly used in interactive work, so the less we need to
4040 type the better off we are.
4044 type the better off we are.
4041 (Magic.magic_prun): updated @prun to better handle the namespaces
4045 (Magic.magic_prun): updated @prun to better handle the namespaces
4042 the file will run in, including a fix for __name__ not being set
4046 the file will run in, including a fix for __name__ not being set
4043 before.
4047 before.
4044
4048
4045 2002-01-20 Fernando Perez <fperez@colorado.edu>
4049 2002-01-20 Fernando Perez <fperez@colorado.edu>
4046
4050
4047 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4051 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4048 extra garbage for Python 2.2. Need to look more carefully into
4052 extra garbage for Python 2.2. Need to look more carefully into
4049 this later.
4053 this later.
4050
4054
4051 2002-01-19 Fernando Perez <fperez@colorado.edu>
4055 2002-01-19 Fernando Perez <fperez@colorado.edu>
4052
4056
4053 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4057 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4054 display SyntaxError exceptions properly formatted when they occur
4058 display SyntaxError exceptions properly formatted when they occur
4055 (they can be triggered by imported code).
4059 (they can be triggered by imported code).
4056
4060
4057 2002-01-18 Fernando Perez <fperez@colorado.edu>
4061 2002-01-18 Fernando Perez <fperez@colorado.edu>
4058
4062
4059 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4063 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4060 SyntaxError exceptions are reported nicely formatted, instead of
4064 SyntaxError exceptions are reported nicely formatted, instead of
4061 spitting out only offset information as before.
4065 spitting out only offset information as before.
4062 (Magic.magic_prun): Added the @prun function for executing
4066 (Magic.magic_prun): Added the @prun function for executing
4063 programs with command line args inside IPython.
4067 programs with command line args inside IPython.
4064
4068
4065 2002-01-16 Fernando Perez <fperez@colorado.edu>
4069 2002-01-16 Fernando Perez <fperez@colorado.edu>
4066
4070
4067 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4071 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4068 to *not* include the last item given in a range. This brings their
4072 to *not* include the last item given in a range. This brings their
4069 behavior in line with Python's slicing:
4073 behavior in line with Python's slicing:
4070 a[n1:n2] -> a[n1]...a[n2-1]
4074 a[n1:n2] -> a[n1]...a[n2-1]
4071 It may be a bit less convenient, but I prefer to stick to Python's
4075 It may be a bit less convenient, but I prefer to stick to Python's
4072 conventions *everywhere*, so users never have to wonder.
4076 conventions *everywhere*, so users never have to wonder.
4073 (Magic.magic_macro): Added @macro function to ease the creation of
4077 (Magic.magic_macro): Added @macro function to ease the creation of
4074 macros.
4078 macros.
4075
4079
4076 2002-01-05 Fernando Perez <fperez@colorado.edu>
4080 2002-01-05 Fernando Perez <fperez@colorado.edu>
4077
4081
4078 * Released 0.2.4.
4082 * Released 0.2.4.
4079
4083
4080 * IPython/iplib.py (Magic.magic_pdef):
4084 * IPython/iplib.py (Magic.magic_pdef):
4081 (InteractiveShell.safe_execfile): report magic lines and error
4085 (InteractiveShell.safe_execfile): report magic lines and error
4082 lines without line numbers so one can easily copy/paste them for
4086 lines without line numbers so one can easily copy/paste them for
4083 re-execution.
4087 re-execution.
4084
4088
4085 * Updated manual with recent changes.
4089 * Updated manual with recent changes.
4086
4090
4087 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4091 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4088 docstring printing when class? is called. Very handy for knowing
4092 docstring printing when class? is called. Very handy for knowing
4089 how to create class instances (as long as __init__ is well
4093 how to create class instances (as long as __init__ is well
4090 documented, of course :)
4094 documented, of course :)
4091 (Magic.magic_doc): print both class and constructor docstrings.
4095 (Magic.magic_doc): print both class and constructor docstrings.
4092 (Magic.magic_pdef): give constructor info if passed a class and
4096 (Magic.magic_pdef): give constructor info if passed a class and
4093 __call__ info for callable object instances.
4097 __call__ info for callable object instances.
4094
4098
4095 2002-01-04 Fernando Perez <fperez@colorado.edu>
4099 2002-01-04 Fernando Perez <fperez@colorado.edu>
4096
4100
4097 * Made deep_reload() off by default. It doesn't always work
4101 * Made deep_reload() off by default. It doesn't always work
4098 exactly as intended, so it's probably safer to have it off. It's
4102 exactly as intended, so it's probably safer to have it off. It's
4099 still available as dreload() anyway, so nothing is lost.
4103 still available as dreload() anyway, so nothing is lost.
4100
4104
4101 2002-01-02 Fernando Perez <fperez@colorado.edu>
4105 2002-01-02 Fernando Perez <fperez@colorado.edu>
4102
4106
4103 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4107 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4104 so I wanted an updated release).
4108 so I wanted an updated release).
4105
4109
4106 2001-12-27 Fernando Perez <fperez@colorado.edu>
4110 2001-12-27 Fernando Perez <fperez@colorado.edu>
4107
4111
4108 * IPython/iplib.py (InteractiveShell.interact): Added the original
4112 * IPython/iplib.py (InteractiveShell.interact): Added the original
4109 code from 'code.py' for this module in order to change the
4113 code from 'code.py' for this module in order to change the
4110 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4114 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4111 the history cache would break when the user hit Ctrl-C, and
4115 the history cache would break when the user hit Ctrl-C, and
4112 interact() offers no way to add any hooks to it.
4116 interact() offers no way to add any hooks to it.
4113
4117
4114 2001-12-23 Fernando Perez <fperez@colorado.edu>
4118 2001-12-23 Fernando Perez <fperez@colorado.edu>
4115
4119
4116 * setup.py: added check for 'MANIFEST' before trying to remove
4120 * setup.py: added check for 'MANIFEST' before trying to remove
4117 it. Thanks to Sean Reifschneider.
4121 it. Thanks to Sean Reifschneider.
4118
4122
4119 2001-12-22 Fernando Perez <fperez@colorado.edu>
4123 2001-12-22 Fernando Perez <fperez@colorado.edu>
4120
4124
4121 * Released 0.2.2.
4125 * Released 0.2.2.
4122
4126
4123 * Finished (reasonably) writing the manual. Later will add the
4127 * Finished (reasonably) writing the manual. Later will add the
4124 python-standard navigation stylesheets, but for the time being
4128 python-standard navigation stylesheets, but for the time being
4125 it's fairly complete. Distribution will include html and pdf
4129 it's fairly complete. Distribution will include html and pdf
4126 versions.
4130 versions.
4127
4131
4128 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4132 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4129 (MayaVi author).
4133 (MayaVi author).
4130
4134
4131 2001-12-21 Fernando Perez <fperez@colorado.edu>
4135 2001-12-21 Fernando Perez <fperez@colorado.edu>
4132
4136
4133 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4137 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4134 good public release, I think (with the manual and the distutils
4138 good public release, I think (with the manual and the distutils
4135 installer). The manual can use some work, but that can go
4139 installer). The manual can use some work, but that can go
4136 slowly. Otherwise I think it's quite nice for end users. Next
4140 slowly. Otherwise I think it's quite nice for end users. Next
4137 summer, rewrite the guts of it...
4141 summer, rewrite the guts of it...
4138
4142
4139 * Changed format of ipythonrc files to use whitespace as the
4143 * Changed format of ipythonrc files to use whitespace as the
4140 separator instead of an explicit '='. Cleaner.
4144 separator instead of an explicit '='. Cleaner.
4141
4145
4142 2001-12-20 Fernando Perez <fperez@colorado.edu>
4146 2001-12-20 Fernando Perez <fperez@colorado.edu>
4143
4147
4144 * Started a manual in LyX. For now it's just a quick merge of the
4148 * Started a manual in LyX. For now it's just a quick merge of the
4145 various internal docstrings and READMEs. Later it may grow into a
4149 various internal docstrings and READMEs. Later it may grow into a
4146 nice, full-blown manual.
4150 nice, full-blown manual.
4147
4151
4148 * Set up a distutils based installer. Installation should now be
4152 * Set up a distutils based installer. Installation should now be
4149 trivially simple for end-users.
4153 trivially simple for end-users.
4150
4154
4151 2001-12-11 Fernando Perez <fperez@colorado.edu>
4155 2001-12-11 Fernando Perez <fperez@colorado.edu>
4152
4156
4153 * Released 0.2.0. First public release, announced it at
4157 * Released 0.2.0. First public release, announced it at
4154 comp.lang.python. From now on, just bugfixes...
4158 comp.lang.python. From now on, just bugfixes...
4155
4159
4156 * Went through all the files, set copyright/license notices and
4160 * Went through all the files, set copyright/license notices and
4157 cleaned up things. Ready for release.
4161 cleaned up things. Ready for release.
4158
4162
4159 2001-12-10 Fernando Perez <fperez@colorado.edu>
4163 2001-12-10 Fernando Perez <fperez@colorado.edu>
4160
4164
4161 * Changed the first-time installer not to use tarfiles. It's more
4165 * Changed the first-time installer not to use tarfiles. It's more
4162 robust now and less unix-dependent. Also makes it easier for
4166 robust now and less unix-dependent. Also makes it easier for
4163 people to later upgrade versions.
4167 people to later upgrade versions.
4164
4168
4165 * Changed @exit to @abort to reflect the fact that it's pretty
4169 * Changed @exit to @abort to reflect the fact that it's pretty
4166 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4170 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4167 becomes significant only when IPyhton is embedded: in that case,
4171 becomes significant only when IPyhton is embedded: in that case,
4168 C-D closes IPython only, but @abort kills the enclosing program
4172 C-D closes IPython only, but @abort kills the enclosing program
4169 too (unless it had called IPython inside a try catching
4173 too (unless it had called IPython inside a try catching
4170 SystemExit).
4174 SystemExit).
4171
4175
4172 * Created Shell module which exposes the actuall IPython Shell
4176 * Created Shell module which exposes the actuall IPython Shell
4173 classes, currently the normal and the embeddable one. This at
4177 classes, currently the normal and the embeddable one. This at
4174 least offers a stable interface we won't need to change when
4178 least offers a stable interface we won't need to change when
4175 (later) the internals are rewritten. That rewrite will be confined
4179 (later) the internals are rewritten. That rewrite will be confined
4176 to iplib and ipmaker, but the Shell interface should remain as is.
4180 to iplib and ipmaker, but the Shell interface should remain as is.
4177
4181
4178 * Added embed module which offers an embeddable IPShell object,
4182 * Added embed module which offers an embeddable IPShell object,
4179 useful to fire up IPython *inside* a running program. Great for
4183 useful to fire up IPython *inside* a running program. Great for
4180 debugging or dynamical data analysis.
4184 debugging or dynamical data analysis.
4181
4185
4182 2001-12-08 Fernando Perez <fperez@colorado.edu>
4186 2001-12-08 Fernando Perez <fperez@colorado.edu>
4183
4187
4184 * Fixed small bug preventing seeing info from methods of defined
4188 * Fixed small bug preventing seeing info from methods of defined
4185 objects (incorrect namespace in _ofind()).
4189 objects (incorrect namespace in _ofind()).
4186
4190
4187 * Documentation cleanup. Moved the main usage docstrings to a
4191 * Documentation cleanup. Moved the main usage docstrings to a
4188 separate file, usage.py (cleaner to maintain, and hopefully in the
4192 separate file, usage.py (cleaner to maintain, and hopefully in the
4189 future some perlpod-like way of producing interactive, man and
4193 future some perlpod-like way of producing interactive, man and
4190 html docs out of it will be found).
4194 html docs out of it will be found).
4191
4195
4192 * Added @profile to see your profile at any time.
4196 * Added @profile to see your profile at any time.
4193
4197
4194 * Added @p as an alias for 'print'. It's especially convenient if
4198 * Added @p as an alias for 'print'. It's especially convenient if
4195 using automagic ('p x' prints x).
4199 using automagic ('p x' prints x).
4196
4200
4197 * Small cleanups and fixes after a pychecker run.
4201 * Small cleanups and fixes after a pychecker run.
4198
4202
4199 * Changed the @cd command to handle @cd - and @cd -<n> for
4203 * Changed the @cd command to handle @cd - and @cd -<n> for
4200 visiting any directory in _dh.
4204 visiting any directory in _dh.
4201
4205
4202 * Introduced _dh, a history of visited directories. @dhist prints
4206 * Introduced _dh, a history of visited directories. @dhist prints
4203 it out with numbers.
4207 it out with numbers.
4204
4208
4205 2001-12-07 Fernando Perez <fperez@colorado.edu>
4209 2001-12-07 Fernando Perez <fperez@colorado.edu>
4206
4210
4207 * Released 0.1.22
4211 * Released 0.1.22
4208
4212
4209 * Made initialization a bit more robust against invalid color
4213 * Made initialization a bit more robust against invalid color
4210 options in user input (exit, not traceback-crash).
4214 options in user input (exit, not traceback-crash).
4211
4215
4212 * Changed the bug crash reporter to write the report only in the
4216 * Changed the bug crash reporter to write the report only in the
4213 user's .ipython directory. That way IPython won't litter people's
4217 user's .ipython directory. That way IPython won't litter people's
4214 hard disks with crash files all over the place. Also print on
4218 hard disks with crash files all over the place. Also print on
4215 screen the necessary mail command.
4219 screen the necessary mail command.
4216
4220
4217 * With the new ultraTB, implemented LightBG color scheme for light
4221 * With the new ultraTB, implemented LightBG color scheme for light
4218 background terminals. A lot of people like white backgrounds, so I
4222 background terminals. A lot of people like white backgrounds, so I
4219 guess we should at least give them something readable.
4223 guess we should at least give them something readable.
4220
4224
4221 2001-12-06 Fernando Perez <fperez@colorado.edu>
4225 2001-12-06 Fernando Perez <fperez@colorado.edu>
4222
4226
4223 * Modified the structure of ultraTB. Now there's a proper class
4227 * Modified the structure of ultraTB. Now there's a proper class
4224 for tables of color schemes which allow adding schemes easily and
4228 for tables of color schemes which allow adding schemes easily and
4225 switching the active scheme without creating a new instance every
4229 switching the active scheme without creating a new instance every
4226 time (which was ridiculous). The syntax for creating new schemes
4230 time (which was ridiculous). The syntax for creating new schemes
4227 is also cleaner. I think ultraTB is finally done, with a clean
4231 is also cleaner. I think ultraTB is finally done, with a clean
4228 class structure. Names are also much cleaner (now there's proper
4232 class structure. Names are also much cleaner (now there's proper
4229 color tables, no need for every variable to also have 'color' in
4233 color tables, no need for every variable to also have 'color' in
4230 its name).
4234 its name).
4231
4235
4232 * Broke down genutils into separate files. Now genutils only
4236 * Broke down genutils into separate files. Now genutils only
4233 contains utility functions, and classes have been moved to their
4237 contains utility functions, and classes have been moved to their
4234 own files (they had enough independent functionality to warrant
4238 own files (they had enough independent functionality to warrant
4235 it): ConfigLoader, OutputTrap, Struct.
4239 it): ConfigLoader, OutputTrap, Struct.
4236
4240
4237 2001-12-05 Fernando Perez <fperez@colorado.edu>
4241 2001-12-05 Fernando Perez <fperez@colorado.edu>
4238
4242
4239 * IPython turns 21! Released version 0.1.21, as a candidate for
4243 * IPython turns 21! Released version 0.1.21, as a candidate for
4240 public consumption. If all goes well, release in a few days.
4244 public consumption. If all goes well, release in a few days.
4241
4245
4242 * Fixed path bug (files in Extensions/ directory wouldn't be found
4246 * Fixed path bug (files in Extensions/ directory wouldn't be found
4243 unless IPython/ was explicitly in sys.path).
4247 unless IPython/ was explicitly in sys.path).
4244
4248
4245 * Extended the FlexCompleter class as MagicCompleter to allow
4249 * Extended the FlexCompleter class as MagicCompleter to allow
4246 completion of @-starting lines.
4250 completion of @-starting lines.
4247
4251
4248 * Created __release__.py file as a central repository for release
4252 * Created __release__.py file as a central repository for release
4249 info that other files can read from.
4253 info that other files can read from.
4250
4254
4251 * Fixed small bug in logging: when logging was turned on in
4255 * Fixed small bug in logging: when logging was turned on in
4252 mid-session, old lines with special meanings (!@?) were being
4256 mid-session, old lines with special meanings (!@?) were being
4253 logged without the prepended comment, which is necessary since
4257 logged without the prepended comment, which is necessary since
4254 they are not truly valid python syntax. This should make session
4258 they are not truly valid python syntax. This should make session
4255 restores produce less errors.
4259 restores produce less errors.
4256
4260
4257 * The namespace cleanup forced me to make a FlexCompleter class
4261 * The namespace cleanup forced me to make a FlexCompleter class
4258 which is nothing but a ripoff of rlcompleter, but with selectable
4262 which is nothing but a ripoff of rlcompleter, but with selectable
4259 namespace (rlcompleter only works in __main__.__dict__). I'll try
4263 namespace (rlcompleter only works in __main__.__dict__). I'll try
4260 to submit a note to the authors to see if this change can be
4264 to submit a note to the authors to see if this change can be
4261 incorporated in future rlcompleter releases (Dec.6: done)
4265 incorporated in future rlcompleter releases (Dec.6: done)
4262
4266
4263 * More fixes to namespace handling. It was a mess! Now all
4267 * More fixes to namespace handling. It was a mess! Now all
4264 explicit references to __main__.__dict__ are gone (except when
4268 explicit references to __main__.__dict__ are gone (except when
4265 really needed) and everything is handled through the namespace
4269 really needed) and everything is handled through the namespace
4266 dicts in the IPython instance. We seem to be getting somewhere
4270 dicts in the IPython instance. We seem to be getting somewhere
4267 with this, finally...
4271 with this, finally...
4268
4272
4269 * Small documentation updates.
4273 * Small documentation updates.
4270
4274
4271 * Created the Extensions directory under IPython (with an
4275 * Created the Extensions directory under IPython (with an
4272 __init__.py). Put the PhysicalQ stuff there. This directory should
4276 __init__.py). Put the PhysicalQ stuff there. This directory should
4273 be used for all special-purpose extensions.
4277 be used for all special-purpose extensions.
4274
4278
4275 * File renaming:
4279 * File renaming:
4276 ipythonlib --> ipmaker
4280 ipythonlib --> ipmaker
4277 ipplib --> iplib
4281 ipplib --> iplib
4278 This makes a bit more sense in terms of what these files actually do.
4282 This makes a bit more sense in terms of what these files actually do.
4279
4283
4280 * Moved all the classes and functions in ipythonlib to ipplib, so
4284 * Moved all the classes and functions in ipythonlib to ipplib, so
4281 now ipythonlib only has make_IPython(). This will ease up its
4285 now ipythonlib only has make_IPython(). This will ease up its
4282 splitting in smaller functional chunks later.
4286 splitting in smaller functional chunks later.
4283
4287
4284 * Cleaned up (done, I think) output of @whos. Better column
4288 * Cleaned up (done, I think) output of @whos. Better column
4285 formatting, and now shows str(var) for as much as it can, which is
4289 formatting, and now shows str(var) for as much as it can, which is
4286 typically what one gets with a 'print var'.
4290 typically what one gets with a 'print var'.
4287
4291
4288 2001-12-04 Fernando Perez <fperez@colorado.edu>
4292 2001-12-04 Fernando Perez <fperez@colorado.edu>
4289
4293
4290 * Fixed namespace problems. Now builtin/IPyhton/user names get
4294 * Fixed namespace problems. Now builtin/IPyhton/user names get
4291 properly reported in their namespace. Internal namespace handling
4295 properly reported in their namespace. Internal namespace handling
4292 is finally getting decent (not perfect yet, but much better than
4296 is finally getting decent (not perfect yet, but much better than
4293 the ad-hoc mess we had).
4297 the ad-hoc mess we had).
4294
4298
4295 * Removed -exit option. If people just want to run a python
4299 * Removed -exit option. If people just want to run a python
4296 script, that's what the normal interpreter is for. Less
4300 script, that's what the normal interpreter is for. Less
4297 unnecessary options, less chances for bugs.
4301 unnecessary options, less chances for bugs.
4298
4302
4299 * Added a crash handler which generates a complete post-mortem if
4303 * Added a crash handler which generates a complete post-mortem if
4300 IPython crashes. This will help a lot in tracking bugs down the
4304 IPython crashes. This will help a lot in tracking bugs down the
4301 road.
4305 road.
4302
4306
4303 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4307 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4304 which were boud to functions being reassigned would bypass the
4308 which were boud to functions being reassigned would bypass the
4305 logger, breaking the sync of _il with the prompt counter. This
4309 logger, breaking the sync of _il with the prompt counter. This
4306 would then crash IPython later when a new line was logged.
4310 would then crash IPython later when a new line was logged.
4307
4311
4308 2001-12-02 Fernando Perez <fperez@colorado.edu>
4312 2001-12-02 Fernando Perez <fperez@colorado.edu>
4309
4313
4310 * Made IPython a package. This means people don't have to clutter
4314 * Made IPython a package. This means people don't have to clutter
4311 their sys.path with yet another directory. Changed the INSTALL
4315 their sys.path with yet another directory. Changed the INSTALL
4312 file accordingly.
4316 file accordingly.
4313
4317
4314 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4318 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4315 sorts its output (so @who shows it sorted) and @whos formats the
4319 sorts its output (so @who shows it sorted) and @whos formats the
4316 table according to the width of the first column. Nicer, easier to
4320 table according to the width of the first column. Nicer, easier to
4317 read. Todo: write a generic table_format() which takes a list of
4321 read. Todo: write a generic table_format() which takes a list of
4318 lists and prints it nicely formatted, with optional row/column
4322 lists and prints it nicely formatted, with optional row/column
4319 separators and proper padding and justification.
4323 separators and proper padding and justification.
4320
4324
4321 * Released 0.1.20
4325 * Released 0.1.20
4322
4326
4323 * Fixed bug in @log which would reverse the inputcache list (a
4327 * Fixed bug in @log which would reverse the inputcache list (a
4324 copy operation was missing).
4328 copy operation was missing).
4325
4329
4326 * Code cleanup. @config was changed to use page(). Better, since
4330 * Code cleanup. @config was changed to use page(). Better, since
4327 its output is always quite long.
4331 its output is always quite long.
4328
4332
4329 * Itpl is back as a dependency. I was having too many problems
4333 * Itpl is back as a dependency. I was having too many problems
4330 getting the parametric aliases to work reliably, and it's just
4334 getting the parametric aliases to work reliably, and it's just
4331 easier to code weird string operations with it than playing %()s
4335 easier to code weird string operations with it than playing %()s
4332 games. It's only ~6k, so I don't think it's too big a deal.
4336 games. It's only ~6k, so I don't think it's too big a deal.
4333
4337
4334 * Found (and fixed) a very nasty bug with history. !lines weren't
4338 * Found (and fixed) a very nasty bug with history. !lines weren't
4335 getting cached, and the out of sync caches would crash
4339 getting cached, and the out of sync caches would crash
4336 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4340 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4337 division of labor a bit better. Bug fixed, cleaner structure.
4341 division of labor a bit better. Bug fixed, cleaner structure.
4338
4342
4339 2001-12-01 Fernando Perez <fperez@colorado.edu>
4343 2001-12-01 Fernando Perez <fperez@colorado.edu>
4340
4344
4341 * Released 0.1.19
4345 * Released 0.1.19
4342
4346
4343 * Added option -n to @hist to prevent line number printing. Much
4347 * Added option -n to @hist to prevent line number printing. Much
4344 easier to copy/paste code this way.
4348 easier to copy/paste code this way.
4345
4349
4346 * Created global _il to hold the input list. Allows easy
4350 * Created global _il to hold the input list. Allows easy
4347 re-execution of blocks of code by slicing it (inspired by Janko's
4351 re-execution of blocks of code by slicing it (inspired by Janko's
4348 comment on 'macros').
4352 comment on 'macros').
4349
4353
4350 * Small fixes and doc updates.
4354 * Small fixes and doc updates.
4351
4355
4352 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4356 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4353 much too fragile with automagic. Handles properly multi-line
4357 much too fragile with automagic. Handles properly multi-line
4354 statements and takes parameters.
4358 statements and takes parameters.
4355
4359
4356 2001-11-30 Fernando Perez <fperez@colorado.edu>
4360 2001-11-30 Fernando Perez <fperez@colorado.edu>
4357
4361
4358 * Version 0.1.18 released.
4362 * Version 0.1.18 released.
4359
4363
4360 * Fixed nasty namespace bug in initial module imports.
4364 * Fixed nasty namespace bug in initial module imports.
4361
4365
4362 * Added copyright/license notes to all code files (except
4366 * Added copyright/license notes to all code files (except
4363 DPyGetOpt). For the time being, LGPL. That could change.
4367 DPyGetOpt). For the time being, LGPL. That could change.
4364
4368
4365 * Rewrote a much nicer README, updated INSTALL, cleaned up
4369 * Rewrote a much nicer README, updated INSTALL, cleaned up
4366 ipythonrc-* samples.
4370 ipythonrc-* samples.
4367
4371
4368 * Overall code/documentation cleanup. Basically ready for
4372 * Overall code/documentation cleanup. Basically ready for
4369 release. Only remaining thing: licence decision (LGPL?).
4373 release. Only remaining thing: licence decision (LGPL?).
4370
4374
4371 * Converted load_config to a class, ConfigLoader. Now recursion
4375 * Converted load_config to a class, ConfigLoader. Now recursion
4372 control is better organized. Doesn't include the same file twice.
4376 control is better organized. Doesn't include the same file twice.
4373
4377
4374 2001-11-29 Fernando Perez <fperez@colorado.edu>
4378 2001-11-29 Fernando Perez <fperez@colorado.edu>
4375
4379
4376 * Got input history working. Changed output history variables from
4380 * Got input history working. Changed output history variables from
4377 _p to _o so that _i is for input and _o for output. Just cleaner
4381 _p to _o so that _i is for input and _o for output. Just cleaner
4378 convention.
4382 convention.
4379
4383
4380 * Implemented parametric aliases. This pretty much allows the
4384 * Implemented parametric aliases. This pretty much allows the
4381 alias system to offer full-blown shell convenience, I think.
4385 alias system to offer full-blown shell convenience, I think.
4382
4386
4383 * Version 0.1.17 released, 0.1.18 opened.
4387 * Version 0.1.17 released, 0.1.18 opened.
4384
4388
4385 * dot_ipython/ipythonrc (alias): added documentation.
4389 * dot_ipython/ipythonrc (alias): added documentation.
4386 (xcolor): Fixed small bug (xcolors -> xcolor)
4390 (xcolor): Fixed small bug (xcolors -> xcolor)
4387
4391
4388 * Changed the alias system. Now alias is a magic command to define
4392 * Changed the alias system. Now alias is a magic command to define
4389 aliases just like the shell. Rationale: the builtin magics should
4393 aliases just like the shell. Rationale: the builtin magics should
4390 be there for things deeply connected to IPython's
4394 be there for things deeply connected to IPython's
4391 architecture. And this is a much lighter system for what I think
4395 architecture. And this is a much lighter system for what I think
4392 is the really important feature: allowing users to define quickly
4396 is the really important feature: allowing users to define quickly
4393 magics that will do shell things for them, so they can customize
4397 magics that will do shell things for them, so they can customize
4394 IPython easily to match their work habits. If someone is really
4398 IPython easily to match their work habits. If someone is really
4395 desperate to have another name for a builtin alias, they can
4399 desperate to have another name for a builtin alias, they can
4396 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4400 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4397 works.
4401 works.
4398
4402
4399 2001-11-28 Fernando Perez <fperez@colorado.edu>
4403 2001-11-28 Fernando Perez <fperez@colorado.edu>
4400
4404
4401 * Changed @file so that it opens the source file at the proper
4405 * Changed @file so that it opens the source file at the proper
4402 line. Since it uses less, if your EDITOR environment is
4406 line. Since it uses less, if your EDITOR environment is
4403 configured, typing v will immediately open your editor of choice
4407 configured, typing v will immediately open your editor of choice
4404 right at the line where the object is defined. Not as quick as
4408 right at the line where the object is defined. Not as quick as
4405 having a direct @edit command, but for all intents and purposes it
4409 having a direct @edit command, but for all intents and purposes it
4406 works. And I don't have to worry about writing @edit to deal with
4410 works. And I don't have to worry about writing @edit to deal with
4407 all the editors, less does that.
4411 all the editors, less does that.
4408
4412
4409 * Version 0.1.16 released, 0.1.17 opened.
4413 * Version 0.1.16 released, 0.1.17 opened.
4410
4414
4411 * Fixed some nasty bugs in the page/page_dumb combo that could
4415 * Fixed some nasty bugs in the page/page_dumb combo that could
4412 crash IPython.
4416 crash IPython.
4413
4417
4414 2001-11-27 Fernando Perez <fperez@colorado.edu>
4418 2001-11-27 Fernando Perez <fperez@colorado.edu>
4415
4419
4416 * Version 0.1.15 released, 0.1.16 opened.
4420 * Version 0.1.15 released, 0.1.16 opened.
4417
4421
4418 * Finally got ? and ?? to work for undefined things: now it's
4422 * Finally got ? and ?? to work for undefined things: now it's
4419 possible to type {}.get? and get information about the get method
4423 possible to type {}.get? and get information about the get method
4420 of dicts, or os.path? even if only os is defined (so technically
4424 of dicts, or os.path? even if only os is defined (so technically
4421 os.path isn't). Works at any level. For example, after import os,
4425 os.path isn't). Works at any level. For example, after import os,
4422 os?, os.path?, os.path.abspath? all work. This is great, took some
4426 os?, os.path?, os.path.abspath? all work. This is great, took some
4423 work in _ofind.
4427 work in _ofind.
4424
4428
4425 * Fixed more bugs with logging. The sanest way to do it was to add
4429 * Fixed more bugs with logging. The sanest way to do it was to add
4426 to @log a 'mode' parameter. Killed two in one shot (this mode
4430 to @log a 'mode' parameter. Killed two in one shot (this mode
4427 option was a request of Janko's). I think it's finally clean
4431 option was a request of Janko's). I think it's finally clean
4428 (famous last words).
4432 (famous last words).
4429
4433
4430 * Added a page_dumb() pager which does a decent job of paging on
4434 * Added a page_dumb() pager which does a decent job of paging on
4431 screen, if better things (like less) aren't available. One less
4435 screen, if better things (like less) aren't available. One less
4432 unix dependency (someday maybe somebody will port this to
4436 unix dependency (someday maybe somebody will port this to
4433 windows).
4437 windows).
4434
4438
4435 * Fixed problem in magic_log: would lock of logging out if log
4439 * Fixed problem in magic_log: would lock of logging out if log
4436 creation failed (because it would still think it had succeeded).
4440 creation failed (because it would still think it had succeeded).
4437
4441
4438 * Improved the page() function using curses to auto-detect screen
4442 * Improved the page() function using curses to auto-detect screen
4439 size. Now it can make a much better decision on whether to print
4443 size. Now it can make a much better decision on whether to print
4440 or page a string. Option screen_length was modified: a value 0
4444 or page a string. Option screen_length was modified: a value 0
4441 means auto-detect, and that's the default now.
4445 means auto-detect, and that's the default now.
4442
4446
4443 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4447 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4444 go out. I'll test it for a few days, then talk to Janko about
4448 go out. I'll test it for a few days, then talk to Janko about
4445 licences and announce it.
4449 licences and announce it.
4446
4450
4447 * Fixed the length of the auto-generated ---> prompt which appears
4451 * Fixed the length of the auto-generated ---> prompt which appears
4448 for auto-parens and auto-quotes. Getting this right isn't trivial,
4452 for auto-parens and auto-quotes. Getting this right isn't trivial,
4449 with all the color escapes, different prompt types and optional
4453 with all the color escapes, different prompt types and optional
4450 separators. But it seems to be working in all the combinations.
4454 separators. But it seems to be working in all the combinations.
4451
4455
4452 2001-11-26 Fernando Perez <fperez@colorado.edu>
4456 2001-11-26 Fernando Perez <fperez@colorado.edu>
4453
4457
4454 * Wrote a regexp filter to get option types from the option names
4458 * Wrote a regexp filter to get option types from the option names
4455 string. This eliminates the need to manually keep two duplicate
4459 string. This eliminates the need to manually keep two duplicate
4456 lists.
4460 lists.
4457
4461
4458 * Removed the unneeded check_option_names. Now options are handled
4462 * Removed the unneeded check_option_names. Now options are handled
4459 in a much saner manner and it's easy to visually check that things
4463 in a much saner manner and it's easy to visually check that things
4460 are ok.
4464 are ok.
4461
4465
4462 * Updated version numbers on all files I modified to carry a
4466 * Updated version numbers on all files I modified to carry a
4463 notice so Janko and Nathan have clear version markers.
4467 notice so Janko and Nathan have clear version markers.
4464
4468
4465 * Updated docstring for ultraTB with my changes. I should send
4469 * Updated docstring for ultraTB with my changes. I should send
4466 this to Nathan.
4470 this to Nathan.
4467
4471
4468 * Lots of small fixes. Ran everything through pychecker again.
4472 * Lots of small fixes. Ran everything through pychecker again.
4469
4473
4470 * Made loading of deep_reload an cmd line option. If it's not too
4474 * Made loading of deep_reload an cmd line option. If it's not too
4471 kosher, now people can just disable it. With -nodeep_reload it's
4475 kosher, now people can just disable it. With -nodeep_reload it's
4472 still available as dreload(), it just won't overwrite reload().
4476 still available as dreload(), it just won't overwrite reload().
4473
4477
4474 * Moved many options to the no| form (-opt and -noopt
4478 * Moved many options to the no| form (-opt and -noopt
4475 accepted). Cleaner.
4479 accepted). Cleaner.
4476
4480
4477 * Changed magic_log so that if called with no parameters, it uses
4481 * Changed magic_log so that if called with no parameters, it uses
4478 'rotate' mode. That way auto-generated logs aren't automatically
4482 'rotate' mode. That way auto-generated logs aren't automatically
4479 over-written. For normal logs, now a backup is made if it exists
4483 over-written. For normal logs, now a backup is made if it exists
4480 (only 1 level of backups). A new 'backup' mode was added to the
4484 (only 1 level of backups). A new 'backup' mode was added to the
4481 Logger class to support this. This was a request by Janko.
4485 Logger class to support this. This was a request by Janko.
4482
4486
4483 * Added @logoff/@logon to stop/restart an active log.
4487 * Added @logoff/@logon to stop/restart an active log.
4484
4488
4485 * Fixed a lot of bugs in log saving/replay. It was pretty
4489 * Fixed a lot of bugs in log saving/replay. It was pretty
4486 broken. Now special lines (!@,/) appear properly in the command
4490 broken. Now special lines (!@,/) appear properly in the command
4487 history after a log replay.
4491 history after a log replay.
4488
4492
4489 * Tried and failed to implement full session saving via pickle. My
4493 * Tried and failed to implement full session saving via pickle. My
4490 idea was to pickle __main__.__dict__, but modules can't be
4494 idea was to pickle __main__.__dict__, but modules can't be
4491 pickled. This would be a better alternative to replaying logs, but
4495 pickled. This would be a better alternative to replaying logs, but
4492 seems quite tricky to get to work. Changed -session to be called
4496 seems quite tricky to get to work. Changed -session to be called
4493 -logplay, which more accurately reflects what it does. And if we
4497 -logplay, which more accurately reflects what it does. And if we
4494 ever get real session saving working, -session is now available.
4498 ever get real session saving working, -session is now available.
4495
4499
4496 * Implemented color schemes for prompts also. As for tracebacks,
4500 * Implemented color schemes for prompts also. As for tracebacks,
4497 currently only NoColor and Linux are supported. But now the
4501 currently only NoColor and Linux are supported. But now the
4498 infrastructure is in place, based on a generic ColorScheme
4502 infrastructure is in place, based on a generic ColorScheme
4499 class. So writing and activating new schemes both for the prompts
4503 class. So writing and activating new schemes both for the prompts
4500 and the tracebacks should be straightforward.
4504 and the tracebacks should be straightforward.
4501
4505
4502 * Version 0.1.13 released, 0.1.14 opened.
4506 * Version 0.1.13 released, 0.1.14 opened.
4503
4507
4504 * Changed handling of options for output cache. Now counter is
4508 * Changed handling of options for output cache. Now counter is
4505 hardwired starting at 1 and one specifies the maximum number of
4509 hardwired starting at 1 and one specifies the maximum number of
4506 entries *in the outcache* (not the max prompt counter). This is
4510 entries *in the outcache* (not the max prompt counter). This is
4507 much better, since many statements won't increase the cache
4511 much better, since many statements won't increase the cache
4508 count. It also eliminated some confusing options, now there's only
4512 count. It also eliminated some confusing options, now there's only
4509 one: cache_size.
4513 one: cache_size.
4510
4514
4511 * Added 'alias' magic function and magic_alias option in the
4515 * Added 'alias' magic function and magic_alias option in the
4512 ipythonrc file. Now the user can easily define whatever names he
4516 ipythonrc file. Now the user can easily define whatever names he
4513 wants for the magic functions without having to play weird
4517 wants for the magic functions without having to play weird
4514 namespace games. This gives IPython a real shell-like feel.
4518 namespace games. This gives IPython a real shell-like feel.
4515
4519
4516 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4520 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4517 @ or not).
4521 @ or not).
4518
4522
4519 This was one of the last remaining 'visible' bugs (that I know
4523 This was one of the last remaining 'visible' bugs (that I know
4520 of). I think if I can clean up the session loading so it works
4524 of). I think if I can clean up the session loading so it works
4521 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4525 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4522 about licensing).
4526 about licensing).
4523
4527
4524 2001-11-25 Fernando Perez <fperez@colorado.edu>
4528 2001-11-25 Fernando Perez <fperez@colorado.edu>
4525
4529
4526 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4530 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4527 there's a cleaner distinction between what ? and ?? show.
4531 there's a cleaner distinction between what ? and ?? show.
4528
4532
4529 * Added screen_length option. Now the user can define his own
4533 * Added screen_length option. Now the user can define his own
4530 screen size for page() operations.
4534 screen size for page() operations.
4531
4535
4532 * Implemented magic shell-like functions with automatic code
4536 * Implemented magic shell-like functions with automatic code
4533 generation. Now adding another function is just a matter of adding
4537 generation. Now adding another function is just a matter of adding
4534 an entry to a dict, and the function is dynamically generated at
4538 an entry to a dict, and the function is dynamically generated at
4535 run-time. Python has some really cool features!
4539 run-time. Python has some really cool features!
4536
4540
4537 * Renamed many options to cleanup conventions a little. Now all
4541 * Renamed many options to cleanup conventions a little. Now all
4538 are lowercase, and only underscores where needed. Also in the code
4542 are lowercase, and only underscores where needed. Also in the code
4539 option name tables are clearer.
4543 option name tables are clearer.
4540
4544
4541 * Changed prompts a little. Now input is 'In [n]:' instead of
4545 * Changed prompts a little. Now input is 'In [n]:' instead of
4542 'In[n]:='. This allows it the numbers to be aligned with the
4546 'In[n]:='. This allows it the numbers to be aligned with the
4543 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4547 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4544 Python (it was a Mathematica thing). The '...' continuation prompt
4548 Python (it was a Mathematica thing). The '...' continuation prompt
4545 was also changed a little to align better.
4549 was also changed a little to align better.
4546
4550
4547 * Fixed bug when flushing output cache. Not all _p<n> variables
4551 * Fixed bug when flushing output cache. Not all _p<n> variables
4548 exist, so their deletion needs to be wrapped in a try:
4552 exist, so their deletion needs to be wrapped in a try:
4549
4553
4550 * Figured out how to properly use inspect.formatargspec() (it
4554 * Figured out how to properly use inspect.formatargspec() (it
4551 requires the args preceded by *). So I removed all the code from
4555 requires the args preceded by *). So I removed all the code from
4552 _get_pdef in Magic, which was just replicating that.
4556 _get_pdef in Magic, which was just replicating that.
4553
4557
4554 * Added test to prefilter to allow redefining magic function names
4558 * Added test to prefilter to allow redefining magic function names
4555 as variables. This is ok, since the @ form is always available,
4559 as variables. This is ok, since the @ form is always available,
4556 but whe should allow the user to define a variable called 'ls' if
4560 but whe should allow the user to define a variable called 'ls' if
4557 he needs it.
4561 he needs it.
4558
4562
4559 * Moved the ToDo information from README into a separate ToDo.
4563 * Moved the ToDo information from README into a separate ToDo.
4560
4564
4561 * General code cleanup and small bugfixes. I think it's close to a
4565 * General code cleanup and small bugfixes. I think it's close to a
4562 state where it can be released, obviously with a big 'beta'
4566 state where it can be released, obviously with a big 'beta'
4563 warning on it.
4567 warning on it.
4564
4568
4565 * Got the magic function split to work. Now all magics are defined
4569 * Got the magic function split to work. Now all magics are defined
4566 in a separate class. It just organizes things a bit, and now
4570 in a separate class. It just organizes things a bit, and now
4567 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4571 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4568 was too long).
4572 was too long).
4569
4573
4570 * Changed @clear to @reset to avoid potential confusions with
4574 * Changed @clear to @reset to avoid potential confusions with
4571 the shell command clear. Also renamed @cl to @clear, which does
4575 the shell command clear. Also renamed @cl to @clear, which does
4572 exactly what people expect it to from their shell experience.
4576 exactly what people expect it to from their shell experience.
4573
4577
4574 Added a check to the @reset command (since it's so
4578 Added a check to the @reset command (since it's so
4575 destructive, it's probably a good idea to ask for confirmation).
4579 destructive, it's probably a good idea to ask for confirmation).
4576 But now reset only works for full namespace resetting. Since the
4580 But now reset only works for full namespace resetting. Since the
4577 del keyword is already there for deleting a few specific
4581 del keyword is already there for deleting a few specific
4578 variables, I don't see the point of having a redundant magic
4582 variables, I don't see the point of having a redundant magic
4579 function for the same task.
4583 function for the same task.
4580
4584
4581 2001-11-24 Fernando Perez <fperez@colorado.edu>
4585 2001-11-24 Fernando Perez <fperez@colorado.edu>
4582
4586
4583 * Updated the builtin docs (esp. the ? ones).
4587 * Updated the builtin docs (esp. the ? ones).
4584
4588
4585 * Ran all the code through pychecker. Not terribly impressed with
4589 * Ran all the code through pychecker. Not terribly impressed with
4586 it: lots of spurious warnings and didn't really find anything of
4590 it: lots of spurious warnings and didn't really find anything of
4587 substance (just a few modules being imported and not used).
4591 substance (just a few modules being imported and not used).
4588
4592
4589 * Implemented the new ultraTB functionality into IPython. New
4593 * Implemented the new ultraTB functionality into IPython. New
4590 option: xcolors. This chooses color scheme. xmode now only selects
4594 option: xcolors. This chooses color scheme. xmode now only selects
4591 between Plain and Verbose. Better orthogonality.
4595 between Plain and Verbose. Better orthogonality.
4592
4596
4593 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4597 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4594 mode and color scheme for the exception handlers. Now it's
4598 mode and color scheme for the exception handlers. Now it's
4595 possible to have the verbose traceback with no coloring.
4599 possible to have the verbose traceback with no coloring.
4596
4600
4597 2001-11-23 Fernando Perez <fperez@colorado.edu>
4601 2001-11-23 Fernando Perez <fperez@colorado.edu>
4598
4602
4599 * Version 0.1.12 released, 0.1.13 opened.
4603 * Version 0.1.12 released, 0.1.13 opened.
4600
4604
4601 * Removed option to set auto-quote and auto-paren escapes by
4605 * Removed option to set auto-quote and auto-paren escapes by
4602 user. The chances of breaking valid syntax are just too high. If
4606 user. The chances of breaking valid syntax are just too high. If
4603 someone *really* wants, they can always dig into the code.
4607 someone *really* wants, they can always dig into the code.
4604
4608
4605 * Made prompt separators configurable.
4609 * Made prompt separators configurable.
4606
4610
4607 2001-11-22 Fernando Perez <fperez@colorado.edu>
4611 2001-11-22 Fernando Perez <fperez@colorado.edu>
4608
4612
4609 * Small bugfixes in many places.
4613 * Small bugfixes in many places.
4610
4614
4611 * Removed the MyCompleter class from ipplib. It seemed redundant
4615 * Removed the MyCompleter class from ipplib. It seemed redundant
4612 with the C-p,C-n history search functionality. Less code to
4616 with the C-p,C-n history search functionality. Less code to
4613 maintain.
4617 maintain.
4614
4618
4615 * Moved all the original ipython.py code into ipythonlib.py. Right
4619 * Moved all the original ipython.py code into ipythonlib.py. Right
4616 now it's just one big dump into a function called make_IPython, so
4620 now it's just one big dump into a function called make_IPython, so
4617 no real modularity has been gained. But at least it makes the
4621 no real modularity has been gained. But at least it makes the
4618 wrapper script tiny, and since ipythonlib is a module, it gets
4622 wrapper script tiny, and since ipythonlib is a module, it gets
4619 compiled and startup is much faster.
4623 compiled and startup is much faster.
4620
4624
4621 This is a reasobably 'deep' change, so we should test it for a
4625 This is a reasobably 'deep' change, so we should test it for a
4622 while without messing too much more with the code.
4626 while without messing too much more with the code.
4623
4627
4624 2001-11-21 Fernando Perez <fperez@colorado.edu>
4628 2001-11-21 Fernando Perez <fperez@colorado.edu>
4625
4629
4626 * Version 0.1.11 released, 0.1.12 opened for further work.
4630 * Version 0.1.11 released, 0.1.12 opened for further work.
4627
4631
4628 * Removed dependency on Itpl. It was only needed in one place. It
4632 * Removed dependency on Itpl. It was only needed in one place. It
4629 would be nice if this became part of python, though. It makes life
4633 would be nice if this became part of python, though. It makes life
4630 *a lot* easier in some cases.
4634 *a lot* easier in some cases.
4631
4635
4632 * Simplified the prefilter code a bit. Now all handlers are
4636 * Simplified the prefilter code a bit. Now all handlers are
4633 expected to explicitly return a value (at least a blank string).
4637 expected to explicitly return a value (at least a blank string).
4634
4638
4635 * Heavy edits in ipplib. Removed the help system altogether. Now
4639 * Heavy edits in ipplib. Removed the help system altogether. Now
4636 obj?/?? is used for inspecting objects, a magic @doc prints
4640 obj?/?? is used for inspecting objects, a magic @doc prints
4637 docstrings, and full-blown Python help is accessed via the 'help'
4641 docstrings, and full-blown Python help is accessed via the 'help'
4638 keyword. This cleans up a lot of code (less to maintain) and does
4642 keyword. This cleans up a lot of code (less to maintain) and does
4639 the job. Since 'help' is now a standard Python component, might as
4643 the job. Since 'help' is now a standard Python component, might as
4640 well use it and remove duplicate functionality.
4644 well use it and remove duplicate functionality.
4641
4645
4642 Also removed the option to use ipplib as a standalone program. By
4646 Also removed the option to use ipplib as a standalone program. By
4643 now it's too dependent on other parts of IPython to function alone.
4647 now it's too dependent on other parts of IPython to function alone.
4644
4648
4645 * Fixed bug in genutils.pager. It would crash if the pager was
4649 * Fixed bug in genutils.pager. It would crash if the pager was
4646 exited immediately after opening (broken pipe).
4650 exited immediately after opening (broken pipe).
4647
4651
4648 * Trimmed down the VerboseTB reporting a little. The header is
4652 * Trimmed down the VerboseTB reporting a little. The header is
4649 much shorter now and the repeated exception arguments at the end
4653 much shorter now and the repeated exception arguments at the end
4650 have been removed. For interactive use the old header seemed a bit
4654 have been removed. For interactive use the old header seemed a bit
4651 excessive.
4655 excessive.
4652
4656
4653 * Fixed small bug in output of @whos for variables with multi-word
4657 * Fixed small bug in output of @whos for variables with multi-word
4654 types (only first word was displayed).
4658 types (only first word was displayed).
4655
4659
4656 2001-11-17 Fernando Perez <fperez@colorado.edu>
4660 2001-11-17 Fernando Perez <fperez@colorado.edu>
4657
4661
4658 * Version 0.1.10 released, 0.1.11 opened for further work.
4662 * Version 0.1.10 released, 0.1.11 opened for further work.
4659
4663
4660 * Modified dirs and friends. dirs now *returns* the stack (not
4664 * Modified dirs and friends. dirs now *returns* the stack (not
4661 prints), so one can manipulate it as a variable. Convenient to
4665 prints), so one can manipulate it as a variable. Convenient to
4662 travel along many directories.
4666 travel along many directories.
4663
4667
4664 * Fixed bug in magic_pdef: would only work with functions with
4668 * Fixed bug in magic_pdef: would only work with functions with
4665 arguments with default values.
4669 arguments with default values.
4666
4670
4667 2001-11-14 Fernando Perez <fperez@colorado.edu>
4671 2001-11-14 Fernando Perez <fperez@colorado.edu>
4668
4672
4669 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4673 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4670 example with IPython. Various other minor fixes and cleanups.
4674 example with IPython. Various other minor fixes and cleanups.
4671
4675
4672 * Version 0.1.9 released, 0.1.10 opened for further work.
4676 * Version 0.1.9 released, 0.1.10 opened for further work.
4673
4677
4674 * Added sys.path to the list of directories searched in the
4678 * Added sys.path to the list of directories searched in the
4675 execfile= option. It used to be the current directory and the
4679 execfile= option. It used to be the current directory and the
4676 user's IPYTHONDIR only.
4680 user's IPYTHONDIR only.
4677
4681
4678 2001-11-13 Fernando Perez <fperez@colorado.edu>
4682 2001-11-13 Fernando Perez <fperez@colorado.edu>
4679
4683
4680 * Reinstated the raw_input/prefilter separation that Janko had
4684 * Reinstated the raw_input/prefilter separation that Janko had
4681 initially. This gives a more convenient setup for extending the
4685 initially. This gives a more convenient setup for extending the
4682 pre-processor from the outside: raw_input always gets a string,
4686 pre-processor from the outside: raw_input always gets a string,
4683 and prefilter has to process it. We can then redefine prefilter
4687 and prefilter has to process it. We can then redefine prefilter
4684 from the outside and implement extensions for special
4688 from the outside and implement extensions for special
4685 purposes.
4689 purposes.
4686
4690
4687 Today I got one for inputting PhysicalQuantity objects
4691 Today I got one for inputting PhysicalQuantity objects
4688 (from Scientific) without needing any function calls at
4692 (from Scientific) without needing any function calls at
4689 all. Extremely convenient, and it's all done as a user-level
4693 all. Extremely convenient, and it's all done as a user-level
4690 extension (no IPython code was touched). Now instead of:
4694 extension (no IPython code was touched). Now instead of:
4691 a = PhysicalQuantity(4.2,'m/s**2')
4695 a = PhysicalQuantity(4.2,'m/s**2')
4692 one can simply say
4696 one can simply say
4693 a = 4.2 m/s**2
4697 a = 4.2 m/s**2
4694 or even
4698 or even
4695 a = 4.2 m/s^2
4699 a = 4.2 m/s^2
4696
4700
4697 I use this, but it's also a proof of concept: IPython really is
4701 I use this, but it's also a proof of concept: IPython really is
4698 fully user-extensible, even at the level of the parsing of the
4702 fully user-extensible, even at the level of the parsing of the
4699 command line. It's not trivial, but it's perfectly doable.
4703 command line. It's not trivial, but it's perfectly doable.
4700
4704
4701 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4705 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4702 the problem of modules being loaded in the inverse order in which
4706 the problem of modules being loaded in the inverse order in which
4703 they were defined in
4707 they were defined in
4704
4708
4705 * Version 0.1.8 released, 0.1.9 opened for further work.
4709 * Version 0.1.8 released, 0.1.9 opened for further work.
4706
4710
4707 * Added magics pdef, source and file. They respectively show the
4711 * Added magics pdef, source and file. They respectively show the
4708 definition line ('prototype' in C), source code and full python
4712 definition line ('prototype' in C), source code and full python
4709 file for any callable object. The object inspector oinfo uses
4713 file for any callable object. The object inspector oinfo uses
4710 these to show the same information.
4714 these to show the same information.
4711
4715
4712 * Version 0.1.7 released, 0.1.8 opened for further work.
4716 * Version 0.1.7 released, 0.1.8 opened for further work.
4713
4717
4714 * Separated all the magic functions into a class called Magic. The
4718 * Separated all the magic functions into a class called Magic. The
4715 InteractiveShell class was becoming too big for Xemacs to handle
4719 InteractiveShell class was becoming too big for Xemacs to handle
4716 (de-indenting a line would lock it up for 10 seconds while it
4720 (de-indenting a line would lock it up for 10 seconds while it
4717 backtracked on the whole class!)
4721 backtracked on the whole class!)
4718
4722
4719 FIXME: didn't work. It can be done, but right now namespaces are
4723 FIXME: didn't work. It can be done, but right now namespaces are
4720 all messed up. Do it later (reverted it for now, so at least
4724 all messed up. Do it later (reverted it for now, so at least
4721 everything works as before).
4725 everything works as before).
4722
4726
4723 * Got the object introspection system (magic_oinfo) working! I
4727 * Got the object introspection system (magic_oinfo) working! I
4724 think this is pretty much ready for release to Janko, so he can
4728 think this is pretty much ready for release to Janko, so he can
4725 test it for a while and then announce it. Pretty much 100% of what
4729 test it for a while and then announce it. Pretty much 100% of what
4726 I wanted for the 'phase 1' release is ready. Happy, tired.
4730 I wanted for the 'phase 1' release is ready. Happy, tired.
4727
4731
4728 2001-11-12 Fernando Perez <fperez@colorado.edu>
4732 2001-11-12 Fernando Perez <fperez@colorado.edu>
4729
4733
4730 * Version 0.1.6 released, 0.1.7 opened for further work.
4734 * Version 0.1.6 released, 0.1.7 opened for further work.
4731
4735
4732 * Fixed bug in printing: it used to test for truth before
4736 * Fixed bug in printing: it used to test for truth before
4733 printing, so 0 wouldn't print. Now checks for None.
4737 printing, so 0 wouldn't print. Now checks for None.
4734
4738
4735 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4739 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4736 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4740 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4737 reaches by hand into the outputcache. Think of a better way to do
4741 reaches by hand into the outputcache. Think of a better way to do
4738 this later.
4742 this later.
4739
4743
4740 * Various small fixes thanks to Nathan's comments.
4744 * Various small fixes thanks to Nathan's comments.
4741
4745
4742 * Changed magic_pprint to magic_Pprint. This way it doesn't
4746 * Changed magic_pprint to magic_Pprint. This way it doesn't
4743 collide with pprint() and the name is consistent with the command
4747 collide with pprint() and the name is consistent with the command
4744 line option.
4748 line option.
4745
4749
4746 * Changed prompt counter behavior to be fully like
4750 * Changed prompt counter behavior to be fully like
4747 Mathematica's. That is, even input that doesn't return a result
4751 Mathematica's. That is, even input that doesn't return a result
4748 raises the prompt counter. The old behavior was kind of confusing
4752 raises the prompt counter. The old behavior was kind of confusing
4749 (getting the same prompt number several times if the operation
4753 (getting the same prompt number several times if the operation
4750 didn't return a result).
4754 didn't return a result).
4751
4755
4752 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4756 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4753
4757
4754 * Fixed -Classic mode (wasn't working anymore).
4758 * Fixed -Classic mode (wasn't working anymore).
4755
4759
4756 * Added colored prompts using Nathan's new code. Colors are
4760 * Added colored prompts using Nathan's new code. Colors are
4757 currently hardwired, they can be user-configurable. For
4761 currently hardwired, they can be user-configurable. For
4758 developers, they can be chosen in file ipythonlib.py, at the
4762 developers, they can be chosen in file ipythonlib.py, at the
4759 beginning of the CachedOutput class def.
4763 beginning of the CachedOutput class def.
4760
4764
4761 2001-11-11 Fernando Perez <fperez@colorado.edu>
4765 2001-11-11 Fernando Perez <fperez@colorado.edu>
4762
4766
4763 * Version 0.1.5 released, 0.1.6 opened for further work.
4767 * Version 0.1.5 released, 0.1.6 opened for further work.
4764
4768
4765 * Changed magic_env to *return* the environment as a dict (not to
4769 * Changed magic_env to *return* the environment as a dict (not to
4766 print it). This way it prints, but it can also be processed.
4770 print it). This way it prints, but it can also be processed.
4767
4771
4768 * Added Verbose exception reporting to interactive
4772 * Added Verbose exception reporting to interactive
4769 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4773 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4770 traceback. Had to make some changes to the ultraTB file. This is
4774 traceback. Had to make some changes to the ultraTB file. This is
4771 probably the last 'big' thing in my mental todo list. This ties
4775 probably the last 'big' thing in my mental todo list. This ties
4772 in with the next entry:
4776 in with the next entry:
4773
4777
4774 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4778 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4775 has to specify is Plain, Color or Verbose for all exception
4779 has to specify is Plain, Color or Verbose for all exception
4776 handling.
4780 handling.
4777
4781
4778 * Removed ShellServices option. All this can really be done via
4782 * Removed ShellServices option. All this can really be done via
4779 the magic system. It's easier to extend, cleaner and has automatic
4783 the magic system. It's easier to extend, cleaner and has automatic
4780 namespace protection and documentation.
4784 namespace protection and documentation.
4781
4785
4782 2001-11-09 Fernando Perez <fperez@colorado.edu>
4786 2001-11-09 Fernando Perez <fperez@colorado.edu>
4783
4787
4784 * Fixed bug in output cache flushing (missing parameter to
4788 * Fixed bug in output cache flushing (missing parameter to
4785 __init__). Other small bugs fixed (found using pychecker).
4789 __init__). Other small bugs fixed (found using pychecker).
4786
4790
4787 * Version 0.1.4 opened for bugfixing.
4791 * Version 0.1.4 opened for bugfixing.
4788
4792
4789 2001-11-07 Fernando Perez <fperez@colorado.edu>
4793 2001-11-07 Fernando Perez <fperez@colorado.edu>
4790
4794
4791 * Version 0.1.3 released, mainly because of the raw_input bug.
4795 * Version 0.1.3 released, mainly because of the raw_input bug.
4792
4796
4793 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4797 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4794 and when testing for whether things were callable, a call could
4798 and when testing for whether things were callable, a call could
4795 actually be made to certain functions. They would get called again
4799 actually be made to certain functions. They would get called again
4796 once 'really' executed, with a resulting double call. A disaster
4800 once 'really' executed, with a resulting double call. A disaster
4797 in many cases (list.reverse() would never work!).
4801 in many cases (list.reverse() would never work!).
4798
4802
4799 * Removed prefilter() function, moved its code to raw_input (which
4803 * Removed prefilter() function, moved its code to raw_input (which
4800 after all was just a near-empty caller for prefilter). This saves
4804 after all was just a near-empty caller for prefilter). This saves
4801 a function call on every prompt, and simplifies the class a tiny bit.
4805 a function call on every prompt, and simplifies the class a tiny bit.
4802
4806
4803 * Fix _ip to __ip name in magic example file.
4807 * Fix _ip to __ip name in magic example file.
4804
4808
4805 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4809 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4806 work with non-gnu versions of tar.
4810 work with non-gnu versions of tar.
4807
4811
4808 2001-11-06 Fernando Perez <fperez@colorado.edu>
4812 2001-11-06 Fernando Perez <fperez@colorado.edu>
4809
4813
4810 * Version 0.1.2. Just to keep track of the recent changes.
4814 * Version 0.1.2. Just to keep track of the recent changes.
4811
4815
4812 * Fixed nasty bug in output prompt routine. It used to check 'if
4816 * Fixed nasty bug in output prompt routine. It used to check 'if
4813 arg != None...'. Problem is, this fails if arg implements a
4817 arg != None...'. Problem is, this fails if arg implements a
4814 special comparison (__cmp__) which disallows comparing to
4818 special comparison (__cmp__) which disallows comparing to
4815 None. Found it when trying to use the PhysicalQuantity module from
4819 None. Found it when trying to use the PhysicalQuantity module from
4816 ScientificPython.
4820 ScientificPython.
4817
4821
4818 2001-11-05 Fernando Perez <fperez@colorado.edu>
4822 2001-11-05 Fernando Perez <fperez@colorado.edu>
4819
4823
4820 * Also added dirs. Now the pushd/popd/dirs family functions
4824 * Also added dirs. Now the pushd/popd/dirs family functions
4821 basically like the shell, with the added convenience of going home
4825 basically like the shell, with the added convenience of going home
4822 when called with no args.
4826 when called with no args.
4823
4827
4824 * pushd/popd slightly modified to mimic shell behavior more
4828 * pushd/popd slightly modified to mimic shell behavior more
4825 closely.
4829 closely.
4826
4830
4827 * Added env,pushd,popd from ShellServices as magic functions. I
4831 * Added env,pushd,popd from ShellServices as magic functions. I
4828 think the cleanest will be to port all desired functions from
4832 think the cleanest will be to port all desired functions from
4829 ShellServices as magics and remove ShellServices altogether. This
4833 ShellServices as magics and remove ShellServices altogether. This
4830 will provide a single, clean way of adding functionality
4834 will provide a single, clean way of adding functionality
4831 (shell-type or otherwise) to IP.
4835 (shell-type or otherwise) to IP.
4832
4836
4833 2001-11-04 Fernando Perez <fperez@colorado.edu>
4837 2001-11-04 Fernando Perez <fperez@colorado.edu>
4834
4838
4835 * Added .ipython/ directory to sys.path. This way users can keep
4839 * Added .ipython/ directory to sys.path. This way users can keep
4836 customizations there and access them via import.
4840 customizations there and access them via import.
4837
4841
4838 2001-11-03 Fernando Perez <fperez@colorado.edu>
4842 2001-11-03 Fernando Perez <fperez@colorado.edu>
4839
4843
4840 * Opened version 0.1.1 for new changes.
4844 * Opened version 0.1.1 for new changes.
4841
4845
4842 * Changed version number to 0.1.0: first 'public' release, sent to
4846 * Changed version number to 0.1.0: first 'public' release, sent to
4843 Nathan and Janko.
4847 Nathan and Janko.
4844
4848
4845 * Lots of small fixes and tweaks.
4849 * Lots of small fixes and tweaks.
4846
4850
4847 * Minor changes to whos format. Now strings are shown, snipped if
4851 * Minor changes to whos format. Now strings are shown, snipped if
4848 too long.
4852 too long.
4849
4853
4850 * Changed ShellServices to work on __main__ so they show up in @who
4854 * Changed ShellServices to work on __main__ so they show up in @who
4851
4855
4852 * Help also works with ? at the end of a line:
4856 * Help also works with ? at the end of a line:
4853 ?sin and sin?
4857 ?sin and sin?
4854 both produce the same effect. This is nice, as often I use the
4858 both produce the same effect. This is nice, as often I use the
4855 tab-complete to find the name of a method, but I used to then have
4859 tab-complete to find the name of a method, but I used to then have
4856 to go to the beginning of the line to put a ? if I wanted more
4860 to go to the beginning of the line to put a ? if I wanted more
4857 info. Now I can just add the ? and hit return. Convenient.
4861 info. Now I can just add the ? and hit return. Convenient.
4858
4862
4859 2001-11-02 Fernando Perez <fperez@colorado.edu>
4863 2001-11-02 Fernando Perez <fperez@colorado.edu>
4860
4864
4861 * Python version check (>=2.1) added.
4865 * Python version check (>=2.1) added.
4862
4866
4863 * Added LazyPython documentation. At this point the docs are quite
4867 * Added LazyPython documentation. At this point the docs are quite
4864 a mess. A cleanup is in order.
4868 a mess. A cleanup is in order.
4865
4869
4866 * Auto-installer created. For some bizarre reason, the zipfiles
4870 * Auto-installer created. For some bizarre reason, the zipfiles
4867 module isn't working on my system. So I made a tar version
4871 module isn't working on my system. So I made a tar version
4868 (hopefully the command line options in various systems won't kill
4872 (hopefully the command line options in various systems won't kill
4869 me).
4873 me).
4870
4874
4871 * Fixes to Struct in genutils. Now all dictionary-like methods are
4875 * Fixes to Struct in genutils. Now all dictionary-like methods are
4872 protected (reasonably).
4876 protected (reasonably).
4873
4877
4874 * Added pager function to genutils and changed ? to print usage
4878 * Added pager function to genutils and changed ? to print usage
4875 note through it (it was too long).
4879 note through it (it was too long).
4876
4880
4877 * Added the LazyPython functionality. Works great! I changed the
4881 * Added the LazyPython functionality. Works great! I changed the
4878 auto-quote escape to ';', it's on home row and next to '. But
4882 auto-quote escape to ';', it's on home row and next to '. But
4879 both auto-quote and auto-paren (still /) escapes are command-line
4883 both auto-quote and auto-paren (still /) escapes are command-line
4880 parameters.
4884 parameters.
4881
4885
4882
4886
4883 2001-11-01 Fernando Perez <fperez@colorado.edu>
4887 2001-11-01 Fernando Perez <fperez@colorado.edu>
4884
4888
4885 * Version changed to 0.0.7. Fairly large change: configuration now
4889 * Version changed to 0.0.7. Fairly large change: configuration now
4886 is all stored in a directory, by default .ipython. There, all
4890 is all stored in a directory, by default .ipython. There, all
4887 config files have normal looking names (not .names)
4891 config files have normal looking names (not .names)
4888
4892
4889 * Version 0.0.6 Released first to Lucas and Archie as a test
4893 * Version 0.0.6 Released first to Lucas and Archie as a test
4890 run. Since it's the first 'semi-public' release, change version to
4894 run. Since it's the first 'semi-public' release, change version to
4891 > 0.0.6 for any changes now.
4895 > 0.0.6 for any changes now.
4892
4896
4893 * Stuff I had put in the ipplib.py changelog:
4897 * Stuff I had put in the ipplib.py changelog:
4894
4898
4895 Changes to InteractiveShell:
4899 Changes to InteractiveShell:
4896
4900
4897 - Made the usage message a parameter.
4901 - Made the usage message a parameter.
4898
4902
4899 - Require the name of the shell variable to be given. It's a bit
4903 - Require the name of the shell variable to be given. It's a bit
4900 of a hack, but allows the name 'shell' not to be hardwire in the
4904 of a hack, but allows the name 'shell' not to be hardwire in the
4901 magic (@) handler, which is problematic b/c it requires
4905 magic (@) handler, which is problematic b/c it requires
4902 polluting the global namespace with 'shell'. This in turn is
4906 polluting the global namespace with 'shell'. This in turn is
4903 fragile: if a user redefines a variable called shell, things
4907 fragile: if a user redefines a variable called shell, things
4904 break.
4908 break.
4905
4909
4906 - magic @: all functions available through @ need to be defined
4910 - magic @: all functions available through @ need to be defined
4907 as magic_<name>, even though they can be called simply as
4911 as magic_<name>, even though they can be called simply as
4908 @<name>. This allows the special command @magic to gather
4912 @<name>. This allows the special command @magic to gather
4909 information automatically about all existing magic functions,
4913 information automatically about all existing magic functions,
4910 even if they are run-time user extensions, by parsing the shell
4914 even if they are run-time user extensions, by parsing the shell
4911 instance __dict__ looking for special magic_ names.
4915 instance __dict__ looking for special magic_ names.
4912
4916
4913 - mainloop: added *two* local namespace parameters. This allows
4917 - mainloop: added *two* local namespace parameters. This allows
4914 the class to differentiate between parameters which were there
4918 the class to differentiate between parameters which were there
4915 before and after command line initialization was processed. This
4919 before and after command line initialization was processed. This
4916 way, later @who can show things loaded at startup by the
4920 way, later @who can show things loaded at startup by the
4917 user. This trick was necessary to make session saving/reloading
4921 user. This trick was necessary to make session saving/reloading
4918 really work: ideally after saving/exiting/reloading a session,
4922 really work: ideally after saving/exiting/reloading a session,
4919 *everythin* should look the same, including the output of @who. I
4923 *everythin* should look the same, including the output of @who. I
4920 was only able to make this work with this double namespace
4924 was only able to make this work with this double namespace
4921 trick.
4925 trick.
4922
4926
4923 - added a header to the logfile which allows (almost) full
4927 - added a header to the logfile which allows (almost) full
4924 session restoring.
4928 session restoring.
4925
4929
4926 - prepend lines beginning with @ or !, with a and log
4930 - prepend lines beginning with @ or !, with a and log
4927 them. Why? !lines: may be useful to know what you did @lines:
4931 them. Why? !lines: may be useful to know what you did @lines:
4928 they may affect session state. So when restoring a session, at
4932 they may affect session state. So when restoring a session, at
4929 least inform the user of their presence. I couldn't quite get
4933 least inform the user of their presence. I couldn't quite get
4930 them to properly re-execute, but at least the user is warned.
4934 them to properly re-execute, but at least the user is warned.
4931
4935
4932 * Started ChangeLog.
4936 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now