##// END OF EJS Templates
fix ask_yes_no so it does not loop 20 times upon EOF.
fperez -
Show More
@@ -1,1708 +1,1707 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 1322 2006-05-24 07:51:39Z fperez $"""
8 $Id: genutils.py 1349 2006-06-04 00:57:43Z fperez $"""
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 IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>' % Release.authors['Fernando']
18 __author__ = '%s <%s>' % Release.authors['Fernando']
19 __license__ = Release.license
19 __license__ = Release.license
20
20
21 #****************************************************************************
21 #****************************************************************************
22 # required modules from the Python standard library
22 # required modules from the Python standard library
23 import __main__
23 import __main__
24 import commands
24 import commands
25 import os
25 import os
26 import re
26 import re
27 import shutil
27 import shutil
28 import sys
28 import sys
29 import tempfile
29 import tempfile
30 import time
30 import time
31 import types
31 import types
32
32
33 # Other IPython utilities
33 # Other IPython utilities
34 from IPython.Itpl import Itpl,itpl,printpl
34 from IPython.Itpl import Itpl,itpl,printpl
35 from IPython import DPyGetOpt
35 from IPython import DPyGetOpt
36 from path import path
36 from path import path
37 if os.name == "nt":
37 if os.name == "nt":
38 from IPython.winconsole import get_console_size
38 from IPython.winconsole import get_console_size
39
39
40 #****************************************************************************
40 #****************************************************************************
41 # Exceptions
41 # Exceptions
42 class Error(Exception):
42 class Error(Exception):
43 """Base class for exceptions in this module."""
43 """Base class for exceptions in this module."""
44 pass
44 pass
45
45
46 #----------------------------------------------------------------------------
46 #----------------------------------------------------------------------------
47 class IOStream:
47 class IOStream:
48 def __init__(self,stream,fallback):
48 def __init__(self,stream,fallback):
49 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
49 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
50 stream = fallback
50 stream = fallback
51 self.stream = stream
51 self.stream = stream
52 self._swrite = stream.write
52 self._swrite = stream.write
53 self.flush = stream.flush
53 self.flush = stream.flush
54
54
55 def write(self,data):
55 def write(self,data):
56 try:
56 try:
57 self._swrite(data)
57 self._swrite(data)
58 except:
58 except:
59 try:
59 try:
60 # print handles some unicode issues which may trip a plain
60 # print handles some unicode issues which may trip a plain
61 # write() call. Attempt to emulate write() by using a
61 # write() call. Attempt to emulate write() by using a
62 # trailing comma
62 # trailing comma
63 print >> self.stream, data,
63 print >> self.stream, data,
64 except:
64 except:
65 # if we get here, something is seriously broken.
65 # if we get here, something is seriously broken.
66 print >> sys.stderr, \
66 print >> sys.stderr, \
67 'ERROR - failed to write data to stream:', self.stream
67 'ERROR - failed to write data to stream:', self.stream
68
68
69 class IOTerm:
69 class IOTerm:
70 """ Term holds the file or file-like objects for handling I/O operations.
70 """ Term holds the file or file-like objects for handling I/O operations.
71
71
72 These are normally just sys.stdin, sys.stdout and sys.stderr but for
72 These are normally just sys.stdin, sys.stdout and sys.stderr but for
73 Windows they can can replaced to allow editing the strings before they are
73 Windows they can can replaced to allow editing the strings before they are
74 displayed."""
74 displayed."""
75
75
76 # In the future, having IPython channel all its I/O operations through
76 # In the future, having IPython channel all its I/O operations through
77 # this class will make it easier to embed it into other environments which
77 # this class will make it easier to embed it into other environments which
78 # are not a normal terminal (such as a GUI-based shell)
78 # are not a normal terminal (such as a GUI-based shell)
79 def __init__(self,cin=None,cout=None,cerr=None):
79 def __init__(self,cin=None,cout=None,cerr=None):
80 self.cin = IOStream(cin,sys.stdin)
80 self.cin = IOStream(cin,sys.stdin)
81 self.cout = IOStream(cout,sys.stdout)
81 self.cout = IOStream(cout,sys.stdout)
82 self.cerr = IOStream(cerr,sys.stderr)
82 self.cerr = IOStream(cerr,sys.stderr)
83
83
84 # Global variable to be used for all I/O
84 # Global variable to be used for all I/O
85 Term = IOTerm()
85 Term = IOTerm()
86
86
87 import IPython.rlineimpl as readline
87 import IPython.rlineimpl as readline
88 # Remake Term to use the readline i/o facilities
88 # Remake Term to use the readline i/o facilities
89 if sys.platform == 'win32' and readline.have_readline:
89 if sys.platform == 'win32' and readline.have_readline:
90
90
91 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
91 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
92
92
93
93
94 #****************************************************************************
94 #****************************************************************************
95 # Generic warning/error printer, used by everything else
95 # Generic warning/error printer, used by everything else
96 def warn(msg,level=2,exit_val=1):
96 def warn(msg,level=2,exit_val=1):
97 """Standard warning printer. Gives formatting consistency.
97 """Standard warning printer. Gives formatting consistency.
98
98
99 Output is sent to Term.cerr (sys.stderr by default).
99 Output is sent to Term.cerr (sys.stderr by default).
100
100
101 Options:
101 Options:
102
102
103 -level(2): allows finer control:
103 -level(2): allows finer control:
104 0 -> Do nothing, dummy function.
104 0 -> Do nothing, dummy function.
105 1 -> Print message.
105 1 -> Print message.
106 2 -> Print 'WARNING:' + message. (Default level).
106 2 -> Print 'WARNING:' + message. (Default level).
107 3 -> Print 'ERROR:' + message.
107 3 -> Print 'ERROR:' + message.
108 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
108 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
109
109
110 -exit_val (1): exit value returned by sys.exit() for a level 4
110 -exit_val (1): exit value returned by sys.exit() for a level 4
111 warning. Ignored for all other levels."""
111 warning. Ignored for all other levels."""
112
112
113 if level>0:
113 if level>0:
114 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
114 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
115 print >> Term.cerr, '%s%s' % (header[level],msg)
115 print >> Term.cerr, '%s%s' % (header[level],msg)
116 if level == 4:
116 if level == 4:
117 print >> Term.cerr,'Exiting.\n'
117 print >> Term.cerr,'Exiting.\n'
118 sys.exit(exit_val)
118 sys.exit(exit_val)
119
119
120 def info(msg):
120 def info(msg):
121 """Equivalent to warn(msg,level=1)."""
121 """Equivalent to warn(msg,level=1)."""
122
122
123 warn(msg,level=1)
123 warn(msg,level=1)
124
124
125 def error(msg):
125 def error(msg):
126 """Equivalent to warn(msg,level=3)."""
126 """Equivalent to warn(msg,level=3)."""
127
127
128 warn(msg,level=3)
128 warn(msg,level=3)
129
129
130 def fatal(msg,exit_val=1):
130 def fatal(msg,exit_val=1):
131 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
131 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
132
132
133 warn(msg,exit_val=exit_val,level=4)
133 warn(msg,exit_val=exit_val,level=4)
134
134
135 #---------------------------------------------------------------------------
135 #---------------------------------------------------------------------------
136 # Debugging routines
136 # Debugging routines
137 #
137 #
138 def debugx(expr,pre_msg=''):
138 def debugx(expr,pre_msg=''):
139 """Print the value of an expression from the caller's frame.
139 """Print the value of an expression from the caller's frame.
140
140
141 Takes an expression, evaluates it in the caller's frame and prints both
141 Takes an expression, evaluates it in the caller's frame and prints both
142 the given expression and the resulting value (as well as a debug mark
142 the given expression and the resulting value (as well as a debug mark
143 indicating the name of the calling function. The input must be of a form
143 indicating the name of the calling function. The input must be of a form
144 suitable for eval().
144 suitable for eval().
145
145
146 An optional message can be passed, which will be prepended to the printed
146 An optional message can be passed, which will be prepended to the printed
147 expr->value pair."""
147 expr->value pair."""
148
148
149 cf = sys._getframe(1)
149 cf = sys._getframe(1)
150 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
150 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
151 eval(expr,cf.f_globals,cf.f_locals))
151 eval(expr,cf.f_globals,cf.f_locals))
152
152
153 # deactivate it by uncommenting the following line, which makes it a no-op
153 # deactivate it by uncommenting the following line, which makes it a no-op
154 #def debugx(expr,pre_msg=''): pass
154 #def debugx(expr,pre_msg=''): pass
155
155
156 #----------------------------------------------------------------------------
156 #----------------------------------------------------------------------------
157 StringTypes = types.StringTypes
157 StringTypes = types.StringTypes
158
158
159 # Basic timing functionality
159 # Basic timing functionality
160
160
161 # If possible (Unix), use the resource module instead of time.clock()
161 # If possible (Unix), use the resource module instead of time.clock()
162 try:
162 try:
163 import resource
163 import resource
164 def clock():
164 def clock():
165 """clock() -> floating point number
165 """clock() -> floating point number
166
166
167 Return the CPU time in seconds (user time only, system time is
167 Return the CPU time in seconds (user time only, system time is
168 ignored) since the start of the process. This is done via a call to
168 ignored) since the start of the process. This is done via a call to
169 resource.getrusage, so it avoids the wraparound problems in
169 resource.getrusage, so it avoids the wraparound problems in
170 time.clock()."""
170 time.clock()."""
171
171
172 return resource.getrusage(resource.RUSAGE_SELF)[0]
172 return resource.getrusage(resource.RUSAGE_SELF)[0]
173
173
174 def clock2():
174 def clock2():
175 """clock2() -> (t_user,t_system)
175 """clock2() -> (t_user,t_system)
176
176
177 Similar to clock(), but return a tuple of user/system times."""
177 Similar to clock(), but return a tuple of user/system times."""
178 return resource.getrusage(resource.RUSAGE_SELF)[:2]
178 return resource.getrusage(resource.RUSAGE_SELF)[:2]
179
179
180 except ImportError:
180 except ImportError:
181 clock = time.clock
181 clock = time.clock
182 def clock2():
182 def clock2():
183 """Under windows, system CPU time can't be measured.
183 """Under windows, system CPU time can't be measured.
184
184
185 This just returns clock() and zero."""
185 This just returns clock() and zero."""
186 return time.clock(),0.0
186 return time.clock(),0.0
187
187
188 def timings_out(reps,func,*args,**kw):
188 def timings_out(reps,func,*args,**kw):
189 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
189 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
190
190
191 Execute a function reps times, return a tuple with the elapsed total
191 Execute a function reps times, return a tuple with the elapsed total
192 CPU time in seconds, the time per call and the function's output.
192 CPU time in seconds, the time per call and the function's output.
193
193
194 Under Unix, the return value is the sum of user+system time consumed by
194 Under Unix, the return value is the sum of user+system time consumed by
195 the process, computed via the resource module. This prevents problems
195 the process, computed via the resource module. This prevents problems
196 related to the wraparound effect which the time.clock() function has.
196 related to the wraparound effect which the time.clock() function has.
197
197
198 Under Windows the return value is in wall clock seconds. See the
198 Under Windows the return value is in wall clock seconds. See the
199 documentation for the time module for more details."""
199 documentation for the time module for more details."""
200
200
201 reps = int(reps)
201 reps = int(reps)
202 assert reps >=1, 'reps must be >= 1'
202 assert reps >=1, 'reps must be >= 1'
203 if reps==1:
203 if reps==1:
204 start = clock()
204 start = clock()
205 out = func(*args,**kw)
205 out = func(*args,**kw)
206 tot_time = clock()-start
206 tot_time = clock()-start
207 else:
207 else:
208 rng = xrange(reps-1) # the last time is executed separately to store output
208 rng = xrange(reps-1) # the last time is executed separately to store output
209 start = clock()
209 start = clock()
210 for dummy in rng: func(*args,**kw)
210 for dummy in rng: func(*args,**kw)
211 out = func(*args,**kw) # one last time
211 out = func(*args,**kw) # one last time
212 tot_time = clock()-start
212 tot_time = clock()-start
213 av_time = tot_time / reps
213 av_time = tot_time / reps
214 return tot_time,av_time,out
214 return tot_time,av_time,out
215
215
216 def timings(reps,func,*args,**kw):
216 def timings(reps,func,*args,**kw):
217 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
217 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
218
218
219 Execute a function reps times, return a tuple with the elapsed total CPU
219 Execute a function reps times, return a tuple with the elapsed total CPU
220 time in seconds and the time per call. These are just the first two values
220 time in seconds and the time per call. These are just the first two values
221 in timings_out()."""
221 in timings_out()."""
222
222
223 return timings_out(reps,func,*args,**kw)[0:2]
223 return timings_out(reps,func,*args,**kw)[0:2]
224
224
225 def timing(func,*args,**kw):
225 def timing(func,*args,**kw):
226 """timing(func,*args,**kw) -> t_total
226 """timing(func,*args,**kw) -> t_total
227
227
228 Execute a function once, return the elapsed total CPU time in
228 Execute a function once, return the elapsed total CPU time in
229 seconds. This is just the first value in timings_out()."""
229 seconds. This is just the first value in timings_out()."""
230
230
231 return timings_out(1,func,*args,**kw)[0]
231 return timings_out(1,func,*args,**kw)[0]
232
232
233 #****************************************************************************
233 #****************************************************************************
234 # file and system
234 # file and system
235
235
236 def system(cmd,verbose=0,debug=0,header=''):
236 def system(cmd,verbose=0,debug=0,header=''):
237 """Execute a system command, return its exit status.
237 """Execute a system command, return its exit status.
238
238
239 Options:
239 Options:
240
240
241 - verbose (0): print the command to be executed.
241 - verbose (0): print the command to be executed.
242
242
243 - debug (0): only print, do not actually execute.
243 - debug (0): only print, do not actually execute.
244
244
245 - header (''): Header to print on screen prior to the executed command (it
245 - header (''): Header to print on screen prior to the executed command (it
246 is only prepended to the command, no newlines are added).
246 is only prepended to the command, no newlines are added).
247
247
248 Note: a stateful version of this function is available through the
248 Note: a stateful version of this function is available through the
249 SystemExec class."""
249 SystemExec class."""
250
250
251 stat = 0
251 stat = 0
252 if verbose or debug: print header+cmd
252 if verbose or debug: print header+cmd
253 sys.stdout.flush()
253 sys.stdout.flush()
254 if not debug: stat = os.system(cmd)
254 if not debug: stat = os.system(cmd)
255 return stat
255 return stat
256
256
257 # This function is used by ipython in a lot of places to make system calls.
257 # This function is used by ipython in a lot of places to make system calls.
258 # We need it to be slightly different under win32, due to the vagaries of
258 # We need it to be slightly different under win32, due to the vagaries of
259 # 'network shares'. A win32 override is below.
259 # 'network shares'. A win32 override is below.
260
260
261 def shell(cmd,verbose=0,debug=0,header=''):
261 def shell(cmd,verbose=0,debug=0,header=''):
262 """Execute a command in the system shell, always return None.
262 """Execute a command in the system shell, always return None.
263
263
264 Options:
264 Options:
265
265
266 - verbose (0): print the command to be executed.
266 - verbose (0): print the command to be executed.
267
267
268 - debug (0): only print, do not actually execute.
268 - debug (0): only print, do not actually execute.
269
269
270 - header (''): Header to print on screen prior to the executed command (it
270 - header (''): Header to print on screen prior to the executed command (it
271 is only prepended to the command, no newlines are added).
271 is only prepended to the command, no newlines are added).
272
272
273 Note: this is similar to genutils.system(), but it returns None so it can
273 Note: this is similar to genutils.system(), but it returns None so it can
274 be conveniently used in interactive loops without getting the return value
274 be conveniently used in interactive loops without getting the return value
275 (typically 0) printed many times."""
275 (typically 0) printed many times."""
276
276
277 stat = 0
277 stat = 0
278 if verbose or debug: print header+cmd
278 if verbose or debug: print header+cmd
279 # flush stdout so we don't mangle python's buffering
279 # flush stdout so we don't mangle python's buffering
280 sys.stdout.flush()
280 sys.stdout.flush()
281 if not debug:
281 if not debug:
282 os.system(cmd)
282 os.system(cmd)
283
283
284 # override shell() for win32 to deal with network shares
284 # override shell() for win32 to deal with network shares
285 if os.name in ('nt','dos'):
285 if os.name in ('nt','dos'):
286
286
287 shell_ori = shell
287 shell_ori = shell
288
288
289 def shell(cmd,verbose=0,debug=0,header=''):
289 def shell(cmd,verbose=0,debug=0,header=''):
290 if os.getcwd().startswith(r"\\"):
290 if os.getcwd().startswith(r"\\"):
291 path = os.getcwd()
291 path = os.getcwd()
292 # change to c drive (cannot be on UNC-share when issuing os.system,
292 # change to c drive (cannot be on UNC-share when issuing os.system,
293 # as cmd.exe cannot handle UNC addresses)
293 # as cmd.exe cannot handle UNC addresses)
294 os.chdir("c:")
294 os.chdir("c:")
295 # issue pushd to the UNC-share and then run the command
295 # issue pushd to the UNC-share and then run the command
296 try:
296 try:
297 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
297 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
298 finally:
298 finally:
299 os.chdir(path)
299 os.chdir(path)
300 else:
300 else:
301 shell_ori(cmd,verbose,debug,header)
301 shell_ori(cmd,verbose,debug,header)
302
302
303 shell.__doc__ = shell_ori.__doc__
303 shell.__doc__ = shell_ori.__doc__
304
304
305 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
305 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
306 """Dummy substitute for perl's backquotes.
306 """Dummy substitute for perl's backquotes.
307
307
308 Executes a command and returns the output.
308 Executes a command and returns the output.
309
309
310 Accepts the same arguments as system(), plus:
310 Accepts the same arguments as system(), plus:
311
311
312 - split(0): if true, the output is returned as a list split on newlines.
312 - split(0): if true, the output is returned as a list split on newlines.
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 This is pretty much deprecated and rarely used,
317 This is pretty much deprecated and rarely used,
318 genutils.getoutputerror may be what you need.
318 genutils.getoutputerror may be what you need.
319
319
320 """
320 """
321
321
322 if verbose or debug: print header+cmd
322 if verbose or debug: print header+cmd
323 if not debug:
323 if not debug:
324 output = os.popen(cmd).read()
324 output = os.popen(cmd).read()
325 # stipping last \n is here for backwards compat.
325 # stipping last \n is here for backwards compat.
326 if output.endswith('\n'):
326 if output.endswith('\n'):
327 output = output[:-1]
327 output = output[:-1]
328 if split:
328 if split:
329 return output.split('\n')
329 return output.split('\n')
330 else:
330 else:
331 return output
331 return output
332
332
333 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
333 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
334 """Return (standard output,standard error) of executing cmd in a shell.
334 """Return (standard output,standard error) of executing cmd in a shell.
335
335
336 Accepts the same arguments as system(), plus:
336 Accepts the same arguments as system(), plus:
337
337
338 - split(0): if true, each of stdout/err is returned as a list split on
338 - split(0): if true, each of stdout/err is returned as a list split on
339 newlines.
339 newlines.
340
340
341 Note: a stateful version of this function is available through the
341 Note: a stateful version of this function is available through the
342 SystemExec class."""
342 SystemExec class."""
343
343
344 if verbose or debug: print header+cmd
344 if verbose or debug: print header+cmd
345 if not cmd:
345 if not cmd:
346 if split:
346 if split:
347 return [],[]
347 return [],[]
348 else:
348 else:
349 return '',''
349 return '',''
350 if not debug:
350 if not debug:
351 pin,pout,perr = os.popen3(cmd)
351 pin,pout,perr = os.popen3(cmd)
352 tout = pout.read().rstrip()
352 tout = pout.read().rstrip()
353 terr = perr.read().rstrip()
353 terr = perr.read().rstrip()
354 pin.close()
354 pin.close()
355 pout.close()
355 pout.close()
356 perr.close()
356 perr.close()
357 if split:
357 if split:
358 return tout.split('\n'),terr.split('\n')
358 return tout.split('\n'),terr.split('\n')
359 else:
359 else:
360 return tout,terr
360 return tout,terr
361
361
362 # for compatibility with older naming conventions
362 # for compatibility with older naming conventions
363 xsys = system
363 xsys = system
364 bq = getoutput
364 bq = getoutput
365
365
366 class SystemExec:
366 class SystemExec:
367 """Access the system and getoutput functions through a stateful interface.
367 """Access the system and getoutput functions through a stateful interface.
368
368
369 Note: here we refer to the system and getoutput functions from this
369 Note: here we refer to the system and getoutput functions from this
370 library, not the ones from the standard python library.
370 library, not the ones from the standard python library.
371
371
372 This class offers the system and getoutput functions as methods, but the
372 This class offers the system and getoutput functions as methods, but the
373 verbose, debug and header parameters can be set for the instance (at
373 verbose, debug and header parameters can be set for the instance (at
374 creation time or later) so that they don't need to be specified on each
374 creation time or later) so that they don't need to be specified on each
375 call.
375 call.
376
376
377 For efficiency reasons, there's no way to override the parameters on a
377 For efficiency reasons, there's no way to override the parameters on a
378 per-call basis other than by setting instance attributes. If you need
378 per-call basis other than by setting instance attributes. If you need
379 local overrides, it's best to directly call system() or getoutput().
379 local overrides, it's best to directly call system() or getoutput().
380
380
381 The following names are provided as alternate options:
381 The following names are provided as alternate options:
382 - xsys: alias to system
382 - xsys: alias to system
383 - bq: alias to getoutput
383 - bq: alias to getoutput
384
384
385 An instance can then be created as:
385 An instance can then be created as:
386 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
386 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
387
387
388 And used as:
388 And used as:
389 >>> sysexec.xsys('pwd')
389 >>> sysexec.xsys('pwd')
390 >>> dirlist = sysexec.bq('ls -l')
390 >>> dirlist = sysexec.bq('ls -l')
391 """
391 """
392
392
393 def __init__(self,verbose=0,debug=0,header='',split=0):
393 def __init__(self,verbose=0,debug=0,header='',split=0):
394 """Specify the instance's values for verbose, debug and header."""
394 """Specify the instance's values for verbose, debug and header."""
395 setattr_list(self,'verbose debug header split')
395 setattr_list(self,'verbose debug header split')
396
396
397 def system(self,cmd):
397 def system(self,cmd):
398 """Stateful interface to system(), with the same keyword parameters."""
398 """Stateful interface to system(), with the same keyword parameters."""
399
399
400 system(cmd,self.verbose,self.debug,self.header)
400 system(cmd,self.verbose,self.debug,self.header)
401
401
402 def shell(self,cmd):
402 def shell(self,cmd):
403 """Stateful interface to shell(), with the same keyword parameters."""
403 """Stateful interface to shell(), with the same keyword parameters."""
404
404
405 shell(cmd,self.verbose,self.debug,self.header)
405 shell(cmd,self.verbose,self.debug,self.header)
406
406
407 xsys = system # alias
407 xsys = system # alias
408
408
409 def getoutput(self,cmd):
409 def getoutput(self,cmd):
410 """Stateful interface to getoutput()."""
410 """Stateful interface to getoutput()."""
411
411
412 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
412 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
413
413
414 def getoutputerror(self,cmd):
414 def getoutputerror(self,cmd):
415 """Stateful interface to getoutputerror()."""
415 """Stateful interface to getoutputerror()."""
416
416
417 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
417 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
418
418
419 bq = getoutput # alias
419 bq = getoutput # alias
420
420
421 #-----------------------------------------------------------------------------
421 #-----------------------------------------------------------------------------
422 def mutex_opts(dict,ex_op):
422 def mutex_opts(dict,ex_op):
423 """Check for presence of mutually exclusive keys in a dict.
423 """Check for presence of mutually exclusive keys in a dict.
424
424
425 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
425 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
426 for op1,op2 in ex_op:
426 for op1,op2 in ex_op:
427 if op1 in dict and op2 in dict:
427 if op1 in dict and op2 in dict:
428 raise ValueError,'\n*** ERROR in Arguments *** '\
428 raise ValueError,'\n*** ERROR in Arguments *** '\
429 'Options '+op1+' and '+op2+' are mutually exclusive.'
429 'Options '+op1+' and '+op2+' are mutually exclusive.'
430
430
431 #-----------------------------------------------------------------------------
431 #-----------------------------------------------------------------------------
432 def get_py_filename(name):
432 def get_py_filename(name):
433 """Return a valid python filename in the current directory.
433 """Return a valid python filename in the current directory.
434
434
435 If the given name is not a file, it adds '.py' and searches again.
435 If the given name is not a file, it adds '.py' and searches again.
436 Raises IOError with an informative message if the file isn't found."""
436 Raises IOError with an informative message if the file isn't found."""
437
437
438 name = os.path.expanduser(name)
438 name = os.path.expanduser(name)
439 if not os.path.isfile(name) and not name.endswith('.py'):
439 if not os.path.isfile(name) and not name.endswith('.py'):
440 name += '.py'
440 name += '.py'
441 if os.path.isfile(name):
441 if os.path.isfile(name):
442 return name
442 return name
443 else:
443 else:
444 raise IOError,'File `%s` not found.' % name
444 raise IOError,'File `%s` not found.' % name
445
445
446 #-----------------------------------------------------------------------------
446 #-----------------------------------------------------------------------------
447 def filefind(fname,alt_dirs = None):
447 def filefind(fname,alt_dirs = None):
448 """Return the given filename either in the current directory, if it
448 """Return the given filename either in the current directory, if it
449 exists, or in a specified list of directories.
449 exists, or in a specified list of directories.
450
450
451 ~ expansion is done on all file and directory names.
451 ~ expansion is done on all file and directory names.
452
452
453 Upon an unsuccessful search, raise an IOError exception."""
453 Upon an unsuccessful search, raise an IOError exception."""
454
454
455 if alt_dirs is None:
455 if alt_dirs is None:
456 try:
456 try:
457 alt_dirs = get_home_dir()
457 alt_dirs = get_home_dir()
458 except HomeDirError:
458 except HomeDirError:
459 alt_dirs = os.getcwd()
459 alt_dirs = os.getcwd()
460 search = [fname] + list_strings(alt_dirs)
460 search = [fname] + list_strings(alt_dirs)
461 search = map(os.path.expanduser,search)
461 search = map(os.path.expanduser,search)
462 #print 'search list for',fname,'list:',search # dbg
462 #print 'search list for',fname,'list:',search # dbg
463 fname = search[0]
463 fname = search[0]
464 if os.path.isfile(fname):
464 if os.path.isfile(fname):
465 return fname
465 return fname
466 for direc in search[1:]:
466 for direc in search[1:]:
467 testname = os.path.join(direc,fname)
467 testname = os.path.join(direc,fname)
468 #print 'testname',testname # dbg
468 #print 'testname',testname # dbg
469 if os.path.isfile(testname):
469 if os.path.isfile(testname):
470 return testname
470 return testname
471 raise IOError,'File' + `fname` + \
471 raise IOError,'File' + `fname` + \
472 ' not found in current or supplied directories:' + `alt_dirs`
472 ' not found in current or supplied directories:' + `alt_dirs`
473
473
474 #----------------------------------------------------------------------------
474 #----------------------------------------------------------------------------
475 def file_read(filename):
475 def file_read(filename):
476 """Read a file and close it. Returns the file source."""
476 """Read a file and close it. Returns the file source."""
477 fobj = open(filename,'r');
477 fobj = open(filename,'r');
478 source = fobj.read();
478 source = fobj.read();
479 fobj.close()
479 fobj.close()
480 return source
480 return source
481
481
482 def file_readlines(filename):
482 def file_readlines(filename):
483 """Read a file and close it. Returns the file source using readlines()."""
483 """Read a file and close it. Returns the file source using readlines()."""
484 fobj = open(filename,'r');
484 fobj = open(filename,'r');
485 lines = fobj.readlines();
485 lines = fobj.readlines();
486 fobj.close()
486 fobj.close()
487 return lines
487 return lines
488
488
489 #----------------------------------------------------------------------------
489 #----------------------------------------------------------------------------
490 def target_outdated(target,deps):
490 def target_outdated(target,deps):
491 """Determine whether a target is out of date.
491 """Determine whether a target is out of date.
492
492
493 target_outdated(target,deps) -> 1/0
493 target_outdated(target,deps) -> 1/0
494
494
495 deps: list of filenames which MUST exist.
495 deps: list of filenames which MUST exist.
496 target: single filename which may or may not exist.
496 target: single filename which may or may not exist.
497
497
498 If target doesn't exist or is older than any file listed in deps, return
498 If target doesn't exist or is older than any file listed in deps, return
499 true, otherwise return false.
499 true, otherwise return false.
500 """
500 """
501 try:
501 try:
502 target_time = os.path.getmtime(target)
502 target_time = os.path.getmtime(target)
503 except os.error:
503 except os.error:
504 return 1
504 return 1
505 for dep in deps:
505 for dep in deps:
506 dep_time = os.path.getmtime(dep)
506 dep_time = os.path.getmtime(dep)
507 if dep_time > target_time:
507 if dep_time > target_time:
508 #print "For target",target,"Dep failed:",dep # dbg
508 #print "For target",target,"Dep failed:",dep # dbg
509 #print "times (dep,tar):",dep_time,target_time # dbg
509 #print "times (dep,tar):",dep_time,target_time # dbg
510 return 1
510 return 1
511 return 0
511 return 0
512
512
513 #-----------------------------------------------------------------------------
513 #-----------------------------------------------------------------------------
514 def target_update(target,deps,cmd):
514 def target_update(target,deps,cmd):
515 """Update a target with a given command given a list of dependencies.
515 """Update a target with a given command given a list of dependencies.
516
516
517 target_update(target,deps,cmd) -> runs cmd if target is outdated.
517 target_update(target,deps,cmd) -> runs cmd if target is outdated.
518
518
519 This is just a wrapper around target_outdated() which calls the given
519 This is just a wrapper around target_outdated() which calls the given
520 command if target is outdated."""
520 command if target is outdated."""
521
521
522 if target_outdated(target,deps):
522 if target_outdated(target,deps):
523 xsys(cmd)
523 xsys(cmd)
524
524
525 #----------------------------------------------------------------------------
525 #----------------------------------------------------------------------------
526 def unquote_ends(istr):
526 def unquote_ends(istr):
527 """Remove a single pair of quotes from the endpoints of a string."""
527 """Remove a single pair of quotes from the endpoints of a string."""
528
528
529 if not istr:
529 if not istr:
530 return istr
530 return istr
531 if (istr[0]=="'" and istr[-1]=="'") or \
531 if (istr[0]=="'" and istr[-1]=="'") or \
532 (istr[0]=='"' and istr[-1]=='"'):
532 (istr[0]=='"' and istr[-1]=='"'):
533 return istr[1:-1]
533 return istr[1:-1]
534 else:
534 else:
535 return istr
535 return istr
536
536
537 #----------------------------------------------------------------------------
537 #----------------------------------------------------------------------------
538 def process_cmdline(argv,names=[],defaults={},usage=''):
538 def process_cmdline(argv,names=[],defaults={},usage=''):
539 """ Process command-line options and arguments.
539 """ Process command-line options and arguments.
540
540
541 Arguments:
541 Arguments:
542
542
543 - argv: list of arguments, typically sys.argv.
543 - argv: list of arguments, typically sys.argv.
544
544
545 - names: list of option names. See DPyGetOpt docs for details on options
545 - names: list of option names. See DPyGetOpt docs for details on options
546 syntax.
546 syntax.
547
547
548 - defaults: dict of default values.
548 - defaults: dict of default values.
549
549
550 - usage: optional usage notice to print if a wrong argument is passed.
550 - usage: optional usage notice to print if a wrong argument is passed.
551
551
552 Return a dict of options and a list of free arguments."""
552 Return a dict of options and a list of free arguments."""
553
553
554 getopt = DPyGetOpt.DPyGetOpt()
554 getopt = DPyGetOpt.DPyGetOpt()
555 getopt.setIgnoreCase(0)
555 getopt.setIgnoreCase(0)
556 getopt.parseConfiguration(names)
556 getopt.parseConfiguration(names)
557
557
558 try:
558 try:
559 getopt.processArguments(argv)
559 getopt.processArguments(argv)
560 except:
560 except:
561 print usage
561 print usage
562 warn(`sys.exc_value`,level=4)
562 warn(`sys.exc_value`,level=4)
563
563
564 defaults.update(getopt.optionValues)
564 defaults.update(getopt.optionValues)
565 args = getopt.freeValues
565 args = getopt.freeValues
566
566
567 return defaults,args
567 return defaults,args
568
568
569 #----------------------------------------------------------------------------
569 #----------------------------------------------------------------------------
570 def optstr2types(ostr):
570 def optstr2types(ostr):
571 """Convert a string of option names to a dict of type mappings.
571 """Convert a string of option names to a dict of type mappings.
572
572
573 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
573 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
574
574
575 This is used to get the types of all the options in a string formatted
575 This is used to get the types of all the options in a string formatted
576 with the conventions of DPyGetOpt. The 'type' None is used for options
576 with the conventions of DPyGetOpt. The 'type' None is used for options
577 which are strings (they need no further conversion). This function's main
577 which are strings (they need no further conversion). This function's main
578 use is to get a typemap for use with read_dict().
578 use is to get a typemap for use with read_dict().
579 """
579 """
580
580
581 typeconv = {None:'',int:'',float:''}
581 typeconv = {None:'',int:'',float:''}
582 typemap = {'s':None,'i':int,'f':float}
582 typemap = {'s':None,'i':int,'f':float}
583 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
583 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
584
584
585 for w in ostr.split():
585 for w in ostr.split():
586 oname,alias,otype = opt_re.match(w).groups()
586 oname,alias,otype = opt_re.match(w).groups()
587 if otype == '' or alias == '!': # simple switches are integers too
587 if otype == '' or alias == '!': # simple switches are integers too
588 otype = 'i'
588 otype = 'i'
589 typeconv[typemap[otype]] += oname + ' '
589 typeconv[typemap[otype]] += oname + ' '
590 return typeconv
590 return typeconv
591
591
592 #----------------------------------------------------------------------------
592 #----------------------------------------------------------------------------
593 def read_dict(filename,type_conv=None,**opt):
593 def read_dict(filename,type_conv=None,**opt):
594
594
595 """Read a dictionary of key=value pairs from an input file, optionally
595 """Read a dictionary of key=value pairs from an input file, optionally
596 performing conversions on the resulting values.
596 performing conversions on the resulting values.
597
597
598 read_dict(filename,type_conv,**opt) -> dict
598 read_dict(filename,type_conv,**opt) -> dict
599
599
600 Only one value per line is accepted, the format should be
600 Only one value per line is accepted, the format should be
601 # optional comments are ignored
601 # optional comments are ignored
602 key value\n
602 key value\n
603
603
604 Args:
604 Args:
605
605
606 - type_conv: A dictionary specifying which keys need to be converted to
606 - type_conv: A dictionary specifying which keys need to be converted to
607 which types. By default all keys are read as strings. This dictionary
607 which types. By default all keys are read as strings. This dictionary
608 should have as its keys valid conversion functions for strings
608 should have as its keys valid conversion functions for strings
609 (int,long,float,complex, or your own). The value for each key
609 (int,long,float,complex, or your own). The value for each key
610 (converter) should be a whitespace separated string containing the names
610 (converter) should be a whitespace separated string containing the names
611 of all the entries in the file to be converted using that function. For
611 of all the entries in the file to be converted using that function. For
612 keys to be left alone, use None as the conversion function (only needed
612 keys to be left alone, use None as the conversion function (only needed
613 with purge=1, see below).
613 with purge=1, see below).
614
614
615 - opt: dictionary with extra options as below (default in parens)
615 - opt: dictionary with extra options as below (default in parens)
616
616
617 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
617 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
618 of the dictionary to be returned. If purge is going to be used, the
618 of the dictionary to be returned. If purge is going to be used, the
619 set of keys to be left as strings also has to be explicitly specified
619 set of keys to be left as strings also has to be explicitly specified
620 using the (non-existent) conversion function None.
620 using the (non-existent) conversion function None.
621
621
622 fs(None): field separator. This is the key/value separator to be used
622 fs(None): field separator. This is the key/value separator to be used
623 when parsing the file. The None default means any whitespace [behavior
623 when parsing the file. The None default means any whitespace [behavior
624 of string.split()].
624 of string.split()].
625
625
626 strip(0): if 1, strip string values of leading/trailinig whitespace.
626 strip(0): if 1, strip string values of leading/trailinig whitespace.
627
627
628 warn(1): warning level if requested keys are not found in file.
628 warn(1): warning level if requested keys are not found in file.
629 - 0: silently ignore.
629 - 0: silently ignore.
630 - 1: inform but proceed.
630 - 1: inform but proceed.
631 - 2: raise KeyError exception.
631 - 2: raise KeyError exception.
632
632
633 no_empty(0): if 1, remove keys with whitespace strings as a value.
633 no_empty(0): if 1, remove keys with whitespace strings as a value.
634
634
635 unique([]): list of keys (or space separated string) which can't be
635 unique([]): list of keys (or space separated string) which can't be
636 repeated. If one such key is found in the file, each new instance
636 repeated. If one such key is found in the file, each new instance
637 overwrites the previous one. For keys not listed here, the behavior is
637 overwrites the previous one. For keys not listed here, the behavior is
638 to make a list of all appearances.
638 to make a list of all appearances.
639
639
640 Example:
640 Example:
641 If the input file test.ini has:
641 If the input file test.ini has:
642 i 3
642 i 3
643 x 4.5
643 x 4.5
644 y 5.5
644 y 5.5
645 s hi ho
645 s hi ho
646 Then:
646 Then:
647
647
648 >>> type_conv={int:'i',float:'x',None:'s'}
648 >>> type_conv={int:'i',float:'x',None:'s'}
649 >>> read_dict('test.ini')
649 >>> read_dict('test.ini')
650 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
650 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
651 >>> read_dict('test.ini',type_conv)
651 >>> read_dict('test.ini',type_conv)
652 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
652 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
653 >>> read_dict('test.ini',type_conv,purge=1)
653 >>> read_dict('test.ini',type_conv,purge=1)
654 {'i': 3, 's': 'hi ho', 'x': 4.5}
654 {'i': 3, 's': 'hi ho', 'x': 4.5}
655 """
655 """
656
656
657 # starting config
657 # starting config
658 opt.setdefault('purge',0)
658 opt.setdefault('purge',0)
659 opt.setdefault('fs',None) # field sep defaults to any whitespace
659 opt.setdefault('fs',None) # field sep defaults to any whitespace
660 opt.setdefault('strip',0)
660 opt.setdefault('strip',0)
661 opt.setdefault('warn',1)
661 opt.setdefault('warn',1)
662 opt.setdefault('no_empty',0)
662 opt.setdefault('no_empty',0)
663 opt.setdefault('unique','')
663 opt.setdefault('unique','')
664 if type(opt['unique']) in StringTypes:
664 if type(opt['unique']) in StringTypes:
665 unique_keys = qw(opt['unique'])
665 unique_keys = qw(opt['unique'])
666 elif type(opt['unique']) in (types.TupleType,types.ListType):
666 elif type(opt['unique']) in (types.TupleType,types.ListType):
667 unique_keys = opt['unique']
667 unique_keys = opt['unique']
668 else:
668 else:
669 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
669 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
670
670
671 dict = {}
671 dict = {}
672 # first read in table of values as strings
672 # first read in table of values as strings
673 file = open(filename,'r')
673 file = open(filename,'r')
674 for line in file.readlines():
674 for line in file.readlines():
675 line = line.strip()
675 line = line.strip()
676 if len(line) and line[0]=='#': continue
676 if len(line) and line[0]=='#': continue
677 if len(line)>0:
677 if len(line)>0:
678 lsplit = line.split(opt['fs'],1)
678 lsplit = line.split(opt['fs'],1)
679 try:
679 try:
680 key,val = lsplit
680 key,val = lsplit
681 except ValueError:
681 except ValueError:
682 key,val = lsplit[0],''
682 key,val = lsplit[0],''
683 key = key.strip()
683 key = key.strip()
684 if opt['strip']: val = val.strip()
684 if opt['strip']: val = val.strip()
685 if val == "''" or val == '""': val = ''
685 if val == "''" or val == '""': val = ''
686 if opt['no_empty'] and (val=='' or val.isspace()):
686 if opt['no_empty'] and (val=='' or val.isspace()):
687 continue
687 continue
688 # if a key is found more than once in the file, build a list
688 # if a key is found more than once in the file, build a list
689 # unless it's in the 'unique' list. In that case, last found in file
689 # unless it's in the 'unique' list. In that case, last found in file
690 # takes precedence. User beware.
690 # takes precedence. User beware.
691 try:
691 try:
692 if dict[key] and key in unique_keys:
692 if dict[key] and key in unique_keys:
693 dict[key] = val
693 dict[key] = val
694 elif type(dict[key]) is types.ListType:
694 elif type(dict[key]) is types.ListType:
695 dict[key].append(val)
695 dict[key].append(val)
696 else:
696 else:
697 dict[key] = [dict[key],val]
697 dict[key] = [dict[key],val]
698 except KeyError:
698 except KeyError:
699 dict[key] = val
699 dict[key] = val
700 # purge if requested
700 # purge if requested
701 if opt['purge']:
701 if opt['purge']:
702 accepted_keys = qwflat(type_conv.values())
702 accepted_keys = qwflat(type_conv.values())
703 for key in dict.keys():
703 for key in dict.keys():
704 if key in accepted_keys: continue
704 if key in accepted_keys: continue
705 del(dict[key])
705 del(dict[key])
706 # now convert if requested
706 # now convert if requested
707 if type_conv==None: return dict
707 if type_conv==None: return dict
708 conversions = type_conv.keys()
708 conversions = type_conv.keys()
709 try: conversions.remove(None)
709 try: conversions.remove(None)
710 except: pass
710 except: pass
711 for convert in conversions:
711 for convert in conversions:
712 for val in qw(type_conv[convert]):
712 for val in qw(type_conv[convert]):
713 try:
713 try:
714 dict[val] = convert(dict[val])
714 dict[val] = convert(dict[val])
715 except KeyError,e:
715 except KeyError,e:
716 if opt['warn'] == 0:
716 if opt['warn'] == 0:
717 pass
717 pass
718 elif opt['warn'] == 1:
718 elif opt['warn'] == 1:
719 print >>sys.stderr, 'Warning: key',val,\
719 print >>sys.stderr, 'Warning: key',val,\
720 'not found in file',filename
720 'not found in file',filename
721 elif opt['warn'] == 2:
721 elif opt['warn'] == 2:
722 raise KeyError,e
722 raise KeyError,e
723 else:
723 else:
724 raise ValueError,'Warning level must be 0,1 or 2'
724 raise ValueError,'Warning level must be 0,1 or 2'
725
725
726 return dict
726 return dict
727
727
728 #----------------------------------------------------------------------------
728 #----------------------------------------------------------------------------
729 def flag_calls(func):
729 def flag_calls(func):
730 """Wrap a function to detect and flag when it gets called.
730 """Wrap a function to detect and flag when it gets called.
731
731
732 This is a decorator which takes a function and wraps it in a function with
732 This is a decorator which takes a function and wraps it in a function with
733 a 'called' attribute. wrapper.called is initialized to False.
733 a 'called' attribute. wrapper.called is initialized to False.
734
734
735 The wrapper.called attribute is set to False right before each call to the
735 The wrapper.called attribute is set to False right before each call to the
736 wrapped function, so if the call fails it remains False. After the call
736 wrapped function, so if the call fails it remains False. After the call
737 completes, wrapper.called is set to True and the output is returned.
737 completes, wrapper.called is set to True and the output is returned.
738
738
739 Testing for truth in wrapper.called allows you to determine if a call to
739 Testing for truth in wrapper.called allows you to determine if a call to
740 func() was attempted and succeeded."""
740 func() was attempted and succeeded."""
741
741
742 def wrapper(*args,**kw):
742 def wrapper(*args,**kw):
743 wrapper.called = False
743 wrapper.called = False
744 out = func(*args,**kw)
744 out = func(*args,**kw)
745 wrapper.called = True
745 wrapper.called = True
746 return out
746 return out
747
747
748 wrapper.called = False
748 wrapper.called = False
749 wrapper.__doc__ = func.__doc__
749 wrapper.__doc__ = func.__doc__
750 return wrapper
750 return wrapper
751
751
752 #----------------------------------------------------------------------------
752 #----------------------------------------------------------------------------
753 class HomeDirError(Error):
753 class HomeDirError(Error):
754 pass
754 pass
755
755
756 def get_home_dir():
756 def get_home_dir():
757 """Return the closest possible equivalent to a 'home' directory.
757 """Return the closest possible equivalent to a 'home' directory.
758
758
759 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
759 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
760
760
761 Currently only Posix and NT are implemented, a HomeDirError exception is
761 Currently only Posix and NT are implemented, a HomeDirError exception is
762 raised for all other OSes. """
762 raised for all other OSes. """
763
763
764 isdir = os.path.isdir
764 isdir = os.path.isdir
765 env = os.environ
765 env = os.environ
766 try:
766 try:
767 homedir = env['HOME']
767 homedir = env['HOME']
768 if not isdir(homedir):
768 if not isdir(homedir):
769 # in case a user stuck some string which does NOT resolve to a
769 # in case a user stuck some string which does NOT resolve to a
770 # valid path, it's as good as if we hadn't foud it
770 # valid path, it's as good as if we hadn't foud it
771 raise KeyError
771 raise KeyError
772 return homedir
772 return homedir
773 except KeyError:
773 except KeyError:
774 if os.name == 'posix':
774 if os.name == 'posix':
775 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
775 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
776 elif os.name == 'nt':
776 elif os.name == 'nt':
777 # For some strange reason, win9x returns 'nt' for os.name.
777 # For some strange reason, win9x returns 'nt' for os.name.
778 try:
778 try:
779 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
779 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
780 if not isdir(homedir):
780 if not isdir(homedir):
781 homedir = os.path.join(env['USERPROFILE'])
781 homedir = os.path.join(env['USERPROFILE'])
782 if not isdir(homedir):
782 if not isdir(homedir):
783 raise HomeDirError
783 raise HomeDirError
784 return homedir
784 return homedir
785 except:
785 except:
786 try:
786 try:
787 # Use the registry to get the 'My Documents' folder.
787 # Use the registry to get the 'My Documents' folder.
788 import _winreg as wreg
788 import _winreg as wreg
789 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
789 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
790 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
790 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
791 homedir = wreg.QueryValueEx(key,'Personal')[0]
791 homedir = wreg.QueryValueEx(key,'Personal')[0]
792 key.Close()
792 key.Close()
793 if not isdir(homedir):
793 if not isdir(homedir):
794 e = ('Invalid "Personal" folder registry key '
794 e = ('Invalid "Personal" folder registry key '
795 'typically "My Documents".\n'
795 'typically "My Documents".\n'
796 'Value: %s\n'
796 'Value: %s\n'
797 'This is not a valid directory on your system.' %
797 'This is not a valid directory on your system.' %
798 homedir)
798 homedir)
799 raise HomeDirError(e)
799 raise HomeDirError(e)
800 return homedir
800 return homedir
801 except HomeDirError:
801 except HomeDirError:
802 raise
802 raise
803 except:
803 except:
804 return 'C:\\'
804 return 'C:\\'
805 elif os.name == 'dos':
805 elif os.name == 'dos':
806 # Desperate, may do absurd things in classic MacOS. May work under DOS.
806 # Desperate, may do absurd things in classic MacOS. May work under DOS.
807 return 'C:\\'
807 return 'C:\\'
808 else:
808 else:
809 raise HomeDirError,'support for your operating system not implemented.'
809 raise HomeDirError,'support for your operating system not implemented.'
810
810
811 #****************************************************************************
811 #****************************************************************************
812 # strings and text
812 # strings and text
813
813
814 class LSString(str):
814 class LSString(str):
815 """String derivative with a special access attributes.
815 """String derivative with a special access attributes.
816
816
817 These are normal strings, but with the special attributes:
817 These are normal strings, but with the special attributes:
818
818
819 .l (or .list) : value as list (split on newlines).
819 .l (or .list) : value as list (split on newlines).
820 .n (or .nlstr): original value (the string itself).
820 .n (or .nlstr): original value (the string itself).
821 .s (or .spstr): value as whitespace-separated string.
821 .s (or .spstr): value as whitespace-separated string.
822
822
823 Any values which require transformations are computed only once and
823 Any values which require transformations are computed only once and
824 cached.
824 cached.
825
825
826 Such strings are very useful to efficiently interact with the shell, which
826 Such strings are very useful to efficiently interact with the shell, which
827 typically only understands whitespace-separated options for commands."""
827 typically only understands whitespace-separated options for commands."""
828
828
829 def get_list(self):
829 def get_list(self):
830 try:
830 try:
831 return self.__list
831 return self.__list
832 except AttributeError:
832 except AttributeError:
833 self.__list = self.split('\n')
833 self.__list = self.split('\n')
834 return self.__list
834 return self.__list
835
835
836 l = list = property(get_list)
836 l = list = property(get_list)
837
837
838 def get_spstr(self):
838 def get_spstr(self):
839 try:
839 try:
840 return self.__spstr
840 return self.__spstr
841 except AttributeError:
841 except AttributeError:
842 self.__spstr = self.replace('\n',' ')
842 self.__spstr = self.replace('\n',' ')
843 return self.__spstr
843 return self.__spstr
844
844
845 s = spstr = property(get_spstr)
845 s = spstr = property(get_spstr)
846
846
847 def get_nlstr(self):
847 def get_nlstr(self):
848 return self
848 return self
849
849
850 n = nlstr = property(get_nlstr)
850 n = nlstr = property(get_nlstr)
851
851
852 def get_paths(self):
852 def get_paths(self):
853 try:
853 try:
854 return self.__paths
854 return self.__paths
855 except AttributeError:
855 except AttributeError:
856 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
856 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
857 return self.__paths
857 return self.__paths
858
858
859 p = paths = property(get_paths)
859 p = paths = property(get_paths)
860
860
861
861
862 #----------------------------------------------------------------------------
862 #----------------------------------------------------------------------------
863 class SList(list):
863 class SList(list):
864 """List derivative with a special access attributes.
864 """List derivative with a special access attributes.
865
865
866 These are normal lists, but with the special attributes:
866 These are normal lists, but with the special attributes:
867
867
868 .l (or .list) : value as list (the list itself).
868 .l (or .list) : value as list (the list itself).
869 .n (or .nlstr): value as a string, joined on newlines.
869 .n (or .nlstr): value as a string, joined on newlines.
870 .s (or .spstr): value as a string, joined on spaces.
870 .s (or .spstr): value as a string, joined on spaces.
871
871
872 Any values which require transformations are computed only once and
872 Any values which require transformations are computed only once and
873 cached."""
873 cached."""
874
874
875 def get_list(self):
875 def get_list(self):
876 return self
876 return self
877
877
878 l = list = property(get_list)
878 l = list = property(get_list)
879
879
880 def get_spstr(self):
880 def get_spstr(self):
881 try:
881 try:
882 return self.__spstr
882 return self.__spstr
883 except AttributeError:
883 except AttributeError:
884 self.__spstr = ' '.join(self)
884 self.__spstr = ' '.join(self)
885 return self.__spstr
885 return self.__spstr
886
886
887 s = spstr = property(get_spstr)
887 s = spstr = property(get_spstr)
888
888
889 def get_nlstr(self):
889 def get_nlstr(self):
890 try:
890 try:
891 return self.__nlstr
891 return self.__nlstr
892 except AttributeError:
892 except AttributeError:
893 self.__nlstr = '\n'.join(self)
893 self.__nlstr = '\n'.join(self)
894 return self.__nlstr
894 return self.__nlstr
895
895
896 n = nlstr = property(get_nlstr)
896 n = nlstr = property(get_nlstr)
897
897
898 def get_paths(self):
898 def get_paths(self):
899 try:
899 try:
900 return self.__paths
900 return self.__paths
901 except AttributeError:
901 except AttributeError:
902 self.__paths = [path(p) for p in self if os.path.exists(p)]
902 self.__paths = [path(p) for p in self if os.path.exists(p)]
903 return self.__paths
903 return self.__paths
904
904
905 p = paths = property(get_paths)
905 p = paths = property(get_paths)
906
906
907 #----------------------------------------------------------------------------
907 #----------------------------------------------------------------------------
908 def esc_quotes(strng):
908 def esc_quotes(strng):
909 """Return the input string with single and double quotes escaped out"""
909 """Return the input string with single and double quotes escaped out"""
910
910
911 return strng.replace('"','\\"').replace("'","\\'")
911 return strng.replace('"','\\"').replace("'","\\'")
912
912
913 #----------------------------------------------------------------------------
913 #----------------------------------------------------------------------------
914 def make_quoted_expr(s):
914 def make_quoted_expr(s):
915 """Return string s in appropriate quotes, using raw string if possible.
915 """Return string s in appropriate quotes, using raw string if possible.
916
916
917 Effectively this turns string: cd \ao\ao\
917 Effectively this turns string: cd \ao\ao\
918 to: r"cd \ao\ao\_"[:-1]
918 to: r"cd \ao\ao\_"[:-1]
919
919
920 Note the use of raw string and padding at the end to allow trailing backslash.
920 Note the use of raw string and padding at the end to allow trailing backslash.
921
921
922 """
922 """
923
923
924 tail = ''
924 tail = ''
925 tailpadding = ''
925 tailpadding = ''
926 raw = ''
926 raw = ''
927 if "\\" in s:
927 if "\\" in s:
928 raw = 'r'
928 raw = 'r'
929 if s.endswith('\\'):
929 if s.endswith('\\'):
930 tail = '[:-1]'
930 tail = '[:-1]'
931 tailpadding = '_'
931 tailpadding = '_'
932 if '"' not in s:
932 if '"' not in s:
933 quote = '"'
933 quote = '"'
934 elif "'" not in s:
934 elif "'" not in s:
935 quote = "'"
935 quote = "'"
936 elif '"""' not in s and not s.endswith('"'):
936 elif '"""' not in s and not s.endswith('"'):
937 quote = '"""'
937 quote = '"""'
938 elif "'''" not in s and not s.endswith("'"):
938 elif "'''" not in s and not s.endswith("'"):
939 quote = "'''"
939 quote = "'''"
940 else:
940 else:
941 # give up, backslash-escaped string will do
941 # give up, backslash-escaped string will do
942 return '"%s"' % esc_quotes(s)
942 return '"%s"' % esc_quotes(s)
943 res = itpl("$raw$quote$s$tailpadding$quote$tail")
943 res = itpl("$raw$quote$s$tailpadding$quote$tail")
944 return res
944 return res
945
945
946
946
947 #----------------------------------------------------------------------------
947 #----------------------------------------------------------------------------
948 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
948 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
949 """Take multiple lines of input.
949 """Take multiple lines of input.
950
950
951 A list with each line of input as a separate element is returned when a
951 A list with each line of input as a separate element is returned when a
952 termination string is entered (defaults to a single '.'). Input can also
952 termination string is entered (defaults to a single '.'). Input can also
953 terminate via EOF (^D in Unix, ^Z-RET in Windows).
953 terminate via EOF (^D in Unix, ^Z-RET in Windows).
954
954
955 Lines of input which end in \\ are joined into single entries (and a
955 Lines of input which end in \\ are joined into single entries (and a
956 secondary continuation prompt is issued as long as the user terminates
956 secondary continuation prompt is issued as long as the user terminates
957 lines with \\). This allows entering very long strings which are still
957 lines with \\). This allows entering very long strings which are still
958 meant to be treated as single entities.
958 meant to be treated as single entities.
959 """
959 """
960
960
961 try:
961 try:
962 if header:
962 if header:
963 header += '\n'
963 header += '\n'
964 lines = [raw_input(header + ps1)]
964 lines = [raw_input(header + ps1)]
965 except EOFError:
965 except EOFError:
966 return []
966 return []
967 terminate = [terminate_str]
967 terminate = [terminate_str]
968 try:
968 try:
969 while lines[-1:] != terminate:
969 while lines[-1:] != terminate:
970 new_line = raw_input(ps1)
970 new_line = raw_input(ps1)
971 while new_line.endswith('\\'):
971 while new_line.endswith('\\'):
972 new_line = new_line[:-1] + raw_input(ps2)
972 new_line = new_line[:-1] + raw_input(ps2)
973 lines.append(new_line)
973 lines.append(new_line)
974
974
975 return lines[:-1] # don't return the termination command
975 return lines[:-1] # don't return the termination command
976 except EOFError:
976 except EOFError:
977 print
977 print
978 return lines
978 return lines
979
979
980 #----------------------------------------------------------------------------
980 #----------------------------------------------------------------------------
981 def raw_input_ext(prompt='', ps2='... '):
981 def raw_input_ext(prompt='', ps2='... '):
982 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
982 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
983
983
984 line = raw_input(prompt)
984 line = raw_input(prompt)
985 while line.endswith('\\'):
985 while line.endswith('\\'):
986 line = line[:-1] + raw_input(ps2)
986 line = line[:-1] + raw_input(ps2)
987 return line
987 return line
988
988
989 #----------------------------------------------------------------------------
989 #----------------------------------------------------------------------------
990 def ask_yes_no(prompt,default=None):
990 def ask_yes_no(prompt,default=None):
991 """Asks a question and returns an integer 1/0 (y/n) answer.
991 """Asks a question and returns an integer 1/0 (y/n) answer.
992
992
993 If default is given (one of 'y','n'), it is used if the user input is
993 If default is given (one of 'y','n'), it is used if the user input is
994 empty. Otherwise the question is repeated until an answer is given.
994 empty. Otherwise the question is repeated until an answer is given.
995 If EOF occurs 20 times consecutively, the default answer is assumed,
995
996 or if there is no default, an exception is raised to prevent infinite
996 An EOF is treated as the default answer. If there is no default, an
997 loops.
997 exception is raised to prevent infinite loops.
998
998
999 Valid answers are: y/yes/n/no (match is not case sensitive)."""
999 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1000
1000
1001 answers = {'y':True,'n':False,'yes':True,'no':False}
1001 answers = {'y':True,'n':False,'yes':True,'no':False}
1002 ans = None
1002 ans = None
1003 eofs, max_eofs = 0, 20
1004 while ans not in answers.keys():
1003 while ans not in answers.keys():
1005 try:
1004 try:
1006 ans = raw_input(prompt+' ').lower()
1005 ans = raw_input(prompt+' ').lower()
1007 if not ans: # response was an empty string
1006 if not ans: # response was an empty string
1008 ans = default
1007 ans = default
1009 eofs = 0
1008 except KeyboardInterrupt:
1010 except (EOFError,KeyboardInterrupt):
1009 pass
1011 eofs = eofs + 1
1010 except EOFError:
1012 if eofs >= max_eofs:
1013 if default in answers.keys():
1011 if default in answers.keys():
1014 ans = default
1012 ans = default
1013 print
1015 else:
1014 else:
1016 raise
1015 raise
1017
1016
1018 return answers[ans]
1017 return answers[ans]
1019
1018
1020 #----------------------------------------------------------------------------
1019 #----------------------------------------------------------------------------
1021 def marquee(txt='',width=78,mark='*'):
1020 def marquee(txt='',width=78,mark='*'):
1022 """Return the input string centered in a 'marquee'."""
1021 """Return the input string centered in a 'marquee'."""
1023 if not txt:
1022 if not txt:
1024 return (mark*width)[:width]
1023 return (mark*width)[:width]
1025 nmark = (width-len(txt)-2)/len(mark)/2
1024 nmark = (width-len(txt)-2)/len(mark)/2
1026 if nmark < 0: nmark =0
1025 if nmark < 0: nmark =0
1027 marks = mark*nmark
1026 marks = mark*nmark
1028 return '%s %s %s' % (marks,txt,marks)
1027 return '%s %s %s' % (marks,txt,marks)
1029
1028
1030 #----------------------------------------------------------------------------
1029 #----------------------------------------------------------------------------
1031 class EvalDict:
1030 class EvalDict:
1032 """
1031 """
1033 Emulate a dict which evaluates its contents in the caller's frame.
1032 Emulate a dict which evaluates its contents in the caller's frame.
1034
1033
1035 Usage:
1034 Usage:
1036 >>>number = 19
1035 >>>number = 19
1037 >>>text = "python"
1036 >>>text = "python"
1038 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1037 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1039 """
1038 """
1040
1039
1041 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1040 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1042 # modified (shorter) version of:
1041 # modified (shorter) version of:
1043 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1042 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1044 # Skip Montanaro (skip@pobox.com).
1043 # Skip Montanaro (skip@pobox.com).
1045
1044
1046 def __getitem__(self, name):
1045 def __getitem__(self, name):
1047 frame = sys._getframe(1)
1046 frame = sys._getframe(1)
1048 return eval(name, frame.f_globals, frame.f_locals)
1047 return eval(name, frame.f_globals, frame.f_locals)
1049
1048
1050 EvalString = EvalDict # for backwards compatibility
1049 EvalString = EvalDict # for backwards compatibility
1051 #----------------------------------------------------------------------------
1050 #----------------------------------------------------------------------------
1052 def qw(words,flat=0,sep=None,maxsplit=-1):
1051 def qw(words,flat=0,sep=None,maxsplit=-1):
1053 """Similar to Perl's qw() operator, but with some more options.
1052 """Similar to Perl's qw() operator, but with some more options.
1054
1053
1055 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1054 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1056
1055
1057 words can also be a list itself, and with flat=1, the output will be
1056 words can also be a list itself, and with flat=1, the output will be
1058 recursively flattened. Examples:
1057 recursively flattened. Examples:
1059
1058
1060 >>> qw('1 2')
1059 >>> qw('1 2')
1061 ['1', '2']
1060 ['1', '2']
1062 >>> qw(['a b','1 2',['m n','p q']])
1061 >>> qw(['a b','1 2',['m n','p q']])
1063 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1062 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1064 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1063 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1065 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1064 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1066
1065
1067 if type(words) in StringTypes:
1066 if type(words) in StringTypes:
1068 return [word.strip() for word in words.split(sep,maxsplit)
1067 return [word.strip() for word in words.split(sep,maxsplit)
1069 if word and not word.isspace() ]
1068 if word and not word.isspace() ]
1070 if flat:
1069 if flat:
1071 return flatten(map(qw,words,[1]*len(words)))
1070 return flatten(map(qw,words,[1]*len(words)))
1072 return map(qw,words)
1071 return map(qw,words)
1073
1072
1074 #----------------------------------------------------------------------------
1073 #----------------------------------------------------------------------------
1075 def qwflat(words,sep=None,maxsplit=-1):
1074 def qwflat(words,sep=None,maxsplit=-1):
1076 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1075 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1077 return qw(words,1,sep,maxsplit)
1076 return qw(words,1,sep,maxsplit)
1078
1077
1079 #----------------------------------------------------------------------------
1078 #----------------------------------------------------------------------------
1080 def qw_lol(indata):
1079 def qw_lol(indata):
1081 """qw_lol('a b') -> [['a','b']],
1080 """qw_lol('a b') -> [['a','b']],
1082 otherwise it's just a call to qw().
1081 otherwise it's just a call to qw().
1083
1082
1084 We need this to make sure the modules_some keys *always* end up as a
1083 We need this to make sure the modules_some keys *always* end up as a
1085 list of lists."""
1084 list of lists."""
1086
1085
1087 if type(indata) in StringTypes:
1086 if type(indata) in StringTypes:
1088 return [qw(indata)]
1087 return [qw(indata)]
1089 else:
1088 else:
1090 return qw(indata)
1089 return qw(indata)
1091
1090
1092 #-----------------------------------------------------------------------------
1091 #-----------------------------------------------------------------------------
1093 def list_strings(arg):
1092 def list_strings(arg):
1094 """Always return a list of strings, given a string or list of strings
1093 """Always return a list of strings, given a string or list of strings
1095 as input."""
1094 as input."""
1096
1095
1097 if type(arg) in StringTypes: return [arg]
1096 if type(arg) in StringTypes: return [arg]
1098 else: return arg
1097 else: return arg
1099
1098
1100 #----------------------------------------------------------------------------
1099 #----------------------------------------------------------------------------
1101 def grep(pat,list,case=1):
1100 def grep(pat,list,case=1):
1102 """Simple minded grep-like function.
1101 """Simple minded grep-like function.
1103 grep(pat,list) returns occurrences of pat in list, None on failure.
1102 grep(pat,list) returns occurrences of pat in list, None on failure.
1104
1103
1105 It only does simple string matching, with no support for regexps. Use the
1104 It only does simple string matching, with no support for regexps. Use the
1106 option case=0 for case-insensitive matching."""
1105 option case=0 for case-insensitive matching."""
1107
1106
1108 # This is pretty crude. At least it should implement copying only references
1107 # This is pretty crude. At least it should implement copying only references
1109 # to the original data in case it's big. Now it copies the data for output.
1108 # to the original data in case it's big. Now it copies the data for output.
1110 out=[]
1109 out=[]
1111 if case:
1110 if case:
1112 for term in list:
1111 for term in list:
1113 if term.find(pat)>-1: out.append(term)
1112 if term.find(pat)>-1: out.append(term)
1114 else:
1113 else:
1115 lpat=pat.lower()
1114 lpat=pat.lower()
1116 for term in list:
1115 for term in list:
1117 if term.lower().find(lpat)>-1: out.append(term)
1116 if term.lower().find(lpat)>-1: out.append(term)
1118
1117
1119 if len(out): return out
1118 if len(out): return out
1120 else: return None
1119 else: return None
1121
1120
1122 #----------------------------------------------------------------------------
1121 #----------------------------------------------------------------------------
1123 def dgrep(pat,*opts):
1122 def dgrep(pat,*opts):
1124 """Return grep() on dir()+dir(__builtins__).
1123 """Return grep() on dir()+dir(__builtins__).
1125
1124
1126 A very common use of grep() when working interactively."""
1125 A very common use of grep() when working interactively."""
1127
1126
1128 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1127 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1129
1128
1130 #----------------------------------------------------------------------------
1129 #----------------------------------------------------------------------------
1131 def idgrep(pat):
1130 def idgrep(pat):
1132 """Case-insensitive dgrep()"""
1131 """Case-insensitive dgrep()"""
1133
1132
1134 return dgrep(pat,0)
1133 return dgrep(pat,0)
1135
1134
1136 #----------------------------------------------------------------------------
1135 #----------------------------------------------------------------------------
1137 def igrep(pat,list):
1136 def igrep(pat,list):
1138 """Synonym for case-insensitive grep."""
1137 """Synonym for case-insensitive grep."""
1139
1138
1140 return grep(pat,list,case=0)
1139 return grep(pat,list,case=0)
1141
1140
1142 #----------------------------------------------------------------------------
1141 #----------------------------------------------------------------------------
1143 def indent(str,nspaces=4,ntabs=0):
1142 def indent(str,nspaces=4,ntabs=0):
1144 """Indent a string a given number of spaces or tabstops.
1143 """Indent a string a given number of spaces or tabstops.
1145
1144
1146 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1145 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1147 """
1146 """
1148 if str is None:
1147 if str is None:
1149 return
1148 return
1150 ind = '\t'*ntabs+' '*nspaces
1149 ind = '\t'*ntabs+' '*nspaces
1151 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1150 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1152 if outstr.endswith(os.linesep+ind):
1151 if outstr.endswith(os.linesep+ind):
1153 return outstr[:-len(ind)]
1152 return outstr[:-len(ind)]
1154 else:
1153 else:
1155 return outstr
1154 return outstr
1156
1155
1157 #-----------------------------------------------------------------------------
1156 #-----------------------------------------------------------------------------
1158 def native_line_ends(filename,backup=1):
1157 def native_line_ends(filename,backup=1):
1159 """Convert (in-place) a file to line-ends native to the current OS.
1158 """Convert (in-place) a file to line-ends native to the current OS.
1160
1159
1161 If the optional backup argument is given as false, no backup of the
1160 If the optional backup argument is given as false, no backup of the
1162 original file is left. """
1161 original file is left. """
1163
1162
1164 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1163 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1165
1164
1166 bak_filename = filename + backup_suffixes[os.name]
1165 bak_filename = filename + backup_suffixes[os.name]
1167
1166
1168 original = open(filename).read()
1167 original = open(filename).read()
1169 shutil.copy2(filename,bak_filename)
1168 shutil.copy2(filename,bak_filename)
1170 try:
1169 try:
1171 new = open(filename,'wb')
1170 new = open(filename,'wb')
1172 new.write(os.linesep.join(original.splitlines()))
1171 new.write(os.linesep.join(original.splitlines()))
1173 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1172 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1174 new.close()
1173 new.close()
1175 except:
1174 except:
1176 os.rename(bak_filename,filename)
1175 os.rename(bak_filename,filename)
1177 if not backup:
1176 if not backup:
1178 try:
1177 try:
1179 os.remove(bak_filename)
1178 os.remove(bak_filename)
1180 except:
1179 except:
1181 pass
1180 pass
1182
1181
1183 #----------------------------------------------------------------------------
1182 #----------------------------------------------------------------------------
1184 def get_pager_cmd(pager_cmd = None):
1183 def get_pager_cmd(pager_cmd = None):
1185 """Return a pager command.
1184 """Return a pager command.
1186
1185
1187 Makes some attempts at finding an OS-correct one."""
1186 Makes some attempts at finding an OS-correct one."""
1188
1187
1189 if os.name == 'posix':
1188 if os.name == 'posix':
1190 default_pager_cmd = 'less -r' # -r for color control sequences
1189 default_pager_cmd = 'less -r' # -r for color control sequences
1191 elif os.name in ['nt','dos']:
1190 elif os.name in ['nt','dos']:
1192 default_pager_cmd = 'type'
1191 default_pager_cmd = 'type'
1193
1192
1194 if pager_cmd is None:
1193 if pager_cmd is None:
1195 try:
1194 try:
1196 pager_cmd = os.environ['PAGER']
1195 pager_cmd = os.environ['PAGER']
1197 except:
1196 except:
1198 pager_cmd = default_pager_cmd
1197 pager_cmd = default_pager_cmd
1199 return pager_cmd
1198 return pager_cmd
1200
1199
1201 #-----------------------------------------------------------------------------
1200 #-----------------------------------------------------------------------------
1202 def get_pager_start(pager,start):
1201 def get_pager_start(pager,start):
1203 """Return the string for paging files with an offset.
1202 """Return the string for paging files with an offset.
1204
1203
1205 This is the '+N' argument which less and more (under Unix) accept.
1204 This is the '+N' argument which less and more (under Unix) accept.
1206 """
1205 """
1207
1206
1208 if pager in ['less','more']:
1207 if pager in ['less','more']:
1209 if start:
1208 if start:
1210 start_string = '+' + str(start)
1209 start_string = '+' + str(start)
1211 else:
1210 else:
1212 start_string = ''
1211 start_string = ''
1213 else:
1212 else:
1214 start_string = ''
1213 start_string = ''
1215 return start_string
1214 return start_string
1216
1215
1217 #----------------------------------------------------------------------------
1216 #----------------------------------------------------------------------------
1218 if os.name == "nt":
1217 if os.name == "nt":
1219 import msvcrt
1218 import msvcrt
1220 def page_more():
1219 def page_more():
1221 """ Smart pausing between pages
1220 """ Smart pausing between pages
1222
1221
1223 @return: True if need print more lines, False if quit
1222 @return: True if need print more lines, False if quit
1224 """
1223 """
1225 Term.cout.write('---Return to continue, q to quit--- ')
1224 Term.cout.write('---Return to continue, q to quit--- ')
1226 ans = msvcrt.getch()
1225 ans = msvcrt.getch()
1227 if ans in ("q", "Q"):
1226 if ans in ("q", "Q"):
1228 result = False
1227 result = False
1229 else:
1228 else:
1230 result = True
1229 result = True
1231 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1230 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1232 return result
1231 return result
1233 else:
1232 else:
1234 def page_more():
1233 def page_more():
1235 ans = raw_input('---Return to continue, q to quit--- ')
1234 ans = raw_input('---Return to continue, q to quit--- ')
1236 if ans.lower().startswith('q'):
1235 if ans.lower().startswith('q'):
1237 return False
1236 return False
1238 else:
1237 else:
1239 return True
1238 return True
1240
1239
1241 esc_re = re.compile(r"(\x1b[^m]+m)")
1240 esc_re = re.compile(r"(\x1b[^m]+m)")
1242
1241
1243 def page_dumb(strng,start=0,screen_lines=25):
1242 def page_dumb(strng,start=0,screen_lines=25):
1244 """Very dumb 'pager' in Python, for when nothing else works.
1243 """Very dumb 'pager' in Python, for when nothing else works.
1245
1244
1246 Only moves forward, same interface as page(), except for pager_cmd and
1245 Only moves forward, same interface as page(), except for pager_cmd and
1247 mode."""
1246 mode."""
1248
1247
1249 out_ln = strng.splitlines()[start:]
1248 out_ln = strng.splitlines()[start:]
1250 screens = chop(out_ln,screen_lines-1)
1249 screens = chop(out_ln,screen_lines-1)
1251 if len(screens) == 1:
1250 if len(screens) == 1:
1252 print >>Term.cout, os.linesep.join(screens[0])
1251 print >>Term.cout, os.linesep.join(screens[0])
1253 else:
1252 else:
1254 last_escape = ""
1253 last_escape = ""
1255 for scr in screens[0:-1]:
1254 for scr in screens[0:-1]:
1256 hunk = os.linesep.join(scr)
1255 hunk = os.linesep.join(scr)
1257 print >>Term.cout, last_escape + hunk
1256 print >>Term.cout, last_escape + hunk
1258 if not page_more():
1257 if not page_more():
1259 return
1258 return
1260 esc_list = esc_re.findall(hunk)
1259 esc_list = esc_re.findall(hunk)
1261 if len(esc_list) > 0:
1260 if len(esc_list) > 0:
1262 last_escape = esc_list[-1]
1261 last_escape = esc_list[-1]
1263 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1262 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1264
1263
1265 #----------------------------------------------------------------------------
1264 #----------------------------------------------------------------------------
1266 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1265 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1267 """Print a string, piping through a pager after a certain length.
1266 """Print a string, piping through a pager after a certain length.
1268
1267
1269 The screen_lines parameter specifies the number of *usable* lines of your
1268 The screen_lines parameter specifies the number of *usable* lines of your
1270 terminal screen (total lines minus lines you need to reserve to show other
1269 terminal screen (total lines minus lines you need to reserve to show other
1271 information).
1270 information).
1272
1271
1273 If you set screen_lines to a number <=0, page() will try to auto-determine
1272 If you set screen_lines to a number <=0, page() will try to auto-determine
1274 your screen size and will only use up to (screen_size+screen_lines) for
1273 your screen size and will only use up to (screen_size+screen_lines) for
1275 printing, paging after that. That is, if you want auto-detection but need
1274 printing, paging after that. That is, if you want auto-detection but need
1276 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1275 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1277 auto-detection without any lines reserved simply use screen_lines = 0.
1276 auto-detection without any lines reserved simply use screen_lines = 0.
1278
1277
1279 If a string won't fit in the allowed lines, it is sent through the
1278 If a string won't fit in the allowed lines, it is sent through the
1280 specified pager command. If none given, look for PAGER in the environment,
1279 specified pager command. If none given, look for PAGER in the environment,
1281 and ultimately default to less.
1280 and ultimately default to less.
1282
1281
1283 If no system pager works, the string is sent through a 'dumb pager'
1282 If no system pager works, the string is sent through a 'dumb pager'
1284 written in python, very simplistic.
1283 written in python, very simplistic.
1285 """
1284 """
1286
1285
1287 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1286 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1288 TERM = os.environ.get('TERM','dumb')
1287 TERM = os.environ.get('TERM','dumb')
1289 if TERM in ['dumb','emacs'] and os.name != 'nt':
1288 if TERM in ['dumb','emacs'] and os.name != 'nt':
1290 print strng
1289 print strng
1291 return
1290 return
1292 # chop off the topmost part of the string we don't want to see
1291 # chop off the topmost part of the string we don't want to see
1293 str_lines = strng.split(os.linesep)[start:]
1292 str_lines = strng.split(os.linesep)[start:]
1294 str_toprint = os.linesep.join(str_lines)
1293 str_toprint = os.linesep.join(str_lines)
1295 num_newlines = len(str_lines)
1294 num_newlines = len(str_lines)
1296 len_str = len(str_toprint)
1295 len_str = len(str_toprint)
1297
1296
1298 # Dumb heuristics to guesstimate number of on-screen lines the string
1297 # Dumb heuristics to guesstimate number of on-screen lines the string
1299 # takes. Very basic, but good enough for docstrings in reasonable
1298 # takes. Very basic, but good enough for docstrings in reasonable
1300 # terminals. If someone later feels like refining it, it's not hard.
1299 # terminals. If someone later feels like refining it, it's not hard.
1301 numlines = max(num_newlines,int(len_str/80)+1)
1300 numlines = max(num_newlines,int(len_str/80)+1)
1302
1301
1303 if os.name == "nt":
1302 if os.name == "nt":
1304 screen_lines_def = get_console_size(defaulty=25)[1]
1303 screen_lines_def = get_console_size(defaulty=25)[1]
1305 else:
1304 else:
1306 screen_lines_def = 25 # default value if we can't auto-determine
1305 screen_lines_def = 25 # default value if we can't auto-determine
1307
1306
1308 # auto-determine screen size
1307 # auto-determine screen size
1309 if screen_lines <= 0:
1308 if screen_lines <= 0:
1310 if TERM=='xterm':
1309 if TERM=='xterm':
1311 try:
1310 try:
1312 import curses
1311 import curses
1313 if hasattr(curses,'initscr'):
1312 if hasattr(curses,'initscr'):
1314 use_curses = 1
1313 use_curses = 1
1315 else:
1314 else:
1316 use_curses = 0
1315 use_curses = 0
1317 except ImportError:
1316 except ImportError:
1318 use_curses = 0
1317 use_curses = 0
1319 else:
1318 else:
1320 # curses causes problems on many terminals other than xterm.
1319 # curses causes problems on many terminals other than xterm.
1321 use_curses = 0
1320 use_curses = 0
1322 if use_curses:
1321 if use_curses:
1323 scr = curses.initscr()
1322 scr = curses.initscr()
1324 screen_lines_real,screen_cols = scr.getmaxyx()
1323 screen_lines_real,screen_cols = scr.getmaxyx()
1325 curses.endwin()
1324 curses.endwin()
1326 screen_lines += screen_lines_real
1325 screen_lines += screen_lines_real
1327 #print '***Screen size:',screen_lines_real,'lines x',\
1326 #print '***Screen size:',screen_lines_real,'lines x',\
1328 #screen_cols,'columns.' # dbg
1327 #screen_cols,'columns.' # dbg
1329 else:
1328 else:
1330 screen_lines += screen_lines_def
1329 screen_lines += screen_lines_def
1331
1330
1332 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1331 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1333 if numlines <= screen_lines :
1332 if numlines <= screen_lines :
1334 #print '*** normal print' # dbg
1333 #print '*** normal print' # dbg
1335 print >>Term.cout, str_toprint
1334 print >>Term.cout, str_toprint
1336 else:
1335 else:
1337 # Try to open pager and default to internal one if that fails.
1336 # Try to open pager and default to internal one if that fails.
1338 # All failure modes are tagged as 'retval=1', to match the return
1337 # All failure modes are tagged as 'retval=1', to match the return
1339 # value of a failed system command. If any intermediate attempt
1338 # value of a failed system command. If any intermediate attempt
1340 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1339 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1341 pager_cmd = get_pager_cmd(pager_cmd)
1340 pager_cmd = get_pager_cmd(pager_cmd)
1342 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1341 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1343 if os.name == 'nt':
1342 if os.name == 'nt':
1344 if pager_cmd.startswith('type'):
1343 if pager_cmd.startswith('type'):
1345 # The default WinXP 'type' command is failing on complex strings.
1344 # The default WinXP 'type' command is failing on complex strings.
1346 retval = 1
1345 retval = 1
1347 else:
1346 else:
1348 tmpname = tempfile.mktemp('.txt')
1347 tmpname = tempfile.mktemp('.txt')
1349 tmpfile = file(tmpname,'wt')
1348 tmpfile = file(tmpname,'wt')
1350 tmpfile.write(strng)
1349 tmpfile.write(strng)
1351 tmpfile.close()
1350 tmpfile.close()
1352 cmd = "%s < %s" % (pager_cmd,tmpname)
1351 cmd = "%s < %s" % (pager_cmd,tmpname)
1353 if os.system(cmd):
1352 if os.system(cmd):
1354 retval = 1
1353 retval = 1
1355 else:
1354 else:
1356 retval = None
1355 retval = None
1357 os.remove(tmpname)
1356 os.remove(tmpname)
1358 else:
1357 else:
1359 try:
1358 try:
1360 retval = None
1359 retval = None
1361 # if I use popen4, things hang. No idea why.
1360 # if I use popen4, things hang. No idea why.
1362 #pager,shell_out = os.popen4(pager_cmd)
1361 #pager,shell_out = os.popen4(pager_cmd)
1363 pager = os.popen(pager_cmd,'w')
1362 pager = os.popen(pager_cmd,'w')
1364 pager.write(strng)
1363 pager.write(strng)
1365 pager.close()
1364 pager.close()
1366 retval = pager.close() # success returns None
1365 retval = pager.close() # success returns None
1367 except IOError,msg: # broken pipe when user quits
1366 except IOError,msg: # broken pipe when user quits
1368 if msg.args == (32,'Broken pipe'):
1367 if msg.args == (32,'Broken pipe'):
1369 retval = None
1368 retval = None
1370 else:
1369 else:
1371 retval = 1
1370 retval = 1
1372 except OSError:
1371 except OSError:
1373 # Other strange problems, sometimes seen in Win2k/cygwin
1372 # Other strange problems, sometimes seen in Win2k/cygwin
1374 retval = 1
1373 retval = 1
1375 if retval is not None:
1374 if retval is not None:
1376 page_dumb(strng,screen_lines=screen_lines)
1375 page_dumb(strng,screen_lines=screen_lines)
1377
1376
1378 #----------------------------------------------------------------------------
1377 #----------------------------------------------------------------------------
1379 def page_file(fname,start = 0, pager_cmd = None):
1378 def page_file(fname,start = 0, pager_cmd = None):
1380 """Page a file, using an optional pager command and starting line.
1379 """Page a file, using an optional pager command and starting line.
1381 """
1380 """
1382
1381
1383 pager_cmd = get_pager_cmd(pager_cmd)
1382 pager_cmd = get_pager_cmd(pager_cmd)
1384 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1383 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1385
1384
1386 try:
1385 try:
1387 if os.environ['TERM'] in ['emacs','dumb']:
1386 if os.environ['TERM'] in ['emacs','dumb']:
1388 raise EnvironmentError
1387 raise EnvironmentError
1389 xsys(pager_cmd + ' ' + fname)
1388 xsys(pager_cmd + ' ' + fname)
1390 except:
1389 except:
1391 try:
1390 try:
1392 if start > 0:
1391 if start > 0:
1393 start -= 1
1392 start -= 1
1394 page(open(fname).read(),start)
1393 page(open(fname).read(),start)
1395 except:
1394 except:
1396 print 'Unable to show file',`fname`
1395 print 'Unable to show file',`fname`
1397
1396
1398 #----------------------------------------------------------------------------
1397 #----------------------------------------------------------------------------
1399 def snip_print(str,width = 75,print_full = 0,header = ''):
1398 def snip_print(str,width = 75,print_full = 0,header = ''):
1400 """Print a string snipping the midsection to fit in width.
1399 """Print a string snipping the midsection to fit in width.
1401
1400
1402 print_full: mode control:
1401 print_full: mode control:
1403 - 0: only snip long strings
1402 - 0: only snip long strings
1404 - 1: send to page() directly.
1403 - 1: send to page() directly.
1405 - 2: snip long strings and ask for full length viewing with page()
1404 - 2: snip long strings and ask for full length viewing with page()
1406 Return 1 if snipping was necessary, 0 otherwise."""
1405 Return 1 if snipping was necessary, 0 otherwise."""
1407
1406
1408 if print_full == 1:
1407 if print_full == 1:
1409 page(header+str)
1408 page(header+str)
1410 return 0
1409 return 0
1411
1410
1412 print header,
1411 print header,
1413 if len(str) < width:
1412 if len(str) < width:
1414 print str
1413 print str
1415 snip = 0
1414 snip = 0
1416 else:
1415 else:
1417 whalf = int((width -5)/2)
1416 whalf = int((width -5)/2)
1418 print str[:whalf] + ' <...> ' + str[-whalf:]
1417 print str[:whalf] + ' <...> ' + str[-whalf:]
1419 snip = 1
1418 snip = 1
1420 if snip and print_full == 2:
1419 if snip and print_full == 2:
1421 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1420 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1422 page(str)
1421 page(str)
1423 return snip
1422 return snip
1424
1423
1425 #****************************************************************************
1424 #****************************************************************************
1426 # lists, dicts and structures
1425 # lists, dicts and structures
1427
1426
1428 def belong(candidates,checklist):
1427 def belong(candidates,checklist):
1429 """Check whether a list of items appear in a given list of options.
1428 """Check whether a list of items appear in a given list of options.
1430
1429
1431 Returns a list of 1 and 0, one for each candidate given."""
1430 Returns a list of 1 and 0, one for each candidate given."""
1432
1431
1433 return [x in checklist for x in candidates]
1432 return [x in checklist for x in candidates]
1434
1433
1435 #----------------------------------------------------------------------------
1434 #----------------------------------------------------------------------------
1436 def uniq_stable(elems):
1435 def uniq_stable(elems):
1437 """uniq_stable(elems) -> list
1436 """uniq_stable(elems) -> list
1438
1437
1439 Return from an iterable, a list of all the unique elements in the input,
1438 Return from an iterable, a list of all the unique elements in the input,
1440 but maintaining the order in which they first appear.
1439 but maintaining the order in which they first appear.
1441
1440
1442 A naive solution to this problem which just makes a dictionary with the
1441 A naive solution to this problem which just makes a dictionary with the
1443 elements as keys fails to respect the stability condition, since
1442 elements as keys fails to respect the stability condition, since
1444 dictionaries are unsorted by nature.
1443 dictionaries are unsorted by nature.
1445
1444
1446 Note: All elements in the input must be valid dictionary keys for this
1445 Note: All elements in the input must be valid dictionary keys for this
1447 routine to work, as it internally uses a dictionary for efficiency
1446 routine to work, as it internally uses a dictionary for efficiency
1448 reasons."""
1447 reasons."""
1449
1448
1450 unique = []
1449 unique = []
1451 unique_dict = {}
1450 unique_dict = {}
1452 for nn in elems:
1451 for nn in elems:
1453 if nn not in unique_dict:
1452 if nn not in unique_dict:
1454 unique.append(nn)
1453 unique.append(nn)
1455 unique_dict[nn] = None
1454 unique_dict[nn] = None
1456 return unique
1455 return unique
1457
1456
1458 #----------------------------------------------------------------------------
1457 #----------------------------------------------------------------------------
1459 class NLprinter:
1458 class NLprinter:
1460 """Print an arbitrarily nested list, indicating index numbers.
1459 """Print an arbitrarily nested list, indicating index numbers.
1461
1460
1462 An instance of this class called nlprint is available and callable as a
1461 An instance of this class called nlprint is available and callable as a
1463 function.
1462 function.
1464
1463
1465 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1464 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1466 and using 'sep' to separate the index from the value. """
1465 and using 'sep' to separate the index from the value. """
1467
1466
1468 def __init__(self):
1467 def __init__(self):
1469 self.depth = 0
1468 self.depth = 0
1470
1469
1471 def __call__(self,lst,pos='',**kw):
1470 def __call__(self,lst,pos='',**kw):
1472 """Prints the nested list numbering levels."""
1471 """Prints the nested list numbering levels."""
1473 kw.setdefault('indent',' ')
1472 kw.setdefault('indent',' ')
1474 kw.setdefault('sep',': ')
1473 kw.setdefault('sep',': ')
1475 kw.setdefault('start',0)
1474 kw.setdefault('start',0)
1476 kw.setdefault('stop',len(lst))
1475 kw.setdefault('stop',len(lst))
1477 # we need to remove start and stop from kw so they don't propagate
1476 # we need to remove start and stop from kw so they don't propagate
1478 # into a recursive call for a nested list.
1477 # into a recursive call for a nested list.
1479 start = kw['start']; del kw['start']
1478 start = kw['start']; del kw['start']
1480 stop = kw['stop']; del kw['stop']
1479 stop = kw['stop']; del kw['stop']
1481 if self.depth == 0 and 'header' in kw.keys():
1480 if self.depth == 0 and 'header' in kw.keys():
1482 print kw['header']
1481 print kw['header']
1483
1482
1484 for idx in range(start,stop):
1483 for idx in range(start,stop):
1485 elem = lst[idx]
1484 elem = lst[idx]
1486 if type(elem)==type([]):
1485 if type(elem)==type([]):
1487 self.depth += 1
1486 self.depth += 1
1488 self.__call__(elem,itpl('$pos$idx,'),**kw)
1487 self.__call__(elem,itpl('$pos$idx,'),**kw)
1489 self.depth -= 1
1488 self.depth -= 1
1490 else:
1489 else:
1491 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1490 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1492
1491
1493 nlprint = NLprinter()
1492 nlprint = NLprinter()
1494 #----------------------------------------------------------------------------
1493 #----------------------------------------------------------------------------
1495 def all_belong(candidates,checklist):
1494 def all_belong(candidates,checklist):
1496 """Check whether a list of items ALL appear in a given list of options.
1495 """Check whether a list of items ALL appear in a given list of options.
1497
1496
1498 Returns a single 1 or 0 value."""
1497 Returns a single 1 or 0 value."""
1499
1498
1500 return 1-(0 in [x in checklist for x in candidates])
1499 return 1-(0 in [x in checklist for x in candidates])
1501
1500
1502 #----------------------------------------------------------------------------
1501 #----------------------------------------------------------------------------
1503 def sort_compare(lst1,lst2,inplace = 1):
1502 def sort_compare(lst1,lst2,inplace = 1):
1504 """Sort and compare two lists.
1503 """Sort and compare two lists.
1505
1504
1506 By default it does it in place, thus modifying the lists. Use inplace = 0
1505 By default it does it in place, thus modifying the lists. Use inplace = 0
1507 to avoid that (at the cost of temporary copy creation)."""
1506 to avoid that (at the cost of temporary copy creation)."""
1508 if not inplace:
1507 if not inplace:
1509 lst1 = lst1[:]
1508 lst1 = lst1[:]
1510 lst2 = lst2[:]
1509 lst2 = lst2[:]
1511 lst1.sort(); lst2.sort()
1510 lst1.sort(); lst2.sort()
1512 return lst1 == lst2
1511 return lst1 == lst2
1513
1512
1514 #----------------------------------------------------------------------------
1513 #----------------------------------------------------------------------------
1515 def mkdict(**kwargs):
1514 def mkdict(**kwargs):
1516 """Return a dict from a keyword list.
1515 """Return a dict from a keyword list.
1517
1516
1518 It's just syntactic sugar for making ditcionary creation more convenient:
1517 It's just syntactic sugar for making ditcionary creation more convenient:
1519 # the standard way
1518 # the standard way
1520 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1519 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1521 # a cleaner way
1520 # a cleaner way
1522 >>>data = dict(red=1, green=2, blue=3)
1521 >>>data = dict(red=1, green=2, blue=3)
1523
1522
1524 If you need more than this, look at the Struct() class."""
1523 If you need more than this, look at the Struct() class."""
1525
1524
1526 return kwargs
1525 return kwargs
1527
1526
1528 #----------------------------------------------------------------------------
1527 #----------------------------------------------------------------------------
1529 def list2dict(lst):
1528 def list2dict(lst):
1530 """Takes a list of (key,value) pairs and turns it into a dict."""
1529 """Takes a list of (key,value) pairs and turns it into a dict."""
1531
1530
1532 dic = {}
1531 dic = {}
1533 for k,v in lst: dic[k] = v
1532 for k,v in lst: dic[k] = v
1534 return dic
1533 return dic
1535
1534
1536 #----------------------------------------------------------------------------
1535 #----------------------------------------------------------------------------
1537 def list2dict2(lst,default=''):
1536 def list2dict2(lst,default=''):
1538 """Takes a list and turns it into a dict.
1537 """Takes a list and turns it into a dict.
1539 Much slower than list2dict, but more versatile. This version can take
1538 Much slower than list2dict, but more versatile. This version can take
1540 lists with sublists of arbitrary length (including sclars)."""
1539 lists with sublists of arbitrary length (including sclars)."""
1541
1540
1542 dic = {}
1541 dic = {}
1543 for elem in lst:
1542 for elem in lst:
1544 if type(elem) in (types.ListType,types.TupleType):
1543 if type(elem) in (types.ListType,types.TupleType):
1545 size = len(elem)
1544 size = len(elem)
1546 if size == 0:
1545 if size == 0:
1547 pass
1546 pass
1548 elif size == 1:
1547 elif size == 1:
1549 dic[elem] = default
1548 dic[elem] = default
1550 else:
1549 else:
1551 k,v = elem[0], elem[1:]
1550 k,v = elem[0], elem[1:]
1552 if len(v) == 1: v = v[0]
1551 if len(v) == 1: v = v[0]
1553 dic[k] = v
1552 dic[k] = v
1554 else:
1553 else:
1555 dic[elem] = default
1554 dic[elem] = default
1556 return dic
1555 return dic
1557
1556
1558 #----------------------------------------------------------------------------
1557 #----------------------------------------------------------------------------
1559 def flatten(seq):
1558 def flatten(seq):
1560 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1559 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1561
1560
1562 return [x for subseq in seq for x in subseq]
1561 return [x for subseq in seq for x in subseq]
1563
1562
1564 #----------------------------------------------------------------------------
1563 #----------------------------------------------------------------------------
1565 def get_slice(seq,start=0,stop=None,step=1):
1564 def get_slice(seq,start=0,stop=None,step=1):
1566 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1565 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1567 if stop == None:
1566 if stop == None:
1568 stop = len(seq)
1567 stop = len(seq)
1569 item = lambda i: seq[i]
1568 item = lambda i: seq[i]
1570 return map(item,xrange(start,stop,step))
1569 return map(item,xrange(start,stop,step))
1571
1570
1572 #----------------------------------------------------------------------------
1571 #----------------------------------------------------------------------------
1573 def chop(seq,size):
1572 def chop(seq,size):
1574 """Chop a sequence into chunks of the given size."""
1573 """Chop a sequence into chunks of the given size."""
1575 chunk = lambda i: seq[i:i+size]
1574 chunk = lambda i: seq[i:i+size]
1576 return map(chunk,xrange(0,len(seq),size))
1575 return map(chunk,xrange(0,len(seq),size))
1577
1576
1578 #----------------------------------------------------------------------------
1577 #----------------------------------------------------------------------------
1579 # with is a keyword as of python 2.5, so this function is renamed to withobj
1578 # with is a keyword as of python 2.5, so this function is renamed to withobj
1580 # from its old 'with' name.
1579 # from its old 'with' name.
1581 def with_obj(object, **args):
1580 def with_obj(object, **args):
1582 """Set multiple attributes for an object, similar to Pascal's with.
1581 """Set multiple attributes for an object, similar to Pascal's with.
1583
1582
1584 Example:
1583 Example:
1585 with_obj(jim,
1584 with_obj(jim,
1586 born = 1960,
1585 born = 1960,
1587 haircolour = 'Brown',
1586 haircolour = 'Brown',
1588 eyecolour = 'Green')
1587 eyecolour = 'Green')
1589
1588
1590 Credit: Greg Ewing, in
1589 Credit: Greg Ewing, in
1591 http://mail.python.org/pipermail/python-list/2001-May/040703.html.
1590 http://mail.python.org/pipermail/python-list/2001-May/040703.html.
1592
1591
1593 NOTE: up until IPython 0.7.2, this was called simply 'with', but 'with'
1592 NOTE: up until IPython 0.7.2, this was called simply 'with', but 'with'
1594 has become a keyword for Python 2.5, so we had to rename it."""
1593 has become a keyword for Python 2.5, so we had to rename it."""
1595
1594
1596 object.__dict__.update(args)
1595 object.__dict__.update(args)
1597
1596
1598 #----------------------------------------------------------------------------
1597 #----------------------------------------------------------------------------
1599 def setattr_list(obj,alist,nspace = None):
1598 def setattr_list(obj,alist,nspace = None):
1600 """Set a list of attributes for an object taken from a namespace.
1599 """Set a list of attributes for an object taken from a namespace.
1601
1600
1602 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1601 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1603 alist with their values taken from nspace, which must be a dict (something
1602 alist with their values taken from nspace, which must be a dict (something
1604 like locals() will often do) If nspace isn't given, locals() of the
1603 like locals() will often do) If nspace isn't given, locals() of the
1605 *caller* is used, so in most cases you can omit it.
1604 *caller* is used, so in most cases you can omit it.
1606
1605
1607 Note that alist can be given as a string, which will be automatically
1606 Note that alist can be given as a string, which will be automatically
1608 split into a list on whitespace. If given as a list, it must be a list of
1607 split into a list on whitespace. If given as a list, it must be a list of
1609 *strings* (the variable names themselves), not of variables."""
1608 *strings* (the variable names themselves), not of variables."""
1610
1609
1611 # this grabs the local variables from the *previous* call frame -- that is
1610 # this grabs the local variables from the *previous* call frame -- that is
1612 # the locals from the function that called setattr_list().
1611 # the locals from the function that called setattr_list().
1613 # - snipped from weave.inline()
1612 # - snipped from weave.inline()
1614 if nspace is None:
1613 if nspace is None:
1615 call_frame = sys._getframe().f_back
1614 call_frame = sys._getframe().f_back
1616 nspace = call_frame.f_locals
1615 nspace = call_frame.f_locals
1617
1616
1618 if type(alist) in StringTypes:
1617 if type(alist) in StringTypes:
1619 alist = alist.split()
1618 alist = alist.split()
1620 for attr in alist:
1619 for attr in alist:
1621 val = eval(attr,nspace)
1620 val = eval(attr,nspace)
1622 setattr(obj,attr,val)
1621 setattr(obj,attr,val)
1623
1622
1624 #----------------------------------------------------------------------------
1623 #----------------------------------------------------------------------------
1625 def getattr_list(obj,alist,*args):
1624 def getattr_list(obj,alist,*args):
1626 """getattr_list(obj,alist[, default]) -> attribute list.
1625 """getattr_list(obj,alist[, default]) -> attribute list.
1627
1626
1628 Get a list of named attributes for an object. When a default argument is
1627 Get a list of named attributes for an object. When a default argument is
1629 given, it is returned when the attribute doesn't exist; without it, an
1628 given, it is returned when the attribute doesn't exist; without it, an
1630 exception is raised in that case.
1629 exception is raised in that case.
1631
1630
1632 Note that alist can be given as a string, which will be automatically
1631 Note that alist can be given as a string, which will be automatically
1633 split into a list on whitespace. If given as a list, it must be a list of
1632 split into a list on whitespace. If given as a list, it must be a list of
1634 *strings* (the variable names themselves), not of variables."""
1633 *strings* (the variable names themselves), not of variables."""
1635
1634
1636 if type(alist) in StringTypes:
1635 if type(alist) in StringTypes:
1637 alist = alist.split()
1636 alist = alist.split()
1638 if args:
1637 if args:
1639 if len(args)==1:
1638 if len(args)==1:
1640 default = args[0]
1639 default = args[0]
1641 return map(lambda attr: getattr(obj,attr,default),alist)
1640 return map(lambda attr: getattr(obj,attr,default),alist)
1642 else:
1641 else:
1643 raise ValueError,'getattr_list() takes only one optional argument'
1642 raise ValueError,'getattr_list() takes only one optional argument'
1644 else:
1643 else:
1645 return map(lambda attr: getattr(obj,attr),alist)
1644 return map(lambda attr: getattr(obj,attr),alist)
1646
1645
1647 #----------------------------------------------------------------------------
1646 #----------------------------------------------------------------------------
1648 def map_method(method,object_list,*argseq,**kw):
1647 def map_method(method,object_list,*argseq,**kw):
1649 """map_method(method,object_list,*args,**kw) -> list
1648 """map_method(method,object_list,*args,**kw) -> list
1650
1649
1651 Return a list of the results of applying the methods to the items of the
1650 Return a list of the results of applying the methods to the items of the
1652 argument sequence(s). If more than one sequence is given, the method is
1651 argument sequence(s). If more than one sequence is given, the method is
1653 called with an argument list consisting of the corresponding item of each
1652 called with an argument list consisting of the corresponding item of each
1654 sequence. All sequences must be of the same length.
1653 sequence. All sequences must be of the same length.
1655
1654
1656 Keyword arguments are passed verbatim to all objects called.
1655 Keyword arguments are passed verbatim to all objects called.
1657
1656
1658 This is Python code, so it's not nearly as fast as the builtin map()."""
1657 This is Python code, so it's not nearly as fast as the builtin map()."""
1659
1658
1660 out_list = []
1659 out_list = []
1661 idx = 0
1660 idx = 0
1662 for object in object_list:
1661 for object in object_list:
1663 try:
1662 try:
1664 handler = getattr(object, method)
1663 handler = getattr(object, method)
1665 except AttributeError:
1664 except AttributeError:
1666 out_list.append(None)
1665 out_list.append(None)
1667 else:
1666 else:
1668 if argseq:
1667 if argseq:
1669 args = map(lambda lst:lst[idx],argseq)
1668 args = map(lambda lst:lst[idx],argseq)
1670 #print 'ob',object,'hand',handler,'ar',args # dbg
1669 #print 'ob',object,'hand',handler,'ar',args # dbg
1671 out_list.append(handler(args,**kw))
1670 out_list.append(handler(args,**kw))
1672 else:
1671 else:
1673 out_list.append(handler(**kw))
1672 out_list.append(handler(**kw))
1674 idx += 1
1673 idx += 1
1675 return out_list
1674 return out_list
1676
1675
1677 #----------------------------------------------------------------------------
1676 #----------------------------------------------------------------------------
1678 def import_fail_info(mod_name,fns=None):
1677 def import_fail_info(mod_name,fns=None):
1679 """Inform load failure for a module."""
1678 """Inform load failure for a module."""
1680
1679
1681 if fns == None:
1680 if fns == None:
1682 warn("Loading of %s failed.\n" % (mod_name,))
1681 warn("Loading of %s failed.\n" % (mod_name,))
1683 else:
1682 else:
1684 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1683 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1685
1684
1686 #----------------------------------------------------------------------------
1685 #----------------------------------------------------------------------------
1687 # Proposed popitem() extension, written as a method
1686 # Proposed popitem() extension, written as a method
1688
1687
1689 class NotGiven: pass
1688 class NotGiven: pass
1690
1689
1691 def popkey(dct,key,default=NotGiven):
1690 def popkey(dct,key,default=NotGiven):
1692 """Return dct[key] and delete dct[key].
1691 """Return dct[key] and delete dct[key].
1693
1692
1694 If default is given, return it if dct[key] doesn't exist, otherwise raise
1693 If default is given, return it if dct[key] doesn't exist, otherwise raise
1695 KeyError. """
1694 KeyError. """
1696
1695
1697 try:
1696 try:
1698 val = dct[key]
1697 val = dct[key]
1699 except KeyError:
1698 except KeyError:
1700 if default is NotGiven:
1699 if default is NotGiven:
1701 raise
1700 raise
1702 else:
1701 else:
1703 return default
1702 return default
1704 else:
1703 else:
1705 del dct[key]
1704 del dct[key]
1706 return val
1705 return val
1707 #*************************** end of file <genutils.py> **********************
1706 #*************************** end of file <genutils.py> **********************
1708
1707
@@ -1,5509 +1,5512 b''
1 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
1 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
2
2
3 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
4 instead of looping 20 times.
5
3 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
6 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
4 correctly at initialization time. Bug reported by Krishna Mohan
7 correctly at initialization time. Bug reported by Krishna Mohan
5 Gundu <gkmohan-AT-gmail.com> on the user list.
8 Gundu <gkmohan-AT-gmail.com> on the user list.
6
9
7 * IPython/Release.py (version): Mark 0.7.2 version to start
10 * IPython/Release.py (version): Mark 0.7.2 version to start
8 testing for release on 06/06.
11 testing for release on 06/06.
9
12
10 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
13 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
11
14
12 * scripts/irunner: thin script interface so users don't have to
15 * scripts/irunner: thin script interface so users don't have to
13 find the module and call it as an executable, since modules rarely
16 find the module and call it as an executable, since modules rarely
14 live in people's PATH.
17 live in people's PATH.
15
18
16 * IPython/irunner.py (InteractiveRunner.__init__): added
19 * IPython/irunner.py (InteractiveRunner.__init__): added
17 delaybeforesend attribute to control delays with newer versions of
20 delaybeforesend attribute to control delays with newer versions of
18 pexpect. Thanks to detailed help from pexpect's author, Noah
21 pexpect. Thanks to detailed help from pexpect's author, Noah
19 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
22 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
20 correctly (it works in NoColor mode).
23 correctly (it works in NoColor mode).
21
24
22 * IPython/iplib.py (handle_normal): fix nasty crash reported on
25 * IPython/iplib.py (handle_normal): fix nasty crash reported on
23 SAGE list, from improper log() calls.
26 SAGE list, from improper log() calls.
24
27
25 2006-05-31 Ville Vainio <vivainio@gmail.com>
28 2006-05-31 Ville Vainio <vivainio@gmail.com>
26
29
27 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
30 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
28 with args in parens to work correctly with dirs that have spaces.
31 with args in parens to work correctly with dirs that have spaces.
29
32
30 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
33 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
31
34
32 * IPython/Logger.py (Logger.logstart): add option to log raw input
35 * IPython/Logger.py (Logger.logstart): add option to log raw input
33 instead of the processed one. A -r flag was added to the
36 instead of the processed one. A -r flag was added to the
34 %logstart magic used for controlling logging.
37 %logstart magic used for controlling logging.
35
38
36 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
39 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
37
40
38 * IPython/iplib.py (InteractiveShell.__init__): add check for the
41 * IPython/iplib.py (InteractiveShell.__init__): add check for the
39 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
42 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
40 recognize the option. After a bug report by Will Maier. This
43 recognize the option. After a bug report by Will Maier. This
41 closes #64 (will do it after confirmation from W. Maier).
44 closes #64 (will do it after confirmation from W. Maier).
42
45
43 * IPython/irunner.py: New module to run scripts as if manually
46 * IPython/irunner.py: New module to run scripts as if manually
44 typed into an interactive environment, based on pexpect. After a
47 typed into an interactive environment, based on pexpect. After a
45 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
48 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
46 ipython-user list. Simple unittests in the tests/ directory.
49 ipython-user list. Simple unittests in the tests/ directory.
47
50
48 * tools/release: add Will Maier, OpenBSD port maintainer, to
51 * tools/release: add Will Maier, OpenBSD port maintainer, to
49 recepients list. We are now officially part of the OpenBSD ports:
52 recepients list. We are now officially part of the OpenBSD ports:
50 http://www.openbsd.org/ports.html ! Many thanks to Will for the
53 http://www.openbsd.org/ports.html ! Many thanks to Will for the
51 work.
54 work.
52
55
53 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
56 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
54
57
55 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
58 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
56 so that it doesn't break tkinter apps.
59 so that it doesn't break tkinter apps.
57
60
58 * IPython/iplib.py (_prefilter): fix bug where aliases would
61 * IPython/iplib.py (_prefilter): fix bug where aliases would
59 shadow variables when autocall was fully off. Reported by SAGE
62 shadow variables when autocall was fully off. Reported by SAGE
60 author William Stein.
63 author William Stein.
61
64
62 * IPython/OInspect.py (Inspector.__init__): add a flag to control
65 * IPython/OInspect.py (Inspector.__init__): add a flag to control
63 at what detail level strings are computed when foo? is requested.
66 at what detail level strings are computed when foo? is requested.
64 This allows users to ask for example that the string form of an
67 This allows users to ask for example that the string form of an
65 object is only computed when foo?? is called, or even never, by
68 object is only computed when foo?? is called, or even never, by
66 setting the object_info_string_level >= 2 in the configuration
69 setting the object_info_string_level >= 2 in the configuration
67 file. This new option has been added and documented. After a
70 file. This new option has been added and documented. After a
68 request by SAGE to be able to control the printing of very large
71 request by SAGE to be able to control the printing of very large
69 objects more easily.
72 objects more easily.
70
73
71 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
74 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
72
75
73 * IPython/ipmaker.py (make_IPython): remove the ipython call path
76 * IPython/ipmaker.py (make_IPython): remove the ipython call path
74 from sys.argv, to be 100% consistent with how Python itself works
77 from sys.argv, to be 100% consistent with how Python itself works
75 (as seen for example with python -i file.py). After a bug report
78 (as seen for example with python -i file.py). After a bug report
76 by Jeffrey Collins.
79 by Jeffrey Collins.
77
80
78 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
81 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
79 nasty bug which was preventing custom namespaces with -pylab,
82 nasty bug which was preventing custom namespaces with -pylab,
80 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
83 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
81 compatibility (long gone from mpl).
84 compatibility (long gone from mpl).
82
85
83 * IPython/ipapi.py (make_session): name change: create->make. We
86 * IPython/ipapi.py (make_session): name change: create->make. We
84 use make in other places (ipmaker,...), it's shorter and easier to
87 use make in other places (ipmaker,...), it's shorter and easier to
85 type and say, etc. I'm trying to clean things before 0.7.2 so
88 type and say, etc. I'm trying to clean things before 0.7.2 so
86 that I can keep things stable wrt to ipapi in the chainsaw branch.
89 that I can keep things stable wrt to ipapi in the chainsaw branch.
87
90
88 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
91 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
89 python-mode recognizes our debugger mode. Add support for
92 python-mode recognizes our debugger mode. Add support for
90 autoindent inside (X)emacs. After a patch sent in by Jin Liu
93 autoindent inside (X)emacs. After a patch sent in by Jin Liu
91 <m.liu.jin-AT-gmail.com> originally written by
94 <m.liu.jin-AT-gmail.com> originally written by
92 doxgen-AT-newsmth.net (with minor modifications for xemacs
95 doxgen-AT-newsmth.net (with minor modifications for xemacs
93 compatibility)
96 compatibility)
94
97
95 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
98 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
96 tracebacks when walking the stack so that the stack tracking system
99 tracebacks when walking the stack so that the stack tracking system
97 in emacs' python-mode can identify the frames correctly.
100 in emacs' python-mode can identify the frames correctly.
98
101
99 * IPython/ipmaker.py (make_IPython): make the internal (and
102 * IPython/ipmaker.py (make_IPython): make the internal (and
100 default config) autoedit_syntax value false by default. Too many
103 default config) autoedit_syntax value false by default. Too many
101 users have complained to me (both on and off-list) about problems
104 users have complained to me (both on and off-list) about problems
102 with this option being on by default, so I'm making it default to
105 with this option being on by default, so I'm making it default to
103 off. It can still be enabled by anyone via the usual mechanisms.
106 off. It can still be enabled by anyone via the usual mechanisms.
104
107
105 * IPython/completer.py (Completer.attr_matches): add support for
108 * IPython/completer.py (Completer.attr_matches): add support for
106 PyCrust-style _getAttributeNames magic method. Patch contributed
109 PyCrust-style _getAttributeNames magic method. Patch contributed
107 by <mscott-AT-goldenspud.com>. Closes #50.
110 by <mscott-AT-goldenspud.com>. Closes #50.
108
111
109 * IPython/iplib.py (InteractiveShell.__init__): remove the
112 * IPython/iplib.py (InteractiveShell.__init__): remove the
110 deletion of exit/quit from __builtin__, which can break
113 deletion of exit/quit from __builtin__, which can break
111 third-party tools like the Zope debugging console. The
114 third-party tools like the Zope debugging console. The
112 %exit/%quit magics remain. In general, it's probably a good idea
115 %exit/%quit magics remain. In general, it's probably a good idea
113 not to delete anything from __builtin__, since we never know what
116 not to delete anything from __builtin__, since we never know what
114 that will break. In any case, python now (for 2.5) will support
117 that will break. In any case, python now (for 2.5) will support
115 'real' exit/quit, so this issue is moot. Closes #55.
118 'real' exit/quit, so this issue is moot. Closes #55.
116
119
117 * IPython/genutils.py (with_obj): rename the 'with' function to
120 * IPython/genutils.py (with_obj): rename the 'with' function to
118 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
121 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
119 becomes a language keyword. Closes #53.
122 becomes a language keyword. Closes #53.
120
123
121 * IPython/FakeModule.py (FakeModule.__init__): add a proper
124 * IPython/FakeModule.py (FakeModule.__init__): add a proper
122 __file__ attribute to this so it fools more things into thinking
125 __file__ attribute to this so it fools more things into thinking
123 it is a real module. Closes #59.
126 it is a real module. Closes #59.
124
127
125 * IPython/Magic.py (magic_edit): add -n option to open the editor
128 * IPython/Magic.py (magic_edit): add -n option to open the editor
126 at a specific line number. After a patch by Stefan van der Walt.
129 at a specific line number. After a patch by Stefan van der Walt.
127
130
128 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
131 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
129
132
130 * IPython/iplib.py (edit_syntax_error): fix crash when for some
133 * IPython/iplib.py (edit_syntax_error): fix crash when for some
131 reason the file could not be opened. After automatic crash
134 reason the file could not be opened. After automatic crash
132 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
135 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
133 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
136 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
134 (_should_recompile): Don't fire editor if using %bg, since there
137 (_should_recompile): Don't fire editor if using %bg, since there
135 is no file in the first place. From the same report as above.
138 is no file in the first place. From the same report as above.
136 (raw_input): protect against faulty third-party prefilters. After
139 (raw_input): protect against faulty third-party prefilters. After
137 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
140 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
138 while running under SAGE.
141 while running under SAGE.
139
142
140 2006-05-23 Ville Vainio <vivainio@gmail.com>
143 2006-05-23 Ville Vainio <vivainio@gmail.com>
141
144
142 * ipapi.py: Stripped down ip.to_user_ns() to work only as
145 * ipapi.py: Stripped down ip.to_user_ns() to work only as
143 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
146 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
144 now returns None (again), unless dummy is specifically allowed by
147 now returns None (again), unless dummy is specifically allowed by
145 ipapi.get(allow_dummy=True).
148 ipapi.get(allow_dummy=True).
146
149
147 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
150 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
148
151
149 * IPython: remove all 2.2-compatibility objects and hacks from
152 * IPython: remove all 2.2-compatibility objects and hacks from
150 everywhere, since we only support 2.3 at this point. Docs
153 everywhere, since we only support 2.3 at this point. Docs
151 updated.
154 updated.
152
155
153 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
156 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
154 Anything requiring extra validation can be turned into a Python
157 Anything requiring extra validation can be turned into a Python
155 property in the future. I used a property for the db one b/c
158 property in the future. I used a property for the db one b/c
156 there was a nasty circularity problem with the initialization
159 there was a nasty circularity problem with the initialization
157 order, which right now I don't have time to clean up.
160 order, which right now I don't have time to clean up.
158
161
159 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
162 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
160 another locking bug reported by Jorgen. I'm not 100% sure though,
163 another locking bug reported by Jorgen. I'm not 100% sure though,
161 so more testing is needed...
164 so more testing is needed...
162
165
163 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
166 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
164
167
165 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
168 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
166 local variables from any routine in user code (typically executed
169 local variables from any routine in user code (typically executed
167 with %run) directly into the interactive namespace. Very useful
170 with %run) directly into the interactive namespace. Very useful
168 when doing complex debugging.
171 when doing complex debugging.
169 (IPythonNotRunning): Changed the default None object to a dummy
172 (IPythonNotRunning): Changed the default None object to a dummy
170 whose attributes can be queried as well as called without
173 whose attributes can be queried as well as called without
171 exploding, to ease writing code which works transparently both in
174 exploding, to ease writing code which works transparently both in
172 and out of ipython and uses some of this API.
175 and out of ipython and uses some of this API.
173
176
174 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
177 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
175
178
176 * IPython/hooks.py (result_display): Fix the fact that our display
179 * IPython/hooks.py (result_display): Fix the fact that our display
177 hook was using str() instead of repr(), as the default python
180 hook was using str() instead of repr(), as the default python
178 console does. This had gone unnoticed b/c it only happened if
181 console does. This had gone unnoticed b/c it only happened if
179 %Pprint was off, but the inconsistency was there.
182 %Pprint was off, but the inconsistency was there.
180
183
181 2006-05-15 Ville Vainio <vivainio@gmail.com>
184 2006-05-15 Ville Vainio <vivainio@gmail.com>
182
185
183 * Oinspect.py: Only show docstring for nonexisting/binary files
186 * Oinspect.py: Only show docstring for nonexisting/binary files
184 when doing object??, closing ticket #62
187 when doing object??, closing ticket #62
185
188
186 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
189 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
187
190
188 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
191 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
189 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
192 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
190 was being released in a routine which hadn't checked if it had
193 was being released in a routine which hadn't checked if it had
191 been the one to acquire it.
194 been the one to acquire it.
192
195
193 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
196 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
194
197
195 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
198 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
196
199
197 2006-04-11 Ville Vainio <vivainio@gmail.com>
200 2006-04-11 Ville Vainio <vivainio@gmail.com>
198
201
199 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
202 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
200 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
203 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
201 prefilters, allowing stuff like magics and aliases in the file.
204 prefilters, allowing stuff like magics and aliases in the file.
202
205
203 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
206 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
204 added. Supported now are "%clear in" and "%clear out" (clear input and
207 added. Supported now are "%clear in" and "%clear out" (clear input and
205 output history, respectively). Also fixed CachedOutput.flush to
208 output history, respectively). Also fixed CachedOutput.flush to
206 properly flush the output cache.
209 properly flush the output cache.
207
210
208 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
211 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
209 half-success (and fail explicitly).
212 half-success (and fail explicitly).
210
213
211 2006-03-28 Ville Vainio <vivainio@gmail.com>
214 2006-03-28 Ville Vainio <vivainio@gmail.com>
212
215
213 * iplib.py: Fix quoting of aliases so that only argless ones
216 * iplib.py: Fix quoting of aliases so that only argless ones
214 are quoted
217 are quoted
215
218
216 2006-03-28 Ville Vainio <vivainio@gmail.com>
219 2006-03-28 Ville Vainio <vivainio@gmail.com>
217
220
218 * iplib.py: Quote aliases with spaces in the name.
221 * iplib.py: Quote aliases with spaces in the name.
219 "c:\program files\blah\bin" is now legal alias target.
222 "c:\program files\blah\bin" is now legal alias target.
220
223
221 * ext_rehashdir.py: Space no longer allowed as arg
224 * ext_rehashdir.py: Space no longer allowed as arg
222 separator, since space is legal in path names.
225 separator, since space is legal in path names.
223
226
224 2006-03-16 Ville Vainio <vivainio@gmail.com>
227 2006-03-16 Ville Vainio <vivainio@gmail.com>
225
228
226 * upgrade_dir.py: Take path.py from Extensions, correcting
229 * upgrade_dir.py: Take path.py from Extensions, correcting
227 %upgrade magic
230 %upgrade magic
228
231
229 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
232 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
230
233
231 * hooks.py: Only enclose editor binary in quotes if legal and
234 * hooks.py: Only enclose editor binary in quotes if legal and
232 necessary (space in the name, and is an existing file). Fixes a bug
235 necessary (space in the name, and is an existing file). Fixes a bug
233 reported by Zachary Pincus.
236 reported by Zachary Pincus.
234
237
235 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
238 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
236
239
237 * Manual: thanks to a tip on proper color handling for Emacs, by
240 * Manual: thanks to a tip on proper color handling for Emacs, by
238 Eric J Haywiser <ejh1-AT-MIT.EDU>.
241 Eric J Haywiser <ejh1-AT-MIT.EDU>.
239
242
240 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
243 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
241 by applying the provided patch. Thanks to Liu Jin
244 by applying the provided patch. Thanks to Liu Jin
242 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
245 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
243 XEmacs/Linux, I'm trusting the submitter that it actually helps
246 XEmacs/Linux, I'm trusting the submitter that it actually helps
244 under win32/GNU Emacs. Will revisit if any problems are reported.
247 under win32/GNU Emacs. Will revisit if any problems are reported.
245
248
246 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
249 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
247
250
248 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
251 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
249 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
252 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
250
253
251 2006-03-12 Ville Vainio <vivainio@gmail.com>
254 2006-03-12 Ville Vainio <vivainio@gmail.com>
252
255
253 * Magic.py (magic_timeit): Added %timeit magic, contributed by
256 * Magic.py (magic_timeit): Added %timeit magic, contributed by
254 Torsten Marek.
257 Torsten Marek.
255
258
256 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
259 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
257
260
258 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
261 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
259 line ranges works again.
262 line ranges works again.
260
263
261 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
264 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
262
265
263 * IPython/iplib.py (showtraceback): add back sys.last_traceback
266 * IPython/iplib.py (showtraceback): add back sys.last_traceback
264 and friends, after a discussion with Zach Pincus on ipython-user.
267 and friends, after a discussion with Zach Pincus on ipython-user.
265 I'm not 100% sure, but after thinking aobut it quite a bit, it may
268 I'm not 100% sure, but after thinking aobut it quite a bit, it may
266 be OK. Testing with the multithreaded shells didn't reveal any
269 be OK. Testing with the multithreaded shells didn't reveal any
267 problems, but let's keep an eye out.
270 problems, but let's keep an eye out.
268
271
269 In the process, I fixed a few things which were calling
272 In the process, I fixed a few things which were calling
270 self.InteractiveTB() directly (like safe_execfile), which is a
273 self.InteractiveTB() directly (like safe_execfile), which is a
271 mistake: ALL exception reporting should be done by calling
274 mistake: ALL exception reporting should be done by calling
272 self.showtraceback(), which handles state and tab-completion and
275 self.showtraceback(), which handles state and tab-completion and
273 more.
276 more.
274
277
275 2006-03-01 Ville Vainio <vivainio@gmail.com>
278 2006-03-01 Ville Vainio <vivainio@gmail.com>
276
279
277 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
280 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
278 To use, do "from ipipe import *".
281 To use, do "from ipipe import *".
279
282
280 2006-02-24 Ville Vainio <vivainio@gmail.com>
283 2006-02-24 Ville Vainio <vivainio@gmail.com>
281
284
282 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
285 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
283 "cleanly" and safely than the older upgrade mechanism.
286 "cleanly" and safely than the older upgrade mechanism.
284
287
285 2006-02-21 Ville Vainio <vivainio@gmail.com>
288 2006-02-21 Ville Vainio <vivainio@gmail.com>
286
289
287 * Magic.py: %save works again.
290 * Magic.py: %save works again.
288
291
289 2006-02-15 Ville Vainio <vivainio@gmail.com>
292 2006-02-15 Ville Vainio <vivainio@gmail.com>
290
293
291 * Magic.py: %Pprint works again
294 * Magic.py: %Pprint works again
292
295
293 * Extensions/ipy_sane_defaults.py: Provide everything provided
296 * Extensions/ipy_sane_defaults.py: Provide everything provided
294 in default ipythonrc, to make it possible to have a completely empty
297 in default ipythonrc, to make it possible to have a completely empty
295 ipythonrc (and thus completely rc-file free configuration)
298 ipythonrc (and thus completely rc-file free configuration)
296
299
297
300
298 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
301 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
299
302
300 * IPython/hooks.py (editor): quote the call to the editor command,
303 * IPython/hooks.py (editor): quote the call to the editor command,
301 to allow commands with spaces in them. Problem noted by watching
304 to allow commands with spaces in them. Problem noted by watching
302 Ian Oswald's video about textpad under win32 at
305 Ian Oswald's video about textpad under win32 at
303 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
306 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
304
307
305 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
308 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
306 describing magics (we haven't used @ for a loong time).
309 describing magics (we haven't used @ for a loong time).
307
310
308 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
311 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
309 contributed by marienz to close
312 contributed by marienz to close
310 http://www.scipy.net/roundup/ipython/issue53.
313 http://www.scipy.net/roundup/ipython/issue53.
311
314
312 2006-02-10 Ville Vainio <vivainio@gmail.com>
315 2006-02-10 Ville Vainio <vivainio@gmail.com>
313
316
314 * genutils.py: getoutput now works in win32 too
317 * genutils.py: getoutput now works in win32 too
315
318
316 * completer.py: alias and magic completion only invoked
319 * completer.py: alias and magic completion only invoked
317 at the first "item" in the line, to avoid "cd %store"
320 at the first "item" in the line, to avoid "cd %store"
318 nonsense.
321 nonsense.
319
322
320 2006-02-09 Ville Vainio <vivainio@gmail.com>
323 2006-02-09 Ville Vainio <vivainio@gmail.com>
321
324
322 * test/*: Added a unit testing framework (finally).
325 * test/*: Added a unit testing framework (finally).
323 '%run runtests.py' to run test_*.
326 '%run runtests.py' to run test_*.
324
327
325 * ipapi.py: Exposed runlines and set_custom_exc
328 * ipapi.py: Exposed runlines and set_custom_exc
326
329
327 2006-02-07 Ville Vainio <vivainio@gmail.com>
330 2006-02-07 Ville Vainio <vivainio@gmail.com>
328
331
329 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
332 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
330 instead use "f(1 2)" as before.
333 instead use "f(1 2)" as before.
331
334
332 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
335 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
333
336
334 * IPython/demo.py (IPythonDemo): Add new classes to the demo
337 * IPython/demo.py (IPythonDemo): Add new classes to the demo
335 facilities, for demos processed by the IPython input filter
338 facilities, for demos processed by the IPython input filter
336 (IPythonDemo), and for running a script one-line-at-a-time as a
339 (IPythonDemo), and for running a script one-line-at-a-time as a
337 demo, both for pure Python (LineDemo) and for IPython-processed
340 demo, both for pure Python (LineDemo) and for IPython-processed
338 input (IPythonLineDemo). After a request by Dave Kohel, from the
341 input (IPythonLineDemo). After a request by Dave Kohel, from the
339 SAGE team.
342 SAGE team.
340 (Demo.edit): added and edit() method to the demo objects, to edit
343 (Demo.edit): added and edit() method to the demo objects, to edit
341 the in-memory copy of the last executed block.
344 the in-memory copy of the last executed block.
342
345
343 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
346 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
344 processing to %edit, %macro and %save. These commands can now be
347 processing to %edit, %macro and %save. These commands can now be
345 invoked on the unprocessed input as it was typed by the user
348 invoked on the unprocessed input as it was typed by the user
346 (without any prefilters applied). After requests by the SAGE team
349 (without any prefilters applied). After requests by the SAGE team
347 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
350 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
348
351
349 2006-02-01 Ville Vainio <vivainio@gmail.com>
352 2006-02-01 Ville Vainio <vivainio@gmail.com>
350
353
351 * setup.py, eggsetup.py: easy_install ipython==dev works
354 * setup.py, eggsetup.py: easy_install ipython==dev works
352 correctly now (on Linux)
355 correctly now (on Linux)
353
356
354 * ipy_user_conf,ipmaker: user config changes, removed spurious
357 * ipy_user_conf,ipmaker: user config changes, removed spurious
355 warnings
358 warnings
356
359
357 * iplib: if rc.banner is string, use it as is.
360 * iplib: if rc.banner is string, use it as is.
358
361
359 * Magic: %pycat accepts a string argument and pages it's contents.
362 * Magic: %pycat accepts a string argument and pages it's contents.
360
363
361
364
362 2006-01-30 Ville Vainio <vivainio@gmail.com>
365 2006-01-30 Ville Vainio <vivainio@gmail.com>
363
366
364 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
367 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
365 Now %store and bookmarks work through PickleShare, meaning that
368 Now %store and bookmarks work through PickleShare, meaning that
366 concurrent access is possible and all ipython sessions see the
369 concurrent access is possible and all ipython sessions see the
367 same database situation all the time, instead of snapshot of
370 same database situation all the time, instead of snapshot of
368 the situation when the session was started. Hence, %bookmark
371 the situation when the session was started. Hence, %bookmark
369 results are immediately accessible from othes sessions. The database
372 results are immediately accessible from othes sessions. The database
370 is also available for use by user extensions. See:
373 is also available for use by user extensions. See:
371 http://www.python.org/pypi/pickleshare
374 http://www.python.org/pypi/pickleshare
372
375
373 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
376 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
374
377
375 * aliases can now be %store'd
378 * aliases can now be %store'd
376
379
377 * path.py move to Extensions so that pickleshare does not need
380 * path.py move to Extensions so that pickleshare does not need
378 IPython-specific import. Extensions added to pythonpath right
381 IPython-specific import. Extensions added to pythonpath right
379 at __init__.
382 at __init__.
380
383
381 * iplib.py: ipalias deprecated/redundant; aliases are converted and
384 * iplib.py: ipalias deprecated/redundant; aliases are converted and
382 called with _ip.system and the pre-transformed command string.
385 called with _ip.system and the pre-transformed command string.
383
386
384 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
387 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
385
388
386 * IPython/iplib.py (interact): Fix that we were not catching
389 * IPython/iplib.py (interact): Fix that we were not catching
387 KeyboardInterrupt exceptions properly. I'm not quite sure why the
390 KeyboardInterrupt exceptions properly. I'm not quite sure why the
388 logic here had to change, but it's fixed now.
391 logic here had to change, but it's fixed now.
389
392
390 2006-01-29 Ville Vainio <vivainio@gmail.com>
393 2006-01-29 Ville Vainio <vivainio@gmail.com>
391
394
392 * iplib.py: Try to import pyreadline on Windows.
395 * iplib.py: Try to import pyreadline on Windows.
393
396
394 2006-01-27 Ville Vainio <vivainio@gmail.com>
397 2006-01-27 Ville Vainio <vivainio@gmail.com>
395
398
396 * iplib.py: Expose ipapi as _ip in builtin namespace.
399 * iplib.py: Expose ipapi as _ip in builtin namespace.
397 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
400 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
398 and ip_set_hook (-> _ip.set_hook) redundant. % and !
401 and ip_set_hook (-> _ip.set_hook) redundant. % and !
399 syntax now produce _ip.* variant of the commands.
402 syntax now produce _ip.* variant of the commands.
400
403
401 * "_ip.options().autoedit_syntax = 2" automatically throws
404 * "_ip.options().autoedit_syntax = 2" automatically throws
402 user to editor for syntax error correction without prompting.
405 user to editor for syntax error correction without prompting.
403
406
404 2006-01-27 Ville Vainio <vivainio@gmail.com>
407 2006-01-27 Ville Vainio <vivainio@gmail.com>
405
408
406 * ipmaker.py: Give "realistic" sys.argv for scripts (without
409 * ipmaker.py: Give "realistic" sys.argv for scripts (without
407 'ipython' at argv[0]) executed through command line.
410 'ipython' at argv[0]) executed through command line.
408 NOTE: this DEPRECATES calling ipython with multiple scripts
411 NOTE: this DEPRECATES calling ipython with multiple scripts
409 ("ipython a.py b.py c.py")
412 ("ipython a.py b.py c.py")
410
413
411 * iplib.py, hooks.py: Added configurable input prefilter,
414 * iplib.py, hooks.py: Added configurable input prefilter,
412 named 'input_prefilter'. See ext_rescapture.py for example
415 named 'input_prefilter'. See ext_rescapture.py for example
413 usage.
416 usage.
414
417
415 * ext_rescapture.py, Magic.py: Better system command output capture
418 * ext_rescapture.py, Magic.py: Better system command output capture
416 through 'var = !ls' (deprecates user-visible %sc). Same notation
419 through 'var = !ls' (deprecates user-visible %sc). Same notation
417 applies for magics, 'var = %alias' assigns alias list to var.
420 applies for magics, 'var = %alias' assigns alias list to var.
418
421
419 * ipapi.py: added meta() for accessing extension-usable data store.
422 * ipapi.py: added meta() for accessing extension-usable data store.
420
423
421 * iplib.py: added InteractiveShell.getapi(). New magics should be
424 * iplib.py: added InteractiveShell.getapi(). New magics should be
422 written doing self.getapi() instead of using the shell directly.
425 written doing self.getapi() instead of using the shell directly.
423
426
424 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
427 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
425 %store foo >> ~/myfoo.txt to store variables to files (in clean
428 %store foo >> ~/myfoo.txt to store variables to files (in clean
426 textual form, not a restorable pickle).
429 textual form, not a restorable pickle).
427
430
428 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
431 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
429
432
430 * usage.py, Magic.py: added %quickref
433 * usage.py, Magic.py: added %quickref
431
434
432 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
435 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
433
436
434 * GetoptErrors when invoking magics etc. with wrong args
437 * GetoptErrors when invoking magics etc. with wrong args
435 are now more helpful:
438 are now more helpful:
436 GetoptError: option -l not recognized (allowed: "qb" )
439 GetoptError: option -l not recognized (allowed: "qb" )
437
440
438 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
441 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
439
442
440 * IPython/demo.py (Demo.show): Flush stdout after each block, so
443 * IPython/demo.py (Demo.show): Flush stdout after each block, so
441 computationally intensive blocks don't appear to stall the demo.
444 computationally intensive blocks don't appear to stall the demo.
442
445
443 2006-01-24 Ville Vainio <vivainio@gmail.com>
446 2006-01-24 Ville Vainio <vivainio@gmail.com>
444
447
445 * iplib.py, hooks.py: 'result_display' hook can return a non-None
448 * iplib.py, hooks.py: 'result_display' hook can return a non-None
446 value to manipulate resulting history entry.
449 value to manipulate resulting history entry.
447
450
448 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
451 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
449 to instance methods of IPApi class, to make extending an embedded
452 to instance methods of IPApi class, to make extending an embedded
450 IPython feasible. See ext_rehashdir.py for example usage.
453 IPython feasible. See ext_rehashdir.py for example usage.
451
454
452 * Merged 1071-1076 from banches/0.7.1
455 * Merged 1071-1076 from banches/0.7.1
453
456
454
457
455 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
458 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
456
459
457 * tools/release (daystamp): Fix build tools to use the new
460 * tools/release (daystamp): Fix build tools to use the new
458 eggsetup.py script to build lightweight eggs.
461 eggsetup.py script to build lightweight eggs.
459
462
460 * Applied changesets 1062 and 1064 before 0.7.1 release.
463 * Applied changesets 1062 and 1064 before 0.7.1 release.
461
464
462 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
465 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
463 see the raw input history (without conversions like %ls ->
466 see the raw input history (without conversions like %ls ->
464 ipmagic("ls")). After a request from W. Stein, SAGE
467 ipmagic("ls")). After a request from W. Stein, SAGE
465 (http://modular.ucsd.edu/sage) developer. This information is
468 (http://modular.ucsd.edu/sage) developer. This information is
466 stored in the input_hist_raw attribute of the IPython instance, so
469 stored in the input_hist_raw attribute of the IPython instance, so
467 developers can access it if needed (it's an InputList instance).
470 developers can access it if needed (it's an InputList instance).
468
471
469 * Versionstring = 0.7.2.svn
472 * Versionstring = 0.7.2.svn
470
473
471 * eggsetup.py: A separate script for constructing eggs, creates
474 * eggsetup.py: A separate script for constructing eggs, creates
472 proper launch scripts even on Windows (an .exe file in
475 proper launch scripts even on Windows (an .exe file in
473 \python24\scripts).
476 \python24\scripts).
474
477
475 * ipapi.py: launch_new_instance, launch entry point needed for the
478 * ipapi.py: launch_new_instance, launch entry point needed for the
476 egg.
479 egg.
477
480
478 2006-01-23 Ville Vainio <vivainio@gmail.com>
481 2006-01-23 Ville Vainio <vivainio@gmail.com>
479
482
480 * Added %cpaste magic for pasting python code
483 * Added %cpaste magic for pasting python code
481
484
482 2006-01-22 Ville Vainio <vivainio@gmail.com>
485 2006-01-22 Ville Vainio <vivainio@gmail.com>
483
486
484 * Merge from branches/0.7.1 into trunk, revs 1052-1057
487 * Merge from branches/0.7.1 into trunk, revs 1052-1057
485
488
486 * Versionstring = 0.7.2.svn
489 * Versionstring = 0.7.2.svn
487
490
488 * eggsetup.py: A separate script for constructing eggs, creates
491 * eggsetup.py: A separate script for constructing eggs, creates
489 proper launch scripts even on Windows (an .exe file in
492 proper launch scripts even on Windows (an .exe file in
490 \python24\scripts).
493 \python24\scripts).
491
494
492 * ipapi.py: launch_new_instance, launch entry point needed for the
495 * ipapi.py: launch_new_instance, launch entry point needed for the
493 egg.
496 egg.
494
497
495 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
498 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
496
499
497 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
500 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
498 %pfile foo would print the file for foo even if it was a binary.
501 %pfile foo would print the file for foo even if it was a binary.
499 Now, extensions '.so' and '.dll' are skipped.
502 Now, extensions '.so' and '.dll' are skipped.
500
503
501 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
504 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
502 bug, where macros would fail in all threaded modes. I'm not 100%
505 bug, where macros would fail in all threaded modes. I'm not 100%
503 sure, so I'm going to put out an rc instead of making a release
506 sure, so I'm going to put out an rc instead of making a release
504 today, and wait for feedback for at least a few days.
507 today, and wait for feedback for at least a few days.
505
508
506 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
509 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
507 it...) the handling of pasting external code with autoindent on.
510 it...) the handling of pasting external code with autoindent on.
508 To get out of a multiline input, the rule will appear for most
511 To get out of a multiline input, the rule will appear for most
509 users unchanged: two blank lines or change the indent level
512 users unchanged: two blank lines or change the indent level
510 proposed by IPython. But there is a twist now: you can
513 proposed by IPython. But there is a twist now: you can
511 add/subtract only *one or two spaces*. If you add/subtract three
514 add/subtract only *one or two spaces*. If you add/subtract three
512 or more (unless you completely delete the line), IPython will
515 or more (unless you completely delete the line), IPython will
513 accept that line, and you'll need to enter a second one of pure
516 accept that line, and you'll need to enter a second one of pure
514 whitespace. I know it sounds complicated, but I can't find a
517 whitespace. I know it sounds complicated, but I can't find a
515 different solution that covers all the cases, with the right
518 different solution that covers all the cases, with the right
516 heuristics. Hopefully in actual use, nobody will really notice
519 heuristics. Hopefully in actual use, nobody will really notice
517 all these strange rules and things will 'just work'.
520 all these strange rules and things will 'just work'.
518
521
519 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
522 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
520
523
521 * IPython/iplib.py (interact): catch exceptions which can be
524 * IPython/iplib.py (interact): catch exceptions which can be
522 triggered asynchronously by signal handlers. Thanks to an
525 triggered asynchronously by signal handlers. Thanks to an
523 automatic crash report, submitted by Colin Kingsley
526 automatic crash report, submitted by Colin Kingsley
524 <tercel-AT-gentoo.org>.
527 <tercel-AT-gentoo.org>.
525
528
526 2006-01-20 Ville Vainio <vivainio@gmail.com>
529 2006-01-20 Ville Vainio <vivainio@gmail.com>
527
530
528 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
531 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
529 (%rehashdir, very useful, try it out) of how to extend ipython
532 (%rehashdir, very useful, try it out) of how to extend ipython
530 with new magics. Also added Extensions dir to pythonpath to make
533 with new magics. Also added Extensions dir to pythonpath to make
531 importing extensions easy.
534 importing extensions easy.
532
535
533 * %store now complains when trying to store interactively declared
536 * %store now complains when trying to store interactively declared
534 classes / instances of those classes.
537 classes / instances of those classes.
535
538
536 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
539 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
537 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
540 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
538 if they exist, and ipy_user_conf.py with some defaults is created for
541 if they exist, and ipy_user_conf.py with some defaults is created for
539 the user.
542 the user.
540
543
541 * Startup rehashing done by the config file, not InterpreterExec.
544 * Startup rehashing done by the config file, not InterpreterExec.
542 This means system commands are available even without selecting the
545 This means system commands are available even without selecting the
543 pysh profile. It's the sensible default after all.
546 pysh profile. It's the sensible default after all.
544
547
545 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
548 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
546
549
547 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
550 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
548 multiline code with autoindent on working. But I am really not
551 multiline code with autoindent on working. But I am really not
549 sure, so this needs more testing. Will commit a debug-enabled
552 sure, so this needs more testing. Will commit a debug-enabled
550 version for now, while I test it some more, so that Ville and
553 version for now, while I test it some more, so that Ville and
551 others may also catch any problems. Also made
554 others may also catch any problems. Also made
552 self.indent_current_str() a method, to ensure that there's no
555 self.indent_current_str() a method, to ensure that there's no
553 chance of the indent space count and the corresponding string
556 chance of the indent space count and the corresponding string
554 falling out of sync. All code needing the string should just call
557 falling out of sync. All code needing the string should just call
555 the method.
558 the method.
556
559
557 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
560 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
558
561
559 * IPython/Magic.py (magic_edit): fix check for when users don't
562 * IPython/Magic.py (magic_edit): fix check for when users don't
560 save their output files, the try/except was in the wrong section.
563 save their output files, the try/except was in the wrong section.
561
564
562 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
565 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
563
566
564 * IPython/Magic.py (magic_run): fix __file__ global missing from
567 * IPython/Magic.py (magic_run): fix __file__ global missing from
565 script's namespace when executed via %run. After a report by
568 script's namespace when executed via %run. After a report by
566 Vivian.
569 Vivian.
567
570
568 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
571 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
569 when using python 2.4. The parent constructor changed in 2.4, and
572 when using python 2.4. The parent constructor changed in 2.4, and
570 we need to track it directly (we can't call it, as it messes up
573 we need to track it directly (we can't call it, as it messes up
571 readline and tab-completion inside our pdb would stop working).
574 readline and tab-completion inside our pdb would stop working).
572 After a bug report by R. Bernstein <rocky-AT-panix.com>.
575 After a bug report by R. Bernstein <rocky-AT-panix.com>.
573
576
574 2006-01-16 Ville Vainio <vivainio@gmail.com>
577 2006-01-16 Ville Vainio <vivainio@gmail.com>
575
578
576 * Ipython/magic.py:Reverted back to old %edit functionality
579 * Ipython/magic.py:Reverted back to old %edit functionality
577 that returns file contents on exit.
580 that returns file contents on exit.
578
581
579 * IPython/path.py: Added Jason Orendorff's "path" module to
582 * IPython/path.py: Added Jason Orendorff's "path" module to
580 IPython tree, http://www.jorendorff.com/articles/python/path/.
583 IPython tree, http://www.jorendorff.com/articles/python/path/.
581 You can get path objects conveniently through %sc, and !!, e.g.:
584 You can get path objects conveniently through %sc, and !!, e.g.:
582 sc files=ls
585 sc files=ls
583 for p in files.paths: # or files.p
586 for p in files.paths: # or files.p
584 print p,p.mtime
587 print p,p.mtime
585
588
586 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
589 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
587 now work again without considering the exclusion regexp -
590 now work again without considering the exclusion regexp -
588 hence, things like ',foo my/path' turn to 'foo("my/path")'
591 hence, things like ',foo my/path' turn to 'foo("my/path")'
589 instead of syntax error.
592 instead of syntax error.
590
593
591
594
592 2006-01-14 Ville Vainio <vivainio@gmail.com>
595 2006-01-14 Ville Vainio <vivainio@gmail.com>
593
596
594 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
597 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
595 ipapi decorators for python 2.4 users, options() provides access to rc
598 ipapi decorators for python 2.4 users, options() provides access to rc
596 data.
599 data.
597
600
598 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
601 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
599 as path separators (even on Linux ;-). Space character after
602 as path separators (even on Linux ;-). Space character after
600 backslash (as yielded by tab completer) is still space;
603 backslash (as yielded by tab completer) is still space;
601 "%cd long\ name" works as expected.
604 "%cd long\ name" works as expected.
602
605
603 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
606 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
604 as "chain of command", with priority. API stays the same,
607 as "chain of command", with priority. API stays the same,
605 TryNext exception raised by a hook function signals that
608 TryNext exception raised by a hook function signals that
606 current hook failed and next hook should try handling it, as
609 current hook failed and next hook should try handling it, as
607 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
610 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
608 requested configurable display hook, which is now implemented.
611 requested configurable display hook, which is now implemented.
609
612
610 2006-01-13 Ville Vainio <vivainio@gmail.com>
613 2006-01-13 Ville Vainio <vivainio@gmail.com>
611
614
612 * IPython/platutils*.py: platform specific utility functions,
615 * IPython/platutils*.py: platform specific utility functions,
613 so far only set_term_title is implemented (change terminal
616 so far only set_term_title is implemented (change terminal
614 label in windowing systems). %cd now changes the title to
617 label in windowing systems). %cd now changes the title to
615 current dir.
618 current dir.
616
619
617 * IPython/Release.py: Added myself to "authors" list,
620 * IPython/Release.py: Added myself to "authors" list,
618 had to create new files.
621 had to create new files.
619
622
620 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
623 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
621 shell escape; not a known bug but had potential to be one in the
624 shell escape; not a known bug but had potential to be one in the
622 future.
625 future.
623
626
624 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
627 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
625 extension API for IPython! See the module for usage example. Fix
628 extension API for IPython! See the module for usage example. Fix
626 OInspect for docstring-less magic functions.
629 OInspect for docstring-less magic functions.
627
630
628
631
629 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
632 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
630
633
631 * IPython/iplib.py (raw_input): temporarily deactivate all
634 * IPython/iplib.py (raw_input): temporarily deactivate all
632 attempts at allowing pasting of code with autoindent on. It
635 attempts at allowing pasting of code with autoindent on. It
633 introduced bugs (reported by Prabhu) and I can't seem to find a
636 introduced bugs (reported by Prabhu) and I can't seem to find a
634 robust combination which works in all cases. Will have to revisit
637 robust combination which works in all cases. Will have to revisit
635 later.
638 later.
636
639
637 * IPython/genutils.py: remove isspace() function. We've dropped
640 * IPython/genutils.py: remove isspace() function. We've dropped
638 2.2 compatibility, so it's OK to use the string method.
641 2.2 compatibility, so it's OK to use the string method.
639
642
640 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
643 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
641
644
642 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
645 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
643 matching what NOT to autocall on, to include all python binary
646 matching what NOT to autocall on, to include all python binary
644 operators (including things like 'and', 'or', 'is' and 'in').
647 operators (including things like 'and', 'or', 'is' and 'in').
645 Prompted by a bug report on 'foo & bar', but I realized we had
648 Prompted by a bug report on 'foo & bar', but I realized we had
646 many more potential bug cases with other operators. The regexp is
649 many more potential bug cases with other operators. The regexp is
647 self.re_exclude_auto, it's fairly commented.
650 self.re_exclude_auto, it's fairly commented.
648
651
649 2006-01-12 Ville Vainio <vivainio@gmail.com>
652 2006-01-12 Ville Vainio <vivainio@gmail.com>
650
653
651 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
654 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
652 Prettified and hardened string/backslash quoting with ipsystem(),
655 Prettified and hardened string/backslash quoting with ipsystem(),
653 ipalias() and ipmagic(). Now even \ characters are passed to
656 ipalias() and ipmagic(). Now even \ characters are passed to
654 %magics, !shell escapes and aliases exactly as they are in the
657 %magics, !shell escapes and aliases exactly as they are in the
655 ipython command line. Should improve backslash experience,
658 ipython command line. Should improve backslash experience,
656 particularly in Windows (path delimiter for some commands that
659 particularly in Windows (path delimiter for some commands that
657 won't understand '/'), but Unix benefits as well (regexps). %cd
660 won't understand '/'), but Unix benefits as well (regexps). %cd
658 magic still doesn't support backslash path delimiters, though. Also
661 magic still doesn't support backslash path delimiters, though. Also
659 deleted all pretense of supporting multiline command strings in
662 deleted all pretense of supporting multiline command strings in
660 !system or %magic commands. Thanks to Jerry McRae for suggestions.
663 !system or %magic commands. Thanks to Jerry McRae for suggestions.
661
664
662 * doc/build_doc_instructions.txt added. Documentation on how to
665 * doc/build_doc_instructions.txt added. Documentation on how to
663 use doc/update_manual.py, added yesterday. Both files contributed
666 use doc/update_manual.py, added yesterday. Both files contributed
664 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
667 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
665 doc/*.sh for deprecation at a later date.
668 doc/*.sh for deprecation at a later date.
666
669
667 * /ipython.py Added ipython.py to root directory for
670 * /ipython.py Added ipython.py to root directory for
668 zero-installation (tar xzvf ipython.tgz; cd ipython; python
671 zero-installation (tar xzvf ipython.tgz; cd ipython; python
669 ipython.py) and development convenience (no need to kee doing
672 ipython.py) and development convenience (no need to kee doing
670 "setup.py install" between changes).
673 "setup.py install" between changes).
671
674
672 * Made ! and !! shell escapes work (again) in multiline expressions:
675 * Made ! and !! shell escapes work (again) in multiline expressions:
673 if 1:
676 if 1:
674 !ls
677 !ls
675 !!ls
678 !!ls
676
679
677 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
680 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
678
681
679 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
682 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
680 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
683 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
681 module in case-insensitive installation. Was causing crashes
684 module in case-insensitive installation. Was causing crashes
682 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
685 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
683
686
684 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
687 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
685 <marienz-AT-gentoo.org>, closes
688 <marienz-AT-gentoo.org>, closes
686 http://www.scipy.net/roundup/ipython/issue51.
689 http://www.scipy.net/roundup/ipython/issue51.
687
690
688 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
691 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
689
692
690 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
693 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
691 problem of excessive CPU usage under *nix and keyboard lag under
694 problem of excessive CPU usage under *nix and keyboard lag under
692 win32.
695 win32.
693
696
694 2006-01-10 *** Released version 0.7.0
697 2006-01-10 *** Released version 0.7.0
695
698
696 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
699 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
697
700
698 * IPython/Release.py (revision): tag version number to 0.7.0,
701 * IPython/Release.py (revision): tag version number to 0.7.0,
699 ready for release.
702 ready for release.
700
703
701 * IPython/Magic.py (magic_edit): Add print statement to %edit so
704 * IPython/Magic.py (magic_edit): Add print statement to %edit so
702 it informs the user of the name of the temp. file used. This can
705 it informs the user of the name of the temp. file used. This can
703 help if you decide later to reuse that same file, so you know
706 help if you decide later to reuse that same file, so you know
704 where to copy the info from.
707 where to copy the info from.
705
708
706 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
709 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
707
710
708 * setup_bdist_egg.py: little script to build an egg. Added
711 * setup_bdist_egg.py: little script to build an egg. Added
709 support in the release tools as well.
712 support in the release tools as well.
710
713
711 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
714 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
712
715
713 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
716 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
714 version selection (new -wxversion command line and ipythonrc
717 version selection (new -wxversion command line and ipythonrc
715 parameter). Patch contributed by Arnd Baecker
718 parameter). Patch contributed by Arnd Baecker
716 <arnd.baecker-AT-web.de>.
719 <arnd.baecker-AT-web.de>.
717
720
718 * IPython/iplib.py (embed_mainloop): fix tab-completion in
721 * IPython/iplib.py (embed_mainloop): fix tab-completion in
719 embedded instances, for variables defined at the interactive
722 embedded instances, for variables defined at the interactive
720 prompt of the embedded ipython. Reported by Arnd.
723 prompt of the embedded ipython. Reported by Arnd.
721
724
722 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
725 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
723 it can be used as a (stateful) toggle, or with a direct parameter.
726 it can be used as a (stateful) toggle, or with a direct parameter.
724
727
725 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
728 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
726 could be triggered in certain cases and cause the traceback
729 could be triggered in certain cases and cause the traceback
727 printer not to work.
730 printer not to work.
728
731
729 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
732 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
730
733
731 * IPython/iplib.py (_should_recompile): Small fix, closes
734 * IPython/iplib.py (_should_recompile): Small fix, closes
732 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
735 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
733
736
734 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
737 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
735
738
736 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
739 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
737 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
740 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
738 Moad for help with tracking it down.
741 Moad for help with tracking it down.
739
742
740 * IPython/iplib.py (handle_auto): fix autocall handling for
743 * IPython/iplib.py (handle_auto): fix autocall handling for
741 objects which support BOTH __getitem__ and __call__ (so that f [x]
744 objects which support BOTH __getitem__ and __call__ (so that f [x]
742 is left alone, instead of becoming f([x]) automatically).
745 is left alone, instead of becoming f([x]) automatically).
743
746
744 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
747 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
745 Ville's patch.
748 Ville's patch.
746
749
747 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
750 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
748
751
749 * IPython/iplib.py (handle_auto): changed autocall semantics to
752 * IPython/iplib.py (handle_auto): changed autocall semantics to
750 include 'smart' mode, where the autocall transformation is NOT
753 include 'smart' mode, where the autocall transformation is NOT
751 applied if there are no arguments on the line. This allows you to
754 applied if there are no arguments on the line. This allows you to
752 just type 'foo' if foo is a callable to see its internal form,
755 just type 'foo' if foo is a callable to see its internal form,
753 instead of having it called with no arguments (typically a
756 instead of having it called with no arguments (typically a
754 mistake). The old 'full' autocall still exists: for that, you
757 mistake). The old 'full' autocall still exists: for that, you
755 need to set the 'autocall' parameter to 2 in your ipythonrc file.
758 need to set the 'autocall' parameter to 2 in your ipythonrc file.
756
759
757 * IPython/completer.py (Completer.attr_matches): add
760 * IPython/completer.py (Completer.attr_matches): add
758 tab-completion support for Enthoughts' traits. After a report by
761 tab-completion support for Enthoughts' traits. After a report by
759 Arnd and a patch by Prabhu.
762 Arnd and a patch by Prabhu.
760
763
761 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
764 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
762
765
763 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
766 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
764 Schmolck's patch to fix inspect.getinnerframes().
767 Schmolck's patch to fix inspect.getinnerframes().
765
768
766 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
769 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
767 for embedded instances, regarding handling of namespaces and items
770 for embedded instances, regarding handling of namespaces and items
768 added to the __builtin__ one. Multiple embedded instances and
771 added to the __builtin__ one. Multiple embedded instances and
769 recursive embeddings should work better now (though I'm not sure
772 recursive embeddings should work better now (though I'm not sure
770 I've got all the corner cases fixed, that code is a bit of a brain
773 I've got all the corner cases fixed, that code is a bit of a brain
771 twister).
774 twister).
772
775
773 * IPython/Magic.py (magic_edit): added support to edit in-memory
776 * IPython/Magic.py (magic_edit): added support to edit in-memory
774 macros (automatically creates the necessary temp files). %edit
777 macros (automatically creates the necessary temp files). %edit
775 also doesn't return the file contents anymore, it's just noise.
778 also doesn't return the file contents anymore, it's just noise.
776
779
777 * IPython/completer.py (Completer.attr_matches): revert change to
780 * IPython/completer.py (Completer.attr_matches): revert change to
778 complete only on attributes listed in __all__. I realized it
781 complete only on attributes listed in __all__. I realized it
779 cripples the tab-completion system as a tool for exploring the
782 cripples the tab-completion system as a tool for exploring the
780 internals of unknown libraries (it renders any non-__all__
783 internals of unknown libraries (it renders any non-__all__
781 attribute off-limits). I got bit by this when trying to see
784 attribute off-limits). I got bit by this when trying to see
782 something inside the dis module.
785 something inside the dis module.
783
786
784 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
787 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
785
788
786 * IPython/iplib.py (InteractiveShell.__init__): add .meta
789 * IPython/iplib.py (InteractiveShell.__init__): add .meta
787 namespace for users and extension writers to hold data in. This
790 namespace for users and extension writers to hold data in. This
788 follows the discussion in
791 follows the discussion in
789 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
792 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
790
793
791 * IPython/completer.py (IPCompleter.complete): small patch to help
794 * IPython/completer.py (IPCompleter.complete): small patch to help
792 tab-completion under Emacs, after a suggestion by John Barnard
795 tab-completion under Emacs, after a suggestion by John Barnard
793 <barnarj-AT-ccf.org>.
796 <barnarj-AT-ccf.org>.
794
797
795 * IPython/Magic.py (Magic.extract_input_slices): added support for
798 * IPython/Magic.py (Magic.extract_input_slices): added support for
796 the slice notation in magics to use N-M to represent numbers N...M
799 the slice notation in magics to use N-M to represent numbers N...M
797 (closed endpoints). This is used by %macro and %save.
800 (closed endpoints). This is used by %macro and %save.
798
801
799 * IPython/completer.py (Completer.attr_matches): for modules which
802 * IPython/completer.py (Completer.attr_matches): for modules which
800 define __all__, complete only on those. After a patch by Jeffrey
803 define __all__, complete only on those. After a patch by Jeffrey
801 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
804 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
802 speed up this routine.
805 speed up this routine.
803
806
804 * IPython/Logger.py (Logger.log): fix a history handling bug. I
807 * IPython/Logger.py (Logger.log): fix a history handling bug. I
805 don't know if this is the end of it, but the behavior now is
808 don't know if this is the end of it, but the behavior now is
806 certainly much more correct. Note that coupled with macros,
809 certainly much more correct. Note that coupled with macros,
807 slightly surprising (at first) behavior may occur: a macro will in
810 slightly surprising (at first) behavior may occur: a macro will in
808 general expand to multiple lines of input, so upon exiting, the
811 general expand to multiple lines of input, so upon exiting, the
809 in/out counters will both be bumped by the corresponding amount
812 in/out counters will both be bumped by the corresponding amount
810 (as if the macro's contents had been typed interactively). Typing
813 (as if the macro's contents had been typed interactively). Typing
811 %hist will reveal the intermediate (silently processed) lines.
814 %hist will reveal the intermediate (silently processed) lines.
812
815
813 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
816 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
814 pickle to fail (%run was overwriting __main__ and not restoring
817 pickle to fail (%run was overwriting __main__ and not restoring
815 it, but pickle relies on __main__ to operate).
818 it, but pickle relies on __main__ to operate).
816
819
817 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
820 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
818 using properties, but forgot to make the main InteractiveShell
821 using properties, but forgot to make the main InteractiveShell
819 class a new-style class. Properties fail silently, and
822 class a new-style class. Properties fail silently, and
820 misteriously, with old-style class (getters work, but
823 misteriously, with old-style class (getters work, but
821 setters don't do anything).
824 setters don't do anything).
822
825
823 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
826 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
824
827
825 * IPython/Magic.py (magic_history): fix history reporting bug (I
828 * IPython/Magic.py (magic_history): fix history reporting bug (I
826 know some nasties are still there, I just can't seem to find a
829 know some nasties are still there, I just can't seem to find a
827 reproducible test case to track them down; the input history is
830 reproducible test case to track them down; the input history is
828 falling out of sync...)
831 falling out of sync...)
829
832
830 * IPython/iplib.py (handle_shell_escape): fix bug where both
833 * IPython/iplib.py (handle_shell_escape): fix bug where both
831 aliases and system accesses where broken for indented code (such
834 aliases and system accesses where broken for indented code (such
832 as loops).
835 as loops).
833
836
834 * IPython/genutils.py (shell): fix small but critical bug for
837 * IPython/genutils.py (shell): fix small but critical bug for
835 win32 system access.
838 win32 system access.
836
839
837 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
840 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
838
841
839 * IPython/iplib.py (showtraceback): remove use of the
842 * IPython/iplib.py (showtraceback): remove use of the
840 sys.last_{type/value/traceback} structures, which are non
843 sys.last_{type/value/traceback} structures, which are non
841 thread-safe.
844 thread-safe.
842 (_prefilter): change control flow to ensure that we NEVER
845 (_prefilter): change control flow to ensure that we NEVER
843 introspect objects when autocall is off. This will guarantee that
846 introspect objects when autocall is off. This will guarantee that
844 having an input line of the form 'x.y', where access to attribute
847 having an input line of the form 'x.y', where access to attribute
845 'y' has side effects, doesn't trigger the side effect TWICE. It
848 'y' has side effects, doesn't trigger the side effect TWICE. It
846 is important to note that, with autocall on, these side effects
849 is important to note that, with autocall on, these side effects
847 can still happen.
850 can still happen.
848 (ipsystem): new builtin, to complete the ip{magic/alias/system}
851 (ipsystem): new builtin, to complete the ip{magic/alias/system}
849 trio. IPython offers these three kinds of special calls which are
852 trio. IPython offers these three kinds of special calls which are
850 not python code, and it's a good thing to have their call method
853 not python code, and it's a good thing to have their call method
851 be accessible as pure python functions (not just special syntax at
854 be accessible as pure python functions (not just special syntax at
852 the command line). It gives us a better internal implementation
855 the command line). It gives us a better internal implementation
853 structure, as well as exposing these for user scripting more
856 structure, as well as exposing these for user scripting more
854 cleanly.
857 cleanly.
855
858
856 * IPython/macro.py (Macro.__init__): moved macros to a standalone
859 * IPython/macro.py (Macro.__init__): moved macros to a standalone
857 file. Now that they'll be more likely to be used with the
860 file. Now that they'll be more likely to be used with the
858 persistance system (%store), I want to make sure their module path
861 persistance system (%store), I want to make sure their module path
859 doesn't change in the future, so that we don't break things for
862 doesn't change in the future, so that we don't break things for
860 users' persisted data.
863 users' persisted data.
861
864
862 * IPython/iplib.py (autoindent_update): move indentation
865 * IPython/iplib.py (autoindent_update): move indentation
863 management into the _text_ processing loop, not the keyboard
866 management into the _text_ processing loop, not the keyboard
864 interactive one. This is necessary to correctly process non-typed
867 interactive one. This is necessary to correctly process non-typed
865 multiline input (such as macros).
868 multiline input (such as macros).
866
869
867 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
870 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
868 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
871 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
869 which was producing problems in the resulting manual.
872 which was producing problems in the resulting manual.
870 (magic_whos): improve reporting of instances (show their class,
873 (magic_whos): improve reporting of instances (show their class,
871 instead of simply printing 'instance' which isn't terribly
874 instead of simply printing 'instance' which isn't terribly
872 informative).
875 informative).
873
876
874 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
877 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
875 (minor mods) to support network shares under win32.
878 (minor mods) to support network shares under win32.
876
879
877 * IPython/winconsole.py (get_console_size): add new winconsole
880 * IPython/winconsole.py (get_console_size): add new winconsole
878 module and fixes to page_dumb() to improve its behavior under
881 module and fixes to page_dumb() to improve its behavior under
879 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
882 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
880
883
881 * IPython/Magic.py (Macro): simplified Macro class to just
884 * IPython/Magic.py (Macro): simplified Macro class to just
882 subclass list. We've had only 2.2 compatibility for a very long
885 subclass list. We've had only 2.2 compatibility for a very long
883 time, yet I was still avoiding subclassing the builtin types. No
886 time, yet I was still avoiding subclassing the builtin types. No
884 more (I'm also starting to use properties, though I won't shift to
887 more (I'm also starting to use properties, though I won't shift to
885 2.3-specific features quite yet).
888 2.3-specific features quite yet).
886 (magic_store): added Ville's patch for lightweight variable
889 (magic_store): added Ville's patch for lightweight variable
887 persistence, after a request on the user list by Matt Wilkie
890 persistence, after a request on the user list by Matt Wilkie
888 <maphew-AT-gmail.com>. The new %store magic's docstring has full
891 <maphew-AT-gmail.com>. The new %store magic's docstring has full
889 details.
892 details.
890
893
891 * IPython/iplib.py (InteractiveShell.post_config_initialization):
894 * IPython/iplib.py (InteractiveShell.post_config_initialization):
892 changed the default logfile name from 'ipython.log' to
895 changed the default logfile name from 'ipython.log' to
893 'ipython_log.py'. These logs are real python files, and now that
896 'ipython_log.py'. These logs are real python files, and now that
894 we have much better multiline support, people are more likely to
897 we have much better multiline support, people are more likely to
895 want to use them as such. Might as well name them correctly.
898 want to use them as such. Might as well name them correctly.
896
899
897 * IPython/Magic.py: substantial cleanup. While we can't stop
900 * IPython/Magic.py: substantial cleanup. While we can't stop
898 using magics as mixins, due to the existing customizations 'out
901 using magics as mixins, due to the existing customizations 'out
899 there' which rely on the mixin naming conventions, at least I
902 there' which rely on the mixin naming conventions, at least I
900 cleaned out all cross-class name usage. So once we are OK with
903 cleaned out all cross-class name usage. So once we are OK with
901 breaking compatibility, the two systems can be separated.
904 breaking compatibility, the two systems can be separated.
902
905
903 * IPython/Logger.py: major cleanup. This one is NOT a mixin
906 * IPython/Logger.py: major cleanup. This one is NOT a mixin
904 anymore, and the class is a fair bit less hideous as well. New
907 anymore, and the class is a fair bit less hideous as well. New
905 features were also introduced: timestamping of input, and logging
908 features were also introduced: timestamping of input, and logging
906 of output results. These are user-visible with the -t and -o
909 of output results. These are user-visible with the -t and -o
907 options to %logstart. Closes
910 options to %logstart. Closes
908 http://www.scipy.net/roundup/ipython/issue11 and a request by
911 http://www.scipy.net/roundup/ipython/issue11 and a request by
909 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
912 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
910
913
911 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
914 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
912
915
913 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
916 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
914 better hadnle backslashes in paths. See the thread 'More Windows
917 better hadnle backslashes in paths. See the thread 'More Windows
915 questions part 2 - \/ characters revisited' on the iypthon user
918 questions part 2 - \/ characters revisited' on the iypthon user
916 list:
919 list:
917 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
920 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
918
921
919 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
922 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
920
923
921 (InteractiveShell.__init__): change threaded shells to not use the
924 (InteractiveShell.__init__): change threaded shells to not use the
922 ipython crash handler. This was causing more problems than not,
925 ipython crash handler. This was causing more problems than not,
923 as exceptions in the main thread (GUI code, typically) would
926 as exceptions in the main thread (GUI code, typically) would
924 always show up as a 'crash', when they really weren't.
927 always show up as a 'crash', when they really weren't.
925
928
926 The colors and exception mode commands (%colors/%xmode) have been
929 The colors and exception mode commands (%colors/%xmode) have been
927 synchronized to also take this into account, so users can get
930 synchronized to also take this into account, so users can get
928 verbose exceptions for their threaded code as well. I also added
931 verbose exceptions for their threaded code as well. I also added
929 support for activating pdb inside this exception handler as well,
932 support for activating pdb inside this exception handler as well,
930 so now GUI authors can use IPython's enhanced pdb at runtime.
933 so now GUI authors can use IPython's enhanced pdb at runtime.
931
934
932 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
935 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
933 true by default, and add it to the shipped ipythonrc file. Since
936 true by default, and add it to the shipped ipythonrc file. Since
934 this asks the user before proceeding, I think it's OK to make it
937 this asks the user before proceeding, I think it's OK to make it
935 true by default.
938 true by default.
936
939
937 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
940 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
938 of the previous special-casing of input in the eval loop. I think
941 of the previous special-casing of input in the eval loop. I think
939 this is cleaner, as they really are commands and shouldn't have
942 this is cleaner, as they really are commands and shouldn't have
940 a special role in the middle of the core code.
943 a special role in the middle of the core code.
941
944
942 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
945 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
943
946
944 * IPython/iplib.py (edit_syntax_error): added support for
947 * IPython/iplib.py (edit_syntax_error): added support for
945 automatically reopening the editor if the file had a syntax error
948 automatically reopening the editor if the file had a syntax error
946 in it. Thanks to scottt who provided the patch at:
949 in it. Thanks to scottt who provided the patch at:
947 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
950 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
948 version committed).
951 version committed).
949
952
950 * IPython/iplib.py (handle_normal): add suport for multi-line
953 * IPython/iplib.py (handle_normal): add suport for multi-line
951 input with emtpy lines. This fixes
954 input with emtpy lines. This fixes
952 http://www.scipy.net/roundup/ipython/issue43 and a similar
955 http://www.scipy.net/roundup/ipython/issue43 and a similar
953 discussion on the user list.
956 discussion on the user list.
954
957
955 WARNING: a behavior change is necessarily introduced to support
958 WARNING: a behavior change is necessarily introduced to support
956 blank lines: now a single blank line with whitespace does NOT
959 blank lines: now a single blank line with whitespace does NOT
957 break the input loop, which means that when autoindent is on, by
960 break the input loop, which means that when autoindent is on, by
958 default hitting return on the next (indented) line does NOT exit.
961 default hitting return on the next (indented) line does NOT exit.
959
962
960 Instead, to exit a multiline input you can either have:
963 Instead, to exit a multiline input you can either have:
961
964
962 - TWO whitespace lines (just hit return again), or
965 - TWO whitespace lines (just hit return again), or
963 - a single whitespace line of a different length than provided
966 - a single whitespace line of a different length than provided
964 by the autoindent (add or remove a space).
967 by the autoindent (add or remove a space).
965
968
966 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
969 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
967 module to better organize all readline-related functionality.
970 module to better organize all readline-related functionality.
968 I've deleted FlexCompleter and put all completion clases here.
971 I've deleted FlexCompleter and put all completion clases here.
969
972
970 * IPython/iplib.py (raw_input): improve indentation management.
973 * IPython/iplib.py (raw_input): improve indentation management.
971 It is now possible to paste indented code with autoindent on, and
974 It is now possible to paste indented code with autoindent on, and
972 the code is interpreted correctly (though it still looks bad on
975 the code is interpreted correctly (though it still looks bad on
973 screen, due to the line-oriented nature of ipython).
976 screen, due to the line-oriented nature of ipython).
974 (MagicCompleter.complete): change behavior so that a TAB key on an
977 (MagicCompleter.complete): change behavior so that a TAB key on an
975 otherwise empty line actually inserts a tab, instead of completing
978 otherwise empty line actually inserts a tab, instead of completing
976 on the entire global namespace. This makes it easier to use the
979 on the entire global namespace. This makes it easier to use the
977 TAB key for indentation. After a request by Hans Meine
980 TAB key for indentation. After a request by Hans Meine
978 <hans_meine-AT-gmx.net>
981 <hans_meine-AT-gmx.net>
979 (_prefilter): add support so that typing plain 'exit' or 'quit'
982 (_prefilter): add support so that typing plain 'exit' or 'quit'
980 does a sensible thing. Originally I tried to deviate as little as
983 does a sensible thing. Originally I tried to deviate as little as
981 possible from the default python behavior, but even that one may
984 possible from the default python behavior, but even that one may
982 change in this direction (thread on python-dev to that effect).
985 change in this direction (thread on python-dev to that effect).
983 Regardless, ipython should do the right thing even if CPython's
986 Regardless, ipython should do the right thing even if CPython's
984 '>>>' prompt doesn't.
987 '>>>' prompt doesn't.
985 (InteractiveShell): removed subclassing code.InteractiveConsole
988 (InteractiveShell): removed subclassing code.InteractiveConsole
986 class. By now we'd overridden just about all of its methods: I've
989 class. By now we'd overridden just about all of its methods: I've
987 copied the remaining two over, and now ipython is a standalone
990 copied the remaining two over, and now ipython is a standalone
988 class. This will provide a clearer picture for the chainsaw
991 class. This will provide a clearer picture for the chainsaw
989 branch refactoring.
992 branch refactoring.
990
993
991 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
994 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
992
995
993 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
996 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
994 failures for objects which break when dir() is called on them.
997 failures for objects which break when dir() is called on them.
995
998
996 * IPython/FlexCompleter.py (Completer.__init__): Added support for
999 * IPython/FlexCompleter.py (Completer.__init__): Added support for
997 distinct local and global namespaces in the completer API. This
1000 distinct local and global namespaces in the completer API. This
998 change allows us top properly handle completion with distinct
1001 change allows us top properly handle completion with distinct
999 scopes, including in embedded instances (this had never really
1002 scopes, including in embedded instances (this had never really
1000 worked correctly).
1003 worked correctly).
1001
1004
1002 Note: this introduces a change in the constructor for
1005 Note: this introduces a change in the constructor for
1003 MagicCompleter, as a new global_namespace parameter is now the
1006 MagicCompleter, as a new global_namespace parameter is now the
1004 second argument (the others were bumped one position).
1007 second argument (the others were bumped one position).
1005
1008
1006 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1009 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1007
1010
1008 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1011 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1009 embedded instances (which can be done now thanks to Vivian's
1012 embedded instances (which can be done now thanks to Vivian's
1010 frame-handling fixes for pdb).
1013 frame-handling fixes for pdb).
1011 (InteractiveShell.__init__): Fix namespace handling problem in
1014 (InteractiveShell.__init__): Fix namespace handling problem in
1012 embedded instances. We were overwriting __main__ unconditionally,
1015 embedded instances. We were overwriting __main__ unconditionally,
1013 and this should only be done for 'full' (non-embedded) IPython;
1016 and this should only be done for 'full' (non-embedded) IPython;
1014 embedded instances must respect the caller's __main__. Thanks to
1017 embedded instances must respect the caller's __main__. Thanks to
1015 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1018 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1016
1019
1017 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1020 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1018
1021
1019 * setup.py: added download_url to setup(). This registers the
1022 * setup.py: added download_url to setup(). This registers the
1020 download address at PyPI, which is not only useful to humans
1023 download address at PyPI, which is not only useful to humans
1021 browsing the site, but is also picked up by setuptools (the Eggs
1024 browsing the site, but is also picked up by setuptools (the Eggs
1022 machinery). Thanks to Ville and R. Kern for the info/discussion
1025 machinery). Thanks to Ville and R. Kern for the info/discussion
1023 on this.
1026 on this.
1024
1027
1025 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1028 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1026
1029
1027 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1030 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1028 This brings a lot of nice functionality to the pdb mode, which now
1031 This brings a lot of nice functionality to the pdb mode, which now
1029 has tab-completion, syntax highlighting, and better stack handling
1032 has tab-completion, syntax highlighting, and better stack handling
1030 than before. Many thanks to Vivian De Smedt
1033 than before. Many thanks to Vivian De Smedt
1031 <vivian-AT-vdesmedt.com> for the original patches.
1034 <vivian-AT-vdesmedt.com> for the original patches.
1032
1035
1033 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1036 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1034
1037
1035 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1038 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1036 sequence to consistently accept the banner argument. The
1039 sequence to consistently accept the banner argument. The
1037 inconsistency was tripping SAGE, thanks to Gary Zablackis
1040 inconsistency was tripping SAGE, thanks to Gary Zablackis
1038 <gzabl-AT-yahoo.com> for the report.
1041 <gzabl-AT-yahoo.com> for the report.
1039
1042
1040 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1043 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1041
1044
1042 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1045 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1043 Fix bug where a naked 'alias' call in the ipythonrc file would
1046 Fix bug where a naked 'alias' call in the ipythonrc file would
1044 cause a crash. Bug reported by Jorgen Stenarson.
1047 cause a crash. Bug reported by Jorgen Stenarson.
1045
1048
1046 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1049 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1047
1050
1048 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1051 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1049 startup time.
1052 startup time.
1050
1053
1051 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1054 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1052 instances had introduced a bug with globals in normal code. Now
1055 instances had introduced a bug with globals in normal code. Now
1053 it's working in all cases.
1056 it's working in all cases.
1054
1057
1055 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1058 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1056 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1059 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1057 has been introduced to set the default case sensitivity of the
1060 has been introduced to set the default case sensitivity of the
1058 searches. Users can still select either mode at runtime on a
1061 searches. Users can still select either mode at runtime on a
1059 per-search basis.
1062 per-search basis.
1060
1063
1061 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1064 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1062
1065
1063 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1066 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1064 attributes in wildcard searches for subclasses. Modified version
1067 attributes in wildcard searches for subclasses. Modified version
1065 of a patch by Jorgen.
1068 of a patch by Jorgen.
1066
1069
1067 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1070 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1068
1071
1069 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1072 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1070 embedded instances. I added a user_global_ns attribute to the
1073 embedded instances. I added a user_global_ns attribute to the
1071 InteractiveShell class to handle this.
1074 InteractiveShell class to handle this.
1072
1075
1073 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1076 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1074
1077
1075 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1078 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1076 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1079 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1077 (reported under win32, but may happen also in other platforms).
1080 (reported under win32, but may happen also in other platforms).
1078 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1081 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1079
1082
1080 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1083 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1081
1084
1082 * IPython/Magic.py (magic_psearch): new support for wildcard
1085 * IPython/Magic.py (magic_psearch): new support for wildcard
1083 patterns. Now, typing ?a*b will list all names which begin with a
1086 patterns. Now, typing ?a*b will list all names which begin with a
1084 and end in b, for example. The %psearch magic has full
1087 and end in b, for example. The %psearch magic has full
1085 docstrings. Many thanks to JΓΆrgen Stenarson
1088 docstrings. Many thanks to JΓΆrgen Stenarson
1086 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1089 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1087 implementing this functionality.
1090 implementing this functionality.
1088
1091
1089 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1092 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1090
1093
1091 * Manual: fixed long-standing annoyance of double-dashes (as in
1094 * Manual: fixed long-standing annoyance of double-dashes (as in
1092 --prefix=~, for example) being stripped in the HTML version. This
1095 --prefix=~, for example) being stripped in the HTML version. This
1093 is a latex2html bug, but a workaround was provided. Many thanks
1096 is a latex2html bug, but a workaround was provided. Many thanks
1094 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1097 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1095 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1098 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1096 rolling. This seemingly small issue had tripped a number of users
1099 rolling. This seemingly small issue had tripped a number of users
1097 when first installing, so I'm glad to see it gone.
1100 when first installing, so I'm glad to see it gone.
1098
1101
1099 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1102 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1100
1103
1101 * IPython/Extensions/numeric_formats.py: fix missing import,
1104 * IPython/Extensions/numeric_formats.py: fix missing import,
1102 reported by Stephen Walton.
1105 reported by Stephen Walton.
1103
1106
1104 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1107 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1105
1108
1106 * IPython/demo.py: finish demo module, fully documented now.
1109 * IPython/demo.py: finish demo module, fully documented now.
1107
1110
1108 * IPython/genutils.py (file_read): simple little utility to read a
1111 * IPython/genutils.py (file_read): simple little utility to read a
1109 file and ensure it's closed afterwards.
1112 file and ensure it's closed afterwards.
1110
1113
1111 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1114 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1112
1115
1113 * IPython/demo.py (Demo.__init__): added support for individually
1116 * IPython/demo.py (Demo.__init__): added support for individually
1114 tagging blocks for automatic execution.
1117 tagging blocks for automatic execution.
1115
1118
1116 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1119 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1117 syntax-highlighted python sources, requested by John.
1120 syntax-highlighted python sources, requested by John.
1118
1121
1119 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1122 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1120
1123
1121 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1124 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1122 finishing.
1125 finishing.
1123
1126
1124 * IPython/genutils.py (shlex_split): moved from Magic to here,
1127 * IPython/genutils.py (shlex_split): moved from Magic to here,
1125 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1128 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1126
1129
1127 * IPython/demo.py (Demo.__init__): added support for silent
1130 * IPython/demo.py (Demo.__init__): added support for silent
1128 blocks, improved marks as regexps, docstrings written.
1131 blocks, improved marks as regexps, docstrings written.
1129 (Demo.__init__): better docstring, added support for sys.argv.
1132 (Demo.__init__): better docstring, added support for sys.argv.
1130
1133
1131 * IPython/genutils.py (marquee): little utility used by the demo
1134 * IPython/genutils.py (marquee): little utility used by the demo
1132 code, handy in general.
1135 code, handy in general.
1133
1136
1134 * IPython/demo.py (Demo.__init__): new class for interactive
1137 * IPython/demo.py (Demo.__init__): new class for interactive
1135 demos. Not documented yet, I just wrote it in a hurry for
1138 demos. Not documented yet, I just wrote it in a hurry for
1136 scipy'05. Will docstring later.
1139 scipy'05. Will docstring later.
1137
1140
1138 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1141 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1139
1142
1140 * IPython/Shell.py (sigint_handler): Drastic simplification which
1143 * IPython/Shell.py (sigint_handler): Drastic simplification which
1141 also seems to make Ctrl-C work correctly across threads! This is
1144 also seems to make Ctrl-C work correctly across threads! This is
1142 so simple, that I can't beleive I'd missed it before. Needs more
1145 so simple, that I can't beleive I'd missed it before. Needs more
1143 testing, though.
1146 testing, though.
1144 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1147 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1145 like this before...
1148 like this before...
1146
1149
1147 * IPython/genutils.py (get_home_dir): add protection against
1150 * IPython/genutils.py (get_home_dir): add protection against
1148 non-dirs in win32 registry.
1151 non-dirs in win32 registry.
1149
1152
1150 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1153 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1151 bug where dict was mutated while iterating (pysh crash).
1154 bug where dict was mutated while iterating (pysh crash).
1152
1155
1153 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1156 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1154
1157
1155 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1158 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1156 spurious newlines added by this routine. After a report by
1159 spurious newlines added by this routine. After a report by
1157 F. Mantegazza.
1160 F. Mantegazza.
1158
1161
1159 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1162 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1160
1163
1161 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1164 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1162 calls. These were a leftover from the GTK 1.x days, and can cause
1165 calls. These were a leftover from the GTK 1.x days, and can cause
1163 problems in certain cases (after a report by John Hunter).
1166 problems in certain cases (after a report by John Hunter).
1164
1167
1165 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1168 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1166 os.getcwd() fails at init time. Thanks to patch from David Remahl
1169 os.getcwd() fails at init time. Thanks to patch from David Remahl
1167 <chmod007-AT-mac.com>.
1170 <chmod007-AT-mac.com>.
1168 (InteractiveShell.__init__): prevent certain special magics from
1171 (InteractiveShell.__init__): prevent certain special magics from
1169 being shadowed by aliases. Closes
1172 being shadowed by aliases. Closes
1170 http://www.scipy.net/roundup/ipython/issue41.
1173 http://www.scipy.net/roundup/ipython/issue41.
1171
1174
1172 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1175 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1173
1176
1174 * IPython/iplib.py (InteractiveShell.complete): Added new
1177 * IPython/iplib.py (InteractiveShell.complete): Added new
1175 top-level completion method to expose the completion mechanism
1178 top-level completion method to expose the completion mechanism
1176 beyond readline-based environments.
1179 beyond readline-based environments.
1177
1180
1178 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1181 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1179
1182
1180 * tools/ipsvnc (svnversion): fix svnversion capture.
1183 * tools/ipsvnc (svnversion): fix svnversion capture.
1181
1184
1182 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1185 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1183 attribute to self, which was missing. Before, it was set by a
1186 attribute to self, which was missing. Before, it was set by a
1184 routine which in certain cases wasn't being called, so the
1187 routine which in certain cases wasn't being called, so the
1185 instance could end up missing the attribute. This caused a crash.
1188 instance could end up missing the attribute. This caused a crash.
1186 Closes http://www.scipy.net/roundup/ipython/issue40.
1189 Closes http://www.scipy.net/roundup/ipython/issue40.
1187
1190
1188 2005-08-16 Fernando Perez <fperez@colorado.edu>
1191 2005-08-16 Fernando Perez <fperez@colorado.edu>
1189
1192
1190 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1193 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1191 contains non-string attribute. Closes
1194 contains non-string attribute. Closes
1192 http://www.scipy.net/roundup/ipython/issue38.
1195 http://www.scipy.net/roundup/ipython/issue38.
1193
1196
1194 2005-08-14 Fernando Perez <fperez@colorado.edu>
1197 2005-08-14 Fernando Perez <fperez@colorado.edu>
1195
1198
1196 * tools/ipsvnc: Minor improvements, to add changeset info.
1199 * tools/ipsvnc: Minor improvements, to add changeset info.
1197
1200
1198 2005-08-12 Fernando Perez <fperez@colorado.edu>
1201 2005-08-12 Fernando Perez <fperez@colorado.edu>
1199
1202
1200 * IPython/iplib.py (runsource): remove self.code_to_run_src
1203 * IPython/iplib.py (runsource): remove self.code_to_run_src
1201 attribute. I realized this is nothing more than
1204 attribute. I realized this is nothing more than
1202 '\n'.join(self.buffer), and having the same data in two different
1205 '\n'.join(self.buffer), and having the same data in two different
1203 places is just asking for synchronization bugs. This may impact
1206 places is just asking for synchronization bugs. This may impact
1204 people who have custom exception handlers, so I need to warn
1207 people who have custom exception handlers, so I need to warn
1205 ipython-dev about it (F. Mantegazza may use them).
1208 ipython-dev about it (F. Mantegazza may use them).
1206
1209
1207 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1210 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1208
1211
1209 * IPython/genutils.py: fix 2.2 compatibility (generators)
1212 * IPython/genutils.py: fix 2.2 compatibility (generators)
1210
1213
1211 2005-07-18 Fernando Perez <fperez@colorado.edu>
1214 2005-07-18 Fernando Perez <fperez@colorado.edu>
1212
1215
1213 * IPython/genutils.py (get_home_dir): fix to help users with
1216 * IPython/genutils.py (get_home_dir): fix to help users with
1214 invalid $HOME under win32.
1217 invalid $HOME under win32.
1215
1218
1216 2005-07-17 Fernando Perez <fperez@colorado.edu>
1219 2005-07-17 Fernando Perez <fperez@colorado.edu>
1217
1220
1218 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1221 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1219 some old hacks and clean up a bit other routines; code should be
1222 some old hacks and clean up a bit other routines; code should be
1220 simpler and a bit faster.
1223 simpler and a bit faster.
1221
1224
1222 * IPython/iplib.py (interact): removed some last-resort attempts
1225 * IPython/iplib.py (interact): removed some last-resort attempts
1223 to survive broken stdout/stderr. That code was only making it
1226 to survive broken stdout/stderr. That code was only making it
1224 harder to abstract out the i/o (necessary for gui integration),
1227 harder to abstract out the i/o (necessary for gui integration),
1225 and the crashes it could prevent were extremely rare in practice
1228 and the crashes it could prevent were extremely rare in practice
1226 (besides being fully user-induced in a pretty violent manner).
1229 (besides being fully user-induced in a pretty violent manner).
1227
1230
1228 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1231 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1229 Nothing major yet, but the code is simpler to read; this should
1232 Nothing major yet, but the code is simpler to read; this should
1230 make it easier to do more serious modifications in the future.
1233 make it easier to do more serious modifications in the future.
1231
1234
1232 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1235 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1233 which broke in .15 (thanks to a report by Ville).
1236 which broke in .15 (thanks to a report by Ville).
1234
1237
1235 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1238 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1236 be quite correct, I know next to nothing about unicode). This
1239 be quite correct, I know next to nothing about unicode). This
1237 will allow unicode strings to be used in prompts, amongst other
1240 will allow unicode strings to be used in prompts, amongst other
1238 cases. It also will prevent ipython from crashing when unicode
1241 cases. It also will prevent ipython from crashing when unicode
1239 shows up unexpectedly in many places. If ascii encoding fails, we
1242 shows up unexpectedly in many places. If ascii encoding fails, we
1240 assume utf_8. Currently the encoding is not a user-visible
1243 assume utf_8. Currently the encoding is not a user-visible
1241 setting, though it could be made so if there is demand for it.
1244 setting, though it could be made so if there is demand for it.
1242
1245
1243 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1246 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1244
1247
1245 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1248 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1246
1249
1247 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1250 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1248
1251
1249 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1252 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1250 code can work transparently for 2.2/2.3.
1253 code can work transparently for 2.2/2.3.
1251
1254
1252 2005-07-16 Fernando Perez <fperez@colorado.edu>
1255 2005-07-16 Fernando Perez <fperez@colorado.edu>
1253
1256
1254 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1257 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1255 out of the color scheme table used for coloring exception
1258 out of the color scheme table used for coloring exception
1256 tracebacks. This allows user code to add new schemes at runtime.
1259 tracebacks. This allows user code to add new schemes at runtime.
1257 This is a minimally modified version of the patch at
1260 This is a minimally modified version of the patch at
1258 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1261 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1259 for the contribution.
1262 for the contribution.
1260
1263
1261 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1264 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1262 slightly modified version of the patch in
1265 slightly modified version of the patch in
1263 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1266 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1264 to remove the previous try/except solution (which was costlier).
1267 to remove the previous try/except solution (which was costlier).
1265 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1268 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1266
1269
1267 2005-06-08 Fernando Perez <fperez@colorado.edu>
1270 2005-06-08 Fernando Perez <fperez@colorado.edu>
1268
1271
1269 * IPython/iplib.py (write/write_err): Add methods to abstract all
1272 * IPython/iplib.py (write/write_err): Add methods to abstract all
1270 I/O a bit more.
1273 I/O a bit more.
1271
1274
1272 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1275 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1273 warning, reported by Aric Hagberg, fix by JD Hunter.
1276 warning, reported by Aric Hagberg, fix by JD Hunter.
1274
1277
1275 2005-06-02 *** Released version 0.6.15
1278 2005-06-02 *** Released version 0.6.15
1276
1279
1277 2005-06-01 Fernando Perez <fperez@colorado.edu>
1280 2005-06-01 Fernando Perez <fperez@colorado.edu>
1278
1281
1279 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1282 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1280 tab-completion of filenames within open-quoted strings. Note that
1283 tab-completion of filenames within open-quoted strings. Note that
1281 this requires that in ~/.ipython/ipythonrc, users change the
1284 this requires that in ~/.ipython/ipythonrc, users change the
1282 readline delimiters configuration to read:
1285 readline delimiters configuration to read:
1283
1286
1284 readline_remove_delims -/~
1287 readline_remove_delims -/~
1285
1288
1286
1289
1287 2005-05-31 *** Released version 0.6.14
1290 2005-05-31 *** Released version 0.6.14
1288
1291
1289 2005-05-29 Fernando Perez <fperez@colorado.edu>
1292 2005-05-29 Fernando Perez <fperez@colorado.edu>
1290
1293
1291 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1294 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1292 with files not on the filesystem. Reported by Eliyahu Sandler
1295 with files not on the filesystem. Reported by Eliyahu Sandler
1293 <eli@gondolin.net>
1296 <eli@gondolin.net>
1294
1297
1295 2005-05-22 Fernando Perez <fperez@colorado.edu>
1298 2005-05-22 Fernando Perez <fperez@colorado.edu>
1296
1299
1297 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1300 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1298 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1301 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1299
1302
1300 2005-05-19 Fernando Perez <fperez@colorado.edu>
1303 2005-05-19 Fernando Perez <fperez@colorado.edu>
1301
1304
1302 * IPython/iplib.py (safe_execfile): close a file which could be
1305 * IPython/iplib.py (safe_execfile): close a file which could be
1303 left open (causing problems in win32, which locks open files).
1306 left open (causing problems in win32, which locks open files).
1304 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1307 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1305
1308
1306 2005-05-18 Fernando Perez <fperez@colorado.edu>
1309 2005-05-18 Fernando Perez <fperez@colorado.edu>
1307
1310
1308 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1311 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1309 keyword arguments correctly to safe_execfile().
1312 keyword arguments correctly to safe_execfile().
1310
1313
1311 2005-05-13 Fernando Perez <fperez@colorado.edu>
1314 2005-05-13 Fernando Perez <fperez@colorado.edu>
1312
1315
1313 * ipython.1: Added info about Qt to manpage, and threads warning
1316 * ipython.1: Added info about Qt to manpage, and threads warning
1314 to usage page (invoked with --help).
1317 to usage page (invoked with --help).
1315
1318
1316 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1319 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1317 new matcher (it goes at the end of the priority list) to do
1320 new matcher (it goes at the end of the priority list) to do
1318 tab-completion on named function arguments. Submitted by George
1321 tab-completion on named function arguments. Submitted by George
1319 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1322 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1320 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1323 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1321 for more details.
1324 for more details.
1322
1325
1323 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1326 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1324 SystemExit exceptions in the script being run. Thanks to a report
1327 SystemExit exceptions in the script being run. Thanks to a report
1325 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1328 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1326 producing very annoying behavior when running unit tests.
1329 producing very annoying behavior when running unit tests.
1327
1330
1328 2005-05-12 Fernando Perez <fperez@colorado.edu>
1331 2005-05-12 Fernando Perez <fperez@colorado.edu>
1329
1332
1330 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1333 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1331 which I'd broken (again) due to a changed regexp. In the process,
1334 which I'd broken (again) due to a changed regexp. In the process,
1332 added ';' as an escape to auto-quote the whole line without
1335 added ';' as an escape to auto-quote the whole line without
1333 splitting its arguments. Thanks to a report by Jerry McRae
1336 splitting its arguments. Thanks to a report by Jerry McRae
1334 <qrs0xyc02-AT-sneakemail.com>.
1337 <qrs0xyc02-AT-sneakemail.com>.
1335
1338
1336 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1339 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1337 possible crashes caused by a TokenError. Reported by Ed Schofield
1340 possible crashes caused by a TokenError. Reported by Ed Schofield
1338 <schofield-AT-ftw.at>.
1341 <schofield-AT-ftw.at>.
1339
1342
1340 2005-05-06 Fernando Perez <fperez@colorado.edu>
1343 2005-05-06 Fernando Perez <fperez@colorado.edu>
1341
1344
1342 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1345 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1343
1346
1344 2005-04-29 Fernando Perez <fperez@colorado.edu>
1347 2005-04-29 Fernando Perez <fperez@colorado.edu>
1345
1348
1346 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1349 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1347 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1350 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1348 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1351 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1349 which provides support for Qt interactive usage (similar to the
1352 which provides support for Qt interactive usage (similar to the
1350 existing one for WX and GTK). This had been often requested.
1353 existing one for WX and GTK). This had been often requested.
1351
1354
1352 2005-04-14 *** Released version 0.6.13
1355 2005-04-14 *** Released version 0.6.13
1353
1356
1354 2005-04-08 Fernando Perez <fperez@colorado.edu>
1357 2005-04-08 Fernando Perez <fperez@colorado.edu>
1355
1358
1356 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1359 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1357 from _ofind, which gets called on almost every input line. Now,
1360 from _ofind, which gets called on almost every input line. Now,
1358 we only try to get docstrings if they are actually going to be
1361 we only try to get docstrings if they are actually going to be
1359 used (the overhead of fetching unnecessary docstrings can be
1362 used (the overhead of fetching unnecessary docstrings can be
1360 noticeable for certain objects, such as Pyro proxies).
1363 noticeable for certain objects, such as Pyro proxies).
1361
1364
1362 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1365 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1363 for completers. For some reason I had been passing them the state
1366 for completers. For some reason I had been passing them the state
1364 variable, which completers never actually need, and was in
1367 variable, which completers never actually need, and was in
1365 conflict with the rlcompleter API. Custom completers ONLY need to
1368 conflict with the rlcompleter API. Custom completers ONLY need to
1366 take the text parameter.
1369 take the text parameter.
1367
1370
1368 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1371 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1369 work correctly in pysh. I've also moved all the logic which used
1372 work correctly in pysh. I've also moved all the logic which used
1370 to be in pysh.py here, which will prevent problems with future
1373 to be in pysh.py here, which will prevent problems with future
1371 upgrades. However, this time I must warn users to update their
1374 upgrades. However, this time I must warn users to update their
1372 pysh profile to include the line
1375 pysh profile to include the line
1373
1376
1374 import_all IPython.Extensions.InterpreterExec
1377 import_all IPython.Extensions.InterpreterExec
1375
1378
1376 because otherwise things won't work for them. They MUST also
1379 because otherwise things won't work for them. They MUST also
1377 delete pysh.py and the line
1380 delete pysh.py and the line
1378
1381
1379 execfile pysh.py
1382 execfile pysh.py
1380
1383
1381 from their ipythonrc-pysh.
1384 from their ipythonrc-pysh.
1382
1385
1383 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1386 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1384 robust in the face of objects whose dir() returns non-strings
1387 robust in the face of objects whose dir() returns non-strings
1385 (which it shouldn't, but some broken libs like ITK do). Thanks to
1388 (which it shouldn't, but some broken libs like ITK do). Thanks to
1386 a patch by John Hunter (implemented differently, though). Also
1389 a patch by John Hunter (implemented differently, though). Also
1387 minor improvements by using .extend instead of + on lists.
1390 minor improvements by using .extend instead of + on lists.
1388
1391
1389 * pysh.py:
1392 * pysh.py:
1390
1393
1391 2005-04-06 Fernando Perez <fperez@colorado.edu>
1394 2005-04-06 Fernando Perez <fperez@colorado.edu>
1392
1395
1393 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1396 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1394 by default, so that all users benefit from it. Those who don't
1397 by default, so that all users benefit from it. Those who don't
1395 want it can still turn it off.
1398 want it can still turn it off.
1396
1399
1397 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1400 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1398 config file, I'd forgotten about this, so users were getting it
1401 config file, I'd forgotten about this, so users were getting it
1399 off by default.
1402 off by default.
1400
1403
1401 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1404 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1402 consistency. Now magics can be called in multiline statements,
1405 consistency. Now magics can be called in multiline statements,
1403 and python variables can be expanded in magic calls via $var.
1406 and python variables can be expanded in magic calls via $var.
1404 This makes the magic system behave just like aliases or !system
1407 This makes the magic system behave just like aliases or !system
1405 calls.
1408 calls.
1406
1409
1407 2005-03-28 Fernando Perez <fperez@colorado.edu>
1410 2005-03-28 Fernando Perez <fperez@colorado.edu>
1408
1411
1409 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1412 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1410 expensive string additions for building command. Add support for
1413 expensive string additions for building command. Add support for
1411 trailing ';' when autocall is used.
1414 trailing ';' when autocall is used.
1412
1415
1413 2005-03-26 Fernando Perez <fperez@colorado.edu>
1416 2005-03-26 Fernando Perez <fperez@colorado.edu>
1414
1417
1415 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1418 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1416 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1419 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1417 ipython.el robust against prompts with any number of spaces
1420 ipython.el robust against prompts with any number of spaces
1418 (including 0) after the ':' character.
1421 (including 0) after the ':' character.
1419
1422
1420 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1423 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1421 continuation prompt, which misled users to think the line was
1424 continuation prompt, which misled users to think the line was
1422 already indented. Closes debian Bug#300847, reported to me by
1425 already indented. Closes debian Bug#300847, reported to me by
1423 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1426 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1424
1427
1425 2005-03-23 Fernando Perez <fperez@colorado.edu>
1428 2005-03-23 Fernando Perez <fperez@colorado.edu>
1426
1429
1427 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1430 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1428 properly aligned if they have embedded newlines.
1431 properly aligned if they have embedded newlines.
1429
1432
1430 * IPython/iplib.py (runlines): Add a public method to expose
1433 * IPython/iplib.py (runlines): Add a public method to expose
1431 IPython's code execution machinery, so that users can run strings
1434 IPython's code execution machinery, so that users can run strings
1432 as if they had been typed at the prompt interactively.
1435 as if they had been typed at the prompt interactively.
1433 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1436 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1434 methods which can call the system shell, but with python variable
1437 methods which can call the system shell, but with python variable
1435 expansion. The three such methods are: __IPYTHON__.system,
1438 expansion. The three such methods are: __IPYTHON__.system,
1436 .getoutput and .getoutputerror. These need to be documented in a
1439 .getoutput and .getoutputerror. These need to be documented in a
1437 'public API' section (to be written) of the manual.
1440 'public API' section (to be written) of the manual.
1438
1441
1439 2005-03-20 Fernando Perez <fperez@colorado.edu>
1442 2005-03-20 Fernando Perez <fperez@colorado.edu>
1440
1443
1441 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1444 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1442 for custom exception handling. This is quite powerful, and it
1445 for custom exception handling. This is quite powerful, and it
1443 allows for user-installable exception handlers which can trap
1446 allows for user-installable exception handlers which can trap
1444 custom exceptions at runtime and treat them separately from
1447 custom exceptions at runtime and treat them separately from
1445 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1448 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1446 Mantegazza <mantegazza-AT-ill.fr>.
1449 Mantegazza <mantegazza-AT-ill.fr>.
1447 (InteractiveShell.set_custom_completer): public API function to
1450 (InteractiveShell.set_custom_completer): public API function to
1448 add new completers at runtime.
1451 add new completers at runtime.
1449
1452
1450 2005-03-19 Fernando Perez <fperez@colorado.edu>
1453 2005-03-19 Fernando Perez <fperez@colorado.edu>
1451
1454
1452 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1455 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1453 allow objects which provide their docstrings via non-standard
1456 allow objects which provide their docstrings via non-standard
1454 mechanisms (like Pyro proxies) to still be inspected by ipython's
1457 mechanisms (like Pyro proxies) to still be inspected by ipython's
1455 ? system.
1458 ? system.
1456
1459
1457 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1460 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1458 automatic capture system. I tried quite hard to make it work
1461 automatic capture system. I tried quite hard to make it work
1459 reliably, and simply failed. I tried many combinations with the
1462 reliably, and simply failed. I tried many combinations with the
1460 subprocess module, but eventually nothing worked in all needed
1463 subprocess module, but eventually nothing worked in all needed
1461 cases (not blocking stdin for the child, duplicating stdout
1464 cases (not blocking stdin for the child, duplicating stdout
1462 without blocking, etc). The new %sc/%sx still do capture to these
1465 without blocking, etc). The new %sc/%sx still do capture to these
1463 magical list/string objects which make shell use much more
1466 magical list/string objects which make shell use much more
1464 conveninent, so not all is lost.
1467 conveninent, so not all is lost.
1465
1468
1466 XXX - FIX MANUAL for the change above!
1469 XXX - FIX MANUAL for the change above!
1467
1470
1468 (runsource): I copied code.py's runsource() into ipython to modify
1471 (runsource): I copied code.py's runsource() into ipython to modify
1469 it a bit. Now the code object and source to be executed are
1472 it a bit. Now the code object and source to be executed are
1470 stored in ipython. This makes this info accessible to third-party
1473 stored in ipython. This makes this info accessible to third-party
1471 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1474 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1472 Mantegazza <mantegazza-AT-ill.fr>.
1475 Mantegazza <mantegazza-AT-ill.fr>.
1473
1476
1474 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1477 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1475 history-search via readline (like C-p/C-n). I'd wanted this for a
1478 history-search via readline (like C-p/C-n). I'd wanted this for a
1476 long time, but only recently found out how to do it. For users
1479 long time, but only recently found out how to do it. For users
1477 who already have their ipythonrc files made and want this, just
1480 who already have their ipythonrc files made and want this, just
1478 add:
1481 add:
1479
1482
1480 readline_parse_and_bind "\e[A": history-search-backward
1483 readline_parse_and_bind "\e[A": history-search-backward
1481 readline_parse_and_bind "\e[B": history-search-forward
1484 readline_parse_and_bind "\e[B": history-search-forward
1482
1485
1483 2005-03-18 Fernando Perez <fperez@colorado.edu>
1486 2005-03-18 Fernando Perez <fperez@colorado.edu>
1484
1487
1485 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1488 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1486 LSString and SList classes which allow transparent conversions
1489 LSString and SList classes which allow transparent conversions
1487 between list mode and whitespace-separated string.
1490 between list mode and whitespace-separated string.
1488 (magic_r): Fix recursion problem in %r.
1491 (magic_r): Fix recursion problem in %r.
1489
1492
1490 * IPython/genutils.py (LSString): New class to be used for
1493 * IPython/genutils.py (LSString): New class to be used for
1491 automatic storage of the results of all alias/system calls in _o
1494 automatic storage of the results of all alias/system calls in _o
1492 and _e (stdout/err). These provide a .l/.list attribute which
1495 and _e (stdout/err). These provide a .l/.list attribute which
1493 does automatic splitting on newlines. This means that for most
1496 does automatic splitting on newlines. This means that for most
1494 uses, you'll never need to do capturing of output with %sc/%sx
1497 uses, you'll never need to do capturing of output with %sc/%sx
1495 anymore, since ipython keeps this always done for you. Note that
1498 anymore, since ipython keeps this always done for you. Note that
1496 only the LAST results are stored, the _o/e variables are
1499 only the LAST results are stored, the _o/e variables are
1497 overwritten on each call. If you need to save their contents
1500 overwritten on each call. If you need to save their contents
1498 further, simply bind them to any other name.
1501 further, simply bind them to any other name.
1499
1502
1500 2005-03-17 Fernando Perez <fperez@colorado.edu>
1503 2005-03-17 Fernando Perez <fperez@colorado.edu>
1501
1504
1502 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1505 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1503 prompt namespace handling.
1506 prompt namespace handling.
1504
1507
1505 2005-03-16 Fernando Perez <fperez@colorado.edu>
1508 2005-03-16 Fernando Perez <fperez@colorado.edu>
1506
1509
1507 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1510 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1508 classic prompts to be '>>> ' (final space was missing, and it
1511 classic prompts to be '>>> ' (final space was missing, and it
1509 trips the emacs python mode).
1512 trips the emacs python mode).
1510 (BasePrompt.__str__): Added safe support for dynamic prompt
1513 (BasePrompt.__str__): Added safe support for dynamic prompt
1511 strings. Now you can set your prompt string to be '$x', and the
1514 strings. Now you can set your prompt string to be '$x', and the
1512 value of x will be printed from your interactive namespace. The
1515 value of x will be printed from your interactive namespace. The
1513 interpolation syntax includes the full Itpl support, so
1516 interpolation syntax includes the full Itpl support, so
1514 ${foo()+x+bar()} is a valid prompt string now, and the function
1517 ${foo()+x+bar()} is a valid prompt string now, and the function
1515 calls will be made at runtime.
1518 calls will be made at runtime.
1516
1519
1517 2005-03-15 Fernando Perez <fperez@colorado.edu>
1520 2005-03-15 Fernando Perez <fperez@colorado.edu>
1518
1521
1519 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1522 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1520 avoid name clashes in pylab. %hist still works, it just forwards
1523 avoid name clashes in pylab. %hist still works, it just forwards
1521 the call to %history.
1524 the call to %history.
1522
1525
1523 2005-03-02 *** Released version 0.6.12
1526 2005-03-02 *** Released version 0.6.12
1524
1527
1525 2005-03-02 Fernando Perez <fperez@colorado.edu>
1528 2005-03-02 Fernando Perez <fperez@colorado.edu>
1526
1529
1527 * IPython/iplib.py (handle_magic): log magic calls properly as
1530 * IPython/iplib.py (handle_magic): log magic calls properly as
1528 ipmagic() function calls.
1531 ipmagic() function calls.
1529
1532
1530 * IPython/Magic.py (magic_time): Improved %time to support
1533 * IPython/Magic.py (magic_time): Improved %time to support
1531 statements and provide wall-clock as well as CPU time.
1534 statements and provide wall-clock as well as CPU time.
1532
1535
1533 2005-02-27 Fernando Perez <fperez@colorado.edu>
1536 2005-02-27 Fernando Perez <fperez@colorado.edu>
1534
1537
1535 * IPython/hooks.py: New hooks module, to expose user-modifiable
1538 * IPython/hooks.py: New hooks module, to expose user-modifiable
1536 IPython functionality in a clean manner. For now only the editor
1539 IPython functionality in a clean manner. For now only the editor
1537 hook is actually written, and other thigns which I intend to turn
1540 hook is actually written, and other thigns which I intend to turn
1538 into proper hooks aren't yet there. The display and prefilter
1541 into proper hooks aren't yet there. The display and prefilter
1539 stuff, for example, should be hooks. But at least now the
1542 stuff, for example, should be hooks. But at least now the
1540 framework is in place, and the rest can be moved here with more
1543 framework is in place, and the rest can be moved here with more
1541 time later. IPython had had a .hooks variable for a long time for
1544 time later. IPython had had a .hooks variable for a long time for
1542 this purpose, but I'd never actually used it for anything.
1545 this purpose, but I'd never actually used it for anything.
1543
1546
1544 2005-02-26 Fernando Perez <fperez@colorado.edu>
1547 2005-02-26 Fernando Perez <fperez@colorado.edu>
1545
1548
1546 * IPython/ipmaker.py (make_IPython): make the default ipython
1549 * IPython/ipmaker.py (make_IPython): make the default ipython
1547 directory be called _ipython under win32, to follow more the
1550 directory be called _ipython under win32, to follow more the
1548 naming peculiarities of that platform (where buggy software like
1551 naming peculiarities of that platform (where buggy software like
1549 Visual Sourcesafe breaks with .named directories). Reported by
1552 Visual Sourcesafe breaks with .named directories). Reported by
1550 Ville Vainio.
1553 Ville Vainio.
1551
1554
1552 2005-02-23 Fernando Perez <fperez@colorado.edu>
1555 2005-02-23 Fernando Perez <fperez@colorado.edu>
1553
1556
1554 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1557 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1555 auto_aliases for win32 which were causing problems. Users can
1558 auto_aliases for win32 which were causing problems. Users can
1556 define the ones they personally like.
1559 define the ones they personally like.
1557
1560
1558 2005-02-21 Fernando Perez <fperez@colorado.edu>
1561 2005-02-21 Fernando Perez <fperez@colorado.edu>
1559
1562
1560 * IPython/Magic.py (magic_time): new magic to time execution of
1563 * IPython/Magic.py (magic_time): new magic to time execution of
1561 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1564 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1562
1565
1563 2005-02-19 Fernando Perez <fperez@colorado.edu>
1566 2005-02-19 Fernando Perez <fperez@colorado.edu>
1564
1567
1565 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1568 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1566 into keys (for prompts, for example).
1569 into keys (for prompts, for example).
1567
1570
1568 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1571 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1569 prompts in case users want them. This introduces a small behavior
1572 prompts in case users want them. This introduces a small behavior
1570 change: ipython does not automatically add a space to all prompts
1573 change: ipython does not automatically add a space to all prompts
1571 anymore. To get the old prompts with a space, users should add it
1574 anymore. To get the old prompts with a space, users should add it
1572 manually to their ipythonrc file, so for example prompt_in1 should
1575 manually to their ipythonrc file, so for example prompt_in1 should
1573 now read 'In [\#]: ' instead of 'In [\#]:'.
1576 now read 'In [\#]: ' instead of 'In [\#]:'.
1574 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1577 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1575 file) to control left-padding of secondary prompts.
1578 file) to control left-padding of secondary prompts.
1576
1579
1577 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1580 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1578 the profiler can't be imported. Fix for Debian, which removed
1581 the profiler can't be imported. Fix for Debian, which removed
1579 profile.py because of License issues. I applied a slightly
1582 profile.py because of License issues. I applied a slightly
1580 modified version of the original Debian patch at
1583 modified version of the original Debian patch at
1581 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1584 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1582
1585
1583 2005-02-17 Fernando Perez <fperez@colorado.edu>
1586 2005-02-17 Fernando Perez <fperez@colorado.edu>
1584
1587
1585 * IPython/genutils.py (native_line_ends): Fix bug which would
1588 * IPython/genutils.py (native_line_ends): Fix bug which would
1586 cause improper line-ends under win32 b/c I was not opening files
1589 cause improper line-ends under win32 b/c I was not opening files
1587 in binary mode. Bug report and fix thanks to Ville.
1590 in binary mode. Bug report and fix thanks to Ville.
1588
1591
1589 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1592 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1590 trying to catch spurious foo[1] autocalls. My fix actually broke
1593 trying to catch spurious foo[1] autocalls. My fix actually broke
1591 ',/' autoquote/call with explicit escape (bad regexp).
1594 ',/' autoquote/call with explicit escape (bad regexp).
1592
1595
1593 2005-02-15 *** Released version 0.6.11
1596 2005-02-15 *** Released version 0.6.11
1594
1597
1595 2005-02-14 Fernando Perez <fperez@colorado.edu>
1598 2005-02-14 Fernando Perez <fperez@colorado.edu>
1596
1599
1597 * IPython/background_jobs.py: New background job management
1600 * IPython/background_jobs.py: New background job management
1598 subsystem. This is implemented via a new set of classes, and
1601 subsystem. This is implemented via a new set of classes, and
1599 IPython now provides a builtin 'jobs' object for background job
1602 IPython now provides a builtin 'jobs' object for background job
1600 execution. A convenience %bg magic serves as a lightweight
1603 execution. A convenience %bg magic serves as a lightweight
1601 frontend for starting the more common type of calls. This was
1604 frontend for starting the more common type of calls. This was
1602 inspired by discussions with B. Granger and the BackgroundCommand
1605 inspired by discussions with B. Granger and the BackgroundCommand
1603 class described in the book Python Scripting for Computational
1606 class described in the book Python Scripting for Computational
1604 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1607 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1605 (although ultimately no code from this text was used, as IPython's
1608 (although ultimately no code from this text was used, as IPython's
1606 system is a separate implementation).
1609 system is a separate implementation).
1607
1610
1608 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1611 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1609 to control the completion of single/double underscore names
1612 to control the completion of single/double underscore names
1610 separately. As documented in the example ipytonrc file, the
1613 separately. As documented in the example ipytonrc file, the
1611 readline_omit__names variable can now be set to 2, to omit even
1614 readline_omit__names variable can now be set to 2, to omit even
1612 single underscore names. Thanks to a patch by Brian Wong
1615 single underscore names. Thanks to a patch by Brian Wong
1613 <BrianWong-AT-AirgoNetworks.Com>.
1616 <BrianWong-AT-AirgoNetworks.Com>.
1614 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1617 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1615 be autocalled as foo([1]) if foo were callable. A problem for
1618 be autocalled as foo([1]) if foo were callable. A problem for
1616 things which are both callable and implement __getitem__.
1619 things which are both callable and implement __getitem__.
1617 (init_readline): Fix autoindentation for win32. Thanks to a patch
1620 (init_readline): Fix autoindentation for win32. Thanks to a patch
1618 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1621 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1619
1622
1620 2005-02-12 Fernando Perez <fperez@colorado.edu>
1623 2005-02-12 Fernando Perez <fperez@colorado.edu>
1621
1624
1622 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1625 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1623 which I had written long ago to sort out user error messages which
1626 which I had written long ago to sort out user error messages which
1624 may occur during startup. This seemed like a good idea initially,
1627 may occur during startup. This seemed like a good idea initially,
1625 but it has proven a disaster in retrospect. I don't want to
1628 but it has proven a disaster in retrospect. I don't want to
1626 change much code for now, so my fix is to set the internal 'debug'
1629 change much code for now, so my fix is to set the internal 'debug'
1627 flag to true everywhere, whose only job was precisely to control
1630 flag to true everywhere, whose only job was precisely to control
1628 this subsystem. This closes issue 28 (as well as avoiding all
1631 this subsystem. This closes issue 28 (as well as avoiding all
1629 sorts of strange hangups which occur from time to time).
1632 sorts of strange hangups which occur from time to time).
1630
1633
1631 2005-02-07 Fernando Perez <fperez@colorado.edu>
1634 2005-02-07 Fernando Perez <fperez@colorado.edu>
1632
1635
1633 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1636 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1634 previous call produced a syntax error.
1637 previous call produced a syntax error.
1635
1638
1636 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1639 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1637 classes without constructor.
1640 classes without constructor.
1638
1641
1639 2005-02-06 Fernando Perez <fperez@colorado.edu>
1642 2005-02-06 Fernando Perez <fperez@colorado.edu>
1640
1643
1641 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1644 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1642 completions with the results of each matcher, so we return results
1645 completions with the results of each matcher, so we return results
1643 to the user from all namespaces. This breaks with ipython
1646 to the user from all namespaces. This breaks with ipython
1644 tradition, but I think it's a nicer behavior. Now you get all
1647 tradition, but I think it's a nicer behavior. Now you get all
1645 possible completions listed, from all possible namespaces (python,
1648 possible completions listed, from all possible namespaces (python,
1646 filesystem, magics...) After a request by John Hunter
1649 filesystem, magics...) After a request by John Hunter
1647 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1650 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1648
1651
1649 2005-02-05 Fernando Perez <fperez@colorado.edu>
1652 2005-02-05 Fernando Perez <fperez@colorado.edu>
1650
1653
1651 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1654 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1652 the call had quote characters in it (the quotes were stripped).
1655 the call had quote characters in it (the quotes were stripped).
1653
1656
1654 2005-01-31 Fernando Perez <fperez@colorado.edu>
1657 2005-01-31 Fernando Perez <fperez@colorado.edu>
1655
1658
1656 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1659 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1657 Itpl.itpl() to make the code more robust against psyco
1660 Itpl.itpl() to make the code more robust against psyco
1658 optimizations.
1661 optimizations.
1659
1662
1660 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1663 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1661 of causing an exception. Quicker, cleaner.
1664 of causing an exception. Quicker, cleaner.
1662
1665
1663 2005-01-28 Fernando Perez <fperez@colorado.edu>
1666 2005-01-28 Fernando Perez <fperez@colorado.edu>
1664
1667
1665 * scripts/ipython_win_post_install.py (install): hardcode
1668 * scripts/ipython_win_post_install.py (install): hardcode
1666 sys.prefix+'python.exe' as the executable path. It turns out that
1669 sys.prefix+'python.exe' as the executable path. It turns out that
1667 during the post-installation run, sys.executable resolves to the
1670 during the post-installation run, sys.executable resolves to the
1668 name of the binary installer! I should report this as a distutils
1671 name of the binary installer! I should report this as a distutils
1669 bug, I think. I updated the .10 release with this tiny fix, to
1672 bug, I think. I updated the .10 release with this tiny fix, to
1670 avoid annoying the lists further.
1673 avoid annoying the lists further.
1671
1674
1672 2005-01-27 *** Released version 0.6.10
1675 2005-01-27 *** Released version 0.6.10
1673
1676
1674 2005-01-27 Fernando Perez <fperez@colorado.edu>
1677 2005-01-27 Fernando Perez <fperez@colorado.edu>
1675
1678
1676 * IPython/numutils.py (norm): Added 'inf' as optional name for
1679 * IPython/numutils.py (norm): Added 'inf' as optional name for
1677 L-infinity norm, included references to mathworld.com for vector
1680 L-infinity norm, included references to mathworld.com for vector
1678 norm definitions.
1681 norm definitions.
1679 (amin/amax): added amin/amax for array min/max. Similar to what
1682 (amin/amax): added amin/amax for array min/max. Similar to what
1680 pylab ships with after the recent reorganization of names.
1683 pylab ships with after the recent reorganization of names.
1681 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1684 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1682
1685
1683 * ipython.el: committed Alex's recent fixes and improvements.
1686 * ipython.el: committed Alex's recent fixes and improvements.
1684 Tested with python-mode from CVS, and it looks excellent. Since
1687 Tested with python-mode from CVS, and it looks excellent. Since
1685 python-mode hasn't released anything in a while, I'm temporarily
1688 python-mode hasn't released anything in a while, I'm temporarily
1686 putting a copy of today's CVS (v 4.70) of python-mode in:
1689 putting a copy of today's CVS (v 4.70) of python-mode in:
1687 http://ipython.scipy.org/tmp/python-mode.el
1690 http://ipython.scipy.org/tmp/python-mode.el
1688
1691
1689 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1692 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1690 sys.executable for the executable name, instead of assuming it's
1693 sys.executable for the executable name, instead of assuming it's
1691 called 'python.exe' (the post-installer would have produced broken
1694 called 'python.exe' (the post-installer would have produced broken
1692 setups on systems with a differently named python binary).
1695 setups on systems with a differently named python binary).
1693
1696
1694 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1697 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1695 references to os.linesep, to make the code more
1698 references to os.linesep, to make the code more
1696 platform-independent. This is also part of the win32 coloring
1699 platform-independent. This is also part of the win32 coloring
1697 fixes.
1700 fixes.
1698
1701
1699 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1702 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1700 lines, which actually cause coloring bugs because the length of
1703 lines, which actually cause coloring bugs because the length of
1701 the line is very difficult to correctly compute with embedded
1704 the line is very difficult to correctly compute with embedded
1702 escapes. This was the source of all the coloring problems under
1705 escapes. This was the source of all the coloring problems under
1703 Win32. I think that _finally_, Win32 users have a properly
1706 Win32. I think that _finally_, Win32 users have a properly
1704 working ipython in all respects. This would never have happened
1707 working ipython in all respects. This would never have happened
1705 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1708 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1706
1709
1707 2005-01-26 *** Released version 0.6.9
1710 2005-01-26 *** Released version 0.6.9
1708
1711
1709 2005-01-25 Fernando Perez <fperez@colorado.edu>
1712 2005-01-25 Fernando Perez <fperez@colorado.edu>
1710
1713
1711 * setup.py: finally, we have a true Windows installer, thanks to
1714 * setup.py: finally, we have a true Windows installer, thanks to
1712 the excellent work of Viktor Ransmayr
1715 the excellent work of Viktor Ransmayr
1713 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1716 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1714 Windows users. The setup routine is quite a bit cleaner thanks to
1717 Windows users. The setup routine is quite a bit cleaner thanks to
1715 this, and the post-install script uses the proper functions to
1718 this, and the post-install script uses the proper functions to
1716 allow a clean de-installation using the standard Windows Control
1719 allow a clean de-installation using the standard Windows Control
1717 Panel.
1720 Panel.
1718
1721
1719 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1722 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1720 environment variable under all OSes (including win32) if
1723 environment variable under all OSes (including win32) if
1721 available. This will give consistency to win32 users who have set
1724 available. This will give consistency to win32 users who have set
1722 this variable for any reason. If os.environ['HOME'] fails, the
1725 this variable for any reason. If os.environ['HOME'] fails, the
1723 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1726 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1724
1727
1725 2005-01-24 Fernando Perez <fperez@colorado.edu>
1728 2005-01-24 Fernando Perez <fperez@colorado.edu>
1726
1729
1727 * IPython/numutils.py (empty_like): add empty_like(), similar to
1730 * IPython/numutils.py (empty_like): add empty_like(), similar to
1728 zeros_like() but taking advantage of the new empty() Numeric routine.
1731 zeros_like() but taking advantage of the new empty() Numeric routine.
1729
1732
1730 2005-01-23 *** Released version 0.6.8
1733 2005-01-23 *** Released version 0.6.8
1731
1734
1732 2005-01-22 Fernando Perez <fperez@colorado.edu>
1735 2005-01-22 Fernando Perez <fperez@colorado.edu>
1733
1736
1734 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1737 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1735 automatic show() calls. After discussing things with JDH, it
1738 automatic show() calls. After discussing things with JDH, it
1736 turns out there are too many corner cases where this can go wrong.
1739 turns out there are too many corner cases where this can go wrong.
1737 It's best not to try to be 'too smart', and simply have ipython
1740 It's best not to try to be 'too smart', and simply have ipython
1738 reproduce as much as possible the default behavior of a normal
1741 reproduce as much as possible the default behavior of a normal
1739 python shell.
1742 python shell.
1740
1743
1741 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1744 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1742 line-splitting regexp and _prefilter() to avoid calling getattr()
1745 line-splitting regexp and _prefilter() to avoid calling getattr()
1743 on assignments. This closes
1746 on assignments. This closes
1744 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1747 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1745 readline uses getattr(), so a simple <TAB> keypress is still
1748 readline uses getattr(), so a simple <TAB> keypress is still
1746 enough to trigger getattr() calls on an object.
1749 enough to trigger getattr() calls on an object.
1747
1750
1748 2005-01-21 Fernando Perez <fperez@colorado.edu>
1751 2005-01-21 Fernando Perez <fperez@colorado.edu>
1749
1752
1750 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1753 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1751 docstring under pylab so it doesn't mask the original.
1754 docstring under pylab so it doesn't mask the original.
1752
1755
1753 2005-01-21 *** Released version 0.6.7
1756 2005-01-21 *** Released version 0.6.7
1754
1757
1755 2005-01-21 Fernando Perez <fperez@colorado.edu>
1758 2005-01-21 Fernando Perez <fperez@colorado.edu>
1756
1759
1757 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1760 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1758 signal handling for win32 users in multithreaded mode.
1761 signal handling for win32 users in multithreaded mode.
1759
1762
1760 2005-01-17 Fernando Perez <fperez@colorado.edu>
1763 2005-01-17 Fernando Perez <fperez@colorado.edu>
1761
1764
1762 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1765 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1763 instances with no __init__. After a crash report by Norbert Nemec
1766 instances with no __init__. After a crash report by Norbert Nemec
1764 <Norbert-AT-nemec-online.de>.
1767 <Norbert-AT-nemec-online.de>.
1765
1768
1766 2005-01-14 Fernando Perez <fperez@colorado.edu>
1769 2005-01-14 Fernando Perez <fperez@colorado.edu>
1767
1770
1768 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1771 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1769 names for verbose exceptions, when multiple dotted names and the
1772 names for verbose exceptions, when multiple dotted names and the
1770 'parent' object were present on the same line.
1773 'parent' object were present on the same line.
1771
1774
1772 2005-01-11 Fernando Perez <fperez@colorado.edu>
1775 2005-01-11 Fernando Perez <fperez@colorado.edu>
1773
1776
1774 * IPython/genutils.py (flag_calls): new utility to trap and flag
1777 * IPython/genutils.py (flag_calls): new utility to trap and flag
1775 calls in functions. I need it to clean up matplotlib support.
1778 calls in functions. I need it to clean up matplotlib support.
1776 Also removed some deprecated code in genutils.
1779 Also removed some deprecated code in genutils.
1777
1780
1778 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1781 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1779 that matplotlib scripts called with %run, which don't call show()
1782 that matplotlib scripts called with %run, which don't call show()
1780 themselves, still have their plotting windows open.
1783 themselves, still have their plotting windows open.
1781
1784
1782 2005-01-05 Fernando Perez <fperez@colorado.edu>
1785 2005-01-05 Fernando Perez <fperez@colorado.edu>
1783
1786
1784 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1787 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1785 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1788 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1786
1789
1787 2004-12-19 Fernando Perez <fperez@colorado.edu>
1790 2004-12-19 Fernando Perez <fperez@colorado.edu>
1788
1791
1789 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1792 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1790 parent_runcode, which was an eyesore. The same result can be
1793 parent_runcode, which was an eyesore. The same result can be
1791 obtained with Python's regular superclass mechanisms.
1794 obtained with Python's regular superclass mechanisms.
1792
1795
1793 2004-12-17 Fernando Perez <fperez@colorado.edu>
1796 2004-12-17 Fernando Perez <fperez@colorado.edu>
1794
1797
1795 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1798 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1796 reported by Prabhu.
1799 reported by Prabhu.
1797 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1800 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1798 sys.stderr) instead of explicitly calling sys.stderr. This helps
1801 sys.stderr) instead of explicitly calling sys.stderr. This helps
1799 maintain our I/O abstractions clean, for future GUI embeddings.
1802 maintain our I/O abstractions clean, for future GUI embeddings.
1800
1803
1801 * IPython/genutils.py (info): added new utility for sys.stderr
1804 * IPython/genutils.py (info): added new utility for sys.stderr
1802 unified info message handling (thin wrapper around warn()).
1805 unified info message handling (thin wrapper around warn()).
1803
1806
1804 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1807 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1805 composite (dotted) names on verbose exceptions.
1808 composite (dotted) names on verbose exceptions.
1806 (VerboseTB.nullrepr): harden against another kind of errors which
1809 (VerboseTB.nullrepr): harden against another kind of errors which
1807 Python's inspect module can trigger, and which were crashing
1810 Python's inspect module can trigger, and which were crashing
1808 IPython. Thanks to a report by Marco Lombardi
1811 IPython. Thanks to a report by Marco Lombardi
1809 <mlombard-AT-ma010192.hq.eso.org>.
1812 <mlombard-AT-ma010192.hq.eso.org>.
1810
1813
1811 2004-12-13 *** Released version 0.6.6
1814 2004-12-13 *** Released version 0.6.6
1812
1815
1813 2004-12-12 Fernando Perez <fperez@colorado.edu>
1816 2004-12-12 Fernando Perez <fperez@colorado.edu>
1814
1817
1815 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1818 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1816 generated by pygtk upon initialization if it was built without
1819 generated by pygtk upon initialization if it was built without
1817 threads (for matplotlib users). After a crash reported by
1820 threads (for matplotlib users). After a crash reported by
1818 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1821 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1819
1822
1820 * IPython/ipmaker.py (make_IPython): fix small bug in the
1823 * IPython/ipmaker.py (make_IPython): fix small bug in the
1821 import_some parameter for multiple imports.
1824 import_some parameter for multiple imports.
1822
1825
1823 * IPython/iplib.py (ipmagic): simplified the interface of
1826 * IPython/iplib.py (ipmagic): simplified the interface of
1824 ipmagic() to take a single string argument, just as it would be
1827 ipmagic() to take a single string argument, just as it would be
1825 typed at the IPython cmd line.
1828 typed at the IPython cmd line.
1826 (ipalias): Added new ipalias() with an interface identical to
1829 (ipalias): Added new ipalias() with an interface identical to
1827 ipmagic(). This completes exposing a pure python interface to the
1830 ipmagic(). This completes exposing a pure python interface to the
1828 alias and magic system, which can be used in loops or more complex
1831 alias and magic system, which can be used in loops or more complex
1829 code where IPython's automatic line mangling is not active.
1832 code where IPython's automatic line mangling is not active.
1830
1833
1831 * IPython/genutils.py (timing): changed interface of timing to
1834 * IPython/genutils.py (timing): changed interface of timing to
1832 simply run code once, which is the most common case. timings()
1835 simply run code once, which is the most common case. timings()
1833 remains unchanged, for the cases where you want multiple runs.
1836 remains unchanged, for the cases where you want multiple runs.
1834
1837
1835 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1838 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1836 bug where Python2.2 crashes with exec'ing code which does not end
1839 bug where Python2.2 crashes with exec'ing code which does not end
1837 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1840 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1838 before.
1841 before.
1839
1842
1840 2004-12-10 Fernando Perez <fperez@colorado.edu>
1843 2004-12-10 Fernando Perez <fperez@colorado.edu>
1841
1844
1842 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1845 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1843 -t to -T, to accomodate the new -t flag in %run (the %run and
1846 -t to -T, to accomodate the new -t flag in %run (the %run and
1844 %prun options are kind of intermixed, and it's not easy to change
1847 %prun options are kind of intermixed, and it's not easy to change
1845 this with the limitations of python's getopt).
1848 this with the limitations of python's getopt).
1846
1849
1847 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1850 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1848 the execution of scripts. It's not as fine-tuned as timeit.py,
1851 the execution of scripts. It's not as fine-tuned as timeit.py,
1849 but it works from inside ipython (and under 2.2, which lacks
1852 but it works from inside ipython (and under 2.2, which lacks
1850 timeit.py). Optionally a number of runs > 1 can be given for
1853 timeit.py). Optionally a number of runs > 1 can be given for
1851 timing very short-running code.
1854 timing very short-running code.
1852
1855
1853 * IPython/genutils.py (uniq_stable): new routine which returns a
1856 * IPython/genutils.py (uniq_stable): new routine which returns a
1854 list of unique elements in any iterable, but in stable order of
1857 list of unique elements in any iterable, but in stable order of
1855 appearance. I needed this for the ultraTB fixes, and it's a handy
1858 appearance. I needed this for the ultraTB fixes, and it's a handy
1856 utility.
1859 utility.
1857
1860
1858 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1861 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1859 dotted names in Verbose exceptions. This had been broken since
1862 dotted names in Verbose exceptions. This had been broken since
1860 the very start, now x.y will properly be printed in a Verbose
1863 the very start, now x.y will properly be printed in a Verbose
1861 traceback, instead of x being shown and y appearing always as an
1864 traceback, instead of x being shown and y appearing always as an
1862 'undefined global'. Getting this to work was a bit tricky,
1865 'undefined global'. Getting this to work was a bit tricky,
1863 because by default python tokenizers are stateless. Saved by
1866 because by default python tokenizers are stateless. Saved by
1864 python's ability to easily add a bit of state to an arbitrary
1867 python's ability to easily add a bit of state to an arbitrary
1865 function (without needing to build a full-blown callable object).
1868 function (without needing to build a full-blown callable object).
1866
1869
1867 Also big cleanup of this code, which had horrendous runtime
1870 Also big cleanup of this code, which had horrendous runtime
1868 lookups of zillions of attributes for colorization. Moved all
1871 lookups of zillions of attributes for colorization. Moved all
1869 this code into a few templates, which make it cleaner and quicker.
1872 this code into a few templates, which make it cleaner and quicker.
1870
1873
1871 Printout quality was also improved for Verbose exceptions: one
1874 Printout quality was also improved for Verbose exceptions: one
1872 variable per line, and memory addresses are printed (this can be
1875 variable per line, and memory addresses are printed (this can be
1873 quite handy in nasty debugging situations, which is what Verbose
1876 quite handy in nasty debugging situations, which is what Verbose
1874 is for).
1877 is for).
1875
1878
1876 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1879 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1877 the command line as scripts to be loaded by embedded instances.
1880 the command line as scripts to be loaded by embedded instances.
1878 Doing so has the potential for an infinite recursion if there are
1881 Doing so has the potential for an infinite recursion if there are
1879 exceptions thrown in the process. This fixes a strange crash
1882 exceptions thrown in the process. This fixes a strange crash
1880 reported by Philippe MULLER <muller-AT-irit.fr>.
1883 reported by Philippe MULLER <muller-AT-irit.fr>.
1881
1884
1882 2004-12-09 Fernando Perez <fperez@colorado.edu>
1885 2004-12-09 Fernando Perez <fperez@colorado.edu>
1883
1886
1884 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1887 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1885 to reflect new names in matplotlib, which now expose the
1888 to reflect new names in matplotlib, which now expose the
1886 matlab-compatible interface via a pylab module instead of the
1889 matlab-compatible interface via a pylab module instead of the
1887 'matlab' name. The new code is backwards compatible, so users of
1890 'matlab' name. The new code is backwards compatible, so users of
1888 all matplotlib versions are OK. Patch by J. Hunter.
1891 all matplotlib versions are OK. Patch by J. Hunter.
1889
1892
1890 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1893 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1891 of __init__ docstrings for instances (class docstrings are already
1894 of __init__ docstrings for instances (class docstrings are already
1892 automatically printed). Instances with customized docstrings
1895 automatically printed). Instances with customized docstrings
1893 (indep. of the class) are also recognized and all 3 separate
1896 (indep. of the class) are also recognized and all 3 separate
1894 docstrings are printed (instance, class, constructor). After some
1897 docstrings are printed (instance, class, constructor). After some
1895 comments/suggestions by J. Hunter.
1898 comments/suggestions by J. Hunter.
1896
1899
1897 2004-12-05 Fernando Perez <fperez@colorado.edu>
1900 2004-12-05 Fernando Perez <fperez@colorado.edu>
1898
1901
1899 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1902 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1900 warnings when tab-completion fails and triggers an exception.
1903 warnings when tab-completion fails and triggers an exception.
1901
1904
1902 2004-12-03 Fernando Perez <fperez@colorado.edu>
1905 2004-12-03 Fernando Perez <fperez@colorado.edu>
1903
1906
1904 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1907 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1905 be triggered when using 'run -p'. An incorrect option flag was
1908 be triggered when using 'run -p'. An incorrect option flag was
1906 being set ('d' instead of 'D').
1909 being set ('d' instead of 'D').
1907 (manpage): fix missing escaped \- sign.
1910 (manpage): fix missing escaped \- sign.
1908
1911
1909 2004-11-30 *** Released version 0.6.5
1912 2004-11-30 *** Released version 0.6.5
1910
1913
1911 2004-11-30 Fernando Perez <fperez@colorado.edu>
1914 2004-11-30 Fernando Perez <fperez@colorado.edu>
1912
1915
1913 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1916 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1914 setting with -d option.
1917 setting with -d option.
1915
1918
1916 * setup.py (docfiles): Fix problem where the doc glob I was using
1919 * setup.py (docfiles): Fix problem where the doc glob I was using
1917 was COMPLETELY BROKEN. It was giving the right files by pure
1920 was COMPLETELY BROKEN. It was giving the right files by pure
1918 accident, but failed once I tried to include ipython.el. Note:
1921 accident, but failed once I tried to include ipython.el. Note:
1919 glob() does NOT allow you to do exclusion on multiple endings!
1922 glob() does NOT allow you to do exclusion on multiple endings!
1920
1923
1921 2004-11-29 Fernando Perez <fperez@colorado.edu>
1924 2004-11-29 Fernando Perez <fperez@colorado.edu>
1922
1925
1923 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1926 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1924 the manpage as the source. Better formatting & consistency.
1927 the manpage as the source. Better formatting & consistency.
1925
1928
1926 * IPython/Magic.py (magic_run): Added new -d option, to run
1929 * IPython/Magic.py (magic_run): Added new -d option, to run
1927 scripts under the control of the python pdb debugger. Note that
1930 scripts under the control of the python pdb debugger. Note that
1928 this required changing the %prun option -d to -D, to avoid a clash
1931 this required changing the %prun option -d to -D, to avoid a clash
1929 (since %run must pass options to %prun, and getopt is too dumb to
1932 (since %run must pass options to %prun, and getopt is too dumb to
1930 handle options with string values with embedded spaces). Thanks
1933 handle options with string values with embedded spaces). Thanks
1931 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1934 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1932 (magic_who_ls): added type matching to %who and %whos, so that one
1935 (magic_who_ls): added type matching to %who and %whos, so that one
1933 can filter their output to only include variables of certain
1936 can filter their output to only include variables of certain
1934 types. Another suggestion by Matthew.
1937 types. Another suggestion by Matthew.
1935 (magic_whos): Added memory summaries in kb and Mb for arrays.
1938 (magic_whos): Added memory summaries in kb and Mb for arrays.
1936 (magic_who): Improve formatting (break lines every 9 vars).
1939 (magic_who): Improve formatting (break lines every 9 vars).
1937
1940
1938 2004-11-28 Fernando Perez <fperez@colorado.edu>
1941 2004-11-28 Fernando Perez <fperez@colorado.edu>
1939
1942
1940 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1943 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1941 cache when empty lines were present.
1944 cache when empty lines were present.
1942
1945
1943 2004-11-24 Fernando Perez <fperez@colorado.edu>
1946 2004-11-24 Fernando Perez <fperez@colorado.edu>
1944
1947
1945 * IPython/usage.py (__doc__): document the re-activated threading
1948 * IPython/usage.py (__doc__): document the re-activated threading
1946 options for WX and GTK.
1949 options for WX and GTK.
1947
1950
1948 2004-11-23 Fernando Perez <fperez@colorado.edu>
1951 2004-11-23 Fernando Perez <fperez@colorado.edu>
1949
1952
1950 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1953 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1951 the -wthread and -gthread options, along with a new -tk one to try
1954 the -wthread and -gthread options, along with a new -tk one to try
1952 and coordinate Tk threading with wx/gtk. The tk support is very
1955 and coordinate Tk threading with wx/gtk. The tk support is very
1953 platform dependent, since it seems to require Tcl and Tk to be
1956 platform dependent, since it seems to require Tcl and Tk to be
1954 built with threads (Fedora1/2 appears NOT to have it, but in
1957 built with threads (Fedora1/2 appears NOT to have it, but in
1955 Prabhu's Debian boxes it works OK). But even with some Tk
1958 Prabhu's Debian boxes it works OK). But even with some Tk
1956 limitations, this is a great improvement.
1959 limitations, this is a great improvement.
1957
1960
1958 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1961 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1959 info in user prompts. Patch by Prabhu.
1962 info in user prompts. Patch by Prabhu.
1960
1963
1961 2004-11-18 Fernando Perez <fperez@colorado.edu>
1964 2004-11-18 Fernando Perez <fperez@colorado.edu>
1962
1965
1963 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1966 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1964 EOFErrors and bail, to avoid infinite loops if a non-terminating
1967 EOFErrors and bail, to avoid infinite loops if a non-terminating
1965 file is fed into ipython. Patch submitted in issue 19 by user,
1968 file is fed into ipython. Patch submitted in issue 19 by user,
1966 many thanks.
1969 many thanks.
1967
1970
1968 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1971 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1969 autoquote/parens in continuation prompts, which can cause lots of
1972 autoquote/parens in continuation prompts, which can cause lots of
1970 problems. Closes roundup issue 20.
1973 problems. Closes roundup issue 20.
1971
1974
1972 2004-11-17 Fernando Perez <fperez@colorado.edu>
1975 2004-11-17 Fernando Perez <fperez@colorado.edu>
1973
1976
1974 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1977 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1975 reported as debian bug #280505. I'm not sure my local changelog
1978 reported as debian bug #280505. I'm not sure my local changelog
1976 entry has the proper debian format (Jack?).
1979 entry has the proper debian format (Jack?).
1977
1980
1978 2004-11-08 *** Released version 0.6.4
1981 2004-11-08 *** Released version 0.6.4
1979
1982
1980 2004-11-08 Fernando Perez <fperez@colorado.edu>
1983 2004-11-08 Fernando Perez <fperez@colorado.edu>
1981
1984
1982 * IPython/iplib.py (init_readline): Fix exit message for Windows
1985 * IPython/iplib.py (init_readline): Fix exit message for Windows
1983 when readline is active. Thanks to a report by Eric Jones
1986 when readline is active. Thanks to a report by Eric Jones
1984 <eric-AT-enthought.com>.
1987 <eric-AT-enthought.com>.
1985
1988
1986 2004-11-07 Fernando Perez <fperez@colorado.edu>
1989 2004-11-07 Fernando Perez <fperez@colorado.edu>
1987
1990
1988 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1991 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1989 sometimes seen by win2k/cygwin users.
1992 sometimes seen by win2k/cygwin users.
1990
1993
1991 2004-11-06 Fernando Perez <fperez@colorado.edu>
1994 2004-11-06 Fernando Perez <fperez@colorado.edu>
1992
1995
1993 * IPython/iplib.py (interact): Change the handling of %Exit from
1996 * IPython/iplib.py (interact): Change the handling of %Exit from
1994 trying to propagate a SystemExit to an internal ipython flag.
1997 trying to propagate a SystemExit to an internal ipython flag.
1995 This is less elegant than using Python's exception mechanism, but
1998 This is less elegant than using Python's exception mechanism, but
1996 I can't get that to work reliably with threads, so under -pylab
1999 I can't get that to work reliably with threads, so under -pylab
1997 %Exit was hanging IPython. Cross-thread exception handling is
2000 %Exit was hanging IPython. Cross-thread exception handling is
1998 really a bitch. Thaks to a bug report by Stephen Walton
2001 really a bitch. Thaks to a bug report by Stephen Walton
1999 <stephen.walton-AT-csun.edu>.
2002 <stephen.walton-AT-csun.edu>.
2000
2003
2001 2004-11-04 Fernando Perez <fperez@colorado.edu>
2004 2004-11-04 Fernando Perez <fperez@colorado.edu>
2002
2005
2003 * IPython/iplib.py (raw_input_original): store a pointer to the
2006 * IPython/iplib.py (raw_input_original): store a pointer to the
2004 true raw_input to harden against code which can modify it
2007 true raw_input to harden against code which can modify it
2005 (wx.py.PyShell does this and would otherwise crash ipython).
2008 (wx.py.PyShell does this and would otherwise crash ipython).
2006 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2009 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2007
2010
2008 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2011 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2009 Ctrl-C problem, which does not mess up the input line.
2012 Ctrl-C problem, which does not mess up the input line.
2010
2013
2011 2004-11-03 Fernando Perez <fperez@colorado.edu>
2014 2004-11-03 Fernando Perez <fperez@colorado.edu>
2012
2015
2013 * IPython/Release.py: Changed licensing to BSD, in all files.
2016 * IPython/Release.py: Changed licensing to BSD, in all files.
2014 (name): lowercase name for tarball/RPM release.
2017 (name): lowercase name for tarball/RPM release.
2015
2018
2016 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2019 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2017 use throughout ipython.
2020 use throughout ipython.
2018
2021
2019 * IPython/Magic.py (Magic._ofind): Switch to using the new
2022 * IPython/Magic.py (Magic._ofind): Switch to using the new
2020 OInspect.getdoc() function.
2023 OInspect.getdoc() function.
2021
2024
2022 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2025 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2023 of the line currently being canceled via Ctrl-C. It's extremely
2026 of the line currently being canceled via Ctrl-C. It's extremely
2024 ugly, but I don't know how to do it better (the problem is one of
2027 ugly, but I don't know how to do it better (the problem is one of
2025 handling cross-thread exceptions).
2028 handling cross-thread exceptions).
2026
2029
2027 2004-10-28 Fernando Perez <fperez@colorado.edu>
2030 2004-10-28 Fernando Perez <fperez@colorado.edu>
2028
2031
2029 * IPython/Shell.py (signal_handler): add signal handlers to trap
2032 * IPython/Shell.py (signal_handler): add signal handlers to trap
2030 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2033 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2031 report by Francesc Alted.
2034 report by Francesc Alted.
2032
2035
2033 2004-10-21 Fernando Perez <fperez@colorado.edu>
2036 2004-10-21 Fernando Perez <fperez@colorado.edu>
2034
2037
2035 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2038 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2036 to % for pysh syntax extensions.
2039 to % for pysh syntax extensions.
2037
2040
2038 2004-10-09 Fernando Perez <fperez@colorado.edu>
2041 2004-10-09 Fernando Perez <fperez@colorado.edu>
2039
2042
2040 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2043 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2041 arrays to print a more useful summary, without calling str(arr).
2044 arrays to print a more useful summary, without calling str(arr).
2042 This avoids the problem of extremely lengthy computations which
2045 This avoids the problem of extremely lengthy computations which
2043 occur if arr is large, and appear to the user as a system lockup
2046 occur if arr is large, and appear to the user as a system lockup
2044 with 100% cpu activity. After a suggestion by Kristian Sandberg
2047 with 100% cpu activity. After a suggestion by Kristian Sandberg
2045 <Kristian.Sandberg@colorado.edu>.
2048 <Kristian.Sandberg@colorado.edu>.
2046 (Magic.__init__): fix bug in global magic escapes not being
2049 (Magic.__init__): fix bug in global magic escapes not being
2047 correctly set.
2050 correctly set.
2048
2051
2049 2004-10-08 Fernando Perez <fperez@colorado.edu>
2052 2004-10-08 Fernando Perez <fperez@colorado.edu>
2050
2053
2051 * IPython/Magic.py (__license__): change to absolute imports of
2054 * IPython/Magic.py (__license__): change to absolute imports of
2052 ipython's own internal packages, to start adapting to the absolute
2055 ipython's own internal packages, to start adapting to the absolute
2053 import requirement of PEP-328.
2056 import requirement of PEP-328.
2054
2057
2055 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2058 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2056 files, and standardize author/license marks through the Release
2059 files, and standardize author/license marks through the Release
2057 module instead of having per/file stuff (except for files with
2060 module instead of having per/file stuff (except for files with
2058 particular licenses, like the MIT/PSF-licensed codes).
2061 particular licenses, like the MIT/PSF-licensed codes).
2059
2062
2060 * IPython/Debugger.py: remove dead code for python 2.1
2063 * IPython/Debugger.py: remove dead code for python 2.1
2061
2064
2062 2004-10-04 Fernando Perez <fperez@colorado.edu>
2065 2004-10-04 Fernando Perez <fperez@colorado.edu>
2063
2066
2064 * IPython/iplib.py (ipmagic): New function for accessing magics
2067 * IPython/iplib.py (ipmagic): New function for accessing magics
2065 via a normal python function call.
2068 via a normal python function call.
2066
2069
2067 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2070 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2068 from '@' to '%', to accomodate the new @decorator syntax of python
2071 from '@' to '%', to accomodate the new @decorator syntax of python
2069 2.4.
2072 2.4.
2070
2073
2071 2004-09-29 Fernando Perez <fperez@colorado.edu>
2074 2004-09-29 Fernando Perez <fperez@colorado.edu>
2072
2075
2073 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2076 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2074 matplotlib.use to prevent running scripts which try to switch
2077 matplotlib.use to prevent running scripts which try to switch
2075 interactive backends from within ipython. This will just crash
2078 interactive backends from within ipython. This will just crash
2076 the python interpreter, so we can't allow it (but a detailed error
2079 the python interpreter, so we can't allow it (but a detailed error
2077 is given to the user).
2080 is given to the user).
2078
2081
2079 2004-09-28 Fernando Perez <fperez@colorado.edu>
2082 2004-09-28 Fernando Perez <fperez@colorado.edu>
2080
2083
2081 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2084 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2082 matplotlib-related fixes so that using @run with non-matplotlib
2085 matplotlib-related fixes so that using @run with non-matplotlib
2083 scripts doesn't pop up spurious plot windows. This requires
2086 scripts doesn't pop up spurious plot windows. This requires
2084 matplotlib >= 0.63, where I had to make some changes as well.
2087 matplotlib >= 0.63, where I had to make some changes as well.
2085
2088
2086 * IPython/ipmaker.py (make_IPython): update version requirement to
2089 * IPython/ipmaker.py (make_IPython): update version requirement to
2087 python 2.2.
2090 python 2.2.
2088
2091
2089 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2092 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2090 banner arg for embedded customization.
2093 banner arg for embedded customization.
2091
2094
2092 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2095 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2093 explicit uses of __IP as the IPython's instance name. Now things
2096 explicit uses of __IP as the IPython's instance name. Now things
2094 are properly handled via the shell.name value. The actual code
2097 are properly handled via the shell.name value. The actual code
2095 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2098 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2096 is much better than before. I'll clean things completely when the
2099 is much better than before. I'll clean things completely when the
2097 magic stuff gets a real overhaul.
2100 magic stuff gets a real overhaul.
2098
2101
2099 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2102 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2100 minor changes to debian dir.
2103 minor changes to debian dir.
2101
2104
2102 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2105 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2103 pointer to the shell itself in the interactive namespace even when
2106 pointer to the shell itself in the interactive namespace even when
2104 a user-supplied dict is provided. This is needed for embedding
2107 a user-supplied dict is provided. This is needed for embedding
2105 purposes (found by tests with Michel Sanner).
2108 purposes (found by tests with Michel Sanner).
2106
2109
2107 2004-09-27 Fernando Perez <fperez@colorado.edu>
2110 2004-09-27 Fernando Perez <fperez@colorado.edu>
2108
2111
2109 * IPython/UserConfig/ipythonrc: remove []{} from
2112 * IPython/UserConfig/ipythonrc: remove []{} from
2110 readline_remove_delims, so that things like [modname.<TAB> do
2113 readline_remove_delims, so that things like [modname.<TAB> do
2111 proper completion. This disables [].TAB, but that's a less common
2114 proper completion. This disables [].TAB, but that's a less common
2112 case than module names in list comprehensions, for example.
2115 case than module names in list comprehensions, for example.
2113 Thanks to a report by Andrea Riciputi.
2116 Thanks to a report by Andrea Riciputi.
2114
2117
2115 2004-09-09 Fernando Perez <fperez@colorado.edu>
2118 2004-09-09 Fernando Perez <fperez@colorado.edu>
2116
2119
2117 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2120 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2118 blocking problems in win32 and osx. Fix by John.
2121 blocking problems in win32 and osx. Fix by John.
2119
2122
2120 2004-09-08 Fernando Perez <fperez@colorado.edu>
2123 2004-09-08 Fernando Perez <fperez@colorado.edu>
2121
2124
2122 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2125 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2123 for Win32 and OSX. Fix by John Hunter.
2126 for Win32 and OSX. Fix by John Hunter.
2124
2127
2125 2004-08-30 *** Released version 0.6.3
2128 2004-08-30 *** Released version 0.6.3
2126
2129
2127 2004-08-30 Fernando Perez <fperez@colorado.edu>
2130 2004-08-30 Fernando Perez <fperez@colorado.edu>
2128
2131
2129 * setup.py (isfile): Add manpages to list of dependent files to be
2132 * setup.py (isfile): Add manpages to list of dependent files to be
2130 updated.
2133 updated.
2131
2134
2132 2004-08-27 Fernando Perez <fperez@colorado.edu>
2135 2004-08-27 Fernando Perez <fperez@colorado.edu>
2133
2136
2134 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2137 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2135 for now. They don't really work with standalone WX/GTK code
2138 for now. They don't really work with standalone WX/GTK code
2136 (though matplotlib IS working fine with both of those backends).
2139 (though matplotlib IS working fine with both of those backends).
2137 This will neeed much more testing. I disabled most things with
2140 This will neeed much more testing. I disabled most things with
2138 comments, so turning it back on later should be pretty easy.
2141 comments, so turning it back on later should be pretty easy.
2139
2142
2140 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2143 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2141 autocalling of expressions like r'foo', by modifying the line
2144 autocalling of expressions like r'foo', by modifying the line
2142 split regexp. Closes
2145 split regexp. Closes
2143 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2146 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2144 Riley <ipythonbugs-AT-sabi.net>.
2147 Riley <ipythonbugs-AT-sabi.net>.
2145 (InteractiveShell.mainloop): honor --nobanner with banner
2148 (InteractiveShell.mainloop): honor --nobanner with banner
2146 extensions.
2149 extensions.
2147
2150
2148 * IPython/Shell.py: Significant refactoring of all classes, so
2151 * IPython/Shell.py: Significant refactoring of all classes, so
2149 that we can really support ALL matplotlib backends and threading
2152 that we can really support ALL matplotlib backends and threading
2150 models (John spotted a bug with Tk which required this). Now we
2153 models (John spotted a bug with Tk which required this). Now we
2151 should support single-threaded, WX-threads and GTK-threads, both
2154 should support single-threaded, WX-threads and GTK-threads, both
2152 for generic code and for matplotlib.
2155 for generic code and for matplotlib.
2153
2156
2154 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2157 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2155 -pylab, to simplify things for users. Will also remove the pylab
2158 -pylab, to simplify things for users. Will also remove the pylab
2156 profile, since now all of matplotlib configuration is directly
2159 profile, since now all of matplotlib configuration is directly
2157 handled here. This also reduces startup time.
2160 handled here. This also reduces startup time.
2158
2161
2159 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2162 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2160 shell wasn't being correctly called. Also in IPShellWX.
2163 shell wasn't being correctly called. Also in IPShellWX.
2161
2164
2162 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2165 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2163 fine-tune banner.
2166 fine-tune banner.
2164
2167
2165 * IPython/numutils.py (spike): Deprecate these spike functions,
2168 * IPython/numutils.py (spike): Deprecate these spike functions,
2166 delete (long deprecated) gnuplot_exec handler.
2169 delete (long deprecated) gnuplot_exec handler.
2167
2170
2168 2004-08-26 Fernando Perez <fperez@colorado.edu>
2171 2004-08-26 Fernando Perez <fperez@colorado.edu>
2169
2172
2170 * ipython.1: Update for threading options, plus some others which
2173 * ipython.1: Update for threading options, plus some others which
2171 were missing.
2174 were missing.
2172
2175
2173 * IPython/ipmaker.py (__call__): Added -wthread option for
2176 * IPython/ipmaker.py (__call__): Added -wthread option for
2174 wxpython thread handling. Make sure threading options are only
2177 wxpython thread handling. Make sure threading options are only
2175 valid at the command line.
2178 valid at the command line.
2176
2179
2177 * scripts/ipython: moved shell selection into a factory function
2180 * scripts/ipython: moved shell selection into a factory function
2178 in Shell.py, to keep the starter script to a minimum.
2181 in Shell.py, to keep the starter script to a minimum.
2179
2182
2180 2004-08-25 Fernando Perez <fperez@colorado.edu>
2183 2004-08-25 Fernando Perez <fperez@colorado.edu>
2181
2184
2182 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2185 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2183 John. Along with some recent changes he made to matplotlib, the
2186 John. Along with some recent changes he made to matplotlib, the
2184 next versions of both systems should work very well together.
2187 next versions of both systems should work very well together.
2185
2188
2186 2004-08-24 Fernando Perez <fperez@colorado.edu>
2189 2004-08-24 Fernando Perez <fperez@colorado.edu>
2187
2190
2188 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2191 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2189 tried to switch the profiling to using hotshot, but I'm getting
2192 tried to switch the profiling to using hotshot, but I'm getting
2190 strange errors from prof.runctx() there. I may be misreading the
2193 strange errors from prof.runctx() there. I may be misreading the
2191 docs, but it looks weird. For now the profiling code will
2194 docs, but it looks weird. For now the profiling code will
2192 continue to use the standard profiler.
2195 continue to use the standard profiler.
2193
2196
2194 2004-08-23 Fernando Perez <fperez@colorado.edu>
2197 2004-08-23 Fernando Perez <fperez@colorado.edu>
2195
2198
2196 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2199 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2197 threaded shell, by John Hunter. It's not quite ready yet, but
2200 threaded shell, by John Hunter. It's not quite ready yet, but
2198 close.
2201 close.
2199
2202
2200 2004-08-22 Fernando Perez <fperez@colorado.edu>
2203 2004-08-22 Fernando Perez <fperez@colorado.edu>
2201
2204
2202 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2205 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2203 in Magic and ultraTB.
2206 in Magic and ultraTB.
2204
2207
2205 * ipython.1: document threading options in manpage.
2208 * ipython.1: document threading options in manpage.
2206
2209
2207 * scripts/ipython: Changed name of -thread option to -gthread,
2210 * scripts/ipython: Changed name of -thread option to -gthread,
2208 since this is GTK specific. I want to leave the door open for a
2211 since this is GTK specific. I want to leave the door open for a
2209 -wthread option for WX, which will most likely be necessary. This
2212 -wthread option for WX, which will most likely be necessary. This
2210 change affects usage and ipmaker as well.
2213 change affects usage and ipmaker as well.
2211
2214
2212 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2215 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2213 handle the matplotlib shell issues. Code by John Hunter
2216 handle the matplotlib shell issues. Code by John Hunter
2214 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2217 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2215 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2218 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2216 broken (and disabled for end users) for now, but it puts the
2219 broken (and disabled for end users) for now, but it puts the
2217 infrastructure in place.
2220 infrastructure in place.
2218
2221
2219 2004-08-21 Fernando Perez <fperez@colorado.edu>
2222 2004-08-21 Fernando Perez <fperez@colorado.edu>
2220
2223
2221 * ipythonrc-pylab: Add matplotlib support.
2224 * ipythonrc-pylab: Add matplotlib support.
2222
2225
2223 * matplotlib_config.py: new files for matplotlib support, part of
2226 * matplotlib_config.py: new files for matplotlib support, part of
2224 the pylab profile.
2227 the pylab profile.
2225
2228
2226 * IPython/usage.py (__doc__): documented the threading options.
2229 * IPython/usage.py (__doc__): documented the threading options.
2227
2230
2228 2004-08-20 Fernando Perez <fperez@colorado.edu>
2231 2004-08-20 Fernando Perez <fperez@colorado.edu>
2229
2232
2230 * ipython: Modified the main calling routine to handle the -thread
2233 * ipython: Modified the main calling routine to handle the -thread
2231 and -mpthread options. This needs to be done as a top-level hack,
2234 and -mpthread options. This needs to be done as a top-level hack,
2232 because it determines which class to instantiate for IPython
2235 because it determines which class to instantiate for IPython
2233 itself.
2236 itself.
2234
2237
2235 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2238 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2236 classes to support multithreaded GTK operation without blocking,
2239 classes to support multithreaded GTK operation without blocking,
2237 and matplotlib with all backends. This is a lot of still very
2240 and matplotlib with all backends. This is a lot of still very
2238 experimental code, and threads are tricky. So it may still have a
2241 experimental code, and threads are tricky. So it may still have a
2239 few rough edges... This code owes a lot to
2242 few rough edges... This code owes a lot to
2240 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2243 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2241 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2244 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2242 to John Hunter for all the matplotlib work.
2245 to John Hunter for all the matplotlib work.
2243
2246
2244 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2247 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2245 options for gtk thread and matplotlib support.
2248 options for gtk thread and matplotlib support.
2246
2249
2247 2004-08-16 Fernando Perez <fperez@colorado.edu>
2250 2004-08-16 Fernando Perez <fperez@colorado.edu>
2248
2251
2249 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2252 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2250 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2253 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2251 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2254 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2252
2255
2253 2004-08-11 Fernando Perez <fperez@colorado.edu>
2256 2004-08-11 Fernando Perez <fperez@colorado.edu>
2254
2257
2255 * setup.py (isfile): Fix build so documentation gets updated for
2258 * setup.py (isfile): Fix build so documentation gets updated for
2256 rpms (it was only done for .tgz builds).
2259 rpms (it was only done for .tgz builds).
2257
2260
2258 2004-08-10 Fernando Perez <fperez@colorado.edu>
2261 2004-08-10 Fernando Perez <fperez@colorado.edu>
2259
2262
2260 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2263 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2261
2264
2262 * iplib.py : Silence syntax error exceptions in tab-completion.
2265 * iplib.py : Silence syntax error exceptions in tab-completion.
2263
2266
2264 2004-08-05 Fernando Perez <fperez@colorado.edu>
2267 2004-08-05 Fernando Perez <fperez@colorado.edu>
2265
2268
2266 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2269 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2267 'color off' mark for continuation prompts. This was causing long
2270 'color off' mark for continuation prompts. This was causing long
2268 continuation lines to mis-wrap.
2271 continuation lines to mis-wrap.
2269
2272
2270 2004-08-01 Fernando Perez <fperez@colorado.edu>
2273 2004-08-01 Fernando Perez <fperez@colorado.edu>
2271
2274
2272 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2275 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2273 for building ipython to be a parameter. All this is necessary
2276 for building ipython to be a parameter. All this is necessary
2274 right now to have a multithreaded version, but this insane
2277 right now to have a multithreaded version, but this insane
2275 non-design will be cleaned up soon. For now, it's a hack that
2278 non-design will be cleaned up soon. For now, it's a hack that
2276 works.
2279 works.
2277
2280
2278 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2281 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2279 args in various places. No bugs so far, but it's a dangerous
2282 args in various places. No bugs so far, but it's a dangerous
2280 practice.
2283 practice.
2281
2284
2282 2004-07-31 Fernando Perez <fperez@colorado.edu>
2285 2004-07-31 Fernando Perez <fperez@colorado.edu>
2283
2286
2284 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2287 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2285 fix completion of files with dots in their names under most
2288 fix completion of files with dots in their names under most
2286 profiles (pysh was OK because the completion order is different).
2289 profiles (pysh was OK because the completion order is different).
2287
2290
2288 2004-07-27 Fernando Perez <fperez@colorado.edu>
2291 2004-07-27 Fernando Perez <fperez@colorado.edu>
2289
2292
2290 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2293 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2291 keywords manually, b/c the one in keyword.py was removed in python
2294 keywords manually, b/c the one in keyword.py was removed in python
2292 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2295 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2293 This is NOT a bug under python 2.3 and earlier.
2296 This is NOT a bug under python 2.3 and earlier.
2294
2297
2295 2004-07-26 Fernando Perez <fperez@colorado.edu>
2298 2004-07-26 Fernando Perez <fperez@colorado.edu>
2296
2299
2297 * IPython/ultraTB.py (VerboseTB.text): Add another
2300 * IPython/ultraTB.py (VerboseTB.text): Add another
2298 linecache.checkcache() call to try to prevent inspect.py from
2301 linecache.checkcache() call to try to prevent inspect.py from
2299 crashing under python 2.3. I think this fixes
2302 crashing under python 2.3. I think this fixes
2300 http://www.scipy.net/roundup/ipython/issue17.
2303 http://www.scipy.net/roundup/ipython/issue17.
2301
2304
2302 2004-07-26 *** Released version 0.6.2
2305 2004-07-26 *** Released version 0.6.2
2303
2306
2304 2004-07-26 Fernando Perez <fperez@colorado.edu>
2307 2004-07-26 Fernando Perez <fperez@colorado.edu>
2305
2308
2306 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2309 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2307 fail for any number.
2310 fail for any number.
2308 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2311 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2309 empty bookmarks.
2312 empty bookmarks.
2310
2313
2311 2004-07-26 *** Released version 0.6.1
2314 2004-07-26 *** Released version 0.6.1
2312
2315
2313 2004-07-26 Fernando Perez <fperez@colorado.edu>
2316 2004-07-26 Fernando Perez <fperez@colorado.edu>
2314
2317
2315 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2318 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2316
2319
2317 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2320 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2318 escaping '()[]{}' in filenames.
2321 escaping '()[]{}' in filenames.
2319
2322
2320 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2323 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2321 Python 2.2 users who lack a proper shlex.split.
2324 Python 2.2 users who lack a proper shlex.split.
2322
2325
2323 2004-07-19 Fernando Perez <fperez@colorado.edu>
2326 2004-07-19 Fernando Perez <fperez@colorado.edu>
2324
2327
2325 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2328 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2326 for reading readline's init file. I follow the normal chain:
2329 for reading readline's init file. I follow the normal chain:
2327 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2330 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2328 report by Mike Heeter. This closes
2331 report by Mike Heeter. This closes
2329 http://www.scipy.net/roundup/ipython/issue16.
2332 http://www.scipy.net/roundup/ipython/issue16.
2330
2333
2331 2004-07-18 Fernando Perez <fperez@colorado.edu>
2334 2004-07-18 Fernando Perez <fperez@colorado.edu>
2332
2335
2333 * IPython/iplib.py (__init__): Add better handling of '\' under
2336 * IPython/iplib.py (__init__): Add better handling of '\' under
2334 Win32 for filenames. After a patch by Ville.
2337 Win32 for filenames. After a patch by Ville.
2335
2338
2336 2004-07-17 Fernando Perez <fperez@colorado.edu>
2339 2004-07-17 Fernando Perez <fperez@colorado.edu>
2337
2340
2338 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2341 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2339 autocalling would be triggered for 'foo is bar' if foo is
2342 autocalling would be triggered for 'foo is bar' if foo is
2340 callable. I also cleaned up the autocall detection code to use a
2343 callable. I also cleaned up the autocall detection code to use a
2341 regexp, which is faster. Bug reported by Alexander Schmolck.
2344 regexp, which is faster. Bug reported by Alexander Schmolck.
2342
2345
2343 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2346 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2344 '?' in them would confuse the help system. Reported by Alex
2347 '?' in them would confuse the help system. Reported by Alex
2345 Schmolck.
2348 Schmolck.
2346
2349
2347 2004-07-16 Fernando Perez <fperez@colorado.edu>
2350 2004-07-16 Fernando Perez <fperez@colorado.edu>
2348
2351
2349 * IPython/GnuplotInteractive.py (__all__): added plot2.
2352 * IPython/GnuplotInteractive.py (__all__): added plot2.
2350
2353
2351 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2354 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2352 plotting dictionaries, lists or tuples of 1d arrays.
2355 plotting dictionaries, lists or tuples of 1d arrays.
2353
2356
2354 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2357 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2355 optimizations.
2358 optimizations.
2356
2359
2357 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2360 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2358 the information which was there from Janko's original IPP code:
2361 the information which was there from Janko's original IPP code:
2359
2362
2360 03.05.99 20:53 porto.ifm.uni-kiel.de
2363 03.05.99 20:53 porto.ifm.uni-kiel.de
2361 --Started changelog.
2364 --Started changelog.
2362 --make clear do what it say it does
2365 --make clear do what it say it does
2363 --added pretty output of lines from inputcache
2366 --added pretty output of lines from inputcache
2364 --Made Logger a mixin class, simplifies handling of switches
2367 --Made Logger a mixin class, simplifies handling of switches
2365 --Added own completer class. .string<TAB> expands to last history
2368 --Added own completer class. .string<TAB> expands to last history
2366 line which starts with string. The new expansion is also present
2369 line which starts with string. The new expansion is also present
2367 with Ctrl-r from the readline library. But this shows, who this
2370 with Ctrl-r from the readline library. But this shows, who this
2368 can be done for other cases.
2371 can be done for other cases.
2369 --Added convention that all shell functions should accept a
2372 --Added convention that all shell functions should accept a
2370 parameter_string This opens the door for different behaviour for
2373 parameter_string This opens the door for different behaviour for
2371 each function. @cd is a good example of this.
2374 each function. @cd is a good example of this.
2372
2375
2373 04.05.99 12:12 porto.ifm.uni-kiel.de
2376 04.05.99 12:12 porto.ifm.uni-kiel.de
2374 --added logfile rotation
2377 --added logfile rotation
2375 --added new mainloop method which freezes first the namespace
2378 --added new mainloop method which freezes first the namespace
2376
2379
2377 07.05.99 21:24 porto.ifm.uni-kiel.de
2380 07.05.99 21:24 porto.ifm.uni-kiel.de
2378 --added the docreader classes. Now there is a help system.
2381 --added the docreader classes. Now there is a help system.
2379 -This is only a first try. Currently it's not easy to put new
2382 -This is only a first try. Currently it's not easy to put new
2380 stuff in the indices. But this is the way to go. Info would be
2383 stuff in the indices. But this is the way to go. Info would be
2381 better, but HTML is every where and not everybody has an info
2384 better, but HTML is every where and not everybody has an info
2382 system installed and it's not so easy to change html-docs to info.
2385 system installed and it's not so easy to change html-docs to info.
2383 --added global logfile option
2386 --added global logfile option
2384 --there is now a hook for object inspection method pinfo needs to
2387 --there is now a hook for object inspection method pinfo needs to
2385 be provided for this. Can be reached by two '??'.
2388 be provided for this. Can be reached by two '??'.
2386
2389
2387 08.05.99 20:51 porto.ifm.uni-kiel.de
2390 08.05.99 20:51 porto.ifm.uni-kiel.de
2388 --added a README
2391 --added a README
2389 --bug in rc file. Something has changed so functions in the rc
2392 --bug in rc file. Something has changed so functions in the rc
2390 file need to reference the shell and not self. Not clear if it's a
2393 file need to reference the shell and not self. Not clear if it's a
2391 bug or feature.
2394 bug or feature.
2392 --changed rc file for new behavior
2395 --changed rc file for new behavior
2393
2396
2394 2004-07-15 Fernando Perez <fperez@colorado.edu>
2397 2004-07-15 Fernando Perez <fperez@colorado.edu>
2395
2398
2396 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2399 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2397 cache was falling out of sync in bizarre manners when multi-line
2400 cache was falling out of sync in bizarre manners when multi-line
2398 input was present. Minor optimizations and cleanup.
2401 input was present. Minor optimizations and cleanup.
2399
2402
2400 (Logger): Remove old Changelog info for cleanup. This is the
2403 (Logger): Remove old Changelog info for cleanup. This is the
2401 information which was there from Janko's original code:
2404 information which was there from Janko's original code:
2402
2405
2403 Changes to Logger: - made the default log filename a parameter
2406 Changes to Logger: - made the default log filename a parameter
2404
2407
2405 - put a check for lines beginning with !@? in log(). Needed
2408 - put a check for lines beginning with !@? in log(). Needed
2406 (even if the handlers properly log their lines) for mid-session
2409 (even if the handlers properly log their lines) for mid-session
2407 logging activation to work properly. Without this, lines logged
2410 logging activation to work properly. Without this, lines logged
2408 in mid session, which get read from the cache, would end up
2411 in mid session, which get read from the cache, would end up
2409 'bare' (with !@? in the open) in the log. Now they are caught
2412 'bare' (with !@? in the open) in the log. Now they are caught
2410 and prepended with a #.
2413 and prepended with a #.
2411
2414
2412 * IPython/iplib.py (InteractiveShell.init_readline): added check
2415 * IPython/iplib.py (InteractiveShell.init_readline): added check
2413 in case MagicCompleter fails to be defined, so we don't crash.
2416 in case MagicCompleter fails to be defined, so we don't crash.
2414
2417
2415 2004-07-13 Fernando Perez <fperez@colorado.edu>
2418 2004-07-13 Fernando Perez <fperez@colorado.edu>
2416
2419
2417 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2420 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2418 of EPS if the requested filename ends in '.eps'.
2421 of EPS if the requested filename ends in '.eps'.
2419
2422
2420 2004-07-04 Fernando Perez <fperez@colorado.edu>
2423 2004-07-04 Fernando Perez <fperez@colorado.edu>
2421
2424
2422 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2425 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2423 escaping of quotes when calling the shell.
2426 escaping of quotes when calling the shell.
2424
2427
2425 2004-07-02 Fernando Perez <fperez@colorado.edu>
2428 2004-07-02 Fernando Perez <fperez@colorado.edu>
2426
2429
2427 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2430 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2428 gettext not working because we were clobbering '_'. Fixes
2431 gettext not working because we were clobbering '_'. Fixes
2429 http://www.scipy.net/roundup/ipython/issue6.
2432 http://www.scipy.net/roundup/ipython/issue6.
2430
2433
2431 2004-07-01 Fernando Perez <fperez@colorado.edu>
2434 2004-07-01 Fernando Perez <fperez@colorado.edu>
2432
2435
2433 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2436 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2434 into @cd. Patch by Ville.
2437 into @cd. Patch by Ville.
2435
2438
2436 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2439 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2437 new function to store things after ipmaker runs. Patch by Ville.
2440 new function to store things after ipmaker runs. Patch by Ville.
2438 Eventually this will go away once ipmaker is removed and the class
2441 Eventually this will go away once ipmaker is removed and the class
2439 gets cleaned up, but for now it's ok. Key functionality here is
2442 gets cleaned up, but for now it's ok. Key functionality here is
2440 the addition of the persistent storage mechanism, a dict for
2443 the addition of the persistent storage mechanism, a dict for
2441 keeping data across sessions (for now just bookmarks, but more can
2444 keeping data across sessions (for now just bookmarks, but more can
2442 be implemented later).
2445 be implemented later).
2443
2446
2444 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2447 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2445 persistent across sections. Patch by Ville, I modified it
2448 persistent across sections. Patch by Ville, I modified it
2446 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2449 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2447 added a '-l' option to list all bookmarks.
2450 added a '-l' option to list all bookmarks.
2448
2451
2449 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2452 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2450 center for cleanup. Registered with atexit.register(). I moved
2453 center for cleanup. Registered with atexit.register(). I moved
2451 here the old exit_cleanup(). After a patch by Ville.
2454 here the old exit_cleanup(). After a patch by Ville.
2452
2455
2453 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2456 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2454 characters in the hacked shlex_split for python 2.2.
2457 characters in the hacked shlex_split for python 2.2.
2455
2458
2456 * IPython/iplib.py (file_matches): more fixes to filenames with
2459 * IPython/iplib.py (file_matches): more fixes to filenames with
2457 whitespace in them. It's not perfect, but limitations in python's
2460 whitespace in them. It's not perfect, but limitations in python's
2458 readline make it impossible to go further.
2461 readline make it impossible to go further.
2459
2462
2460 2004-06-29 Fernando Perez <fperez@colorado.edu>
2463 2004-06-29 Fernando Perez <fperez@colorado.edu>
2461
2464
2462 * IPython/iplib.py (file_matches): escape whitespace correctly in
2465 * IPython/iplib.py (file_matches): escape whitespace correctly in
2463 filename completions. Bug reported by Ville.
2466 filename completions. Bug reported by Ville.
2464
2467
2465 2004-06-28 Fernando Perez <fperez@colorado.edu>
2468 2004-06-28 Fernando Perez <fperez@colorado.edu>
2466
2469
2467 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2470 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2468 the history file will be called 'history-PROFNAME' (or just
2471 the history file will be called 'history-PROFNAME' (or just
2469 'history' if no profile is loaded). I was getting annoyed at
2472 'history' if no profile is loaded). I was getting annoyed at
2470 getting my Numerical work history clobbered by pysh sessions.
2473 getting my Numerical work history clobbered by pysh sessions.
2471
2474
2472 * IPython/iplib.py (InteractiveShell.__init__): Internal
2475 * IPython/iplib.py (InteractiveShell.__init__): Internal
2473 getoutputerror() function so that we can honor the system_verbose
2476 getoutputerror() function so that we can honor the system_verbose
2474 flag for _all_ system calls. I also added escaping of #
2477 flag for _all_ system calls. I also added escaping of #
2475 characters here to avoid confusing Itpl.
2478 characters here to avoid confusing Itpl.
2476
2479
2477 * IPython/Magic.py (shlex_split): removed call to shell in
2480 * IPython/Magic.py (shlex_split): removed call to shell in
2478 parse_options and replaced it with shlex.split(). The annoying
2481 parse_options and replaced it with shlex.split(). The annoying
2479 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2482 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2480 to backport it from 2.3, with several frail hacks (the shlex
2483 to backport it from 2.3, with several frail hacks (the shlex
2481 module is rather limited in 2.2). Thanks to a suggestion by Ville
2484 module is rather limited in 2.2). Thanks to a suggestion by Ville
2482 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2485 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2483 problem.
2486 problem.
2484
2487
2485 (Magic.magic_system_verbose): new toggle to print the actual
2488 (Magic.magic_system_verbose): new toggle to print the actual
2486 system calls made by ipython. Mainly for debugging purposes.
2489 system calls made by ipython. Mainly for debugging purposes.
2487
2490
2488 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2491 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2489 doesn't support persistence. Reported (and fix suggested) by
2492 doesn't support persistence. Reported (and fix suggested) by
2490 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2493 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2491
2494
2492 2004-06-26 Fernando Perez <fperez@colorado.edu>
2495 2004-06-26 Fernando Perez <fperez@colorado.edu>
2493
2496
2494 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2497 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2495 continue prompts.
2498 continue prompts.
2496
2499
2497 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2500 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2498 function (basically a big docstring) and a few more things here to
2501 function (basically a big docstring) and a few more things here to
2499 speedup startup. pysh.py is now very lightweight. We want because
2502 speedup startup. pysh.py is now very lightweight. We want because
2500 it gets execfile'd, while InterpreterExec gets imported, so
2503 it gets execfile'd, while InterpreterExec gets imported, so
2501 byte-compilation saves time.
2504 byte-compilation saves time.
2502
2505
2503 2004-06-25 Fernando Perez <fperez@colorado.edu>
2506 2004-06-25 Fernando Perez <fperez@colorado.edu>
2504
2507
2505 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2508 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2506 -NUM', which was recently broken.
2509 -NUM', which was recently broken.
2507
2510
2508 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2511 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2509 in multi-line input (but not !!, which doesn't make sense there).
2512 in multi-line input (but not !!, which doesn't make sense there).
2510
2513
2511 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2514 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2512 It's just too useful, and people can turn it off in the less
2515 It's just too useful, and people can turn it off in the less
2513 common cases where it's a problem.
2516 common cases where it's a problem.
2514
2517
2515 2004-06-24 Fernando Perez <fperez@colorado.edu>
2518 2004-06-24 Fernando Perez <fperez@colorado.edu>
2516
2519
2517 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2520 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2518 special syntaxes (like alias calling) is now allied in multi-line
2521 special syntaxes (like alias calling) is now allied in multi-line
2519 input. This is still _very_ experimental, but it's necessary for
2522 input. This is still _very_ experimental, but it's necessary for
2520 efficient shell usage combining python looping syntax with system
2523 efficient shell usage combining python looping syntax with system
2521 calls. For now it's restricted to aliases, I don't think it
2524 calls. For now it's restricted to aliases, I don't think it
2522 really even makes sense to have this for magics.
2525 really even makes sense to have this for magics.
2523
2526
2524 2004-06-23 Fernando Perez <fperez@colorado.edu>
2527 2004-06-23 Fernando Perez <fperez@colorado.edu>
2525
2528
2526 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2529 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2527 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2530 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2528
2531
2529 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2532 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2530 extensions under Windows (after code sent by Gary Bishop). The
2533 extensions under Windows (after code sent by Gary Bishop). The
2531 extensions considered 'executable' are stored in IPython's rc
2534 extensions considered 'executable' are stored in IPython's rc
2532 structure as win_exec_ext.
2535 structure as win_exec_ext.
2533
2536
2534 * IPython/genutils.py (shell): new function, like system() but
2537 * IPython/genutils.py (shell): new function, like system() but
2535 without return value. Very useful for interactive shell work.
2538 without return value. Very useful for interactive shell work.
2536
2539
2537 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2540 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2538 delete aliases.
2541 delete aliases.
2539
2542
2540 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2543 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2541 sure that the alias table doesn't contain python keywords.
2544 sure that the alias table doesn't contain python keywords.
2542
2545
2543 2004-06-21 Fernando Perez <fperez@colorado.edu>
2546 2004-06-21 Fernando Perez <fperez@colorado.edu>
2544
2547
2545 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2548 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2546 non-existent items are found in $PATH. Reported by Thorsten.
2549 non-existent items are found in $PATH. Reported by Thorsten.
2547
2550
2548 2004-06-20 Fernando Perez <fperez@colorado.edu>
2551 2004-06-20 Fernando Perez <fperez@colorado.edu>
2549
2552
2550 * IPython/iplib.py (complete): modified the completer so that the
2553 * IPython/iplib.py (complete): modified the completer so that the
2551 order of priorities can be easily changed at runtime.
2554 order of priorities can be easily changed at runtime.
2552
2555
2553 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2556 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2554 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2557 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2555
2558
2556 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2559 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2557 expand Python variables prepended with $ in all system calls. The
2560 expand Python variables prepended with $ in all system calls. The
2558 same was done to InteractiveShell.handle_shell_escape. Now all
2561 same was done to InteractiveShell.handle_shell_escape. Now all
2559 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2562 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2560 expansion of python variables and expressions according to the
2563 expansion of python variables and expressions according to the
2561 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2564 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2562
2565
2563 Though PEP-215 has been rejected, a similar (but simpler) one
2566 Though PEP-215 has been rejected, a similar (but simpler) one
2564 seems like it will go into Python 2.4, PEP-292 -
2567 seems like it will go into Python 2.4, PEP-292 -
2565 http://www.python.org/peps/pep-0292.html.
2568 http://www.python.org/peps/pep-0292.html.
2566
2569
2567 I'll keep the full syntax of PEP-215, since IPython has since the
2570 I'll keep the full syntax of PEP-215, since IPython has since the
2568 start used Ka-Ping Yee's reference implementation discussed there
2571 start used Ka-Ping Yee's reference implementation discussed there
2569 (Itpl), and I actually like the powerful semantics it offers.
2572 (Itpl), and I actually like the powerful semantics it offers.
2570
2573
2571 In order to access normal shell variables, the $ has to be escaped
2574 In order to access normal shell variables, the $ has to be escaped
2572 via an extra $. For example:
2575 via an extra $. For example:
2573
2576
2574 In [7]: PATH='a python variable'
2577 In [7]: PATH='a python variable'
2575
2578
2576 In [8]: !echo $PATH
2579 In [8]: !echo $PATH
2577 a python variable
2580 a python variable
2578
2581
2579 In [9]: !echo $$PATH
2582 In [9]: !echo $$PATH
2580 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2583 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2581
2584
2582 (Magic.parse_options): escape $ so the shell doesn't evaluate
2585 (Magic.parse_options): escape $ so the shell doesn't evaluate
2583 things prematurely.
2586 things prematurely.
2584
2587
2585 * IPython/iplib.py (InteractiveShell.call_alias): added the
2588 * IPython/iplib.py (InteractiveShell.call_alias): added the
2586 ability for aliases to expand python variables via $.
2589 ability for aliases to expand python variables via $.
2587
2590
2588 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2591 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2589 system, now there's a @rehash/@rehashx pair of magics. These work
2592 system, now there's a @rehash/@rehashx pair of magics. These work
2590 like the csh rehash command, and can be invoked at any time. They
2593 like the csh rehash command, and can be invoked at any time. They
2591 build a table of aliases to everything in the user's $PATH
2594 build a table of aliases to everything in the user's $PATH
2592 (@rehash uses everything, @rehashx is slower but only adds
2595 (@rehash uses everything, @rehashx is slower but only adds
2593 executable files). With this, the pysh.py-based shell profile can
2596 executable files). With this, the pysh.py-based shell profile can
2594 now simply call rehash upon startup, and full access to all
2597 now simply call rehash upon startup, and full access to all
2595 programs in the user's path is obtained.
2598 programs in the user's path is obtained.
2596
2599
2597 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2600 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2598 functionality is now fully in place. I removed the old dynamic
2601 functionality is now fully in place. I removed the old dynamic
2599 code generation based approach, in favor of a much lighter one
2602 code generation based approach, in favor of a much lighter one
2600 based on a simple dict. The advantage is that this allows me to
2603 based on a simple dict. The advantage is that this allows me to
2601 now have thousands of aliases with negligible cost (unthinkable
2604 now have thousands of aliases with negligible cost (unthinkable
2602 with the old system).
2605 with the old system).
2603
2606
2604 2004-06-19 Fernando Perez <fperez@colorado.edu>
2607 2004-06-19 Fernando Perez <fperez@colorado.edu>
2605
2608
2606 * IPython/iplib.py (__init__): extended MagicCompleter class to
2609 * IPython/iplib.py (__init__): extended MagicCompleter class to
2607 also complete (last in priority) on user aliases.
2610 also complete (last in priority) on user aliases.
2608
2611
2609 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2612 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2610 call to eval.
2613 call to eval.
2611 (ItplNS.__init__): Added a new class which functions like Itpl,
2614 (ItplNS.__init__): Added a new class which functions like Itpl,
2612 but allows configuring the namespace for the evaluation to occur
2615 but allows configuring the namespace for the evaluation to occur
2613 in.
2616 in.
2614
2617
2615 2004-06-18 Fernando Perez <fperez@colorado.edu>
2618 2004-06-18 Fernando Perez <fperez@colorado.edu>
2616
2619
2617 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2620 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2618 better message when 'exit' or 'quit' are typed (a common newbie
2621 better message when 'exit' or 'quit' are typed (a common newbie
2619 confusion).
2622 confusion).
2620
2623
2621 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2624 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2622 check for Windows users.
2625 check for Windows users.
2623
2626
2624 * IPython/iplib.py (InteractiveShell.user_setup): removed
2627 * IPython/iplib.py (InteractiveShell.user_setup): removed
2625 disabling of colors for Windows. I'll test at runtime and issue a
2628 disabling of colors for Windows. I'll test at runtime and issue a
2626 warning if Gary's readline isn't found, as to nudge users to
2629 warning if Gary's readline isn't found, as to nudge users to
2627 download it.
2630 download it.
2628
2631
2629 2004-06-16 Fernando Perez <fperez@colorado.edu>
2632 2004-06-16 Fernando Perez <fperez@colorado.edu>
2630
2633
2631 * IPython/genutils.py (Stream.__init__): changed to print errors
2634 * IPython/genutils.py (Stream.__init__): changed to print errors
2632 to sys.stderr. I had a circular dependency here. Now it's
2635 to sys.stderr. I had a circular dependency here. Now it's
2633 possible to run ipython as IDLE's shell (consider this pre-alpha,
2636 possible to run ipython as IDLE's shell (consider this pre-alpha,
2634 since true stdout things end up in the starting terminal instead
2637 since true stdout things end up in the starting terminal instead
2635 of IDLE's out).
2638 of IDLE's out).
2636
2639
2637 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2640 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2638 users who haven't # updated their prompt_in2 definitions. Remove
2641 users who haven't # updated their prompt_in2 definitions. Remove
2639 eventually.
2642 eventually.
2640 (multiple_replace): added credit to original ASPN recipe.
2643 (multiple_replace): added credit to original ASPN recipe.
2641
2644
2642 2004-06-15 Fernando Perez <fperez@colorado.edu>
2645 2004-06-15 Fernando Perez <fperez@colorado.edu>
2643
2646
2644 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2647 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2645 list of auto-defined aliases.
2648 list of auto-defined aliases.
2646
2649
2647 2004-06-13 Fernando Perez <fperez@colorado.edu>
2650 2004-06-13 Fernando Perez <fperez@colorado.edu>
2648
2651
2649 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2652 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2650 install was really requested (so setup.py can be used for other
2653 install was really requested (so setup.py can be used for other
2651 things under Windows).
2654 things under Windows).
2652
2655
2653 2004-06-10 Fernando Perez <fperez@colorado.edu>
2656 2004-06-10 Fernando Perez <fperez@colorado.edu>
2654
2657
2655 * IPython/Logger.py (Logger.create_log): Manually remove any old
2658 * IPython/Logger.py (Logger.create_log): Manually remove any old
2656 backup, since os.remove may fail under Windows. Fixes bug
2659 backup, since os.remove may fail under Windows. Fixes bug
2657 reported by Thorsten.
2660 reported by Thorsten.
2658
2661
2659 2004-06-09 Fernando Perez <fperez@colorado.edu>
2662 2004-06-09 Fernando Perez <fperez@colorado.edu>
2660
2663
2661 * examples/example-embed.py: fixed all references to %n (replaced
2664 * examples/example-embed.py: fixed all references to %n (replaced
2662 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2665 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2663 for all examples and the manual as well.
2666 for all examples and the manual as well.
2664
2667
2665 2004-06-08 Fernando Perez <fperez@colorado.edu>
2668 2004-06-08 Fernando Perez <fperez@colorado.edu>
2666
2669
2667 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2670 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2668 alignment and color management. All 3 prompt subsystems now
2671 alignment and color management. All 3 prompt subsystems now
2669 inherit from BasePrompt.
2672 inherit from BasePrompt.
2670
2673
2671 * tools/release: updates for windows installer build and tag rpms
2674 * tools/release: updates for windows installer build and tag rpms
2672 with python version (since paths are fixed).
2675 with python version (since paths are fixed).
2673
2676
2674 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2677 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2675 which will become eventually obsolete. Also fixed the default
2678 which will become eventually obsolete. Also fixed the default
2676 prompt_in2 to use \D, so at least new users start with the correct
2679 prompt_in2 to use \D, so at least new users start with the correct
2677 defaults.
2680 defaults.
2678 WARNING: Users with existing ipythonrc files will need to apply
2681 WARNING: Users with existing ipythonrc files will need to apply
2679 this fix manually!
2682 this fix manually!
2680
2683
2681 * setup.py: make windows installer (.exe). This is finally the
2684 * setup.py: make windows installer (.exe). This is finally the
2682 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2685 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2683 which I hadn't included because it required Python 2.3 (or recent
2686 which I hadn't included because it required Python 2.3 (or recent
2684 distutils).
2687 distutils).
2685
2688
2686 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2689 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2687 usage of new '\D' escape.
2690 usage of new '\D' escape.
2688
2691
2689 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2692 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2690 lacks os.getuid())
2693 lacks os.getuid())
2691 (CachedOutput.set_colors): Added the ability to turn coloring
2694 (CachedOutput.set_colors): Added the ability to turn coloring
2692 on/off with @colors even for manually defined prompt colors. It
2695 on/off with @colors even for manually defined prompt colors. It
2693 uses a nasty global, but it works safely and via the generic color
2696 uses a nasty global, but it works safely and via the generic color
2694 handling mechanism.
2697 handling mechanism.
2695 (Prompt2.__init__): Introduced new escape '\D' for continuation
2698 (Prompt2.__init__): Introduced new escape '\D' for continuation
2696 prompts. It represents the counter ('\#') as dots.
2699 prompts. It represents the counter ('\#') as dots.
2697 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2700 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2698 need to update their ipythonrc files and replace '%n' with '\D' in
2701 need to update their ipythonrc files and replace '%n' with '\D' in
2699 their prompt_in2 settings everywhere. Sorry, but there's
2702 their prompt_in2 settings everywhere. Sorry, but there's
2700 otherwise no clean way to get all prompts to properly align. The
2703 otherwise no clean way to get all prompts to properly align. The
2701 ipythonrc shipped with IPython has been updated.
2704 ipythonrc shipped with IPython has been updated.
2702
2705
2703 2004-06-07 Fernando Perez <fperez@colorado.edu>
2706 2004-06-07 Fernando Perez <fperez@colorado.edu>
2704
2707
2705 * setup.py (isfile): Pass local_icons option to latex2html, so the
2708 * setup.py (isfile): Pass local_icons option to latex2html, so the
2706 resulting HTML file is self-contained. Thanks to
2709 resulting HTML file is self-contained. Thanks to
2707 dryice-AT-liu.com.cn for the tip.
2710 dryice-AT-liu.com.cn for the tip.
2708
2711
2709 * pysh.py: I created a new profile 'shell', which implements a
2712 * pysh.py: I created a new profile 'shell', which implements a
2710 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2713 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2711 system shell, nor will it become one anytime soon. It's mainly
2714 system shell, nor will it become one anytime soon. It's mainly
2712 meant to illustrate the use of the new flexible bash-like prompts.
2715 meant to illustrate the use of the new flexible bash-like prompts.
2713 I guess it could be used by hardy souls for true shell management,
2716 I guess it could be used by hardy souls for true shell management,
2714 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2717 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2715 profile. This uses the InterpreterExec extension provided by
2718 profile. This uses the InterpreterExec extension provided by
2716 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2719 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2717
2720
2718 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2721 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2719 auto-align itself with the length of the previous input prompt
2722 auto-align itself with the length of the previous input prompt
2720 (taking into account the invisible color escapes).
2723 (taking into account the invisible color escapes).
2721 (CachedOutput.__init__): Large restructuring of this class. Now
2724 (CachedOutput.__init__): Large restructuring of this class. Now
2722 all three prompts (primary1, primary2, output) are proper objects,
2725 all three prompts (primary1, primary2, output) are proper objects,
2723 managed by the 'parent' CachedOutput class. The code is still a
2726 managed by the 'parent' CachedOutput class. The code is still a
2724 bit hackish (all prompts share state via a pointer to the cache),
2727 bit hackish (all prompts share state via a pointer to the cache),
2725 but it's overall far cleaner than before.
2728 but it's overall far cleaner than before.
2726
2729
2727 * IPython/genutils.py (getoutputerror): modified to add verbose,
2730 * IPython/genutils.py (getoutputerror): modified to add verbose,
2728 debug and header options. This makes the interface of all getout*
2731 debug and header options. This makes the interface of all getout*
2729 functions uniform.
2732 functions uniform.
2730 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2733 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2731
2734
2732 * IPython/Magic.py (Magic.default_option): added a function to
2735 * IPython/Magic.py (Magic.default_option): added a function to
2733 allow registering default options for any magic command. This
2736 allow registering default options for any magic command. This
2734 makes it easy to have profiles which customize the magics globally
2737 makes it easy to have profiles which customize the magics globally
2735 for a certain use. The values set through this function are
2738 for a certain use. The values set through this function are
2736 picked up by the parse_options() method, which all magics should
2739 picked up by the parse_options() method, which all magics should
2737 use to parse their options.
2740 use to parse their options.
2738
2741
2739 * IPython/genutils.py (warn): modified the warnings framework to
2742 * IPython/genutils.py (warn): modified the warnings framework to
2740 use the Term I/O class. I'm trying to slowly unify all of
2743 use the Term I/O class. I'm trying to slowly unify all of
2741 IPython's I/O operations to pass through Term.
2744 IPython's I/O operations to pass through Term.
2742
2745
2743 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2746 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2744 the secondary prompt to correctly match the length of the primary
2747 the secondary prompt to correctly match the length of the primary
2745 one for any prompt. Now multi-line code will properly line up
2748 one for any prompt. Now multi-line code will properly line up
2746 even for path dependent prompts, such as the new ones available
2749 even for path dependent prompts, such as the new ones available
2747 via the prompt_specials.
2750 via the prompt_specials.
2748
2751
2749 2004-06-06 Fernando Perez <fperez@colorado.edu>
2752 2004-06-06 Fernando Perez <fperez@colorado.edu>
2750
2753
2751 * IPython/Prompts.py (prompt_specials): Added the ability to have
2754 * IPython/Prompts.py (prompt_specials): Added the ability to have
2752 bash-like special sequences in the prompts, which get
2755 bash-like special sequences in the prompts, which get
2753 automatically expanded. Things like hostname, current working
2756 automatically expanded. Things like hostname, current working
2754 directory and username are implemented already, but it's easy to
2757 directory and username are implemented already, but it's easy to
2755 add more in the future. Thanks to a patch by W.J. van der Laan
2758 add more in the future. Thanks to a patch by W.J. van der Laan
2756 <gnufnork-AT-hetdigitalegat.nl>
2759 <gnufnork-AT-hetdigitalegat.nl>
2757 (prompt_specials): Added color support for prompt strings, so
2760 (prompt_specials): Added color support for prompt strings, so
2758 users can define arbitrary color setups for their prompts.
2761 users can define arbitrary color setups for their prompts.
2759
2762
2760 2004-06-05 Fernando Perez <fperez@colorado.edu>
2763 2004-06-05 Fernando Perez <fperez@colorado.edu>
2761
2764
2762 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2765 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2763 code to load Gary Bishop's readline and configure it
2766 code to load Gary Bishop's readline and configure it
2764 automatically. Thanks to Gary for help on this.
2767 automatically. Thanks to Gary for help on this.
2765
2768
2766 2004-06-01 Fernando Perez <fperez@colorado.edu>
2769 2004-06-01 Fernando Perez <fperez@colorado.edu>
2767
2770
2768 * IPython/Logger.py (Logger.create_log): fix bug for logging
2771 * IPython/Logger.py (Logger.create_log): fix bug for logging
2769 with no filename (previous fix was incomplete).
2772 with no filename (previous fix was incomplete).
2770
2773
2771 2004-05-25 Fernando Perez <fperez@colorado.edu>
2774 2004-05-25 Fernando Perez <fperez@colorado.edu>
2772
2775
2773 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2776 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2774 parens would get passed to the shell.
2777 parens would get passed to the shell.
2775
2778
2776 2004-05-20 Fernando Perez <fperez@colorado.edu>
2779 2004-05-20 Fernando Perez <fperez@colorado.edu>
2777
2780
2778 * IPython/Magic.py (Magic.magic_prun): changed default profile
2781 * IPython/Magic.py (Magic.magic_prun): changed default profile
2779 sort order to 'time' (the more common profiling need).
2782 sort order to 'time' (the more common profiling need).
2780
2783
2781 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2784 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2782 so that source code shown is guaranteed in sync with the file on
2785 so that source code shown is guaranteed in sync with the file on
2783 disk (also changed in psource). Similar fix to the one for
2786 disk (also changed in psource). Similar fix to the one for
2784 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2787 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2785 <yann.ledu-AT-noos.fr>.
2788 <yann.ledu-AT-noos.fr>.
2786
2789
2787 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2790 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2788 with a single option would not be correctly parsed. Closes
2791 with a single option would not be correctly parsed. Closes
2789 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2792 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2790 introduced in 0.6.0 (on 2004-05-06).
2793 introduced in 0.6.0 (on 2004-05-06).
2791
2794
2792 2004-05-13 *** Released version 0.6.0
2795 2004-05-13 *** Released version 0.6.0
2793
2796
2794 2004-05-13 Fernando Perez <fperez@colorado.edu>
2797 2004-05-13 Fernando Perez <fperez@colorado.edu>
2795
2798
2796 * debian/: Added debian/ directory to CVS, so that debian support
2799 * debian/: Added debian/ directory to CVS, so that debian support
2797 is publicly accessible. The debian package is maintained by Jack
2800 is publicly accessible. The debian package is maintained by Jack
2798 Moffit <jack-AT-xiph.org>.
2801 Moffit <jack-AT-xiph.org>.
2799
2802
2800 * Documentation: included the notes about an ipython-based system
2803 * Documentation: included the notes about an ipython-based system
2801 shell (the hypothetical 'pysh') into the new_design.pdf document,
2804 shell (the hypothetical 'pysh') into the new_design.pdf document,
2802 so that these ideas get distributed to users along with the
2805 so that these ideas get distributed to users along with the
2803 official documentation.
2806 official documentation.
2804
2807
2805 2004-05-10 Fernando Perez <fperez@colorado.edu>
2808 2004-05-10 Fernando Perez <fperez@colorado.edu>
2806
2809
2807 * IPython/Logger.py (Logger.create_log): fix recently introduced
2810 * IPython/Logger.py (Logger.create_log): fix recently introduced
2808 bug (misindented line) where logstart would fail when not given an
2811 bug (misindented line) where logstart would fail when not given an
2809 explicit filename.
2812 explicit filename.
2810
2813
2811 2004-05-09 Fernando Perez <fperez@colorado.edu>
2814 2004-05-09 Fernando Perez <fperez@colorado.edu>
2812
2815
2813 * IPython/Magic.py (Magic.parse_options): skip system call when
2816 * IPython/Magic.py (Magic.parse_options): skip system call when
2814 there are no options to look for. Faster, cleaner for the common
2817 there are no options to look for. Faster, cleaner for the common
2815 case.
2818 case.
2816
2819
2817 * Documentation: many updates to the manual: describing Windows
2820 * Documentation: many updates to the manual: describing Windows
2818 support better, Gnuplot updates, credits, misc small stuff. Also
2821 support better, Gnuplot updates, credits, misc small stuff. Also
2819 updated the new_design doc a bit.
2822 updated the new_design doc a bit.
2820
2823
2821 2004-05-06 *** Released version 0.6.0.rc1
2824 2004-05-06 *** Released version 0.6.0.rc1
2822
2825
2823 2004-05-06 Fernando Perez <fperez@colorado.edu>
2826 2004-05-06 Fernando Perez <fperez@colorado.edu>
2824
2827
2825 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2828 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2826 operations to use the vastly more efficient list/''.join() method.
2829 operations to use the vastly more efficient list/''.join() method.
2827 (FormattedTB.text): Fix
2830 (FormattedTB.text): Fix
2828 http://www.scipy.net/roundup/ipython/issue12 - exception source
2831 http://www.scipy.net/roundup/ipython/issue12 - exception source
2829 extract not updated after reload. Thanks to Mike Salib
2832 extract not updated after reload. Thanks to Mike Salib
2830 <msalib-AT-mit.edu> for pinning the source of the problem.
2833 <msalib-AT-mit.edu> for pinning the source of the problem.
2831 Fortunately, the solution works inside ipython and doesn't require
2834 Fortunately, the solution works inside ipython and doesn't require
2832 any changes to python proper.
2835 any changes to python proper.
2833
2836
2834 * IPython/Magic.py (Magic.parse_options): Improved to process the
2837 * IPython/Magic.py (Magic.parse_options): Improved to process the
2835 argument list as a true shell would (by actually using the
2838 argument list as a true shell would (by actually using the
2836 underlying system shell). This way, all @magics automatically get
2839 underlying system shell). This way, all @magics automatically get
2837 shell expansion for variables. Thanks to a comment by Alex
2840 shell expansion for variables. Thanks to a comment by Alex
2838 Schmolck.
2841 Schmolck.
2839
2842
2840 2004-04-04 Fernando Perez <fperez@colorado.edu>
2843 2004-04-04 Fernando Perez <fperez@colorado.edu>
2841
2844
2842 * IPython/iplib.py (InteractiveShell.interact): Added a special
2845 * IPython/iplib.py (InteractiveShell.interact): Added a special
2843 trap for a debugger quit exception, which is basically impossible
2846 trap for a debugger quit exception, which is basically impossible
2844 to handle by normal mechanisms, given what pdb does to the stack.
2847 to handle by normal mechanisms, given what pdb does to the stack.
2845 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2848 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2846
2849
2847 2004-04-03 Fernando Perez <fperez@colorado.edu>
2850 2004-04-03 Fernando Perez <fperez@colorado.edu>
2848
2851
2849 * IPython/genutils.py (Term): Standardized the names of the Term
2852 * IPython/genutils.py (Term): Standardized the names of the Term
2850 class streams to cin/cout/cerr, following C++ naming conventions
2853 class streams to cin/cout/cerr, following C++ naming conventions
2851 (I can't use in/out/err because 'in' is not a valid attribute
2854 (I can't use in/out/err because 'in' is not a valid attribute
2852 name).
2855 name).
2853
2856
2854 * IPython/iplib.py (InteractiveShell.interact): don't increment
2857 * IPython/iplib.py (InteractiveShell.interact): don't increment
2855 the prompt if there's no user input. By Daniel 'Dang' Griffith
2858 the prompt if there's no user input. By Daniel 'Dang' Griffith
2856 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2859 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2857 Francois Pinard.
2860 Francois Pinard.
2858
2861
2859 2004-04-02 Fernando Perez <fperez@colorado.edu>
2862 2004-04-02 Fernando Perez <fperez@colorado.edu>
2860
2863
2861 * IPython/genutils.py (Stream.__init__): Modified to survive at
2864 * IPython/genutils.py (Stream.__init__): Modified to survive at
2862 least importing in contexts where stdin/out/err aren't true file
2865 least importing in contexts where stdin/out/err aren't true file
2863 objects, such as PyCrust (they lack fileno() and mode). However,
2866 objects, such as PyCrust (they lack fileno() and mode). However,
2864 the recovery facilities which rely on these things existing will
2867 the recovery facilities which rely on these things existing will
2865 not work.
2868 not work.
2866
2869
2867 2004-04-01 Fernando Perez <fperez@colorado.edu>
2870 2004-04-01 Fernando Perez <fperez@colorado.edu>
2868
2871
2869 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2872 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2870 use the new getoutputerror() function, so it properly
2873 use the new getoutputerror() function, so it properly
2871 distinguishes stdout/err.
2874 distinguishes stdout/err.
2872
2875
2873 * IPython/genutils.py (getoutputerror): added a function to
2876 * IPython/genutils.py (getoutputerror): added a function to
2874 capture separately the standard output and error of a command.
2877 capture separately the standard output and error of a command.
2875 After a comment from dang on the mailing lists. This code is
2878 After a comment from dang on the mailing lists. This code is
2876 basically a modified version of commands.getstatusoutput(), from
2879 basically a modified version of commands.getstatusoutput(), from
2877 the standard library.
2880 the standard library.
2878
2881
2879 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2882 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2880 '!!' as a special syntax (shorthand) to access @sx.
2883 '!!' as a special syntax (shorthand) to access @sx.
2881
2884
2882 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2885 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2883 command and return its output as a list split on '\n'.
2886 command and return its output as a list split on '\n'.
2884
2887
2885 2004-03-31 Fernando Perez <fperez@colorado.edu>
2888 2004-03-31 Fernando Perez <fperez@colorado.edu>
2886
2889
2887 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2890 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2888 method to dictionaries used as FakeModule instances if they lack
2891 method to dictionaries used as FakeModule instances if they lack
2889 it. At least pydoc in python2.3 breaks for runtime-defined
2892 it. At least pydoc in python2.3 breaks for runtime-defined
2890 functions without this hack. At some point I need to _really_
2893 functions without this hack. At some point I need to _really_
2891 understand what FakeModule is doing, because it's a gross hack.
2894 understand what FakeModule is doing, because it's a gross hack.
2892 But it solves Arnd's problem for now...
2895 But it solves Arnd's problem for now...
2893
2896
2894 2004-02-27 Fernando Perez <fperez@colorado.edu>
2897 2004-02-27 Fernando Perez <fperez@colorado.edu>
2895
2898
2896 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2899 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2897 mode would behave erratically. Also increased the number of
2900 mode would behave erratically. Also increased the number of
2898 possible logs in rotate mod to 999. Thanks to Rod Holland
2901 possible logs in rotate mod to 999. Thanks to Rod Holland
2899 <rhh@StructureLABS.com> for the report and fixes.
2902 <rhh@StructureLABS.com> for the report and fixes.
2900
2903
2901 2004-02-26 Fernando Perez <fperez@colorado.edu>
2904 2004-02-26 Fernando Perez <fperez@colorado.edu>
2902
2905
2903 * IPython/genutils.py (page): Check that the curses module really
2906 * IPython/genutils.py (page): Check that the curses module really
2904 has the initscr attribute before trying to use it. For some
2907 has the initscr attribute before trying to use it. For some
2905 reason, the Solaris curses module is missing this. I think this
2908 reason, the Solaris curses module is missing this. I think this
2906 should be considered a Solaris python bug, but I'm not sure.
2909 should be considered a Solaris python bug, but I'm not sure.
2907
2910
2908 2004-01-17 Fernando Perez <fperez@colorado.edu>
2911 2004-01-17 Fernando Perez <fperez@colorado.edu>
2909
2912
2910 * IPython/genutils.py (Stream.__init__): Changes to try to make
2913 * IPython/genutils.py (Stream.__init__): Changes to try to make
2911 ipython robust against stdin/out/err being closed by the user.
2914 ipython robust against stdin/out/err being closed by the user.
2912 This is 'user error' (and blocks a normal python session, at least
2915 This is 'user error' (and blocks a normal python session, at least
2913 the stdout case). However, Ipython should be able to survive such
2916 the stdout case). However, Ipython should be able to survive such
2914 instances of abuse as gracefully as possible. To simplify the
2917 instances of abuse as gracefully as possible. To simplify the
2915 coding and maintain compatibility with Gary Bishop's Term
2918 coding and maintain compatibility with Gary Bishop's Term
2916 contributions, I've made use of classmethods for this. I think
2919 contributions, I've made use of classmethods for this. I think
2917 this introduces a dependency on python 2.2.
2920 this introduces a dependency on python 2.2.
2918
2921
2919 2004-01-13 Fernando Perez <fperez@colorado.edu>
2922 2004-01-13 Fernando Perez <fperez@colorado.edu>
2920
2923
2921 * IPython/numutils.py (exp_safe): simplified the code a bit and
2924 * IPython/numutils.py (exp_safe): simplified the code a bit and
2922 removed the need for importing the kinds module altogether.
2925 removed the need for importing the kinds module altogether.
2923
2926
2924 2004-01-06 Fernando Perez <fperez@colorado.edu>
2927 2004-01-06 Fernando Perez <fperez@colorado.edu>
2925
2928
2926 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2929 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2927 a magic function instead, after some community feedback. No
2930 a magic function instead, after some community feedback. No
2928 special syntax will exist for it, but its name is deliberately
2931 special syntax will exist for it, but its name is deliberately
2929 very short.
2932 very short.
2930
2933
2931 2003-12-20 Fernando Perez <fperez@colorado.edu>
2934 2003-12-20 Fernando Perez <fperez@colorado.edu>
2932
2935
2933 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2936 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2934 new functionality, to automagically assign the result of a shell
2937 new functionality, to automagically assign the result of a shell
2935 command to a variable. I'll solicit some community feedback on
2938 command to a variable. I'll solicit some community feedback on
2936 this before making it permanent.
2939 this before making it permanent.
2937
2940
2938 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2941 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2939 requested about callables for which inspect couldn't obtain a
2942 requested about callables for which inspect couldn't obtain a
2940 proper argspec. Thanks to a crash report sent by Etienne
2943 proper argspec. Thanks to a crash report sent by Etienne
2941 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2944 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2942
2945
2943 2003-12-09 Fernando Perez <fperez@colorado.edu>
2946 2003-12-09 Fernando Perez <fperez@colorado.edu>
2944
2947
2945 * IPython/genutils.py (page): patch for the pager to work across
2948 * IPython/genutils.py (page): patch for the pager to work across
2946 various versions of Windows. By Gary Bishop.
2949 various versions of Windows. By Gary Bishop.
2947
2950
2948 2003-12-04 Fernando Perez <fperez@colorado.edu>
2951 2003-12-04 Fernando Perez <fperez@colorado.edu>
2949
2952
2950 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2953 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2951 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2954 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2952 While I tested this and it looks ok, there may still be corner
2955 While I tested this and it looks ok, there may still be corner
2953 cases I've missed.
2956 cases I've missed.
2954
2957
2955 2003-12-01 Fernando Perez <fperez@colorado.edu>
2958 2003-12-01 Fernando Perez <fperez@colorado.edu>
2956
2959
2957 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2960 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2958 where a line like 'p,q=1,2' would fail because the automagic
2961 where a line like 'p,q=1,2' would fail because the automagic
2959 system would be triggered for @p.
2962 system would be triggered for @p.
2960
2963
2961 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2964 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2962 cleanups, code unmodified.
2965 cleanups, code unmodified.
2963
2966
2964 * IPython/genutils.py (Term): added a class for IPython to handle
2967 * IPython/genutils.py (Term): added a class for IPython to handle
2965 output. In most cases it will just be a proxy for stdout/err, but
2968 output. In most cases it will just be a proxy for stdout/err, but
2966 having this allows modifications to be made for some platforms,
2969 having this allows modifications to be made for some platforms,
2967 such as handling color escapes under Windows. All of this code
2970 such as handling color escapes under Windows. All of this code
2968 was contributed by Gary Bishop, with minor modifications by me.
2971 was contributed by Gary Bishop, with minor modifications by me.
2969 The actual changes affect many files.
2972 The actual changes affect many files.
2970
2973
2971 2003-11-30 Fernando Perez <fperez@colorado.edu>
2974 2003-11-30 Fernando Perez <fperez@colorado.edu>
2972
2975
2973 * IPython/iplib.py (file_matches): new completion code, courtesy
2976 * IPython/iplib.py (file_matches): new completion code, courtesy
2974 of Jeff Collins. This enables filename completion again under
2977 of Jeff Collins. This enables filename completion again under
2975 python 2.3, which disabled it at the C level.
2978 python 2.3, which disabled it at the C level.
2976
2979
2977 2003-11-11 Fernando Perez <fperez@colorado.edu>
2980 2003-11-11 Fernando Perez <fperez@colorado.edu>
2978
2981
2979 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2982 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2980 for Numeric.array(map(...)), but often convenient.
2983 for Numeric.array(map(...)), but often convenient.
2981
2984
2982 2003-11-05 Fernando Perez <fperez@colorado.edu>
2985 2003-11-05 Fernando Perez <fperez@colorado.edu>
2983
2986
2984 * IPython/numutils.py (frange): Changed a call from int() to
2987 * IPython/numutils.py (frange): Changed a call from int() to
2985 int(round()) to prevent a problem reported with arange() in the
2988 int(round()) to prevent a problem reported with arange() in the
2986 numpy list.
2989 numpy list.
2987
2990
2988 2003-10-06 Fernando Perez <fperez@colorado.edu>
2991 2003-10-06 Fernando Perez <fperez@colorado.edu>
2989
2992
2990 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2993 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2991 prevent crashes if sys lacks an argv attribute (it happens with
2994 prevent crashes if sys lacks an argv attribute (it happens with
2992 embedded interpreters which build a bare-bones sys module).
2995 embedded interpreters which build a bare-bones sys module).
2993 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2996 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2994
2997
2995 2003-09-24 Fernando Perez <fperez@colorado.edu>
2998 2003-09-24 Fernando Perez <fperez@colorado.edu>
2996
2999
2997 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3000 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2998 to protect against poorly written user objects where __getattr__
3001 to protect against poorly written user objects where __getattr__
2999 raises exceptions other than AttributeError. Thanks to a bug
3002 raises exceptions other than AttributeError. Thanks to a bug
3000 report by Oliver Sander <osander-AT-gmx.de>.
3003 report by Oliver Sander <osander-AT-gmx.de>.
3001
3004
3002 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3005 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3003 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3006 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3004
3007
3005 2003-09-09 Fernando Perez <fperez@colorado.edu>
3008 2003-09-09 Fernando Perez <fperez@colorado.edu>
3006
3009
3007 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3010 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3008 unpacking a list whith a callable as first element would
3011 unpacking a list whith a callable as first element would
3009 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3012 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3010 Collins.
3013 Collins.
3011
3014
3012 2003-08-25 *** Released version 0.5.0
3015 2003-08-25 *** Released version 0.5.0
3013
3016
3014 2003-08-22 Fernando Perez <fperez@colorado.edu>
3017 2003-08-22 Fernando Perez <fperez@colorado.edu>
3015
3018
3016 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3019 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3017 improperly defined user exceptions. Thanks to feedback from Mark
3020 improperly defined user exceptions. Thanks to feedback from Mark
3018 Russell <mrussell-AT-verio.net>.
3021 Russell <mrussell-AT-verio.net>.
3019
3022
3020 2003-08-20 Fernando Perez <fperez@colorado.edu>
3023 2003-08-20 Fernando Perez <fperez@colorado.edu>
3021
3024
3022 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3025 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3023 printing so that it would print multi-line string forms starting
3026 printing so that it would print multi-line string forms starting
3024 with a new line. This way the formatting is better respected for
3027 with a new line. This way the formatting is better respected for
3025 objects which work hard to make nice string forms.
3028 objects which work hard to make nice string forms.
3026
3029
3027 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3030 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3028 autocall would overtake data access for objects with both
3031 autocall would overtake data access for objects with both
3029 __getitem__ and __call__.
3032 __getitem__ and __call__.
3030
3033
3031 2003-08-19 *** Released version 0.5.0-rc1
3034 2003-08-19 *** Released version 0.5.0-rc1
3032
3035
3033 2003-08-19 Fernando Perez <fperez@colorado.edu>
3036 2003-08-19 Fernando Perez <fperez@colorado.edu>
3034
3037
3035 * IPython/deep_reload.py (load_tail): single tiny change here
3038 * IPython/deep_reload.py (load_tail): single tiny change here
3036 seems to fix the long-standing bug of dreload() failing to work
3039 seems to fix the long-standing bug of dreload() failing to work
3037 for dotted names. But this module is pretty tricky, so I may have
3040 for dotted names. But this module is pretty tricky, so I may have
3038 missed some subtlety. Needs more testing!.
3041 missed some subtlety. Needs more testing!.
3039
3042
3040 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3043 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3041 exceptions which have badly implemented __str__ methods.
3044 exceptions which have badly implemented __str__ methods.
3042 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3045 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3043 which I've been getting reports about from Python 2.3 users. I
3046 which I've been getting reports about from Python 2.3 users. I
3044 wish I had a simple test case to reproduce the problem, so I could
3047 wish I had a simple test case to reproduce the problem, so I could
3045 either write a cleaner workaround or file a bug report if
3048 either write a cleaner workaround or file a bug report if
3046 necessary.
3049 necessary.
3047
3050
3048 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3051 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3049 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3052 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3050 a bug report by Tjabo Kloppenburg.
3053 a bug report by Tjabo Kloppenburg.
3051
3054
3052 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3055 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3053 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3056 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3054 seems rather unstable. Thanks to a bug report by Tjabo
3057 seems rather unstable. Thanks to a bug report by Tjabo
3055 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3058 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3056
3059
3057 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3060 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3058 this out soon because of the critical fixes in the inner loop for
3061 this out soon because of the critical fixes in the inner loop for
3059 generators.
3062 generators.
3060
3063
3061 * IPython/Magic.py (Magic.getargspec): removed. This (and
3064 * IPython/Magic.py (Magic.getargspec): removed. This (and
3062 _get_def) have been obsoleted by OInspect for a long time, I
3065 _get_def) have been obsoleted by OInspect for a long time, I
3063 hadn't noticed that they were dead code.
3066 hadn't noticed that they were dead code.
3064 (Magic._ofind): restored _ofind functionality for a few literals
3067 (Magic._ofind): restored _ofind functionality for a few literals
3065 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3068 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3066 for things like "hello".capitalize?, since that would require a
3069 for things like "hello".capitalize?, since that would require a
3067 potentially dangerous eval() again.
3070 potentially dangerous eval() again.
3068
3071
3069 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3072 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3070 logic a bit more to clean up the escapes handling and minimize the
3073 logic a bit more to clean up the escapes handling and minimize the
3071 use of _ofind to only necessary cases. The interactive 'feel' of
3074 use of _ofind to only necessary cases. The interactive 'feel' of
3072 IPython should have improved quite a bit with the changes in
3075 IPython should have improved quite a bit with the changes in
3073 _prefilter and _ofind (besides being far safer than before).
3076 _prefilter and _ofind (besides being far safer than before).
3074
3077
3075 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3078 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3076 obscure, never reported). Edit would fail to find the object to
3079 obscure, never reported). Edit would fail to find the object to
3077 edit under some circumstances.
3080 edit under some circumstances.
3078 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3081 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3079 which were causing double-calling of generators. Those eval calls
3082 which were causing double-calling of generators. Those eval calls
3080 were _very_ dangerous, since code with side effects could be
3083 were _very_ dangerous, since code with side effects could be
3081 triggered. As they say, 'eval is evil'... These were the
3084 triggered. As they say, 'eval is evil'... These were the
3082 nastiest evals in IPython. Besides, _ofind is now far simpler,
3085 nastiest evals in IPython. Besides, _ofind is now far simpler,
3083 and it should also be quite a bit faster. Its use of inspect is
3086 and it should also be quite a bit faster. Its use of inspect is
3084 also safer, so perhaps some of the inspect-related crashes I've
3087 also safer, so perhaps some of the inspect-related crashes I've
3085 seen lately with Python 2.3 might be taken care of. That will
3088 seen lately with Python 2.3 might be taken care of. That will
3086 need more testing.
3089 need more testing.
3087
3090
3088 2003-08-17 Fernando Perez <fperez@colorado.edu>
3091 2003-08-17 Fernando Perez <fperez@colorado.edu>
3089
3092
3090 * IPython/iplib.py (InteractiveShell._prefilter): significant
3093 * IPython/iplib.py (InteractiveShell._prefilter): significant
3091 simplifications to the logic for handling user escapes. Faster
3094 simplifications to the logic for handling user escapes. Faster
3092 and simpler code.
3095 and simpler code.
3093
3096
3094 2003-08-14 Fernando Perez <fperez@colorado.edu>
3097 2003-08-14 Fernando Perez <fperez@colorado.edu>
3095
3098
3096 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3099 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3097 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3100 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3098 but it should be quite a bit faster. And the recursive version
3101 but it should be quite a bit faster. And the recursive version
3099 generated O(log N) intermediate storage for all rank>1 arrays,
3102 generated O(log N) intermediate storage for all rank>1 arrays,
3100 even if they were contiguous.
3103 even if they were contiguous.
3101 (l1norm): Added this function.
3104 (l1norm): Added this function.
3102 (norm): Added this function for arbitrary norms (including
3105 (norm): Added this function for arbitrary norms (including
3103 l-infinity). l1 and l2 are still special cases for convenience
3106 l-infinity). l1 and l2 are still special cases for convenience
3104 and speed.
3107 and speed.
3105
3108
3106 2003-08-03 Fernando Perez <fperez@colorado.edu>
3109 2003-08-03 Fernando Perez <fperez@colorado.edu>
3107
3110
3108 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3111 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3109 exceptions, which now raise PendingDeprecationWarnings in Python
3112 exceptions, which now raise PendingDeprecationWarnings in Python
3110 2.3. There were some in Magic and some in Gnuplot2.
3113 2.3. There were some in Magic and some in Gnuplot2.
3111
3114
3112 2003-06-30 Fernando Perez <fperez@colorado.edu>
3115 2003-06-30 Fernando Perez <fperez@colorado.edu>
3113
3116
3114 * IPython/genutils.py (page): modified to call curses only for
3117 * IPython/genutils.py (page): modified to call curses only for
3115 terminals where TERM=='xterm'. After problems under many other
3118 terminals where TERM=='xterm'. After problems under many other
3116 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3119 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3117
3120
3118 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3121 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3119 would be triggered when readline was absent. This was just an old
3122 would be triggered when readline was absent. This was just an old
3120 debugging statement I'd forgotten to take out.
3123 debugging statement I'd forgotten to take out.
3121
3124
3122 2003-06-20 Fernando Perez <fperez@colorado.edu>
3125 2003-06-20 Fernando Perez <fperez@colorado.edu>
3123
3126
3124 * IPython/genutils.py (clock): modified to return only user time
3127 * IPython/genutils.py (clock): modified to return only user time
3125 (not counting system time), after a discussion on scipy. While
3128 (not counting system time), after a discussion on scipy. While
3126 system time may be a useful quantity occasionally, it may much
3129 system time may be a useful quantity occasionally, it may much
3127 more easily be skewed by occasional swapping or other similar
3130 more easily be skewed by occasional swapping or other similar
3128 activity.
3131 activity.
3129
3132
3130 2003-06-05 Fernando Perez <fperez@colorado.edu>
3133 2003-06-05 Fernando Perez <fperez@colorado.edu>
3131
3134
3132 * IPython/numutils.py (identity): new function, for building
3135 * IPython/numutils.py (identity): new function, for building
3133 arbitrary rank Kronecker deltas (mostly backwards compatible with
3136 arbitrary rank Kronecker deltas (mostly backwards compatible with
3134 Numeric.identity)
3137 Numeric.identity)
3135
3138
3136 2003-06-03 Fernando Perez <fperez@colorado.edu>
3139 2003-06-03 Fernando Perez <fperez@colorado.edu>
3137
3140
3138 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3141 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3139 arguments passed to magics with spaces, to allow trailing '\' to
3142 arguments passed to magics with spaces, to allow trailing '\' to
3140 work normally (mainly for Windows users).
3143 work normally (mainly for Windows users).
3141
3144
3142 2003-05-29 Fernando Perez <fperez@colorado.edu>
3145 2003-05-29 Fernando Perez <fperez@colorado.edu>
3143
3146
3144 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3147 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3145 instead of pydoc.help. This fixes a bizarre behavior where
3148 instead of pydoc.help. This fixes a bizarre behavior where
3146 printing '%s' % locals() would trigger the help system. Now
3149 printing '%s' % locals() would trigger the help system. Now
3147 ipython behaves like normal python does.
3150 ipython behaves like normal python does.
3148
3151
3149 Note that if one does 'from pydoc import help', the bizarre
3152 Note that if one does 'from pydoc import help', the bizarre
3150 behavior returns, but this will also happen in normal python, so
3153 behavior returns, but this will also happen in normal python, so
3151 it's not an ipython bug anymore (it has to do with how pydoc.help
3154 it's not an ipython bug anymore (it has to do with how pydoc.help
3152 is implemented).
3155 is implemented).
3153
3156
3154 2003-05-22 Fernando Perez <fperez@colorado.edu>
3157 2003-05-22 Fernando Perez <fperez@colorado.edu>
3155
3158
3156 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3159 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3157 return [] instead of None when nothing matches, also match to end
3160 return [] instead of None when nothing matches, also match to end
3158 of line. Patch by Gary Bishop.
3161 of line. Patch by Gary Bishop.
3159
3162
3160 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3163 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3161 protection as before, for files passed on the command line. This
3164 protection as before, for files passed on the command line. This
3162 prevents the CrashHandler from kicking in if user files call into
3165 prevents the CrashHandler from kicking in if user files call into
3163 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3166 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3164 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3167 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3165
3168
3166 2003-05-20 *** Released version 0.4.0
3169 2003-05-20 *** Released version 0.4.0
3167
3170
3168 2003-05-20 Fernando Perez <fperez@colorado.edu>
3171 2003-05-20 Fernando Perez <fperez@colorado.edu>
3169
3172
3170 * setup.py: added support for manpages. It's a bit hackish b/c of
3173 * setup.py: added support for manpages. It's a bit hackish b/c of
3171 a bug in the way the bdist_rpm distutils target handles gzipped
3174 a bug in the way the bdist_rpm distutils target handles gzipped
3172 manpages, but it works. After a patch by Jack.
3175 manpages, but it works. After a patch by Jack.
3173
3176
3174 2003-05-19 Fernando Perez <fperez@colorado.edu>
3177 2003-05-19 Fernando Perez <fperez@colorado.edu>
3175
3178
3176 * IPython/numutils.py: added a mockup of the kinds module, since
3179 * IPython/numutils.py: added a mockup of the kinds module, since
3177 it was recently removed from Numeric. This way, numutils will
3180 it was recently removed from Numeric. This way, numutils will
3178 work for all users even if they are missing kinds.
3181 work for all users even if they are missing kinds.
3179
3182
3180 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3183 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3181 failure, which can occur with SWIG-wrapped extensions. After a
3184 failure, which can occur with SWIG-wrapped extensions. After a
3182 crash report from Prabhu.
3185 crash report from Prabhu.
3183
3186
3184 2003-05-16 Fernando Perez <fperez@colorado.edu>
3187 2003-05-16 Fernando Perez <fperez@colorado.edu>
3185
3188
3186 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3189 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3187 protect ipython from user code which may call directly
3190 protect ipython from user code which may call directly
3188 sys.excepthook (this looks like an ipython crash to the user, even
3191 sys.excepthook (this looks like an ipython crash to the user, even
3189 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3192 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3190 This is especially important to help users of WxWindows, but may
3193 This is especially important to help users of WxWindows, but may
3191 also be useful in other cases.
3194 also be useful in other cases.
3192
3195
3193 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3196 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3194 an optional tb_offset to be specified, and to preserve exception
3197 an optional tb_offset to be specified, and to preserve exception
3195 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3198 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3196
3199
3197 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3200 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3198
3201
3199 2003-05-15 Fernando Perez <fperez@colorado.edu>
3202 2003-05-15 Fernando Perez <fperez@colorado.edu>
3200
3203
3201 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3204 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3202 installing for a new user under Windows.
3205 installing for a new user under Windows.
3203
3206
3204 2003-05-12 Fernando Perez <fperez@colorado.edu>
3207 2003-05-12 Fernando Perez <fperez@colorado.edu>
3205
3208
3206 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3209 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3207 handler for Emacs comint-based lines. Currently it doesn't do
3210 handler for Emacs comint-based lines. Currently it doesn't do
3208 much (but importantly, it doesn't update the history cache). In
3211 much (but importantly, it doesn't update the history cache). In
3209 the future it may be expanded if Alex needs more functionality
3212 the future it may be expanded if Alex needs more functionality
3210 there.
3213 there.
3211
3214
3212 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3215 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3213 info to crash reports.
3216 info to crash reports.
3214
3217
3215 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3218 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3216 just like Python's -c. Also fixed crash with invalid -color
3219 just like Python's -c. Also fixed crash with invalid -color
3217 option value at startup. Thanks to Will French
3220 option value at startup. Thanks to Will French
3218 <wfrench-AT-bestweb.net> for the bug report.
3221 <wfrench-AT-bestweb.net> for the bug report.
3219
3222
3220 2003-05-09 Fernando Perez <fperez@colorado.edu>
3223 2003-05-09 Fernando Perez <fperez@colorado.edu>
3221
3224
3222 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3225 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3223 to EvalDict (it's a mapping, after all) and simplified its code
3226 to EvalDict (it's a mapping, after all) and simplified its code
3224 quite a bit, after a nice discussion on c.l.py where Gustavo
3227 quite a bit, after a nice discussion on c.l.py where Gustavo
3225 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3228 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3226
3229
3227 2003-04-30 Fernando Perez <fperez@colorado.edu>
3230 2003-04-30 Fernando Perez <fperez@colorado.edu>
3228
3231
3229 * IPython/genutils.py (timings_out): modified it to reduce its
3232 * IPython/genutils.py (timings_out): modified it to reduce its
3230 overhead in the common reps==1 case.
3233 overhead in the common reps==1 case.
3231
3234
3232 2003-04-29 Fernando Perez <fperez@colorado.edu>
3235 2003-04-29 Fernando Perez <fperez@colorado.edu>
3233
3236
3234 * IPython/genutils.py (timings_out): Modified to use the resource
3237 * IPython/genutils.py (timings_out): Modified to use the resource
3235 module, which avoids the wraparound problems of time.clock().
3238 module, which avoids the wraparound problems of time.clock().
3236
3239
3237 2003-04-17 *** Released version 0.2.15pre4
3240 2003-04-17 *** Released version 0.2.15pre4
3238
3241
3239 2003-04-17 Fernando Perez <fperez@colorado.edu>
3242 2003-04-17 Fernando Perez <fperez@colorado.edu>
3240
3243
3241 * setup.py (scriptfiles): Split windows-specific stuff over to a
3244 * setup.py (scriptfiles): Split windows-specific stuff over to a
3242 separate file, in an attempt to have a Windows GUI installer.
3245 separate file, in an attempt to have a Windows GUI installer.
3243 That didn't work, but part of the groundwork is done.
3246 That didn't work, but part of the groundwork is done.
3244
3247
3245 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3248 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3246 indent/unindent with 4 spaces. Particularly useful in combination
3249 indent/unindent with 4 spaces. Particularly useful in combination
3247 with the new auto-indent option.
3250 with the new auto-indent option.
3248
3251
3249 2003-04-16 Fernando Perez <fperez@colorado.edu>
3252 2003-04-16 Fernando Perez <fperez@colorado.edu>
3250
3253
3251 * IPython/Magic.py: various replacements of self.rc for
3254 * IPython/Magic.py: various replacements of self.rc for
3252 self.shell.rc. A lot more remains to be done to fully disentangle
3255 self.shell.rc. A lot more remains to be done to fully disentangle
3253 this class from the main Shell class.
3256 this class from the main Shell class.
3254
3257
3255 * IPython/GnuplotRuntime.py: added checks for mouse support so
3258 * IPython/GnuplotRuntime.py: added checks for mouse support so
3256 that we don't try to enable it if the current gnuplot doesn't
3259 that we don't try to enable it if the current gnuplot doesn't
3257 really support it. Also added checks so that we don't try to
3260 really support it. Also added checks so that we don't try to
3258 enable persist under Windows (where Gnuplot doesn't recognize the
3261 enable persist under Windows (where Gnuplot doesn't recognize the
3259 option).
3262 option).
3260
3263
3261 * IPython/iplib.py (InteractiveShell.interact): Added optional
3264 * IPython/iplib.py (InteractiveShell.interact): Added optional
3262 auto-indenting code, after a patch by King C. Shu
3265 auto-indenting code, after a patch by King C. Shu
3263 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3266 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3264 get along well with pasting indented code. If I ever figure out
3267 get along well with pasting indented code. If I ever figure out
3265 how to make that part go well, it will become on by default.
3268 how to make that part go well, it will become on by default.
3266
3269
3267 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3270 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3268 crash ipython if there was an unmatched '%' in the user's prompt
3271 crash ipython if there was an unmatched '%' in the user's prompt
3269 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3272 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3270
3273
3271 * IPython/iplib.py (InteractiveShell.interact): removed the
3274 * IPython/iplib.py (InteractiveShell.interact): removed the
3272 ability to ask the user whether he wants to crash or not at the
3275 ability to ask the user whether he wants to crash or not at the
3273 'last line' exception handler. Calling functions at that point
3276 'last line' exception handler. Calling functions at that point
3274 changes the stack, and the error reports would have incorrect
3277 changes the stack, and the error reports would have incorrect
3275 tracebacks.
3278 tracebacks.
3276
3279
3277 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3280 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3278 pass through a peger a pretty-printed form of any object. After a
3281 pass through a peger a pretty-printed form of any object. After a
3279 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3282 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3280
3283
3281 2003-04-14 Fernando Perez <fperez@colorado.edu>
3284 2003-04-14 Fernando Perez <fperez@colorado.edu>
3282
3285
3283 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3286 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3284 all files in ~ would be modified at first install (instead of
3287 all files in ~ would be modified at first install (instead of
3285 ~/.ipython). This could be potentially disastrous, as the
3288 ~/.ipython). This could be potentially disastrous, as the
3286 modification (make line-endings native) could damage binary files.
3289 modification (make line-endings native) could damage binary files.
3287
3290
3288 2003-04-10 Fernando Perez <fperez@colorado.edu>
3291 2003-04-10 Fernando Perez <fperez@colorado.edu>
3289
3292
3290 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3293 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3291 handle only lines which are invalid python. This now means that
3294 handle only lines which are invalid python. This now means that
3292 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3295 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3293 for the bug report.
3296 for the bug report.
3294
3297
3295 2003-04-01 Fernando Perez <fperez@colorado.edu>
3298 2003-04-01 Fernando Perez <fperez@colorado.edu>
3296
3299
3297 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3300 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3298 where failing to set sys.last_traceback would crash pdb.pm().
3301 where failing to set sys.last_traceback would crash pdb.pm().
3299 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3302 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3300 report.
3303 report.
3301
3304
3302 2003-03-25 Fernando Perez <fperez@colorado.edu>
3305 2003-03-25 Fernando Perez <fperez@colorado.edu>
3303
3306
3304 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3307 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3305 before printing it (it had a lot of spurious blank lines at the
3308 before printing it (it had a lot of spurious blank lines at the
3306 end).
3309 end).
3307
3310
3308 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3311 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3309 output would be sent 21 times! Obviously people don't use this
3312 output would be sent 21 times! Obviously people don't use this
3310 too often, or I would have heard about it.
3313 too often, or I would have heard about it.
3311
3314
3312 2003-03-24 Fernando Perez <fperez@colorado.edu>
3315 2003-03-24 Fernando Perez <fperez@colorado.edu>
3313
3316
3314 * setup.py (scriptfiles): renamed the data_files parameter from
3317 * setup.py (scriptfiles): renamed the data_files parameter from
3315 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3318 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3316 for the patch.
3319 for the patch.
3317
3320
3318 2003-03-20 Fernando Perez <fperez@colorado.edu>
3321 2003-03-20 Fernando Perez <fperez@colorado.edu>
3319
3322
3320 * IPython/genutils.py (error): added error() and fatal()
3323 * IPython/genutils.py (error): added error() and fatal()
3321 functions.
3324 functions.
3322
3325
3323 2003-03-18 *** Released version 0.2.15pre3
3326 2003-03-18 *** Released version 0.2.15pre3
3324
3327
3325 2003-03-18 Fernando Perez <fperez@colorado.edu>
3328 2003-03-18 Fernando Perez <fperez@colorado.edu>
3326
3329
3327 * setupext/install_data_ext.py
3330 * setupext/install_data_ext.py
3328 (install_data_ext.initialize_options): Class contributed by Jack
3331 (install_data_ext.initialize_options): Class contributed by Jack
3329 Moffit for fixing the old distutils hack. He is sending this to
3332 Moffit for fixing the old distutils hack. He is sending this to
3330 the distutils folks so in the future we may not need it as a
3333 the distutils folks so in the future we may not need it as a
3331 private fix.
3334 private fix.
3332
3335
3333 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3336 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3334 changes for Debian packaging. See his patch for full details.
3337 changes for Debian packaging. See his patch for full details.
3335 The old distutils hack of making the ipythonrc* files carry a
3338 The old distutils hack of making the ipythonrc* files carry a
3336 bogus .py extension is gone, at last. Examples were moved to a
3339 bogus .py extension is gone, at last. Examples were moved to a
3337 separate subdir under doc/, and the separate executable scripts
3340 separate subdir under doc/, and the separate executable scripts
3338 now live in their own directory. Overall a great cleanup. The
3341 now live in their own directory. Overall a great cleanup. The
3339 manual was updated to use the new files, and setup.py has been
3342 manual was updated to use the new files, and setup.py has been
3340 fixed for this setup.
3343 fixed for this setup.
3341
3344
3342 * IPython/PyColorize.py (Parser.usage): made non-executable and
3345 * IPython/PyColorize.py (Parser.usage): made non-executable and
3343 created a pycolor wrapper around it to be included as a script.
3346 created a pycolor wrapper around it to be included as a script.
3344
3347
3345 2003-03-12 *** Released version 0.2.15pre2
3348 2003-03-12 *** Released version 0.2.15pre2
3346
3349
3347 2003-03-12 Fernando Perez <fperez@colorado.edu>
3350 2003-03-12 Fernando Perez <fperez@colorado.edu>
3348
3351
3349 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3352 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3350 long-standing problem with garbage characters in some terminals.
3353 long-standing problem with garbage characters in some terminals.
3351 The issue was really that the \001 and \002 escapes must _only_ be
3354 The issue was really that the \001 and \002 escapes must _only_ be
3352 passed to input prompts (which call readline), but _never_ to
3355 passed to input prompts (which call readline), but _never_ to
3353 normal text to be printed on screen. I changed ColorANSI to have
3356 normal text to be printed on screen. I changed ColorANSI to have
3354 two classes: TermColors and InputTermColors, each with the
3357 two classes: TermColors and InputTermColors, each with the
3355 appropriate escapes for input prompts or normal text. The code in
3358 appropriate escapes for input prompts or normal text. The code in
3356 Prompts.py got slightly more complicated, but this very old and
3359 Prompts.py got slightly more complicated, but this very old and
3357 annoying bug is finally fixed.
3360 annoying bug is finally fixed.
3358
3361
3359 All the credit for nailing down the real origin of this problem
3362 All the credit for nailing down the real origin of this problem
3360 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3363 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3361 *Many* thanks to him for spending quite a bit of effort on this.
3364 *Many* thanks to him for spending quite a bit of effort on this.
3362
3365
3363 2003-03-05 *** Released version 0.2.15pre1
3366 2003-03-05 *** Released version 0.2.15pre1
3364
3367
3365 2003-03-03 Fernando Perez <fperez@colorado.edu>
3368 2003-03-03 Fernando Perez <fperez@colorado.edu>
3366
3369
3367 * IPython/FakeModule.py: Moved the former _FakeModule to a
3370 * IPython/FakeModule.py: Moved the former _FakeModule to a
3368 separate file, because it's also needed by Magic (to fix a similar
3371 separate file, because it's also needed by Magic (to fix a similar
3369 pickle-related issue in @run).
3372 pickle-related issue in @run).
3370
3373
3371 2003-03-02 Fernando Perez <fperez@colorado.edu>
3374 2003-03-02 Fernando Perez <fperez@colorado.edu>
3372
3375
3373 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3376 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3374 the autocall option at runtime.
3377 the autocall option at runtime.
3375 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3378 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3376 across Magic.py to start separating Magic from InteractiveShell.
3379 across Magic.py to start separating Magic from InteractiveShell.
3377 (Magic._ofind): Fixed to return proper namespace for dotted
3380 (Magic._ofind): Fixed to return proper namespace for dotted
3378 names. Before, a dotted name would always return 'not currently
3381 names. Before, a dotted name would always return 'not currently
3379 defined', because it would find the 'parent'. s.x would be found,
3382 defined', because it would find the 'parent'. s.x would be found,
3380 but since 'x' isn't defined by itself, it would get confused.
3383 but since 'x' isn't defined by itself, it would get confused.
3381 (Magic.magic_run): Fixed pickling problems reported by Ralf
3384 (Magic.magic_run): Fixed pickling problems reported by Ralf
3382 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3385 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3383 that I'd used when Mike Heeter reported similar issues at the
3386 that I'd used when Mike Heeter reported similar issues at the
3384 top-level, but now for @run. It boils down to injecting the
3387 top-level, but now for @run. It boils down to injecting the
3385 namespace where code is being executed with something that looks
3388 namespace where code is being executed with something that looks
3386 enough like a module to fool pickle.dump(). Since a pickle stores
3389 enough like a module to fool pickle.dump(). Since a pickle stores
3387 a named reference to the importing module, we need this for
3390 a named reference to the importing module, we need this for
3388 pickles to save something sensible.
3391 pickles to save something sensible.
3389
3392
3390 * IPython/ipmaker.py (make_IPython): added an autocall option.
3393 * IPython/ipmaker.py (make_IPython): added an autocall option.
3391
3394
3392 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3395 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3393 the auto-eval code. Now autocalling is an option, and the code is
3396 the auto-eval code. Now autocalling is an option, and the code is
3394 also vastly safer. There is no more eval() involved at all.
3397 also vastly safer. There is no more eval() involved at all.
3395
3398
3396 2003-03-01 Fernando Perez <fperez@colorado.edu>
3399 2003-03-01 Fernando Perez <fperez@colorado.edu>
3397
3400
3398 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3401 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3399 dict with named keys instead of a tuple.
3402 dict with named keys instead of a tuple.
3400
3403
3401 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3404 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3402
3405
3403 * setup.py (make_shortcut): Fixed message about directories
3406 * setup.py (make_shortcut): Fixed message about directories
3404 created during Windows installation (the directories were ok, just
3407 created during Windows installation (the directories were ok, just
3405 the printed message was misleading). Thanks to Chris Liechti
3408 the printed message was misleading). Thanks to Chris Liechti
3406 <cliechti-AT-gmx.net> for the heads up.
3409 <cliechti-AT-gmx.net> for the heads up.
3407
3410
3408 2003-02-21 Fernando Perez <fperez@colorado.edu>
3411 2003-02-21 Fernando Perez <fperez@colorado.edu>
3409
3412
3410 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3413 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3411 of ValueError exception when checking for auto-execution. This
3414 of ValueError exception when checking for auto-execution. This
3412 one is raised by things like Numeric arrays arr.flat when the
3415 one is raised by things like Numeric arrays arr.flat when the
3413 array is non-contiguous.
3416 array is non-contiguous.
3414
3417
3415 2003-01-31 Fernando Perez <fperez@colorado.edu>
3418 2003-01-31 Fernando Perez <fperez@colorado.edu>
3416
3419
3417 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3420 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3418 not return any value at all (even though the command would get
3421 not return any value at all (even though the command would get
3419 executed).
3422 executed).
3420 (xsys): Flush stdout right after printing the command to ensure
3423 (xsys): Flush stdout right after printing the command to ensure
3421 proper ordering of commands and command output in the total
3424 proper ordering of commands and command output in the total
3422 output.
3425 output.
3423 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3426 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3424 system/getoutput as defaults. The old ones are kept for
3427 system/getoutput as defaults. The old ones are kept for
3425 compatibility reasons, so no code which uses this library needs
3428 compatibility reasons, so no code which uses this library needs
3426 changing.
3429 changing.
3427
3430
3428 2003-01-27 *** Released version 0.2.14
3431 2003-01-27 *** Released version 0.2.14
3429
3432
3430 2003-01-25 Fernando Perez <fperez@colorado.edu>
3433 2003-01-25 Fernando Perez <fperez@colorado.edu>
3431
3434
3432 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3435 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3433 functions defined in previous edit sessions could not be re-edited
3436 functions defined in previous edit sessions could not be re-edited
3434 (because the temp files were immediately removed). Now temp files
3437 (because the temp files were immediately removed). Now temp files
3435 are removed only at IPython's exit.
3438 are removed only at IPython's exit.
3436 (Magic.magic_run): Improved @run to perform shell-like expansions
3439 (Magic.magic_run): Improved @run to perform shell-like expansions
3437 on its arguments (~users and $VARS). With this, @run becomes more
3440 on its arguments (~users and $VARS). With this, @run becomes more
3438 like a normal command-line.
3441 like a normal command-line.
3439
3442
3440 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3443 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3441 bugs related to embedding and cleaned up that code. A fairly
3444 bugs related to embedding and cleaned up that code. A fairly
3442 important one was the impossibility to access the global namespace
3445 important one was the impossibility to access the global namespace
3443 through the embedded IPython (only local variables were visible).
3446 through the embedded IPython (only local variables were visible).
3444
3447
3445 2003-01-14 Fernando Perez <fperez@colorado.edu>
3448 2003-01-14 Fernando Perez <fperez@colorado.edu>
3446
3449
3447 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3450 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3448 auto-calling to be a bit more conservative. Now it doesn't get
3451 auto-calling to be a bit more conservative. Now it doesn't get
3449 triggered if any of '!=()<>' are in the rest of the input line, to
3452 triggered if any of '!=()<>' are in the rest of the input line, to
3450 allow comparing callables. Thanks to Alex for the heads up.
3453 allow comparing callables. Thanks to Alex for the heads up.
3451
3454
3452 2003-01-07 Fernando Perez <fperez@colorado.edu>
3455 2003-01-07 Fernando Perez <fperez@colorado.edu>
3453
3456
3454 * IPython/genutils.py (page): fixed estimation of the number of
3457 * IPython/genutils.py (page): fixed estimation of the number of
3455 lines in a string to be paged to simply count newlines. This
3458 lines in a string to be paged to simply count newlines. This
3456 prevents over-guessing due to embedded escape sequences. A better
3459 prevents over-guessing due to embedded escape sequences. A better
3457 long-term solution would involve stripping out the control chars
3460 long-term solution would involve stripping out the control chars
3458 for the count, but it's potentially so expensive I just don't
3461 for the count, but it's potentially so expensive I just don't
3459 think it's worth doing.
3462 think it's worth doing.
3460
3463
3461 2002-12-19 *** Released version 0.2.14pre50
3464 2002-12-19 *** Released version 0.2.14pre50
3462
3465
3463 2002-12-19 Fernando Perez <fperez@colorado.edu>
3466 2002-12-19 Fernando Perez <fperez@colorado.edu>
3464
3467
3465 * tools/release (version): Changed release scripts to inform
3468 * tools/release (version): Changed release scripts to inform
3466 Andrea and build a NEWS file with a list of recent changes.
3469 Andrea and build a NEWS file with a list of recent changes.
3467
3470
3468 * IPython/ColorANSI.py (__all__): changed terminal detection
3471 * IPython/ColorANSI.py (__all__): changed terminal detection
3469 code. Seems to work better for xterms without breaking
3472 code. Seems to work better for xterms without breaking
3470 konsole. Will need more testing to determine if WinXP and Mac OSX
3473 konsole. Will need more testing to determine if WinXP and Mac OSX
3471 also work ok.
3474 also work ok.
3472
3475
3473 2002-12-18 *** Released version 0.2.14pre49
3476 2002-12-18 *** Released version 0.2.14pre49
3474
3477
3475 2002-12-18 Fernando Perez <fperez@colorado.edu>
3478 2002-12-18 Fernando Perez <fperez@colorado.edu>
3476
3479
3477 * Docs: added new info about Mac OSX, from Andrea.
3480 * Docs: added new info about Mac OSX, from Andrea.
3478
3481
3479 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3482 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3480 allow direct plotting of python strings whose format is the same
3483 allow direct plotting of python strings whose format is the same
3481 of gnuplot data files.
3484 of gnuplot data files.
3482
3485
3483 2002-12-16 Fernando Perez <fperez@colorado.edu>
3486 2002-12-16 Fernando Perez <fperez@colorado.edu>
3484
3487
3485 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3488 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3486 value of exit question to be acknowledged.
3489 value of exit question to be acknowledged.
3487
3490
3488 2002-12-03 Fernando Perez <fperez@colorado.edu>
3491 2002-12-03 Fernando Perez <fperez@colorado.edu>
3489
3492
3490 * IPython/ipmaker.py: removed generators, which had been added
3493 * IPython/ipmaker.py: removed generators, which had been added
3491 by mistake in an earlier debugging run. This was causing trouble
3494 by mistake in an earlier debugging run. This was causing trouble
3492 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3495 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3493 for pointing this out.
3496 for pointing this out.
3494
3497
3495 2002-11-17 Fernando Perez <fperez@colorado.edu>
3498 2002-11-17 Fernando Perez <fperez@colorado.edu>
3496
3499
3497 * Manual: updated the Gnuplot section.
3500 * Manual: updated the Gnuplot section.
3498
3501
3499 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3502 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3500 a much better split of what goes in Runtime and what goes in
3503 a much better split of what goes in Runtime and what goes in
3501 Interactive.
3504 Interactive.
3502
3505
3503 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3506 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3504 being imported from iplib.
3507 being imported from iplib.
3505
3508
3506 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3509 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3507 for command-passing. Now the global Gnuplot instance is called
3510 for command-passing. Now the global Gnuplot instance is called
3508 'gp' instead of 'g', which was really a far too fragile and
3511 'gp' instead of 'g', which was really a far too fragile and
3509 common name.
3512 common name.
3510
3513
3511 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3514 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3512 bounding boxes generated by Gnuplot for square plots.
3515 bounding boxes generated by Gnuplot for square plots.
3513
3516
3514 * IPython/genutils.py (popkey): new function added. I should
3517 * IPython/genutils.py (popkey): new function added. I should
3515 suggest this on c.l.py as a dict method, it seems useful.
3518 suggest this on c.l.py as a dict method, it seems useful.
3516
3519
3517 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3520 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3518 to transparently handle PostScript generation. MUCH better than
3521 to transparently handle PostScript generation. MUCH better than
3519 the previous plot_eps/replot_eps (which I removed now). The code
3522 the previous plot_eps/replot_eps (which I removed now). The code
3520 is also fairly clean and well documented now (including
3523 is also fairly clean and well documented now (including
3521 docstrings).
3524 docstrings).
3522
3525
3523 2002-11-13 Fernando Perez <fperez@colorado.edu>
3526 2002-11-13 Fernando Perez <fperez@colorado.edu>
3524
3527
3525 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3528 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3526 (inconsistent with options).
3529 (inconsistent with options).
3527
3530
3528 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3531 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3529 manually disabled, I don't know why. Fixed it.
3532 manually disabled, I don't know why. Fixed it.
3530 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3533 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3531 eps output.
3534 eps output.
3532
3535
3533 2002-11-12 Fernando Perez <fperez@colorado.edu>
3536 2002-11-12 Fernando Perez <fperez@colorado.edu>
3534
3537
3535 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3538 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3536 don't propagate up to caller. Fixes crash reported by François
3539 don't propagate up to caller. Fixes crash reported by François
3537 Pinard.
3540 Pinard.
3538
3541
3539 2002-11-09 Fernando Perez <fperez@colorado.edu>
3542 2002-11-09 Fernando Perez <fperez@colorado.edu>
3540
3543
3541 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3544 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3542 history file for new users.
3545 history file for new users.
3543 (make_IPython): fixed bug where initial install would leave the
3546 (make_IPython): fixed bug where initial install would leave the
3544 user running in the .ipython dir.
3547 user running in the .ipython dir.
3545 (make_IPython): fixed bug where config dir .ipython would be
3548 (make_IPython): fixed bug where config dir .ipython would be
3546 created regardless of the given -ipythondir option. Thanks to Cory
3549 created regardless of the given -ipythondir option. Thanks to Cory
3547 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3550 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3548
3551
3549 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3552 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3550 type confirmations. Will need to use it in all of IPython's code
3553 type confirmations. Will need to use it in all of IPython's code
3551 consistently.
3554 consistently.
3552
3555
3553 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3556 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3554 context to print 31 lines instead of the default 5. This will make
3557 context to print 31 lines instead of the default 5. This will make
3555 the crash reports extremely detailed in case the problem is in
3558 the crash reports extremely detailed in case the problem is in
3556 libraries I don't have access to.
3559 libraries I don't have access to.
3557
3560
3558 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3561 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3559 line of defense' code to still crash, but giving users fair
3562 line of defense' code to still crash, but giving users fair
3560 warning. I don't want internal errors to go unreported: if there's
3563 warning. I don't want internal errors to go unreported: if there's
3561 an internal problem, IPython should crash and generate a full
3564 an internal problem, IPython should crash and generate a full
3562 report.
3565 report.
3563
3566
3564 2002-11-08 Fernando Perez <fperez@colorado.edu>
3567 2002-11-08 Fernando Perez <fperez@colorado.edu>
3565
3568
3566 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3569 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3567 otherwise uncaught exceptions which can appear if people set
3570 otherwise uncaught exceptions which can appear if people set
3568 sys.stdout to something badly broken. Thanks to a crash report
3571 sys.stdout to something badly broken. Thanks to a crash report
3569 from henni-AT-mail.brainbot.com.
3572 from henni-AT-mail.brainbot.com.
3570
3573
3571 2002-11-04 Fernando Perez <fperez@colorado.edu>
3574 2002-11-04 Fernando Perez <fperez@colorado.edu>
3572
3575
3573 * IPython/iplib.py (InteractiveShell.interact): added
3576 * IPython/iplib.py (InteractiveShell.interact): added
3574 __IPYTHON__active to the builtins. It's a flag which goes on when
3577 __IPYTHON__active to the builtins. It's a flag which goes on when
3575 the interaction starts and goes off again when it stops. This
3578 the interaction starts and goes off again when it stops. This
3576 allows embedding code to detect being inside IPython. Before this
3579 allows embedding code to detect being inside IPython. Before this
3577 was done via __IPYTHON__, but that only shows that an IPython
3580 was done via __IPYTHON__, but that only shows that an IPython
3578 instance has been created.
3581 instance has been created.
3579
3582
3580 * IPython/Magic.py (Magic.magic_env): I realized that in a
3583 * IPython/Magic.py (Magic.magic_env): I realized that in a
3581 UserDict, instance.data holds the data as a normal dict. So I
3584 UserDict, instance.data holds the data as a normal dict. So I
3582 modified @env to return os.environ.data instead of rebuilding a
3585 modified @env to return os.environ.data instead of rebuilding a
3583 dict by hand.
3586 dict by hand.
3584
3587
3585 2002-11-02 Fernando Perez <fperez@colorado.edu>
3588 2002-11-02 Fernando Perez <fperez@colorado.edu>
3586
3589
3587 * IPython/genutils.py (warn): changed so that level 1 prints no
3590 * IPython/genutils.py (warn): changed so that level 1 prints no
3588 header. Level 2 is now the default (with 'WARNING' header, as
3591 header. Level 2 is now the default (with 'WARNING' header, as
3589 before). I think I tracked all places where changes were needed in
3592 before). I think I tracked all places where changes were needed in
3590 IPython, but outside code using the old level numbering may have
3593 IPython, but outside code using the old level numbering may have
3591 broken.
3594 broken.
3592
3595
3593 * IPython/iplib.py (InteractiveShell.runcode): added this to
3596 * IPython/iplib.py (InteractiveShell.runcode): added this to
3594 handle the tracebacks in SystemExit traps correctly. The previous
3597 handle the tracebacks in SystemExit traps correctly. The previous
3595 code (through interact) was printing more of the stack than
3598 code (through interact) was printing more of the stack than
3596 necessary, showing IPython internal code to the user.
3599 necessary, showing IPython internal code to the user.
3597
3600
3598 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3601 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3599 default. Now that the default at the confirmation prompt is yes,
3602 default. Now that the default at the confirmation prompt is yes,
3600 it's not so intrusive. François' argument that ipython sessions
3603 it's not so intrusive. François' argument that ipython sessions
3601 tend to be complex enough not to lose them from an accidental C-d,
3604 tend to be complex enough not to lose them from an accidental C-d,
3602 is a valid one.
3605 is a valid one.
3603
3606
3604 * IPython/iplib.py (InteractiveShell.interact): added a
3607 * IPython/iplib.py (InteractiveShell.interact): added a
3605 showtraceback() call to the SystemExit trap, and modified the exit
3608 showtraceback() call to the SystemExit trap, and modified the exit
3606 confirmation to have yes as the default.
3609 confirmation to have yes as the default.
3607
3610
3608 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3611 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3609 this file. It's been gone from the code for a long time, this was
3612 this file. It's been gone from the code for a long time, this was
3610 simply leftover junk.
3613 simply leftover junk.
3611
3614
3612 2002-11-01 Fernando Perez <fperez@colorado.edu>
3615 2002-11-01 Fernando Perez <fperez@colorado.edu>
3613
3616
3614 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3617 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3615 added. If set, IPython now traps EOF and asks for
3618 added. If set, IPython now traps EOF and asks for
3616 confirmation. After a request by François Pinard.
3619 confirmation. After a request by François Pinard.
3617
3620
3618 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3621 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3619 of @abort, and with a new (better) mechanism for handling the
3622 of @abort, and with a new (better) mechanism for handling the
3620 exceptions.
3623 exceptions.
3621
3624
3622 2002-10-27 Fernando Perez <fperez@colorado.edu>
3625 2002-10-27 Fernando Perez <fperez@colorado.edu>
3623
3626
3624 * IPython/usage.py (__doc__): updated the --help information and
3627 * IPython/usage.py (__doc__): updated the --help information and
3625 the ipythonrc file to indicate that -log generates
3628 the ipythonrc file to indicate that -log generates
3626 ./ipython.log. Also fixed the corresponding info in @logstart.
3629 ./ipython.log. Also fixed the corresponding info in @logstart.
3627 This and several other fixes in the manuals thanks to reports by
3630 This and several other fixes in the manuals thanks to reports by
3628 François Pinard <pinard-AT-iro.umontreal.ca>.
3631 François Pinard <pinard-AT-iro.umontreal.ca>.
3629
3632
3630 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3633 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3631 refer to @logstart (instead of @log, which doesn't exist).
3634 refer to @logstart (instead of @log, which doesn't exist).
3632
3635
3633 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3636 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3634 AttributeError crash. Thanks to Christopher Armstrong
3637 AttributeError crash. Thanks to Christopher Armstrong
3635 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3638 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3636 introduced recently (in 0.2.14pre37) with the fix to the eval
3639 introduced recently (in 0.2.14pre37) with the fix to the eval
3637 problem mentioned below.
3640 problem mentioned below.
3638
3641
3639 2002-10-17 Fernando Perez <fperez@colorado.edu>
3642 2002-10-17 Fernando Perez <fperez@colorado.edu>
3640
3643
3641 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3644 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3642 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3645 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3643
3646
3644 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3647 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3645 this function to fix a problem reported by Alex Schmolck. He saw
3648 this function to fix a problem reported by Alex Schmolck. He saw
3646 it with list comprehensions and generators, which were getting
3649 it with list comprehensions and generators, which were getting
3647 called twice. The real problem was an 'eval' call in testing for
3650 called twice. The real problem was an 'eval' call in testing for
3648 automagic which was evaluating the input line silently.
3651 automagic which was evaluating the input line silently.
3649
3652
3650 This is a potentially very nasty bug, if the input has side
3653 This is a potentially very nasty bug, if the input has side
3651 effects which must not be repeated. The code is much cleaner now,
3654 effects which must not be repeated. The code is much cleaner now,
3652 without any blanket 'except' left and with a regexp test for
3655 without any blanket 'except' left and with a regexp test for
3653 actual function names.
3656 actual function names.
3654
3657
3655 But an eval remains, which I'm not fully comfortable with. I just
3658 But an eval remains, which I'm not fully comfortable with. I just
3656 don't know how to find out if an expression could be a callable in
3659 don't know how to find out if an expression could be a callable in
3657 the user's namespace without doing an eval on the string. However
3660 the user's namespace without doing an eval on the string. However
3658 that string is now much more strictly checked so that no code
3661 that string is now much more strictly checked so that no code
3659 slips by, so the eval should only happen for things that can
3662 slips by, so the eval should only happen for things that can
3660 really be only function/method names.
3663 really be only function/method names.
3661
3664
3662 2002-10-15 Fernando Perez <fperez@colorado.edu>
3665 2002-10-15 Fernando Perez <fperez@colorado.edu>
3663
3666
3664 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3667 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3665 OSX information to main manual, removed README_Mac_OSX file from
3668 OSX information to main manual, removed README_Mac_OSX file from
3666 distribution. Also updated credits for recent additions.
3669 distribution. Also updated credits for recent additions.
3667
3670
3668 2002-10-10 Fernando Perez <fperez@colorado.edu>
3671 2002-10-10 Fernando Perez <fperez@colorado.edu>
3669
3672
3670 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3673 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3671 terminal-related issues. Many thanks to Andrea Riciputi
3674 terminal-related issues. Many thanks to Andrea Riciputi
3672 <andrea.riciputi-AT-libero.it> for writing it.
3675 <andrea.riciputi-AT-libero.it> for writing it.
3673
3676
3674 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3677 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3675 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3678 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3676
3679
3677 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3680 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3678 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3681 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3679 <syver-en-AT-online.no> who both submitted patches for this problem.
3682 <syver-en-AT-online.no> who both submitted patches for this problem.
3680
3683
3681 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3684 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3682 global embedding to make sure that things don't overwrite user
3685 global embedding to make sure that things don't overwrite user
3683 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3686 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3684
3687
3685 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3688 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3686 compatibility. Thanks to Hayden Callow
3689 compatibility. Thanks to Hayden Callow
3687 <h.callow-AT-elec.canterbury.ac.nz>
3690 <h.callow-AT-elec.canterbury.ac.nz>
3688
3691
3689 2002-10-04 Fernando Perez <fperez@colorado.edu>
3692 2002-10-04 Fernando Perez <fperez@colorado.edu>
3690
3693
3691 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3694 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3692 Gnuplot.File objects.
3695 Gnuplot.File objects.
3693
3696
3694 2002-07-23 Fernando Perez <fperez@colorado.edu>
3697 2002-07-23 Fernando Perez <fperez@colorado.edu>
3695
3698
3696 * IPython/genutils.py (timing): Added timings() and timing() for
3699 * IPython/genutils.py (timing): Added timings() and timing() for
3697 quick access to the most commonly needed data, the execution
3700 quick access to the most commonly needed data, the execution
3698 times. Old timing() renamed to timings_out().
3701 times. Old timing() renamed to timings_out().
3699
3702
3700 2002-07-18 Fernando Perez <fperez@colorado.edu>
3703 2002-07-18 Fernando Perez <fperez@colorado.edu>
3701
3704
3702 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3705 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3703 bug with nested instances disrupting the parent's tab completion.
3706 bug with nested instances disrupting the parent's tab completion.
3704
3707
3705 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3708 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3706 all_completions code to begin the emacs integration.
3709 all_completions code to begin the emacs integration.
3707
3710
3708 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3711 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3709 argument to allow titling individual arrays when plotting.
3712 argument to allow titling individual arrays when plotting.
3710
3713
3711 2002-07-15 Fernando Perez <fperez@colorado.edu>
3714 2002-07-15 Fernando Perez <fperez@colorado.edu>
3712
3715
3713 * setup.py (make_shortcut): changed to retrieve the value of
3716 * setup.py (make_shortcut): changed to retrieve the value of
3714 'Program Files' directory from the registry (this value changes in
3717 'Program Files' directory from the registry (this value changes in
3715 non-english versions of Windows). Thanks to Thomas Fanslau
3718 non-english versions of Windows). Thanks to Thomas Fanslau
3716 <tfanslau-AT-gmx.de> for the report.
3719 <tfanslau-AT-gmx.de> for the report.
3717
3720
3718 2002-07-10 Fernando Perez <fperez@colorado.edu>
3721 2002-07-10 Fernando Perez <fperez@colorado.edu>
3719
3722
3720 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3723 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3721 a bug in pdb, which crashes if a line with only whitespace is
3724 a bug in pdb, which crashes if a line with only whitespace is
3722 entered. Bug report submitted to sourceforge.
3725 entered. Bug report submitted to sourceforge.
3723
3726
3724 2002-07-09 Fernando Perez <fperez@colorado.edu>
3727 2002-07-09 Fernando Perez <fperez@colorado.edu>
3725
3728
3726 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3729 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3727 reporting exceptions (it's a bug in inspect.py, I just set a
3730 reporting exceptions (it's a bug in inspect.py, I just set a
3728 workaround).
3731 workaround).
3729
3732
3730 2002-07-08 Fernando Perez <fperez@colorado.edu>
3733 2002-07-08 Fernando Perez <fperez@colorado.edu>
3731
3734
3732 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3735 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3733 __IPYTHON__ in __builtins__ to show up in user_ns.
3736 __IPYTHON__ in __builtins__ to show up in user_ns.
3734
3737
3735 2002-07-03 Fernando Perez <fperez@colorado.edu>
3738 2002-07-03 Fernando Perez <fperez@colorado.edu>
3736
3739
3737 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3740 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3738 name from @gp_set_instance to @gp_set_default.
3741 name from @gp_set_instance to @gp_set_default.
3739
3742
3740 * IPython/ipmaker.py (make_IPython): default editor value set to
3743 * IPython/ipmaker.py (make_IPython): default editor value set to
3741 '0' (a string), to match the rc file. Otherwise will crash when
3744 '0' (a string), to match the rc file. Otherwise will crash when
3742 .strip() is called on it.
3745 .strip() is called on it.
3743
3746
3744
3747
3745 2002-06-28 Fernando Perez <fperez@colorado.edu>
3748 2002-06-28 Fernando Perez <fperez@colorado.edu>
3746
3749
3747 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3750 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3748 of files in current directory when a file is executed via
3751 of files in current directory when a file is executed via
3749 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3752 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3750
3753
3751 * setup.py (manfiles): fix for rpm builds, submitted by RA
3754 * setup.py (manfiles): fix for rpm builds, submitted by RA
3752 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3755 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3753
3756
3754 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3757 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3755 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3758 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3756 string!). A. Schmolck caught this one.
3759 string!). A. Schmolck caught this one.
3757
3760
3758 2002-06-27 Fernando Perez <fperez@colorado.edu>
3761 2002-06-27 Fernando Perez <fperez@colorado.edu>
3759
3762
3760 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3763 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3761 defined files at the cmd line. __name__ wasn't being set to
3764 defined files at the cmd line. __name__ wasn't being set to
3762 __main__.
3765 __main__.
3763
3766
3764 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3767 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3765 regular lists and tuples besides Numeric arrays.
3768 regular lists and tuples besides Numeric arrays.
3766
3769
3767 * IPython/Prompts.py (CachedOutput.__call__): Added output
3770 * IPython/Prompts.py (CachedOutput.__call__): Added output
3768 supression for input ending with ';'. Similar to Mathematica and
3771 supression for input ending with ';'. Similar to Mathematica and
3769 Matlab. The _* vars and Out[] list are still updated, just like
3772 Matlab. The _* vars and Out[] list are still updated, just like
3770 Mathematica behaves.
3773 Mathematica behaves.
3771
3774
3772 2002-06-25 Fernando Perez <fperez@colorado.edu>
3775 2002-06-25 Fernando Perez <fperez@colorado.edu>
3773
3776
3774 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3777 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3775 .ini extensions for profiels under Windows.
3778 .ini extensions for profiels under Windows.
3776
3779
3777 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3780 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3778 string form. Fix contributed by Alexander Schmolck
3781 string form. Fix contributed by Alexander Schmolck
3779 <a.schmolck-AT-gmx.net>
3782 <a.schmolck-AT-gmx.net>
3780
3783
3781 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3784 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3782 pre-configured Gnuplot instance.
3785 pre-configured Gnuplot instance.
3783
3786
3784 2002-06-21 Fernando Perez <fperez@colorado.edu>
3787 2002-06-21 Fernando Perez <fperez@colorado.edu>
3785
3788
3786 * IPython/numutils.py (exp_safe): new function, works around the
3789 * IPython/numutils.py (exp_safe): new function, works around the
3787 underflow problems in Numeric.
3790 underflow problems in Numeric.
3788 (log2): New fn. Safe log in base 2: returns exact integer answer
3791 (log2): New fn. Safe log in base 2: returns exact integer answer
3789 for exact integer powers of 2.
3792 for exact integer powers of 2.
3790
3793
3791 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3794 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3792 properly.
3795 properly.
3793
3796
3794 2002-06-20 Fernando Perez <fperez@colorado.edu>
3797 2002-06-20 Fernando Perez <fperez@colorado.edu>
3795
3798
3796 * IPython/genutils.py (timing): new function like
3799 * IPython/genutils.py (timing): new function like
3797 Mathematica's. Similar to time_test, but returns more info.
3800 Mathematica's. Similar to time_test, but returns more info.
3798
3801
3799 2002-06-18 Fernando Perez <fperez@colorado.edu>
3802 2002-06-18 Fernando Perez <fperez@colorado.edu>
3800
3803
3801 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3804 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3802 according to Mike Heeter's suggestions.
3805 according to Mike Heeter's suggestions.
3803
3806
3804 2002-06-16 Fernando Perez <fperez@colorado.edu>
3807 2002-06-16 Fernando Perez <fperez@colorado.edu>
3805
3808
3806 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3809 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3807 system. GnuplotMagic is gone as a user-directory option. New files
3810 system. GnuplotMagic is gone as a user-directory option. New files
3808 make it easier to use all the gnuplot stuff both from external
3811 make it easier to use all the gnuplot stuff both from external
3809 programs as well as from IPython. Had to rewrite part of
3812 programs as well as from IPython. Had to rewrite part of
3810 hardcopy() b/c of a strange bug: often the ps files simply don't
3813 hardcopy() b/c of a strange bug: often the ps files simply don't
3811 get created, and require a repeat of the command (often several
3814 get created, and require a repeat of the command (often several
3812 times).
3815 times).
3813
3816
3814 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3817 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3815 resolve output channel at call time, so that if sys.stderr has
3818 resolve output channel at call time, so that if sys.stderr has
3816 been redirected by user this gets honored.
3819 been redirected by user this gets honored.
3817
3820
3818 2002-06-13 Fernando Perez <fperez@colorado.edu>
3821 2002-06-13 Fernando Perez <fperez@colorado.edu>
3819
3822
3820 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3823 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3821 IPShell. Kept a copy with the old names to avoid breaking people's
3824 IPShell. Kept a copy with the old names to avoid breaking people's
3822 embedded code.
3825 embedded code.
3823
3826
3824 * IPython/ipython: simplified it to the bare minimum after
3827 * IPython/ipython: simplified it to the bare minimum after
3825 Holger's suggestions. Added info about how to use it in
3828 Holger's suggestions. Added info about how to use it in
3826 PYTHONSTARTUP.
3829 PYTHONSTARTUP.
3827
3830
3828 * IPython/Shell.py (IPythonShell): changed the options passing
3831 * IPython/Shell.py (IPythonShell): changed the options passing
3829 from a string with funky %s replacements to a straight list. Maybe
3832 from a string with funky %s replacements to a straight list. Maybe
3830 a bit more typing, but it follows sys.argv conventions, so there's
3833 a bit more typing, but it follows sys.argv conventions, so there's
3831 less special-casing to remember.
3834 less special-casing to remember.
3832
3835
3833 2002-06-12 Fernando Perez <fperez@colorado.edu>
3836 2002-06-12 Fernando Perez <fperez@colorado.edu>
3834
3837
3835 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3838 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3836 command. Thanks to a suggestion by Mike Heeter.
3839 command. Thanks to a suggestion by Mike Heeter.
3837 (Magic.magic_pfile): added behavior to look at filenames if given
3840 (Magic.magic_pfile): added behavior to look at filenames if given
3838 arg is not a defined object.
3841 arg is not a defined object.
3839 (Magic.magic_save): New @save function to save code snippets. Also
3842 (Magic.magic_save): New @save function to save code snippets. Also
3840 a Mike Heeter idea.
3843 a Mike Heeter idea.
3841
3844
3842 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3845 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3843 plot() and replot(). Much more convenient now, especially for
3846 plot() and replot(). Much more convenient now, especially for
3844 interactive use.
3847 interactive use.
3845
3848
3846 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3849 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3847 filenames.
3850 filenames.
3848
3851
3849 2002-06-02 Fernando Perez <fperez@colorado.edu>
3852 2002-06-02 Fernando Perez <fperez@colorado.edu>
3850
3853
3851 * IPython/Struct.py (Struct.__init__): modified to admit
3854 * IPython/Struct.py (Struct.__init__): modified to admit
3852 initialization via another struct.
3855 initialization via another struct.
3853
3856
3854 * IPython/genutils.py (SystemExec.__init__): New stateful
3857 * IPython/genutils.py (SystemExec.__init__): New stateful
3855 interface to xsys and bq. Useful for writing system scripts.
3858 interface to xsys and bq. Useful for writing system scripts.
3856
3859
3857 2002-05-30 Fernando Perez <fperez@colorado.edu>
3860 2002-05-30 Fernando Perez <fperez@colorado.edu>
3858
3861
3859 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3862 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3860 documents. This will make the user download smaller (it's getting
3863 documents. This will make the user download smaller (it's getting
3861 too big).
3864 too big).
3862
3865
3863 2002-05-29 Fernando Perez <fperez@colorado.edu>
3866 2002-05-29 Fernando Perez <fperez@colorado.edu>
3864
3867
3865 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3868 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3866 fix problems with shelve and pickle. Seems to work, but I don't
3869 fix problems with shelve and pickle. Seems to work, but I don't
3867 know if corner cases break it. Thanks to Mike Heeter
3870 know if corner cases break it. Thanks to Mike Heeter
3868 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3871 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3869
3872
3870 2002-05-24 Fernando Perez <fperez@colorado.edu>
3873 2002-05-24 Fernando Perez <fperez@colorado.edu>
3871
3874
3872 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3875 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3873 macros having broken.
3876 macros having broken.
3874
3877
3875 2002-05-21 Fernando Perez <fperez@colorado.edu>
3878 2002-05-21 Fernando Perez <fperez@colorado.edu>
3876
3879
3877 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3880 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3878 introduced logging bug: all history before logging started was
3881 introduced logging bug: all history before logging started was
3879 being written one character per line! This came from the redesign
3882 being written one character per line! This came from the redesign
3880 of the input history as a special list which slices to strings,
3883 of the input history as a special list which slices to strings,
3881 not to lists.
3884 not to lists.
3882
3885
3883 2002-05-20 Fernando Perez <fperez@colorado.edu>
3886 2002-05-20 Fernando Perez <fperez@colorado.edu>
3884
3887
3885 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3888 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3886 be an attribute of all classes in this module. The design of these
3889 be an attribute of all classes in this module. The design of these
3887 classes needs some serious overhauling.
3890 classes needs some serious overhauling.
3888
3891
3889 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3892 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3890 which was ignoring '_' in option names.
3893 which was ignoring '_' in option names.
3891
3894
3892 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3895 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3893 'Verbose_novars' to 'Context' and made it the new default. It's a
3896 'Verbose_novars' to 'Context' and made it the new default. It's a
3894 bit more readable and also safer than verbose.
3897 bit more readable and also safer than verbose.
3895
3898
3896 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3899 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3897 triple-quoted strings.
3900 triple-quoted strings.
3898
3901
3899 * IPython/OInspect.py (__all__): new module exposing the object
3902 * IPython/OInspect.py (__all__): new module exposing the object
3900 introspection facilities. Now the corresponding magics are dummy
3903 introspection facilities. Now the corresponding magics are dummy
3901 wrappers around this. Having this module will make it much easier
3904 wrappers around this. Having this module will make it much easier
3902 to put these functions into our modified pdb.
3905 to put these functions into our modified pdb.
3903 This new object inspector system uses the new colorizing module,
3906 This new object inspector system uses the new colorizing module,
3904 so source code and other things are nicely syntax highlighted.
3907 so source code and other things are nicely syntax highlighted.
3905
3908
3906 2002-05-18 Fernando Perez <fperez@colorado.edu>
3909 2002-05-18 Fernando Perez <fperez@colorado.edu>
3907
3910
3908 * IPython/ColorANSI.py: Split the coloring tools into a separate
3911 * IPython/ColorANSI.py: Split the coloring tools into a separate
3909 module so I can use them in other code easier (they were part of
3912 module so I can use them in other code easier (they were part of
3910 ultraTB).
3913 ultraTB).
3911
3914
3912 2002-05-17 Fernando Perez <fperez@colorado.edu>
3915 2002-05-17 Fernando Perez <fperez@colorado.edu>
3913
3916
3914 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3917 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3915 fixed it to set the global 'g' also to the called instance, as
3918 fixed it to set the global 'g' also to the called instance, as
3916 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3919 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3917 user's 'g' variables).
3920 user's 'g' variables).
3918
3921
3919 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3922 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3920 global variables (aliases to _ih,_oh) so that users which expect
3923 global variables (aliases to _ih,_oh) so that users which expect
3921 In[5] or Out[7] to work aren't unpleasantly surprised.
3924 In[5] or Out[7] to work aren't unpleasantly surprised.
3922 (InputList.__getslice__): new class to allow executing slices of
3925 (InputList.__getslice__): new class to allow executing slices of
3923 input history directly. Very simple class, complements the use of
3926 input history directly. Very simple class, complements the use of
3924 macros.
3927 macros.
3925
3928
3926 2002-05-16 Fernando Perez <fperez@colorado.edu>
3929 2002-05-16 Fernando Perez <fperez@colorado.edu>
3927
3930
3928 * setup.py (docdirbase): make doc directory be just doc/IPython
3931 * setup.py (docdirbase): make doc directory be just doc/IPython
3929 without version numbers, it will reduce clutter for users.
3932 without version numbers, it will reduce clutter for users.
3930
3933
3931 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3934 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3932 execfile call to prevent possible memory leak. See for details:
3935 execfile call to prevent possible memory leak. See for details:
3933 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3936 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3934
3937
3935 2002-05-15 Fernando Perez <fperez@colorado.edu>
3938 2002-05-15 Fernando Perez <fperez@colorado.edu>
3936
3939
3937 * IPython/Magic.py (Magic.magic_psource): made the object
3940 * IPython/Magic.py (Magic.magic_psource): made the object
3938 introspection names be more standard: pdoc, pdef, pfile and
3941 introspection names be more standard: pdoc, pdef, pfile and
3939 psource. They all print/page their output, and it makes
3942 psource. They all print/page their output, and it makes
3940 remembering them easier. Kept old names for compatibility as
3943 remembering them easier. Kept old names for compatibility as
3941 aliases.
3944 aliases.
3942
3945
3943 2002-05-14 Fernando Perez <fperez@colorado.edu>
3946 2002-05-14 Fernando Perez <fperez@colorado.edu>
3944
3947
3945 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3948 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3946 what the mouse problem was. The trick is to use gnuplot with temp
3949 what the mouse problem was. The trick is to use gnuplot with temp
3947 files and NOT with pipes (for data communication), because having
3950 files and NOT with pipes (for data communication), because having
3948 both pipes and the mouse on is bad news.
3951 both pipes and the mouse on is bad news.
3949
3952
3950 2002-05-13 Fernando Perez <fperez@colorado.edu>
3953 2002-05-13 Fernando Perez <fperez@colorado.edu>
3951
3954
3952 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3955 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3953 bug. Information would be reported about builtins even when
3956 bug. Information would be reported about builtins even when
3954 user-defined functions overrode them.
3957 user-defined functions overrode them.
3955
3958
3956 2002-05-11 Fernando Perez <fperez@colorado.edu>
3959 2002-05-11 Fernando Perez <fperez@colorado.edu>
3957
3960
3958 * IPython/__init__.py (__all__): removed FlexCompleter from
3961 * IPython/__init__.py (__all__): removed FlexCompleter from
3959 __all__ so that things don't fail in platforms without readline.
3962 __all__ so that things don't fail in platforms without readline.
3960
3963
3961 2002-05-10 Fernando Perez <fperez@colorado.edu>
3964 2002-05-10 Fernando Perez <fperez@colorado.edu>
3962
3965
3963 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3966 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3964 it requires Numeric, effectively making Numeric a dependency for
3967 it requires Numeric, effectively making Numeric a dependency for
3965 IPython.
3968 IPython.
3966
3969
3967 * Released 0.2.13
3970 * Released 0.2.13
3968
3971
3969 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3972 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3970 profiler interface. Now all the major options from the profiler
3973 profiler interface. Now all the major options from the profiler
3971 module are directly supported in IPython, both for single
3974 module are directly supported in IPython, both for single
3972 expressions (@prun) and for full programs (@run -p).
3975 expressions (@prun) and for full programs (@run -p).
3973
3976
3974 2002-05-09 Fernando Perez <fperez@colorado.edu>
3977 2002-05-09 Fernando Perez <fperez@colorado.edu>
3975
3978
3976 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3979 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3977 magic properly formatted for screen.
3980 magic properly formatted for screen.
3978
3981
3979 * setup.py (make_shortcut): Changed things to put pdf version in
3982 * setup.py (make_shortcut): Changed things to put pdf version in
3980 doc/ instead of doc/manual (had to change lyxport a bit).
3983 doc/ instead of doc/manual (had to change lyxport a bit).
3981
3984
3982 * IPython/Magic.py (Profile.string_stats): made profile runs go
3985 * IPython/Magic.py (Profile.string_stats): made profile runs go
3983 through pager (they are long and a pager allows searching, saving,
3986 through pager (they are long and a pager allows searching, saving,
3984 etc.)
3987 etc.)
3985
3988
3986 2002-05-08 Fernando Perez <fperez@colorado.edu>
3989 2002-05-08 Fernando Perez <fperez@colorado.edu>
3987
3990
3988 * Released 0.2.12
3991 * Released 0.2.12
3989
3992
3990 2002-05-06 Fernando Perez <fperez@colorado.edu>
3993 2002-05-06 Fernando Perez <fperez@colorado.edu>
3991
3994
3992 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3995 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3993 introduced); 'hist n1 n2' was broken.
3996 introduced); 'hist n1 n2' was broken.
3994 (Magic.magic_pdb): added optional on/off arguments to @pdb
3997 (Magic.magic_pdb): added optional on/off arguments to @pdb
3995 (Magic.magic_run): added option -i to @run, which executes code in
3998 (Magic.magic_run): added option -i to @run, which executes code in
3996 the IPython namespace instead of a clean one. Also added @irun as
3999 the IPython namespace instead of a clean one. Also added @irun as
3997 an alias to @run -i.
4000 an alias to @run -i.
3998
4001
3999 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4002 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4000 fixed (it didn't really do anything, the namespaces were wrong).
4003 fixed (it didn't really do anything, the namespaces were wrong).
4001
4004
4002 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4005 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4003
4006
4004 * IPython/__init__.py (__all__): Fixed package namespace, now
4007 * IPython/__init__.py (__all__): Fixed package namespace, now
4005 'import IPython' does give access to IPython.<all> as
4008 'import IPython' does give access to IPython.<all> as
4006 expected. Also renamed __release__ to Release.
4009 expected. Also renamed __release__ to Release.
4007
4010
4008 * IPython/Debugger.py (__license__): created new Pdb class which
4011 * IPython/Debugger.py (__license__): created new Pdb class which
4009 functions like a drop-in for the normal pdb.Pdb but does NOT
4012 functions like a drop-in for the normal pdb.Pdb but does NOT
4010 import readline by default. This way it doesn't muck up IPython's
4013 import readline by default. This way it doesn't muck up IPython's
4011 readline handling, and now tab-completion finally works in the
4014 readline handling, and now tab-completion finally works in the
4012 debugger -- sort of. It completes things globally visible, but the
4015 debugger -- sort of. It completes things globally visible, but the
4013 completer doesn't track the stack as pdb walks it. That's a bit
4016 completer doesn't track the stack as pdb walks it. That's a bit
4014 tricky, and I'll have to implement it later.
4017 tricky, and I'll have to implement it later.
4015
4018
4016 2002-05-05 Fernando Perez <fperez@colorado.edu>
4019 2002-05-05 Fernando Perez <fperez@colorado.edu>
4017
4020
4018 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4021 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4019 magic docstrings when printed via ? (explicit \'s were being
4022 magic docstrings when printed via ? (explicit \'s were being
4020 printed).
4023 printed).
4021
4024
4022 * IPython/ipmaker.py (make_IPython): fixed namespace
4025 * IPython/ipmaker.py (make_IPython): fixed namespace
4023 identification bug. Now variables loaded via logs or command-line
4026 identification bug. Now variables loaded via logs or command-line
4024 files are recognized in the interactive namespace by @who.
4027 files are recognized in the interactive namespace by @who.
4025
4028
4026 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4029 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4027 log replay system stemming from the string form of Structs.
4030 log replay system stemming from the string form of Structs.
4028
4031
4029 * IPython/Magic.py (Macro.__init__): improved macros to properly
4032 * IPython/Magic.py (Macro.__init__): improved macros to properly
4030 handle magic commands in them.
4033 handle magic commands in them.
4031 (Magic.magic_logstart): usernames are now expanded so 'logstart
4034 (Magic.magic_logstart): usernames are now expanded so 'logstart
4032 ~/mylog' now works.
4035 ~/mylog' now works.
4033
4036
4034 * IPython/iplib.py (complete): fixed bug where paths starting with
4037 * IPython/iplib.py (complete): fixed bug where paths starting with
4035 '/' would be completed as magic names.
4038 '/' would be completed as magic names.
4036
4039
4037 2002-05-04 Fernando Perez <fperez@colorado.edu>
4040 2002-05-04 Fernando Perez <fperez@colorado.edu>
4038
4041
4039 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4042 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4040 allow running full programs under the profiler's control.
4043 allow running full programs under the profiler's control.
4041
4044
4042 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4045 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4043 mode to report exceptions verbosely but without formatting
4046 mode to report exceptions verbosely but without formatting
4044 variables. This addresses the issue of ipython 'freezing' (it's
4047 variables. This addresses the issue of ipython 'freezing' (it's
4045 not frozen, but caught in an expensive formatting loop) when huge
4048 not frozen, but caught in an expensive formatting loop) when huge
4046 variables are in the context of an exception.
4049 variables are in the context of an exception.
4047 (VerboseTB.text): Added '--->' markers at line where exception was
4050 (VerboseTB.text): Added '--->' markers at line where exception was
4048 triggered. Much clearer to read, especially in NoColor modes.
4051 triggered. Much clearer to read, especially in NoColor modes.
4049
4052
4050 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4053 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4051 implemented in reverse when changing to the new parse_options().
4054 implemented in reverse when changing to the new parse_options().
4052
4055
4053 2002-05-03 Fernando Perez <fperez@colorado.edu>
4056 2002-05-03 Fernando Perez <fperez@colorado.edu>
4054
4057
4055 * IPython/Magic.py (Magic.parse_options): new function so that
4058 * IPython/Magic.py (Magic.parse_options): new function so that
4056 magics can parse options easier.
4059 magics can parse options easier.
4057 (Magic.magic_prun): new function similar to profile.run(),
4060 (Magic.magic_prun): new function similar to profile.run(),
4058 suggested by Chris Hart.
4061 suggested by Chris Hart.
4059 (Magic.magic_cd): fixed behavior so that it only changes if
4062 (Magic.magic_cd): fixed behavior so that it only changes if
4060 directory actually is in history.
4063 directory actually is in history.
4061
4064
4062 * IPython/usage.py (__doc__): added information about potential
4065 * IPython/usage.py (__doc__): added information about potential
4063 slowness of Verbose exception mode when there are huge data
4066 slowness of Verbose exception mode when there are huge data
4064 structures to be formatted (thanks to Archie Paulson).
4067 structures to be formatted (thanks to Archie Paulson).
4065
4068
4066 * IPython/ipmaker.py (make_IPython): Changed default logging
4069 * IPython/ipmaker.py (make_IPython): Changed default logging
4067 (when simply called with -log) to use curr_dir/ipython.log in
4070 (when simply called with -log) to use curr_dir/ipython.log in
4068 rotate mode. Fixed crash which was occuring with -log before
4071 rotate mode. Fixed crash which was occuring with -log before
4069 (thanks to Jim Boyle).
4072 (thanks to Jim Boyle).
4070
4073
4071 2002-05-01 Fernando Perez <fperez@colorado.edu>
4074 2002-05-01 Fernando Perez <fperez@colorado.edu>
4072
4075
4073 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4076 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4074 was nasty -- though somewhat of a corner case).
4077 was nasty -- though somewhat of a corner case).
4075
4078
4076 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4079 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4077 text (was a bug).
4080 text (was a bug).
4078
4081
4079 2002-04-30 Fernando Perez <fperez@colorado.edu>
4082 2002-04-30 Fernando Perez <fperez@colorado.edu>
4080
4083
4081 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4084 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4082 a print after ^D or ^C from the user so that the In[] prompt
4085 a print after ^D or ^C from the user so that the In[] prompt
4083 doesn't over-run the gnuplot one.
4086 doesn't over-run the gnuplot one.
4084
4087
4085 2002-04-29 Fernando Perez <fperez@colorado.edu>
4088 2002-04-29 Fernando Perez <fperez@colorado.edu>
4086
4089
4087 * Released 0.2.10
4090 * Released 0.2.10
4088
4091
4089 * IPython/__release__.py (version): get date dynamically.
4092 * IPython/__release__.py (version): get date dynamically.
4090
4093
4091 * Misc. documentation updates thanks to Arnd's comments. Also ran
4094 * Misc. documentation updates thanks to Arnd's comments. Also ran
4092 a full spellcheck on the manual (hadn't been done in a while).
4095 a full spellcheck on the manual (hadn't been done in a while).
4093
4096
4094 2002-04-27 Fernando Perez <fperez@colorado.edu>
4097 2002-04-27 Fernando Perez <fperez@colorado.edu>
4095
4098
4096 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4099 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4097 starting a log in mid-session would reset the input history list.
4100 starting a log in mid-session would reset the input history list.
4098
4101
4099 2002-04-26 Fernando Perez <fperez@colorado.edu>
4102 2002-04-26 Fernando Perez <fperez@colorado.edu>
4100
4103
4101 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4104 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4102 all files were being included in an update. Now anything in
4105 all files were being included in an update. Now anything in
4103 UserConfig that matches [A-Za-z]*.py will go (this excludes
4106 UserConfig that matches [A-Za-z]*.py will go (this excludes
4104 __init__.py)
4107 __init__.py)
4105
4108
4106 2002-04-25 Fernando Perez <fperez@colorado.edu>
4109 2002-04-25 Fernando Perez <fperez@colorado.edu>
4107
4110
4108 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4111 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4109 to __builtins__ so that any form of embedded or imported code can
4112 to __builtins__ so that any form of embedded or imported code can
4110 test for being inside IPython.
4113 test for being inside IPython.
4111
4114
4112 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4115 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4113 changed to GnuplotMagic because it's now an importable module,
4116 changed to GnuplotMagic because it's now an importable module,
4114 this makes the name follow that of the standard Gnuplot module.
4117 this makes the name follow that of the standard Gnuplot module.
4115 GnuplotMagic can now be loaded at any time in mid-session.
4118 GnuplotMagic can now be loaded at any time in mid-session.
4116
4119
4117 2002-04-24 Fernando Perez <fperez@colorado.edu>
4120 2002-04-24 Fernando Perez <fperez@colorado.edu>
4118
4121
4119 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4122 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4120 the globals (IPython has its own namespace) and the
4123 the globals (IPython has its own namespace) and the
4121 PhysicalQuantity stuff is much better anyway.
4124 PhysicalQuantity stuff is much better anyway.
4122
4125
4123 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4126 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4124 embedding example to standard user directory for
4127 embedding example to standard user directory for
4125 distribution. Also put it in the manual.
4128 distribution. Also put it in the manual.
4126
4129
4127 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4130 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4128 instance as first argument (so it doesn't rely on some obscure
4131 instance as first argument (so it doesn't rely on some obscure
4129 hidden global).
4132 hidden global).
4130
4133
4131 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4134 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4132 delimiters. While it prevents ().TAB from working, it allows
4135 delimiters. While it prevents ().TAB from working, it allows
4133 completions in open (... expressions. This is by far a more common
4136 completions in open (... expressions. This is by far a more common
4134 case.
4137 case.
4135
4138
4136 2002-04-23 Fernando Perez <fperez@colorado.edu>
4139 2002-04-23 Fernando Perez <fperez@colorado.edu>
4137
4140
4138 * IPython/Extensions/InterpreterPasteInput.py: new
4141 * IPython/Extensions/InterpreterPasteInput.py: new
4139 syntax-processing module for pasting lines with >>> or ... at the
4142 syntax-processing module for pasting lines with >>> or ... at the
4140 start.
4143 start.
4141
4144
4142 * IPython/Extensions/PhysicalQ_Interactive.py
4145 * IPython/Extensions/PhysicalQ_Interactive.py
4143 (PhysicalQuantityInteractive.__int__): fixed to work with either
4146 (PhysicalQuantityInteractive.__int__): fixed to work with either
4144 Numeric or math.
4147 Numeric or math.
4145
4148
4146 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4149 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4147 provided profiles. Now we have:
4150 provided profiles. Now we have:
4148 -math -> math module as * and cmath with its own namespace.
4151 -math -> math module as * and cmath with its own namespace.
4149 -numeric -> Numeric as *, plus gnuplot & grace
4152 -numeric -> Numeric as *, plus gnuplot & grace
4150 -physics -> same as before
4153 -physics -> same as before
4151
4154
4152 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4155 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4153 user-defined magics wouldn't be found by @magic if they were
4156 user-defined magics wouldn't be found by @magic if they were
4154 defined as class methods. Also cleaned up the namespace search
4157 defined as class methods. Also cleaned up the namespace search
4155 logic and the string building (to use %s instead of many repeated
4158 logic and the string building (to use %s instead of many repeated
4156 string adds).
4159 string adds).
4157
4160
4158 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4161 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4159 of user-defined magics to operate with class methods (cleaner, in
4162 of user-defined magics to operate with class methods (cleaner, in
4160 line with the gnuplot code).
4163 line with the gnuplot code).
4161
4164
4162 2002-04-22 Fernando Perez <fperez@colorado.edu>
4165 2002-04-22 Fernando Perez <fperez@colorado.edu>
4163
4166
4164 * setup.py: updated dependency list so that manual is updated when
4167 * setup.py: updated dependency list so that manual is updated when
4165 all included files change.
4168 all included files change.
4166
4169
4167 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4170 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4168 the delimiter removal option (the fix is ugly right now).
4171 the delimiter removal option (the fix is ugly right now).
4169
4172
4170 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4173 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4171 all of the math profile (quicker loading, no conflict between
4174 all of the math profile (quicker loading, no conflict between
4172 g-9.8 and g-gnuplot).
4175 g-9.8 and g-gnuplot).
4173
4176
4174 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4177 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4175 name of post-mortem files to IPython_crash_report.txt.
4178 name of post-mortem files to IPython_crash_report.txt.
4176
4179
4177 * Cleanup/update of the docs. Added all the new readline info and
4180 * Cleanup/update of the docs. Added all the new readline info and
4178 formatted all lists as 'real lists'.
4181 formatted all lists as 'real lists'.
4179
4182
4180 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4183 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4181 tab-completion options, since the full readline parse_and_bind is
4184 tab-completion options, since the full readline parse_and_bind is
4182 now accessible.
4185 now accessible.
4183
4186
4184 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4187 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4185 handling of readline options. Now users can specify any string to
4188 handling of readline options. Now users can specify any string to
4186 be passed to parse_and_bind(), as well as the delimiters to be
4189 be passed to parse_and_bind(), as well as the delimiters to be
4187 removed.
4190 removed.
4188 (InteractiveShell.__init__): Added __name__ to the global
4191 (InteractiveShell.__init__): Added __name__ to the global
4189 namespace so that things like Itpl which rely on its existence
4192 namespace so that things like Itpl which rely on its existence
4190 don't crash.
4193 don't crash.
4191 (InteractiveShell._prefilter): Defined the default with a _ so
4194 (InteractiveShell._prefilter): Defined the default with a _ so
4192 that prefilter() is easier to override, while the default one
4195 that prefilter() is easier to override, while the default one
4193 remains available.
4196 remains available.
4194
4197
4195 2002-04-18 Fernando Perez <fperez@colorado.edu>
4198 2002-04-18 Fernando Perez <fperez@colorado.edu>
4196
4199
4197 * Added information about pdb in the docs.
4200 * Added information about pdb in the docs.
4198
4201
4199 2002-04-17 Fernando Perez <fperez@colorado.edu>
4202 2002-04-17 Fernando Perez <fperez@colorado.edu>
4200
4203
4201 * IPython/ipmaker.py (make_IPython): added rc_override option to
4204 * IPython/ipmaker.py (make_IPython): added rc_override option to
4202 allow passing config options at creation time which may override
4205 allow passing config options at creation time which may override
4203 anything set in the config files or command line. This is
4206 anything set in the config files or command line. This is
4204 particularly useful for configuring embedded instances.
4207 particularly useful for configuring embedded instances.
4205
4208
4206 2002-04-15 Fernando Perez <fperez@colorado.edu>
4209 2002-04-15 Fernando Perez <fperez@colorado.edu>
4207
4210
4208 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4211 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4209 crash embedded instances because of the input cache falling out of
4212 crash embedded instances because of the input cache falling out of
4210 sync with the output counter.
4213 sync with the output counter.
4211
4214
4212 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4215 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4213 mode which calls pdb after an uncaught exception in IPython itself.
4216 mode which calls pdb after an uncaught exception in IPython itself.
4214
4217
4215 2002-04-14 Fernando Perez <fperez@colorado.edu>
4218 2002-04-14 Fernando Perez <fperez@colorado.edu>
4216
4219
4217 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4220 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4218 readline, fix it back after each call.
4221 readline, fix it back after each call.
4219
4222
4220 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4223 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4221 method to force all access via __call__(), which guarantees that
4224 method to force all access via __call__(), which guarantees that
4222 traceback references are properly deleted.
4225 traceback references are properly deleted.
4223
4226
4224 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4227 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4225 improve printing when pprint is in use.
4228 improve printing when pprint is in use.
4226
4229
4227 2002-04-13 Fernando Perez <fperez@colorado.edu>
4230 2002-04-13 Fernando Perez <fperez@colorado.edu>
4228
4231
4229 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4232 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4230 exceptions aren't caught anymore. If the user triggers one, he
4233 exceptions aren't caught anymore. If the user triggers one, he
4231 should know why he's doing it and it should go all the way up,
4234 should know why he's doing it and it should go all the way up,
4232 just like any other exception. So now @abort will fully kill the
4235 just like any other exception. So now @abort will fully kill the
4233 embedded interpreter and the embedding code (unless that happens
4236 embedded interpreter and the embedding code (unless that happens
4234 to catch SystemExit).
4237 to catch SystemExit).
4235
4238
4236 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4239 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4237 and a debugger() method to invoke the interactive pdb debugger
4240 and a debugger() method to invoke the interactive pdb debugger
4238 after printing exception information. Also added the corresponding
4241 after printing exception information. Also added the corresponding
4239 -pdb option and @pdb magic to control this feature, and updated
4242 -pdb option and @pdb magic to control this feature, and updated
4240 the docs. After a suggestion from Christopher Hart
4243 the docs. After a suggestion from Christopher Hart
4241 (hart-AT-caltech.edu).
4244 (hart-AT-caltech.edu).
4242
4245
4243 2002-04-12 Fernando Perez <fperez@colorado.edu>
4246 2002-04-12 Fernando Perez <fperez@colorado.edu>
4244
4247
4245 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4248 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4246 the exception handlers defined by the user (not the CrashHandler)
4249 the exception handlers defined by the user (not the CrashHandler)
4247 so that user exceptions don't trigger an ipython bug report.
4250 so that user exceptions don't trigger an ipython bug report.
4248
4251
4249 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4252 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4250 configurable (it should have always been so).
4253 configurable (it should have always been so).
4251
4254
4252 2002-03-26 Fernando Perez <fperez@colorado.edu>
4255 2002-03-26 Fernando Perez <fperez@colorado.edu>
4253
4256
4254 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4257 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4255 and there to fix embedding namespace issues. This should all be
4258 and there to fix embedding namespace issues. This should all be
4256 done in a more elegant way.
4259 done in a more elegant way.
4257
4260
4258 2002-03-25 Fernando Perez <fperez@colorado.edu>
4261 2002-03-25 Fernando Perez <fperez@colorado.edu>
4259
4262
4260 * IPython/genutils.py (get_home_dir): Try to make it work under
4263 * IPython/genutils.py (get_home_dir): Try to make it work under
4261 win9x also.
4264 win9x also.
4262
4265
4263 2002-03-20 Fernando Perez <fperez@colorado.edu>
4266 2002-03-20 Fernando Perez <fperez@colorado.edu>
4264
4267
4265 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4268 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4266 sys.displayhook untouched upon __init__.
4269 sys.displayhook untouched upon __init__.
4267
4270
4268 2002-03-19 Fernando Perez <fperez@colorado.edu>
4271 2002-03-19 Fernando Perez <fperez@colorado.edu>
4269
4272
4270 * Released 0.2.9 (for embedding bug, basically).
4273 * Released 0.2.9 (for embedding bug, basically).
4271
4274
4272 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4275 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4273 exceptions so that enclosing shell's state can be restored.
4276 exceptions so that enclosing shell's state can be restored.
4274
4277
4275 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4278 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4276 naming conventions in the .ipython/ dir.
4279 naming conventions in the .ipython/ dir.
4277
4280
4278 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4281 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4279 from delimiters list so filenames with - in them get expanded.
4282 from delimiters list so filenames with - in them get expanded.
4280
4283
4281 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4284 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4282 sys.displayhook not being properly restored after an embedded call.
4285 sys.displayhook not being properly restored after an embedded call.
4283
4286
4284 2002-03-18 Fernando Perez <fperez@colorado.edu>
4287 2002-03-18 Fernando Perez <fperez@colorado.edu>
4285
4288
4286 * Released 0.2.8
4289 * Released 0.2.8
4287
4290
4288 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4291 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4289 some files weren't being included in a -upgrade.
4292 some files weren't being included in a -upgrade.
4290 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4293 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4291 on' so that the first tab completes.
4294 on' so that the first tab completes.
4292 (InteractiveShell.handle_magic): fixed bug with spaces around
4295 (InteractiveShell.handle_magic): fixed bug with spaces around
4293 quotes breaking many magic commands.
4296 quotes breaking many magic commands.
4294
4297
4295 * setup.py: added note about ignoring the syntax error messages at
4298 * setup.py: added note about ignoring the syntax error messages at
4296 installation.
4299 installation.
4297
4300
4298 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4301 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4299 streamlining the gnuplot interface, now there's only one magic @gp.
4302 streamlining the gnuplot interface, now there's only one magic @gp.
4300
4303
4301 2002-03-17 Fernando Perez <fperez@colorado.edu>
4304 2002-03-17 Fernando Perez <fperez@colorado.edu>
4302
4305
4303 * IPython/UserConfig/magic_gnuplot.py: new name for the
4306 * IPython/UserConfig/magic_gnuplot.py: new name for the
4304 example-magic_pm.py file. Much enhanced system, now with a shell
4307 example-magic_pm.py file. Much enhanced system, now with a shell
4305 for communicating directly with gnuplot, one command at a time.
4308 for communicating directly with gnuplot, one command at a time.
4306
4309
4307 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4310 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4308 setting __name__=='__main__'.
4311 setting __name__=='__main__'.
4309
4312
4310 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4313 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4311 mini-shell for accessing gnuplot from inside ipython. Should
4314 mini-shell for accessing gnuplot from inside ipython. Should
4312 extend it later for grace access too. Inspired by Arnd's
4315 extend it later for grace access too. Inspired by Arnd's
4313 suggestion.
4316 suggestion.
4314
4317
4315 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4318 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4316 calling magic functions with () in their arguments. Thanks to Arnd
4319 calling magic functions with () in their arguments. Thanks to Arnd
4317 Baecker for pointing this to me.
4320 Baecker for pointing this to me.
4318
4321
4319 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4322 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4320 infinitely for integer or complex arrays (only worked with floats).
4323 infinitely for integer or complex arrays (only worked with floats).
4321
4324
4322 2002-03-16 Fernando Perez <fperez@colorado.edu>
4325 2002-03-16 Fernando Perez <fperez@colorado.edu>
4323
4326
4324 * setup.py: Merged setup and setup_windows into a single script
4327 * setup.py: Merged setup and setup_windows into a single script
4325 which properly handles things for windows users.
4328 which properly handles things for windows users.
4326
4329
4327 2002-03-15 Fernando Perez <fperez@colorado.edu>
4330 2002-03-15 Fernando Perez <fperez@colorado.edu>
4328
4331
4329 * Big change to the manual: now the magics are all automatically
4332 * Big change to the manual: now the magics are all automatically
4330 documented. This information is generated from their docstrings
4333 documented. This information is generated from their docstrings
4331 and put in a latex file included by the manual lyx file. This way
4334 and put in a latex file included by the manual lyx file. This way
4332 we get always up to date information for the magics. The manual
4335 we get always up to date information for the magics. The manual
4333 now also has proper version information, also auto-synced.
4336 now also has proper version information, also auto-synced.
4334
4337
4335 For this to work, an undocumented --magic_docstrings option was added.
4338 For this to work, an undocumented --magic_docstrings option was added.
4336
4339
4337 2002-03-13 Fernando Perez <fperez@colorado.edu>
4340 2002-03-13 Fernando Perez <fperez@colorado.edu>
4338
4341
4339 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4342 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4340 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4343 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4341
4344
4342 2002-03-12 Fernando Perez <fperez@colorado.edu>
4345 2002-03-12 Fernando Perez <fperez@colorado.edu>
4343
4346
4344 * IPython/ultraTB.py (TermColors): changed color escapes again to
4347 * IPython/ultraTB.py (TermColors): changed color escapes again to
4345 fix the (old, reintroduced) line-wrapping bug. Basically, if
4348 fix the (old, reintroduced) line-wrapping bug. Basically, if
4346 \001..\002 aren't given in the color escapes, lines get wrapped
4349 \001..\002 aren't given in the color escapes, lines get wrapped
4347 weirdly. But giving those screws up old xterms and emacs terms. So
4350 weirdly. But giving those screws up old xterms and emacs terms. So
4348 I added some logic for emacs terms to be ok, but I can't identify old
4351 I added some logic for emacs terms to be ok, but I can't identify old
4349 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4352 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4350
4353
4351 2002-03-10 Fernando Perez <fperez@colorado.edu>
4354 2002-03-10 Fernando Perez <fperez@colorado.edu>
4352
4355
4353 * IPython/usage.py (__doc__): Various documentation cleanups and
4356 * IPython/usage.py (__doc__): Various documentation cleanups and
4354 updates, both in usage docstrings and in the manual.
4357 updates, both in usage docstrings and in the manual.
4355
4358
4356 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4359 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4357 handling of caching. Set minimum acceptabe value for having a
4360 handling of caching. Set minimum acceptabe value for having a
4358 cache at 20 values.
4361 cache at 20 values.
4359
4362
4360 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4363 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4361 install_first_time function to a method, renamed it and added an
4364 install_first_time function to a method, renamed it and added an
4362 'upgrade' mode. Now people can update their config directory with
4365 'upgrade' mode. Now people can update their config directory with
4363 a simple command line switch (-upgrade, also new).
4366 a simple command line switch (-upgrade, also new).
4364
4367
4365 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4368 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4366 @file (convenient for automagic users under Python >= 2.2).
4369 @file (convenient for automagic users under Python >= 2.2).
4367 Removed @files (it seemed more like a plural than an abbrev. of
4370 Removed @files (it seemed more like a plural than an abbrev. of
4368 'file show').
4371 'file show').
4369
4372
4370 * IPython/iplib.py (install_first_time): Fixed crash if there were
4373 * IPython/iplib.py (install_first_time): Fixed crash if there were
4371 backup files ('~') in .ipython/ install directory.
4374 backup files ('~') in .ipython/ install directory.
4372
4375
4373 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4376 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4374 system. Things look fine, but these changes are fairly
4377 system. Things look fine, but these changes are fairly
4375 intrusive. Test them for a few days.
4378 intrusive. Test them for a few days.
4376
4379
4377 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4380 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4378 the prompts system. Now all in/out prompt strings are user
4381 the prompts system. Now all in/out prompt strings are user
4379 controllable. This is particularly useful for embedding, as one
4382 controllable. This is particularly useful for embedding, as one
4380 can tag embedded instances with particular prompts.
4383 can tag embedded instances with particular prompts.
4381
4384
4382 Also removed global use of sys.ps1/2, which now allows nested
4385 Also removed global use of sys.ps1/2, which now allows nested
4383 embeddings without any problems. Added command-line options for
4386 embeddings without any problems. Added command-line options for
4384 the prompt strings.
4387 the prompt strings.
4385
4388
4386 2002-03-08 Fernando Perez <fperez@colorado.edu>
4389 2002-03-08 Fernando Perez <fperez@colorado.edu>
4387
4390
4388 * IPython/UserConfig/example-embed-short.py (ipshell): added
4391 * IPython/UserConfig/example-embed-short.py (ipshell): added
4389 example file with the bare minimum code for embedding.
4392 example file with the bare minimum code for embedding.
4390
4393
4391 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4394 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4392 functionality for the embeddable shell to be activated/deactivated
4395 functionality for the embeddable shell to be activated/deactivated
4393 either globally or at each call.
4396 either globally or at each call.
4394
4397
4395 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4398 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4396 rewriting the prompt with '--->' for auto-inputs with proper
4399 rewriting the prompt with '--->' for auto-inputs with proper
4397 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4400 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4398 this is handled by the prompts class itself, as it should.
4401 this is handled by the prompts class itself, as it should.
4399
4402
4400 2002-03-05 Fernando Perez <fperez@colorado.edu>
4403 2002-03-05 Fernando Perez <fperez@colorado.edu>
4401
4404
4402 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4405 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4403 @logstart to avoid name clashes with the math log function.
4406 @logstart to avoid name clashes with the math log function.
4404
4407
4405 * Big updates to X/Emacs section of the manual.
4408 * Big updates to X/Emacs section of the manual.
4406
4409
4407 * Removed ipython_emacs. Milan explained to me how to pass
4410 * Removed ipython_emacs. Milan explained to me how to pass
4408 arguments to ipython through Emacs. Some day I'm going to end up
4411 arguments to ipython through Emacs. Some day I'm going to end up
4409 learning some lisp...
4412 learning some lisp...
4410
4413
4411 2002-03-04 Fernando Perez <fperez@colorado.edu>
4414 2002-03-04 Fernando Perez <fperez@colorado.edu>
4412
4415
4413 * IPython/ipython_emacs: Created script to be used as the
4416 * IPython/ipython_emacs: Created script to be used as the
4414 py-python-command Emacs variable so we can pass IPython
4417 py-python-command Emacs variable so we can pass IPython
4415 parameters. I can't figure out how to tell Emacs directly to pass
4418 parameters. I can't figure out how to tell Emacs directly to pass
4416 parameters to IPython, so a dummy shell script will do it.
4419 parameters to IPython, so a dummy shell script will do it.
4417
4420
4418 Other enhancements made for things to work better under Emacs'
4421 Other enhancements made for things to work better under Emacs'
4419 various types of terminals. Many thanks to Milan Zamazal
4422 various types of terminals. Many thanks to Milan Zamazal
4420 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4423 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4421
4424
4422 2002-03-01 Fernando Perez <fperez@colorado.edu>
4425 2002-03-01 Fernando Perez <fperez@colorado.edu>
4423
4426
4424 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4427 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4425 that loading of readline is now optional. This gives better
4428 that loading of readline is now optional. This gives better
4426 control to emacs users.
4429 control to emacs users.
4427
4430
4428 * IPython/ultraTB.py (__date__): Modified color escape sequences
4431 * IPython/ultraTB.py (__date__): Modified color escape sequences
4429 and now things work fine under xterm and in Emacs' term buffers
4432 and now things work fine under xterm and in Emacs' term buffers
4430 (though not shell ones). Well, in emacs you get colors, but all
4433 (though not shell ones). Well, in emacs you get colors, but all
4431 seem to be 'light' colors (no difference between dark and light
4434 seem to be 'light' colors (no difference between dark and light
4432 ones). But the garbage chars are gone, and also in xterms. It
4435 ones). But the garbage chars are gone, and also in xterms. It
4433 seems that now I'm using 'cleaner' ansi sequences.
4436 seems that now I'm using 'cleaner' ansi sequences.
4434
4437
4435 2002-02-21 Fernando Perez <fperez@colorado.edu>
4438 2002-02-21 Fernando Perez <fperez@colorado.edu>
4436
4439
4437 * Released 0.2.7 (mainly to publish the scoping fix).
4440 * Released 0.2.7 (mainly to publish the scoping fix).
4438
4441
4439 * IPython/Logger.py (Logger.logstate): added. A corresponding
4442 * IPython/Logger.py (Logger.logstate): added. A corresponding
4440 @logstate magic was created.
4443 @logstate magic was created.
4441
4444
4442 * IPython/Magic.py: fixed nested scoping problem under Python
4445 * IPython/Magic.py: fixed nested scoping problem under Python
4443 2.1.x (automagic wasn't working).
4446 2.1.x (automagic wasn't working).
4444
4447
4445 2002-02-20 Fernando Perez <fperez@colorado.edu>
4448 2002-02-20 Fernando Perez <fperez@colorado.edu>
4446
4449
4447 * Released 0.2.6.
4450 * Released 0.2.6.
4448
4451
4449 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4452 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4450 option so that logs can come out without any headers at all.
4453 option so that logs can come out without any headers at all.
4451
4454
4452 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4455 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4453 SciPy.
4456 SciPy.
4454
4457
4455 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4458 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4456 that embedded IPython calls don't require vars() to be explicitly
4459 that embedded IPython calls don't require vars() to be explicitly
4457 passed. Now they are extracted from the caller's frame (code
4460 passed. Now they are extracted from the caller's frame (code
4458 snatched from Eric Jones' weave). Added better documentation to
4461 snatched from Eric Jones' weave). Added better documentation to
4459 the section on embedding and the example file.
4462 the section on embedding and the example file.
4460
4463
4461 * IPython/genutils.py (page): Changed so that under emacs, it just
4464 * IPython/genutils.py (page): Changed so that under emacs, it just
4462 prints the string. You can then page up and down in the emacs
4465 prints the string. You can then page up and down in the emacs
4463 buffer itself. This is how the builtin help() works.
4466 buffer itself. This is how the builtin help() works.
4464
4467
4465 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4468 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4466 macro scoping: macros need to be executed in the user's namespace
4469 macro scoping: macros need to be executed in the user's namespace
4467 to work as if they had been typed by the user.
4470 to work as if they had been typed by the user.
4468
4471
4469 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4472 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4470 execute automatically (no need to type 'exec...'). They then
4473 execute automatically (no need to type 'exec...'). They then
4471 behave like 'true macros'. The printing system was also modified
4474 behave like 'true macros'. The printing system was also modified
4472 for this to work.
4475 for this to work.
4473
4476
4474 2002-02-19 Fernando Perez <fperez@colorado.edu>
4477 2002-02-19 Fernando Perez <fperez@colorado.edu>
4475
4478
4476 * IPython/genutils.py (page_file): new function for paging files
4479 * IPython/genutils.py (page_file): new function for paging files
4477 in an OS-independent way. Also necessary for file viewing to work
4480 in an OS-independent way. Also necessary for file viewing to work
4478 well inside Emacs buffers.
4481 well inside Emacs buffers.
4479 (page): Added checks for being in an emacs buffer.
4482 (page): Added checks for being in an emacs buffer.
4480 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4483 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4481 same bug in iplib.
4484 same bug in iplib.
4482
4485
4483 2002-02-18 Fernando Perez <fperez@colorado.edu>
4486 2002-02-18 Fernando Perez <fperez@colorado.edu>
4484
4487
4485 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4488 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4486 of readline so that IPython can work inside an Emacs buffer.
4489 of readline so that IPython can work inside an Emacs buffer.
4487
4490
4488 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4491 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4489 method signatures (they weren't really bugs, but it looks cleaner
4492 method signatures (they weren't really bugs, but it looks cleaner
4490 and keeps PyChecker happy).
4493 and keeps PyChecker happy).
4491
4494
4492 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4495 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4493 for implementing various user-defined hooks. Currently only
4496 for implementing various user-defined hooks. Currently only
4494 display is done.
4497 display is done.
4495
4498
4496 * IPython/Prompts.py (CachedOutput._display): changed display
4499 * IPython/Prompts.py (CachedOutput._display): changed display
4497 functions so that they can be dynamically changed by users easily.
4500 functions so that they can be dynamically changed by users easily.
4498
4501
4499 * IPython/Extensions/numeric_formats.py (num_display): added an
4502 * IPython/Extensions/numeric_formats.py (num_display): added an
4500 extension for printing NumPy arrays in flexible manners. It
4503 extension for printing NumPy arrays in flexible manners. It
4501 doesn't do anything yet, but all the structure is in
4504 doesn't do anything yet, but all the structure is in
4502 place. Ultimately the plan is to implement output format control
4505 place. Ultimately the plan is to implement output format control
4503 like in Octave.
4506 like in Octave.
4504
4507
4505 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4508 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4506 methods are found at run-time by all the automatic machinery.
4509 methods are found at run-time by all the automatic machinery.
4507
4510
4508 2002-02-17 Fernando Perez <fperez@colorado.edu>
4511 2002-02-17 Fernando Perez <fperez@colorado.edu>
4509
4512
4510 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4513 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4511 whole file a little.
4514 whole file a little.
4512
4515
4513 * ToDo: closed this document. Now there's a new_design.lyx
4516 * ToDo: closed this document. Now there's a new_design.lyx
4514 document for all new ideas. Added making a pdf of it for the
4517 document for all new ideas. Added making a pdf of it for the
4515 end-user distro.
4518 end-user distro.
4516
4519
4517 * IPython/Logger.py (Logger.switch_log): Created this to replace
4520 * IPython/Logger.py (Logger.switch_log): Created this to replace
4518 logon() and logoff(). It also fixes a nasty crash reported by
4521 logon() and logoff(). It also fixes a nasty crash reported by
4519 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4522 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4520
4523
4521 * IPython/iplib.py (complete): got auto-completion to work with
4524 * IPython/iplib.py (complete): got auto-completion to work with
4522 automagic (I had wanted this for a long time).
4525 automagic (I had wanted this for a long time).
4523
4526
4524 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4527 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4525 to @file, since file() is now a builtin and clashes with automagic
4528 to @file, since file() is now a builtin and clashes with automagic
4526 for @file.
4529 for @file.
4527
4530
4528 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4531 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4529 of this was previously in iplib, which had grown to more than 2000
4532 of this was previously in iplib, which had grown to more than 2000
4530 lines, way too long. No new functionality, but it makes managing
4533 lines, way too long. No new functionality, but it makes managing
4531 the code a bit easier.
4534 the code a bit easier.
4532
4535
4533 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4536 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4534 information to crash reports.
4537 information to crash reports.
4535
4538
4536 2002-02-12 Fernando Perez <fperez@colorado.edu>
4539 2002-02-12 Fernando Perez <fperez@colorado.edu>
4537
4540
4538 * Released 0.2.5.
4541 * Released 0.2.5.
4539
4542
4540 2002-02-11 Fernando Perez <fperez@colorado.edu>
4543 2002-02-11 Fernando Perez <fperez@colorado.edu>
4541
4544
4542 * Wrote a relatively complete Windows installer. It puts
4545 * Wrote a relatively complete Windows installer. It puts
4543 everything in place, creates Start Menu entries and fixes the
4546 everything in place, creates Start Menu entries and fixes the
4544 color issues. Nothing fancy, but it works.
4547 color issues. Nothing fancy, but it works.
4545
4548
4546 2002-02-10 Fernando Perez <fperez@colorado.edu>
4549 2002-02-10 Fernando Perez <fperez@colorado.edu>
4547
4550
4548 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4551 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4549 os.path.expanduser() call so that we can type @run ~/myfile.py and
4552 os.path.expanduser() call so that we can type @run ~/myfile.py and
4550 have thigs work as expected.
4553 have thigs work as expected.
4551
4554
4552 * IPython/genutils.py (page): fixed exception handling so things
4555 * IPython/genutils.py (page): fixed exception handling so things
4553 work both in Unix and Windows correctly. Quitting a pager triggers
4556 work both in Unix and Windows correctly. Quitting a pager triggers
4554 an IOError/broken pipe in Unix, and in windows not finding a pager
4557 an IOError/broken pipe in Unix, and in windows not finding a pager
4555 is also an IOError, so I had to actually look at the return value
4558 is also an IOError, so I had to actually look at the return value
4556 of the exception, not just the exception itself. Should be ok now.
4559 of the exception, not just the exception itself. Should be ok now.
4557
4560
4558 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4561 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4559 modified to allow case-insensitive color scheme changes.
4562 modified to allow case-insensitive color scheme changes.
4560
4563
4561 2002-02-09 Fernando Perez <fperez@colorado.edu>
4564 2002-02-09 Fernando Perez <fperez@colorado.edu>
4562
4565
4563 * IPython/genutils.py (native_line_ends): new function to leave
4566 * IPython/genutils.py (native_line_ends): new function to leave
4564 user config files with os-native line-endings.
4567 user config files with os-native line-endings.
4565
4568
4566 * README and manual updates.
4569 * README and manual updates.
4567
4570
4568 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4571 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4569 instead of StringType to catch Unicode strings.
4572 instead of StringType to catch Unicode strings.
4570
4573
4571 * IPython/genutils.py (filefind): fixed bug for paths with
4574 * IPython/genutils.py (filefind): fixed bug for paths with
4572 embedded spaces (very common in Windows).
4575 embedded spaces (very common in Windows).
4573
4576
4574 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4577 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4575 files under Windows, so that they get automatically associated
4578 files under Windows, so that they get automatically associated
4576 with a text editor. Windows makes it a pain to handle
4579 with a text editor. Windows makes it a pain to handle
4577 extension-less files.
4580 extension-less files.
4578
4581
4579 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4582 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4580 warning about readline only occur for Posix. In Windows there's no
4583 warning about readline only occur for Posix. In Windows there's no
4581 way to get readline, so why bother with the warning.
4584 way to get readline, so why bother with the warning.
4582
4585
4583 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4586 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4584 for __str__ instead of dir(self), since dir() changed in 2.2.
4587 for __str__ instead of dir(self), since dir() changed in 2.2.
4585
4588
4586 * Ported to Windows! Tested on XP, I suspect it should work fine
4589 * Ported to Windows! Tested on XP, I suspect it should work fine
4587 on NT/2000, but I don't think it will work on 98 et al. That
4590 on NT/2000, but I don't think it will work on 98 et al. That
4588 series of Windows is such a piece of junk anyway that I won't try
4591 series of Windows is such a piece of junk anyway that I won't try
4589 porting it there. The XP port was straightforward, showed a few
4592 porting it there. The XP port was straightforward, showed a few
4590 bugs here and there (fixed all), in particular some string
4593 bugs here and there (fixed all), in particular some string
4591 handling stuff which required considering Unicode strings (which
4594 handling stuff which required considering Unicode strings (which
4592 Windows uses). This is good, but hasn't been too tested :) No
4595 Windows uses). This is good, but hasn't been too tested :) No
4593 fancy installer yet, I'll put a note in the manual so people at
4596 fancy installer yet, I'll put a note in the manual so people at
4594 least make manually a shortcut.
4597 least make manually a shortcut.
4595
4598
4596 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4599 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4597 into a single one, "colors". This now controls both prompt and
4600 into a single one, "colors". This now controls both prompt and
4598 exception color schemes, and can be changed both at startup
4601 exception color schemes, and can be changed both at startup
4599 (either via command-line switches or via ipythonrc files) and at
4602 (either via command-line switches or via ipythonrc files) and at
4600 runtime, with @colors.
4603 runtime, with @colors.
4601 (Magic.magic_run): renamed @prun to @run and removed the old
4604 (Magic.magic_run): renamed @prun to @run and removed the old
4602 @run. The two were too similar to warrant keeping both.
4605 @run. The two were too similar to warrant keeping both.
4603
4606
4604 2002-02-03 Fernando Perez <fperez@colorado.edu>
4607 2002-02-03 Fernando Perez <fperez@colorado.edu>
4605
4608
4606 * IPython/iplib.py (install_first_time): Added comment on how to
4609 * IPython/iplib.py (install_first_time): Added comment on how to
4607 configure the color options for first-time users. Put a <return>
4610 configure the color options for first-time users. Put a <return>
4608 request at the end so that small-terminal users get a chance to
4611 request at the end so that small-terminal users get a chance to
4609 read the startup info.
4612 read the startup info.
4610
4613
4611 2002-01-23 Fernando Perez <fperez@colorado.edu>
4614 2002-01-23 Fernando Perez <fperez@colorado.edu>
4612
4615
4613 * IPython/iplib.py (CachedOutput.update): Changed output memory
4616 * IPython/iplib.py (CachedOutput.update): Changed output memory
4614 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4617 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4615 input history we still use _i. Did this b/c these variable are
4618 input history we still use _i. Did this b/c these variable are
4616 very commonly used in interactive work, so the less we need to
4619 very commonly used in interactive work, so the less we need to
4617 type the better off we are.
4620 type the better off we are.
4618 (Magic.magic_prun): updated @prun to better handle the namespaces
4621 (Magic.magic_prun): updated @prun to better handle the namespaces
4619 the file will run in, including a fix for __name__ not being set
4622 the file will run in, including a fix for __name__ not being set
4620 before.
4623 before.
4621
4624
4622 2002-01-20 Fernando Perez <fperez@colorado.edu>
4625 2002-01-20 Fernando Perez <fperez@colorado.edu>
4623
4626
4624 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4627 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4625 extra garbage for Python 2.2. Need to look more carefully into
4628 extra garbage for Python 2.2. Need to look more carefully into
4626 this later.
4629 this later.
4627
4630
4628 2002-01-19 Fernando Perez <fperez@colorado.edu>
4631 2002-01-19 Fernando Perez <fperez@colorado.edu>
4629
4632
4630 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4633 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4631 display SyntaxError exceptions properly formatted when they occur
4634 display SyntaxError exceptions properly formatted when they occur
4632 (they can be triggered by imported code).
4635 (they can be triggered by imported code).
4633
4636
4634 2002-01-18 Fernando Perez <fperez@colorado.edu>
4637 2002-01-18 Fernando Perez <fperez@colorado.edu>
4635
4638
4636 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4639 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4637 SyntaxError exceptions are reported nicely formatted, instead of
4640 SyntaxError exceptions are reported nicely formatted, instead of
4638 spitting out only offset information as before.
4641 spitting out only offset information as before.
4639 (Magic.magic_prun): Added the @prun function for executing
4642 (Magic.magic_prun): Added the @prun function for executing
4640 programs with command line args inside IPython.
4643 programs with command line args inside IPython.
4641
4644
4642 2002-01-16 Fernando Perez <fperez@colorado.edu>
4645 2002-01-16 Fernando Perez <fperez@colorado.edu>
4643
4646
4644 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4647 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4645 to *not* include the last item given in a range. This brings their
4648 to *not* include the last item given in a range. This brings their
4646 behavior in line with Python's slicing:
4649 behavior in line with Python's slicing:
4647 a[n1:n2] -> a[n1]...a[n2-1]
4650 a[n1:n2] -> a[n1]...a[n2-1]
4648 It may be a bit less convenient, but I prefer to stick to Python's
4651 It may be a bit less convenient, but I prefer to stick to Python's
4649 conventions *everywhere*, so users never have to wonder.
4652 conventions *everywhere*, so users never have to wonder.
4650 (Magic.magic_macro): Added @macro function to ease the creation of
4653 (Magic.magic_macro): Added @macro function to ease the creation of
4651 macros.
4654 macros.
4652
4655
4653 2002-01-05 Fernando Perez <fperez@colorado.edu>
4656 2002-01-05 Fernando Perez <fperez@colorado.edu>
4654
4657
4655 * Released 0.2.4.
4658 * Released 0.2.4.
4656
4659
4657 * IPython/iplib.py (Magic.magic_pdef):
4660 * IPython/iplib.py (Magic.magic_pdef):
4658 (InteractiveShell.safe_execfile): report magic lines and error
4661 (InteractiveShell.safe_execfile): report magic lines and error
4659 lines without line numbers so one can easily copy/paste them for
4662 lines without line numbers so one can easily copy/paste them for
4660 re-execution.
4663 re-execution.
4661
4664
4662 * Updated manual with recent changes.
4665 * Updated manual with recent changes.
4663
4666
4664 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4667 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4665 docstring printing when class? is called. Very handy for knowing
4668 docstring printing when class? is called. Very handy for knowing
4666 how to create class instances (as long as __init__ is well
4669 how to create class instances (as long as __init__ is well
4667 documented, of course :)
4670 documented, of course :)
4668 (Magic.magic_doc): print both class and constructor docstrings.
4671 (Magic.magic_doc): print both class and constructor docstrings.
4669 (Magic.magic_pdef): give constructor info if passed a class and
4672 (Magic.magic_pdef): give constructor info if passed a class and
4670 __call__ info for callable object instances.
4673 __call__ info for callable object instances.
4671
4674
4672 2002-01-04 Fernando Perez <fperez@colorado.edu>
4675 2002-01-04 Fernando Perez <fperez@colorado.edu>
4673
4676
4674 * Made deep_reload() off by default. It doesn't always work
4677 * Made deep_reload() off by default. It doesn't always work
4675 exactly as intended, so it's probably safer to have it off. It's
4678 exactly as intended, so it's probably safer to have it off. It's
4676 still available as dreload() anyway, so nothing is lost.
4679 still available as dreload() anyway, so nothing is lost.
4677
4680
4678 2002-01-02 Fernando Perez <fperez@colorado.edu>
4681 2002-01-02 Fernando Perez <fperez@colorado.edu>
4679
4682
4680 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4683 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4681 so I wanted an updated release).
4684 so I wanted an updated release).
4682
4685
4683 2001-12-27 Fernando Perez <fperez@colorado.edu>
4686 2001-12-27 Fernando Perez <fperez@colorado.edu>
4684
4687
4685 * IPython/iplib.py (InteractiveShell.interact): Added the original
4688 * IPython/iplib.py (InteractiveShell.interact): Added the original
4686 code from 'code.py' for this module in order to change the
4689 code from 'code.py' for this module in order to change the
4687 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4690 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4688 the history cache would break when the user hit Ctrl-C, and
4691 the history cache would break when the user hit Ctrl-C, and
4689 interact() offers no way to add any hooks to it.
4692 interact() offers no way to add any hooks to it.
4690
4693
4691 2001-12-23 Fernando Perez <fperez@colorado.edu>
4694 2001-12-23 Fernando Perez <fperez@colorado.edu>
4692
4695
4693 * setup.py: added check for 'MANIFEST' before trying to remove
4696 * setup.py: added check for 'MANIFEST' before trying to remove
4694 it. Thanks to Sean Reifschneider.
4697 it. Thanks to Sean Reifschneider.
4695
4698
4696 2001-12-22 Fernando Perez <fperez@colorado.edu>
4699 2001-12-22 Fernando Perez <fperez@colorado.edu>
4697
4700
4698 * Released 0.2.2.
4701 * Released 0.2.2.
4699
4702
4700 * Finished (reasonably) writing the manual. Later will add the
4703 * Finished (reasonably) writing the manual. Later will add the
4701 python-standard navigation stylesheets, but for the time being
4704 python-standard navigation stylesheets, but for the time being
4702 it's fairly complete. Distribution will include html and pdf
4705 it's fairly complete. Distribution will include html and pdf
4703 versions.
4706 versions.
4704
4707
4705 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4708 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4706 (MayaVi author).
4709 (MayaVi author).
4707
4710
4708 2001-12-21 Fernando Perez <fperez@colorado.edu>
4711 2001-12-21 Fernando Perez <fperez@colorado.edu>
4709
4712
4710 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4713 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4711 good public release, I think (with the manual and the distutils
4714 good public release, I think (with the manual and the distutils
4712 installer). The manual can use some work, but that can go
4715 installer). The manual can use some work, but that can go
4713 slowly. Otherwise I think it's quite nice for end users. Next
4716 slowly. Otherwise I think it's quite nice for end users. Next
4714 summer, rewrite the guts of it...
4717 summer, rewrite the guts of it...
4715
4718
4716 * Changed format of ipythonrc files to use whitespace as the
4719 * Changed format of ipythonrc files to use whitespace as the
4717 separator instead of an explicit '='. Cleaner.
4720 separator instead of an explicit '='. Cleaner.
4718
4721
4719 2001-12-20 Fernando Perez <fperez@colorado.edu>
4722 2001-12-20 Fernando Perez <fperez@colorado.edu>
4720
4723
4721 * Started a manual in LyX. For now it's just a quick merge of the
4724 * Started a manual in LyX. For now it's just a quick merge of the
4722 various internal docstrings and READMEs. Later it may grow into a
4725 various internal docstrings and READMEs. Later it may grow into a
4723 nice, full-blown manual.
4726 nice, full-blown manual.
4724
4727
4725 * Set up a distutils based installer. Installation should now be
4728 * Set up a distutils based installer. Installation should now be
4726 trivially simple for end-users.
4729 trivially simple for end-users.
4727
4730
4728 2001-12-11 Fernando Perez <fperez@colorado.edu>
4731 2001-12-11 Fernando Perez <fperez@colorado.edu>
4729
4732
4730 * Released 0.2.0. First public release, announced it at
4733 * Released 0.2.0. First public release, announced it at
4731 comp.lang.python. From now on, just bugfixes...
4734 comp.lang.python. From now on, just bugfixes...
4732
4735
4733 * Went through all the files, set copyright/license notices and
4736 * Went through all the files, set copyright/license notices and
4734 cleaned up things. Ready for release.
4737 cleaned up things. Ready for release.
4735
4738
4736 2001-12-10 Fernando Perez <fperez@colorado.edu>
4739 2001-12-10 Fernando Perez <fperez@colorado.edu>
4737
4740
4738 * Changed the first-time installer not to use tarfiles. It's more
4741 * Changed the first-time installer not to use tarfiles. It's more
4739 robust now and less unix-dependent. Also makes it easier for
4742 robust now and less unix-dependent. Also makes it easier for
4740 people to later upgrade versions.
4743 people to later upgrade versions.
4741
4744
4742 * Changed @exit to @abort to reflect the fact that it's pretty
4745 * Changed @exit to @abort to reflect the fact that it's pretty
4743 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4746 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4744 becomes significant only when IPyhton is embedded: in that case,
4747 becomes significant only when IPyhton is embedded: in that case,
4745 C-D closes IPython only, but @abort kills the enclosing program
4748 C-D closes IPython only, but @abort kills the enclosing program
4746 too (unless it had called IPython inside a try catching
4749 too (unless it had called IPython inside a try catching
4747 SystemExit).
4750 SystemExit).
4748
4751
4749 * Created Shell module which exposes the actuall IPython Shell
4752 * Created Shell module which exposes the actuall IPython Shell
4750 classes, currently the normal and the embeddable one. This at
4753 classes, currently the normal and the embeddable one. This at
4751 least offers a stable interface we won't need to change when
4754 least offers a stable interface we won't need to change when
4752 (later) the internals are rewritten. That rewrite will be confined
4755 (later) the internals are rewritten. That rewrite will be confined
4753 to iplib and ipmaker, but the Shell interface should remain as is.
4756 to iplib and ipmaker, but the Shell interface should remain as is.
4754
4757
4755 * Added embed module which offers an embeddable IPShell object,
4758 * Added embed module which offers an embeddable IPShell object,
4756 useful to fire up IPython *inside* a running program. Great for
4759 useful to fire up IPython *inside* a running program. Great for
4757 debugging or dynamical data analysis.
4760 debugging or dynamical data analysis.
4758
4761
4759 2001-12-08 Fernando Perez <fperez@colorado.edu>
4762 2001-12-08 Fernando Perez <fperez@colorado.edu>
4760
4763
4761 * Fixed small bug preventing seeing info from methods of defined
4764 * Fixed small bug preventing seeing info from methods of defined
4762 objects (incorrect namespace in _ofind()).
4765 objects (incorrect namespace in _ofind()).
4763
4766
4764 * Documentation cleanup. Moved the main usage docstrings to a
4767 * Documentation cleanup. Moved the main usage docstrings to a
4765 separate file, usage.py (cleaner to maintain, and hopefully in the
4768 separate file, usage.py (cleaner to maintain, and hopefully in the
4766 future some perlpod-like way of producing interactive, man and
4769 future some perlpod-like way of producing interactive, man and
4767 html docs out of it will be found).
4770 html docs out of it will be found).
4768
4771
4769 * Added @profile to see your profile at any time.
4772 * Added @profile to see your profile at any time.
4770
4773
4771 * Added @p as an alias for 'print'. It's especially convenient if
4774 * Added @p as an alias for 'print'. It's especially convenient if
4772 using automagic ('p x' prints x).
4775 using automagic ('p x' prints x).
4773
4776
4774 * Small cleanups and fixes after a pychecker run.
4777 * Small cleanups and fixes after a pychecker run.
4775
4778
4776 * Changed the @cd command to handle @cd - and @cd -<n> for
4779 * Changed the @cd command to handle @cd - and @cd -<n> for
4777 visiting any directory in _dh.
4780 visiting any directory in _dh.
4778
4781
4779 * Introduced _dh, a history of visited directories. @dhist prints
4782 * Introduced _dh, a history of visited directories. @dhist prints
4780 it out with numbers.
4783 it out with numbers.
4781
4784
4782 2001-12-07 Fernando Perez <fperez@colorado.edu>
4785 2001-12-07 Fernando Perez <fperez@colorado.edu>
4783
4786
4784 * Released 0.1.22
4787 * Released 0.1.22
4785
4788
4786 * Made initialization a bit more robust against invalid color
4789 * Made initialization a bit more robust against invalid color
4787 options in user input (exit, not traceback-crash).
4790 options in user input (exit, not traceback-crash).
4788
4791
4789 * Changed the bug crash reporter to write the report only in the
4792 * Changed the bug crash reporter to write the report only in the
4790 user's .ipython directory. That way IPython won't litter people's
4793 user's .ipython directory. That way IPython won't litter people's
4791 hard disks with crash files all over the place. Also print on
4794 hard disks with crash files all over the place. Also print on
4792 screen the necessary mail command.
4795 screen the necessary mail command.
4793
4796
4794 * With the new ultraTB, implemented LightBG color scheme for light
4797 * With the new ultraTB, implemented LightBG color scheme for light
4795 background terminals. A lot of people like white backgrounds, so I
4798 background terminals. A lot of people like white backgrounds, so I
4796 guess we should at least give them something readable.
4799 guess we should at least give them something readable.
4797
4800
4798 2001-12-06 Fernando Perez <fperez@colorado.edu>
4801 2001-12-06 Fernando Perez <fperez@colorado.edu>
4799
4802
4800 * Modified the structure of ultraTB. Now there's a proper class
4803 * Modified the structure of ultraTB. Now there's a proper class
4801 for tables of color schemes which allow adding schemes easily and
4804 for tables of color schemes which allow adding schemes easily and
4802 switching the active scheme without creating a new instance every
4805 switching the active scheme without creating a new instance every
4803 time (which was ridiculous). The syntax for creating new schemes
4806 time (which was ridiculous). The syntax for creating new schemes
4804 is also cleaner. I think ultraTB is finally done, with a clean
4807 is also cleaner. I think ultraTB is finally done, with a clean
4805 class structure. Names are also much cleaner (now there's proper
4808 class structure. Names are also much cleaner (now there's proper
4806 color tables, no need for every variable to also have 'color' in
4809 color tables, no need for every variable to also have 'color' in
4807 its name).
4810 its name).
4808
4811
4809 * Broke down genutils into separate files. Now genutils only
4812 * Broke down genutils into separate files. Now genutils only
4810 contains utility functions, and classes have been moved to their
4813 contains utility functions, and classes have been moved to their
4811 own files (they had enough independent functionality to warrant
4814 own files (they had enough independent functionality to warrant
4812 it): ConfigLoader, OutputTrap, Struct.
4815 it): ConfigLoader, OutputTrap, Struct.
4813
4816
4814 2001-12-05 Fernando Perez <fperez@colorado.edu>
4817 2001-12-05 Fernando Perez <fperez@colorado.edu>
4815
4818
4816 * IPython turns 21! Released version 0.1.21, as a candidate for
4819 * IPython turns 21! Released version 0.1.21, as a candidate for
4817 public consumption. If all goes well, release in a few days.
4820 public consumption. If all goes well, release in a few days.
4818
4821
4819 * Fixed path bug (files in Extensions/ directory wouldn't be found
4822 * Fixed path bug (files in Extensions/ directory wouldn't be found
4820 unless IPython/ was explicitly in sys.path).
4823 unless IPython/ was explicitly in sys.path).
4821
4824
4822 * Extended the FlexCompleter class as MagicCompleter to allow
4825 * Extended the FlexCompleter class as MagicCompleter to allow
4823 completion of @-starting lines.
4826 completion of @-starting lines.
4824
4827
4825 * Created __release__.py file as a central repository for release
4828 * Created __release__.py file as a central repository for release
4826 info that other files can read from.
4829 info that other files can read from.
4827
4830
4828 * Fixed small bug in logging: when logging was turned on in
4831 * Fixed small bug in logging: when logging was turned on in
4829 mid-session, old lines with special meanings (!@?) were being
4832 mid-session, old lines with special meanings (!@?) were being
4830 logged without the prepended comment, which is necessary since
4833 logged without the prepended comment, which is necessary since
4831 they are not truly valid python syntax. This should make session
4834 they are not truly valid python syntax. This should make session
4832 restores produce less errors.
4835 restores produce less errors.
4833
4836
4834 * The namespace cleanup forced me to make a FlexCompleter class
4837 * The namespace cleanup forced me to make a FlexCompleter class
4835 which is nothing but a ripoff of rlcompleter, but with selectable
4838 which is nothing but a ripoff of rlcompleter, but with selectable
4836 namespace (rlcompleter only works in __main__.__dict__). I'll try
4839 namespace (rlcompleter only works in __main__.__dict__). I'll try
4837 to submit a note to the authors to see if this change can be
4840 to submit a note to the authors to see if this change can be
4838 incorporated in future rlcompleter releases (Dec.6: done)
4841 incorporated in future rlcompleter releases (Dec.6: done)
4839
4842
4840 * More fixes to namespace handling. It was a mess! Now all
4843 * More fixes to namespace handling. It was a mess! Now all
4841 explicit references to __main__.__dict__ are gone (except when
4844 explicit references to __main__.__dict__ are gone (except when
4842 really needed) and everything is handled through the namespace
4845 really needed) and everything is handled through the namespace
4843 dicts in the IPython instance. We seem to be getting somewhere
4846 dicts in the IPython instance. We seem to be getting somewhere
4844 with this, finally...
4847 with this, finally...
4845
4848
4846 * Small documentation updates.
4849 * Small documentation updates.
4847
4850
4848 * Created the Extensions directory under IPython (with an
4851 * Created the Extensions directory under IPython (with an
4849 __init__.py). Put the PhysicalQ stuff there. This directory should
4852 __init__.py). Put the PhysicalQ stuff there. This directory should
4850 be used for all special-purpose extensions.
4853 be used for all special-purpose extensions.
4851
4854
4852 * File renaming:
4855 * File renaming:
4853 ipythonlib --> ipmaker
4856 ipythonlib --> ipmaker
4854 ipplib --> iplib
4857 ipplib --> iplib
4855 This makes a bit more sense in terms of what these files actually do.
4858 This makes a bit more sense in terms of what these files actually do.
4856
4859
4857 * Moved all the classes and functions in ipythonlib to ipplib, so
4860 * Moved all the classes and functions in ipythonlib to ipplib, so
4858 now ipythonlib only has make_IPython(). This will ease up its
4861 now ipythonlib only has make_IPython(). This will ease up its
4859 splitting in smaller functional chunks later.
4862 splitting in smaller functional chunks later.
4860
4863
4861 * Cleaned up (done, I think) output of @whos. Better column
4864 * Cleaned up (done, I think) output of @whos. Better column
4862 formatting, and now shows str(var) for as much as it can, which is
4865 formatting, and now shows str(var) for as much as it can, which is
4863 typically what one gets with a 'print var'.
4866 typically what one gets with a 'print var'.
4864
4867
4865 2001-12-04 Fernando Perez <fperez@colorado.edu>
4868 2001-12-04 Fernando Perez <fperez@colorado.edu>
4866
4869
4867 * Fixed namespace problems. Now builtin/IPyhton/user names get
4870 * Fixed namespace problems. Now builtin/IPyhton/user names get
4868 properly reported in their namespace. Internal namespace handling
4871 properly reported in their namespace. Internal namespace handling
4869 is finally getting decent (not perfect yet, but much better than
4872 is finally getting decent (not perfect yet, but much better than
4870 the ad-hoc mess we had).
4873 the ad-hoc mess we had).
4871
4874
4872 * Removed -exit option. If people just want to run a python
4875 * Removed -exit option. If people just want to run a python
4873 script, that's what the normal interpreter is for. Less
4876 script, that's what the normal interpreter is for. Less
4874 unnecessary options, less chances for bugs.
4877 unnecessary options, less chances for bugs.
4875
4878
4876 * Added a crash handler which generates a complete post-mortem if
4879 * Added a crash handler which generates a complete post-mortem if
4877 IPython crashes. This will help a lot in tracking bugs down the
4880 IPython crashes. This will help a lot in tracking bugs down the
4878 road.
4881 road.
4879
4882
4880 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4883 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4881 which were boud to functions being reassigned would bypass the
4884 which were boud to functions being reassigned would bypass the
4882 logger, breaking the sync of _il with the prompt counter. This
4885 logger, breaking the sync of _il with the prompt counter. This
4883 would then crash IPython later when a new line was logged.
4886 would then crash IPython later when a new line was logged.
4884
4887
4885 2001-12-02 Fernando Perez <fperez@colorado.edu>
4888 2001-12-02 Fernando Perez <fperez@colorado.edu>
4886
4889
4887 * Made IPython a package. This means people don't have to clutter
4890 * Made IPython a package. This means people don't have to clutter
4888 their sys.path with yet another directory. Changed the INSTALL
4891 their sys.path with yet another directory. Changed the INSTALL
4889 file accordingly.
4892 file accordingly.
4890
4893
4891 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4894 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4892 sorts its output (so @who shows it sorted) and @whos formats the
4895 sorts its output (so @who shows it sorted) and @whos formats the
4893 table according to the width of the first column. Nicer, easier to
4896 table according to the width of the first column. Nicer, easier to
4894 read. Todo: write a generic table_format() which takes a list of
4897 read. Todo: write a generic table_format() which takes a list of
4895 lists and prints it nicely formatted, with optional row/column
4898 lists and prints it nicely formatted, with optional row/column
4896 separators and proper padding and justification.
4899 separators and proper padding and justification.
4897
4900
4898 * Released 0.1.20
4901 * Released 0.1.20
4899
4902
4900 * Fixed bug in @log which would reverse the inputcache list (a
4903 * Fixed bug in @log which would reverse the inputcache list (a
4901 copy operation was missing).
4904 copy operation was missing).
4902
4905
4903 * Code cleanup. @config was changed to use page(). Better, since
4906 * Code cleanup. @config was changed to use page(). Better, since
4904 its output is always quite long.
4907 its output is always quite long.
4905
4908
4906 * Itpl is back as a dependency. I was having too many problems
4909 * Itpl is back as a dependency. I was having too many problems
4907 getting the parametric aliases to work reliably, and it's just
4910 getting the parametric aliases to work reliably, and it's just
4908 easier to code weird string operations with it than playing %()s
4911 easier to code weird string operations with it than playing %()s
4909 games. It's only ~6k, so I don't think it's too big a deal.
4912 games. It's only ~6k, so I don't think it's too big a deal.
4910
4913
4911 * Found (and fixed) a very nasty bug with history. !lines weren't
4914 * Found (and fixed) a very nasty bug with history. !lines weren't
4912 getting cached, and the out of sync caches would crash
4915 getting cached, and the out of sync caches would crash
4913 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4916 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4914 division of labor a bit better. Bug fixed, cleaner structure.
4917 division of labor a bit better. Bug fixed, cleaner structure.
4915
4918
4916 2001-12-01 Fernando Perez <fperez@colorado.edu>
4919 2001-12-01 Fernando Perez <fperez@colorado.edu>
4917
4920
4918 * Released 0.1.19
4921 * Released 0.1.19
4919
4922
4920 * Added option -n to @hist to prevent line number printing. Much
4923 * Added option -n to @hist to prevent line number printing. Much
4921 easier to copy/paste code this way.
4924 easier to copy/paste code this way.
4922
4925
4923 * Created global _il to hold the input list. Allows easy
4926 * Created global _il to hold the input list. Allows easy
4924 re-execution of blocks of code by slicing it (inspired by Janko's
4927 re-execution of blocks of code by slicing it (inspired by Janko's
4925 comment on 'macros').
4928 comment on 'macros').
4926
4929
4927 * Small fixes and doc updates.
4930 * Small fixes and doc updates.
4928
4931
4929 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4932 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4930 much too fragile with automagic. Handles properly multi-line
4933 much too fragile with automagic. Handles properly multi-line
4931 statements and takes parameters.
4934 statements and takes parameters.
4932
4935
4933 2001-11-30 Fernando Perez <fperez@colorado.edu>
4936 2001-11-30 Fernando Perez <fperez@colorado.edu>
4934
4937
4935 * Version 0.1.18 released.
4938 * Version 0.1.18 released.
4936
4939
4937 * Fixed nasty namespace bug in initial module imports.
4940 * Fixed nasty namespace bug in initial module imports.
4938
4941
4939 * Added copyright/license notes to all code files (except
4942 * Added copyright/license notes to all code files (except
4940 DPyGetOpt). For the time being, LGPL. That could change.
4943 DPyGetOpt). For the time being, LGPL. That could change.
4941
4944
4942 * Rewrote a much nicer README, updated INSTALL, cleaned up
4945 * Rewrote a much nicer README, updated INSTALL, cleaned up
4943 ipythonrc-* samples.
4946 ipythonrc-* samples.
4944
4947
4945 * Overall code/documentation cleanup. Basically ready for
4948 * Overall code/documentation cleanup. Basically ready for
4946 release. Only remaining thing: licence decision (LGPL?).
4949 release. Only remaining thing: licence decision (LGPL?).
4947
4950
4948 * Converted load_config to a class, ConfigLoader. Now recursion
4951 * Converted load_config to a class, ConfigLoader. Now recursion
4949 control is better organized. Doesn't include the same file twice.
4952 control is better organized. Doesn't include the same file twice.
4950
4953
4951 2001-11-29 Fernando Perez <fperez@colorado.edu>
4954 2001-11-29 Fernando Perez <fperez@colorado.edu>
4952
4955
4953 * Got input history working. Changed output history variables from
4956 * Got input history working. Changed output history variables from
4954 _p to _o so that _i is for input and _o for output. Just cleaner
4957 _p to _o so that _i is for input and _o for output. Just cleaner
4955 convention.
4958 convention.
4956
4959
4957 * Implemented parametric aliases. This pretty much allows the
4960 * Implemented parametric aliases. This pretty much allows the
4958 alias system to offer full-blown shell convenience, I think.
4961 alias system to offer full-blown shell convenience, I think.
4959
4962
4960 * Version 0.1.17 released, 0.1.18 opened.
4963 * Version 0.1.17 released, 0.1.18 opened.
4961
4964
4962 * dot_ipython/ipythonrc (alias): added documentation.
4965 * dot_ipython/ipythonrc (alias): added documentation.
4963 (xcolor): Fixed small bug (xcolors -> xcolor)
4966 (xcolor): Fixed small bug (xcolors -> xcolor)
4964
4967
4965 * Changed the alias system. Now alias is a magic command to define
4968 * Changed the alias system. Now alias is a magic command to define
4966 aliases just like the shell. Rationale: the builtin magics should
4969 aliases just like the shell. Rationale: the builtin magics should
4967 be there for things deeply connected to IPython's
4970 be there for things deeply connected to IPython's
4968 architecture. And this is a much lighter system for what I think
4971 architecture. And this is a much lighter system for what I think
4969 is the really important feature: allowing users to define quickly
4972 is the really important feature: allowing users to define quickly
4970 magics that will do shell things for them, so they can customize
4973 magics that will do shell things for them, so they can customize
4971 IPython easily to match their work habits. If someone is really
4974 IPython easily to match their work habits. If someone is really
4972 desperate to have another name for a builtin alias, they can
4975 desperate to have another name for a builtin alias, they can
4973 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4976 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4974 works.
4977 works.
4975
4978
4976 2001-11-28 Fernando Perez <fperez@colorado.edu>
4979 2001-11-28 Fernando Perez <fperez@colorado.edu>
4977
4980
4978 * Changed @file so that it opens the source file at the proper
4981 * Changed @file so that it opens the source file at the proper
4979 line. Since it uses less, if your EDITOR environment is
4982 line. Since it uses less, if your EDITOR environment is
4980 configured, typing v will immediately open your editor of choice
4983 configured, typing v will immediately open your editor of choice
4981 right at the line where the object is defined. Not as quick as
4984 right at the line where the object is defined. Not as quick as
4982 having a direct @edit command, but for all intents and purposes it
4985 having a direct @edit command, but for all intents and purposes it
4983 works. And I don't have to worry about writing @edit to deal with
4986 works. And I don't have to worry about writing @edit to deal with
4984 all the editors, less does that.
4987 all the editors, less does that.
4985
4988
4986 * Version 0.1.16 released, 0.1.17 opened.
4989 * Version 0.1.16 released, 0.1.17 opened.
4987
4990
4988 * Fixed some nasty bugs in the page/page_dumb combo that could
4991 * Fixed some nasty bugs in the page/page_dumb combo that could
4989 crash IPython.
4992 crash IPython.
4990
4993
4991 2001-11-27 Fernando Perez <fperez@colorado.edu>
4994 2001-11-27 Fernando Perez <fperez@colorado.edu>
4992
4995
4993 * Version 0.1.15 released, 0.1.16 opened.
4996 * Version 0.1.15 released, 0.1.16 opened.
4994
4997
4995 * Finally got ? and ?? to work for undefined things: now it's
4998 * Finally got ? and ?? to work for undefined things: now it's
4996 possible to type {}.get? and get information about the get method
4999 possible to type {}.get? and get information about the get method
4997 of dicts, or os.path? even if only os is defined (so technically
5000 of dicts, or os.path? even if only os is defined (so technically
4998 os.path isn't). Works at any level. For example, after import os,
5001 os.path isn't). Works at any level. For example, after import os,
4999 os?, os.path?, os.path.abspath? all work. This is great, took some
5002 os?, os.path?, os.path.abspath? all work. This is great, took some
5000 work in _ofind.
5003 work in _ofind.
5001
5004
5002 * Fixed more bugs with logging. The sanest way to do it was to add
5005 * Fixed more bugs with logging. The sanest way to do it was to add
5003 to @log a 'mode' parameter. Killed two in one shot (this mode
5006 to @log a 'mode' parameter. Killed two in one shot (this mode
5004 option was a request of Janko's). I think it's finally clean
5007 option was a request of Janko's). I think it's finally clean
5005 (famous last words).
5008 (famous last words).
5006
5009
5007 * Added a page_dumb() pager which does a decent job of paging on
5010 * Added a page_dumb() pager which does a decent job of paging on
5008 screen, if better things (like less) aren't available. One less
5011 screen, if better things (like less) aren't available. One less
5009 unix dependency (someday maybe somebody will port this to
5012 unix dependency (someday maybe somebody will port this to
5010 windows).
5013 windows).
5011
5014
5012 * Fixed problem in magic_log: would lock of logging out if log
5015 * Fixed problem in magic_log: would lock of logging out if log
5013 creation failed (because it would still think it had succeeded).
5016 creation failed (because it would still think it had succeeded).
5014
5017
5015 * Improved the page() function using curses to auto-detect screen
5018 * Improved the page() function using curses to auto-detect screen
5016 size. Now it can make a much better decision on whether to print
5019 size. Now it can make a much better decision on whether to print
5017 or page a string. Option screen_length was modified: a value 0
5020 or page a string. Option screen_length was modified: a value 0
5018 means auto-detect, and that's the default now.
5021 means auto-detect, and that's the default now.
5019
5022
5020 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5023 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5021 go out. I'll test it for a few days, then talk to Janko about
5024 go out. I'll test it for a few days, then talk to Janko about
5022 licences and announce it.
5025 licences and announce it.
5023
5026
5024 * Fixed the length of the auto-generated ---> prompt which appears
5027 * Fixed the length of the auto-generated ---> prompt which appears
5025 for auto-parens and auto-quotes. Getting this right isn't trivial,
5028 for auto-parens and auto-quotes. Getting this right isn't trivial,
5026 with all the color escapes, different prompt types and optional
5029 with all the color escapes, different prompt types and optional
5027 separators. But it seems to be working in all the combinations.
5030 separators. But it seems to be working in all the combinations.
5028
5031
5029 2001-11-26 Fernando Perez <fperez@colorado.edu>
5032 2001-11-26 Fernando Perez <fperez@colorado.edu>
5030
5033
5031 * Wrote a regexp filter to get option types from the option names
5034 * Wrote a regexp filter to get option types from the option names
5032 string. This eliminates the need to manually keep two duplicate
5035 string. This eliminates the need to manually keep two duplicate
5033 lists.
5036 lists.
5034
5037
5035 * Removed the unneeded check_option_names. Now options are handled
5038 * Removed the unneeded check_option_names. Now options are handled
5036 in a much saner manner and it's easy to visually check that things
5039 in a much saner manner and it's easy to visually check that things
5037 are ok.
5040 are ok.
5038
5041
5039 * Updated version numbers on all files I modified to carry a
5042 * Updated version numbers on all files I modified to carry a
5040 notice so Janko and Nathan have clear version markers.
5043 notice so Janko and Nathan have clear version markers.
5041
5044
5042 * Updated docstring for ultraTB with my changes. I should send
5045 * Updated docstring for ultraTB with my changes. I should send
5043 this to Nathan.
5046 this to Nathan.
5044
5047
5045 * Lots of small fixes. Ran everything through pychecker again.
5048 * Lots of small fixes. Ran everything through pychecker again.
5046
5049
5047 * Made loading of deep_reload an cmd line option. If it's not too
5050 * Made loading of deep_reload an cmd line option. If it's not too
5048 kosher, now people can just disable it. With -nodeep_reload it's
5051 kosher, now people can just disable it. With -nodeep_reload it's
5049 still available as dreload(), it just won't overwrite reload().
5052 still available as dreload(), it just won't overwrite reload().
5050
5053
5051 * Moved many options to the no| form (-opt and -noopt
5054 * Moved many options to the no| form (-opt and -noopt
5052 accepted). Cleaner.
5055 accepted). Cleaner.
5053
5056
5054 * Changed magic_log so that if called with no parameters, it uses
5057 * Changed magic_log so that if called with no parameters, it uses
5055 'rotate' mode. That way auto-generated logs aren't automatically
5058 'rotate' mode. That way auto-generated logs aren't automatically
5056 over-written. For normal logs, now a backup is made if it exists
5059 over-written. For normal logs, now a backup is made if it exists
5057 (only 1 level of backups). A new 'backup' mode was added to the
5060 (only 1 level of backups). A new 'backup' mode was added to the
5058 Logger class to support this. This was a request by Janko.
5061 Logger class to support this. This was a request by Janko.
5059
5062
5060 * Added @logoff/@logon to stop/restart an active log.
5063 * Added @logoff/@logon to stop/restart an active log.
5061
5064
5062 * Fixed a lot of bugs in log saving/replay. It was pretty
5065 * Fixed a lot of bugs in log saving/replay. It was pretty
5063 broken. Now special lines (!@,/) appear properly in the command
5066 broken. Now special lines (!@,/) appear properly in the command
5064 history after a log replay.
5067 history after a log replay.
5065
5068
5066 * Tried and failed to implement full session saving via pickle. My
5069 * Tried and failed to implement full session saving via pickle. My
5067 idea was to pickle __main__.__dict__, but modules can't be
5070 idea was to pickle __main__.__dict__, but modules can't be
5068 pickled. This would be a better alternative to replaying logs, but
5071 pickled. This would be a better alternative to replaying logs, but
5069 seems quite tricky to get to work. Changed -session to be called
5072 seems quite tricky to get to work. Changed -session to be called
5070 -logplay, which more accurately reflects what it does. And if we
5073 -logplay, which more accurately reflects what it does. And if we
5071 ever get real session saving working, -session is now available.
5074 ever get real session saving working, -session is now available.
5072
5075
5073 * Implemented color schemes for prompts also. As for tracebacks,
5076 * Implemented color schemes for prompts also. As for tracebacks,
5074 currently only NoColor and Linux are supported. But now the
5077 currently only NoColor and Linux are supported. But now the
5075 infrastructure is in place, based on a generic ColorScheme
5078 infrastructure is in place, based on a generic ColorScheme
5076 class. So writing and activating new schemes both for the prompts
5079 class. So writing and activating new schemes both for the prompts
5077 and the tracebacks should be straightforward.
5080 and the tracebacks should be straightforward.
5078
5081
5079 * Version 0.1.13 released, 0.1.14 opened.
5082 * Version 0.1.13 released, 0.1.14 opened.
5080
5083
5081 * Changed handling of options for output cache. Now counter is
5084 * Changed handling of options for output cache. Now counter is
5082 hardwired starting at 1 and one specifies the maximum number of
5085 hardwired starting at 1 and one specifies the maximum number of
5083 entries *in the outcache* (not the max prompt counter). This is
5086 entries *in the outcache* (not the max prompt counter). This is
5084 much better, since many statements won't increase the cache
5087 much better, since many statements won't increase the cache
5085 count. It also eliminated some confusing options, now there's only
5088 count. It also eliminated some confusing options, now there's only
5086 one: cache_size.
5089 one: cache_size.
5087
5090
5088 * Added 'alias' magic function and magic_alias option in the
5091 * Added 'alias' magic function and magic_alias option in the
5089 ipythonrc file. Now the user can easily define whatever names he
5092 ipythonrc file. Now the user can easily define whatever names he
5090 wants for the magic functions without having to play weird
5093 wants for the magic functions without having to play weird
5091 namespace games. This gives IPython a real shell-like feel.
5094 namespace games. This gives IPython a real shell-like feel.
5092
5095
5093 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5096 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5094 @ or not).
5097 @ or not).
5095
5098
5096 This was one of the last remaining 'visible' bugs (that I know
5099 This was one of the last remaining 'visible' bugs (that I know
5097 of). I think if I can clean up the session loading so it works
5100 of). I think if I can clean up the session loading so it works
5098 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5101 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5099 about licensing).
5102 about licensing).
5100
5103
5101 2001-11-25 Fernando Perez <fperez@colorado.edu>
5104 2001-11-25 Fernando Perez <fperez@colorado.edu>
5102
5105
5103 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5106 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5104 there's a cleaner distinction between what ? and ?? show.
5107 there's a cleaner distinction between what ? and ?? show.
5105
5108
5106 * Added screen_length option. Now the user can define his own
5109 * Added screen_length option. Now the user can define his own
5107 screen size for page() operations.
5110 screen size for page() operations.
5108
5111
5109 * Implemented magic shell-like functions with automatic code
5112 * Implemented magic shell-like functions with automatic code
5110 generation. Now adding another function is just a matter of adding
5113 generation. Now adding another function is just a matter of adding
5111 an entry to a dict, and the function is dynamically generated at
5114 an entry to a dict, and the function is dynamically generated at
5112 run-time. Python has some really cool features!
5115 run-time. Python has some really cool features!
5113
5116
5114 * Renamed many options to cleanup conventions a little. Now all
5117 * Renamed many options to cleanup conventions a little. Now all
5115 are lowercase, and only underscores where needed. Also in the code
5118 are lowercase, and only underscores where needed. Also in the code
5116 option name tables are clearer.
5119 option name tables are clearer.
5117
5120
5118 * Changed prompts a little. Now input is 'In [n]:' instead of
5121 * Changed prompts a little. Now input is 'In [n]:' instead of
5119 'In[n]:='. This allows it the numbers to be aligned with the
5122 'In[n]:='. This allows it the numbers to be aligned with the
5120 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5123 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5121 Python (it was a Mathematica thing). The '...' continuation prompt
5124 Python (it was a Mathematica thing). The '...' continuation prompt
5122 was also changed a little to align better.
5125 was also changed a little to align better.
5123
5126
5124 * Fixed bug when flushing output cache. Not all _p<n> variables
5127 * Fixed bug when flushing output cache. Not all _p<n> variables
5125 exist, so their deletion needs to be wrapped in a try:
5128 exist, so their deletion needs to be wrapped in a try:
5126
5129
5127 * Figured out how to properly use inspect.formatargspec() (it
5130 * Figured out how to properly use inspect.formatargspec() (it
5128 requires the args preceded by *). So I removed all the code from
5131 requires the args preceded by *). So I removed all the code from
5129 _get_pdef in Magic, which was just replicating that.
5132 _get_pdef in Magic, which was just replicating that.
5130
5133
5131 * Added test to prefilter to allow redefining magic function names
5134 * Added test to prefilter to allow redefining magic function names
5132 as variables. This is ok, since the @ form is always available,
5135 as variables. This is ok, since the @ form is always available,
5133 but whe should allow the user to define a variable called 'ls' if
5136 but whe should allow the user to define a variable called 'ls' if
5134 he needs it.
5137 he needs it.
5135
5138
5136 * Moved the ToDo information from README into a separate ToDo.
5139 * Moved the ToDo information from README into a separate ToDo.
5137
5140
5138 * General code cleanup and small bugfixes. I think it's close to a
5141 * General code cleanup and small bugfixes. I think it's close to a
5139 state where it can be released, obviously with a big 'beta'
5142 state where it can be released, obviously with a big 'beta'
5140 warning on it.
5143 warning on it.
5141
5144
5142 * Got the magic function split to work. Now all magics are defined
5145 * Got the magic function split to work. Now all magics are defined
5143 in a separate class. It just organizes things a bit, and now
5146 in a separate class. It just organizes things a bit, and now
5144 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5147 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5145 was too long).
5148 was too long).
5146
5149
5147 * Changed @clear to @reset to avoid potential confusions with
5150 * Changed @clear to @reset to avoid potential confusions with
5148 the shell command clear. Also renamed @cl to @clear, which does
5151 the shell command clear. Also renamed @cl to @clear, which does
5149 exactly what people expect it to from their shell experience.
5152 exactly what people expect it to from their shell experience.
5150
5153
5151 Added a check to the @reset command (since it's so
5154 Added a check to the @reset command (since it's so
5152 destructive, it's probably a good idea to ask for confirmation).
5155 destructive, it's probably a good idea to ask for confirmation).
5153 But now reset only works for full namespace resetting. Since the
5156 But now reset only works for full namespace resetting. Since the
5154 del keyword is already there for deleting a few specific
5157 del keyword is already there for deleting a few specific
5155 variables, I don't see the point of having a redundant magic
5158 variables, I don't see the point of having a redundant magic
5156 function for the same task.
5159 function for the same task.
5157
5160
5158 2001-11-24 Fernando Perez <fperez@colorado.edu>
5161 2001-11-24 Fernando Perez <fperez@colorado.edu>
5159
5162
5160 * Updated the builtin docs (esp. the ? ones).
5163 * Updated the builtin docs (esp. the ? ones).
5161
5164
5162 * Ran all the code through pychecker. Not terribly impressed with
5165 * Ran all the code through pychecker. Not terribly impressed with
5163 it: lots of spurious warnings and didn't really find anything of
5166 it: lots of spurious warnings and didn't really find anything of
5164 substance (just a few modules being imported and not used).
5167 substance (just a few modules being imported and not used).
5165
5168
5166 * Implemented the new ultraTB functionality into IPython. New
5169 * Implemented the new ultraTB functionality into IPython. New
5167 option: xcolors. This chooses color scheme. xmode now only selects
5170 option: xcolors. This chooses color scheme. xmode now only selects
5168 between Plain and Verbose. Better orthogonality.
5171 between Plain and Verbose. Better orthogonality.
5169
5172
5170 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5173 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5171 mode and color scheme for the exception handlers. Now it's
5174 mode and color scheme for the exception handlers. Now it's
5172 possible to have the verbose traceback with no coloring.
5175 possible to have the verbose traceback with no coloring.
5173
5176
5174 2001-11-23 Fernando Perez <fperez@colorado.edu>
5177 2001-11-23 Fernando Perez <fperez@colorado.edu>
5175
5178
5176 * Version 0.1.12 released, 0.1.13 opened.
5179 * Version 0.1.12 released, 0.1.13 opened.
5177
5180
5178 * Removed option to set auto-quote and auto-paren escapes by
5181 * Removed option to set auto-quote and auto-paren escapes by
5179 user. The chances of breaking valid syntax are just too high. If
5182 user. The chances of breaking valid syntax are just too high. If
5180 someone *really* wants, they can always dig into the code.
5183 someone *really* wants, they can always dig into the code.
5181
5184
5182 * Made prompt separators configurable.
5185 * Made prompt separators configurable.
5183
5186
5184 2001-11-22 Fernando Perez <fperez@colorado.edu>
5187 2001-11-22 Fernando Perez <fperez@colorado.edu>
5185
5188
5186 * Small bugfixes in many places.
5189 * Small bugfixes in many places.
5187
5190
5188 * Removed the MyCompleter class from ipplib. It seemed redundant
5191 * Removed the MyCompleter class from ipplib. It seemed redundant
5189 with the C-p,C-n history search functionality. Less code to
5192 with the C-p,C-n history search functionality. Less code to
5190 maintain.
5193 maintain.
5191
5194
5192 * Moved all the original ipython.py code into ipythonlib.py. Right
5195 * Moved all the original ipython.py code into ipythonlib.py. Right
5193 now it's just one big dump into a function called make_IPython, so
5196 now it's just one big dump into a function called make_IPython, so
5194 no real modularity has been gained. But at least it makes the
5197 no real modularity has been gained. But at least it makes the
5195 wrapper script tiny, and since ipythonlib is a module, it gets
5198 wrapper script tiny, and since ipythonlib is a module, it gets
5196 compiled and startup is much faster.
5199 compiled and startup is much faster.
5197
5200
5198 This is a reasobably 'deep' change, so we should test it for a
5201 This is a reasobably 'deep' change, so we should test it for a
5199 while without messing too much more with the code.
5202 while without messing too much more with the code.
5200
5203
5201 2001-11-21 Fernando Perez <fperez@colorado.edu>
5204 2001-11-21 Fernando Perez <fperez@colorado.edu>
5202
5205
5203 * Version 0.1.11 released, 0.1.12 opened for further work.
5206 * Version 0.1.11 released, 0.1.12 opened for further work.
5204
5207
5205 * Removed dependency on Itpl. It was only needed in one place. It
5208 * Removed dependency on Itpl. It was only needed in one place. It
5206 would be nice if this became part of python, though. It makes life
5209 would be nice if this became part of python, though. It makes life
5207 *a lot* easier in some cases.
5210 *a lot* easier in some cases.
5208
5211
5209 * Simplified the prefilter code a bit. Now all handlers are
5212 * Simplified the prefilter code a bit. Now all handlers are
5210 expected to explicitly return a value (at least a blank string).
5213 expected to explicitly return a value (at least a blank string).
5211
5214
5212 * Heavy edits in ipplib. Removed the help system altogether. Now
5215 * Heavy edits in ipplib. Removed the help system altogether. Now
5213 obj?/?? is used for inspecting objects, a magic @doc prints
5216 obj?/?? is used for inspecting objects, a magic @doc prints
5214 docstrings, and full-blown Python help is accessed via the 'help'
5217 docstrings, and full-blown Python help is accessed via the 'help'
5215 keyword. This cleans up a lot of code (less to maintain) and does
5218 keyword. This cleans up a lot of code (less to maintain) and does
5216 the job. Since 'help' is now a standard Python component, might as
5219 the job. Since 'help' is now a standard Python component, might as
5217 well use it and remove duplicate functionality.
5220 well use it and remove duplicate functionality.
5218
5221
5219 Also removed the option to use ipplib as a standalone program. By
5222 Also removed the option to use ipplib as a standalone program. By
5220 now it's too dependent on other parts of IPython to function alone.
5223 now it's too dependent on other parts of IPython to function alone.
5221
5224
5222 * Fixed bug in genutils.pager. It would crash if the pager was
5225 * Fixed bug in genutils.pager. It would crash if the pager was
5223 exited immediately after opening (broken pipe).
5226 exited immediately after opening (broken pipe).
5224
5227
5225 * Trimmed down the VerboseTB reporting a little. The header is
5228 * Trimmed down the VerboseTB reporting a little. The header is
5226 much shorter now and the repeated exception arguments at the end
5229 much shorter now and the repeated exception arguments at the end
5227 have been removed. For interactive use the old header seemed a bit
5230 have been removed. For interactive use the old header seemed a bit
5228 excessive.
5231 excessive.
5229
5232
5230 * Fixed small bug in output of @whos for variables with multi-word
5233 * Fixed small bug in output of @whos for variables with multi-word
5231 types (only first word was displayed).
5234 types (only first word was displayed).
5232
5235
5233 2001-11-17 Fernando Perez <fperez@colorado.edu>
5236 2001-11-17 Fernando Perez <fperez@colorado.edu>
5234
5237
5235 * Version 0.1.10 released, 0.1.11 opened for further work.
5238 * Version 0.1.10 released, 0.1.11 opened for further work.
5236
5239
5237 * Modified dirs and friends. dirs now *returns* the stack (not
5240 * Modified dirs and friends. dirs now *returns* the stack (not
5238 prints), so one can manipulate it as a variable. Convenient to
5241 prints), so one can manipulate it as a variable. Convenient to
5239 travel along many directories.
5242 travel along many directories.
5240
5243
5241 * Fixed bug in magic_pdef: would only work with functions with
5244 * Fixed bug in magic_pdef: would only work with functions with
5242 arguments with default values.
5245 arguments with default values.
5243
5246
5244 2001-11-14 Fernando Perez <fperez@colorado.edu>
5247 2001-11-14 Fernando Perez <fperez@colorado.edu>
5245
5248
5246 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5249 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5247 example with IPython. Various other minor fixes and cleanups.
5250 example with IPython. Various other minor fixes and cleanups.
5248
5251
5249 * Version 0.1.9 released, 0.1.10 opened for further work.
5252 * Version 0.1.9 released, 0.1.10 opened for further work.
5250
5253
5251 * Added sys.path to the list of directories searched in the
5254 * Added sys.path to the list of directories searched in the
5252 execfile= option. It used to be the current directory and the
5255 execfile= option. It used to be the current directory and the
5253 user's IPYTHONDIR only.
5256 user's IPYTHONDIR only.
5254
5257
5255 2001-11-13 Fernando Perez <fperez@colorado.edu>
5258 2001-11-13 Fernando Perez <fperez@colorado.edu>
5256
5259
5257 * Reinstated the raw_input/prefilter separation that Janko had
5260 * Reinstated the raw_input/prefilter separation that Janko had
5258 initially. This gives a more convenient setup for extending the
5261 initially. This gives a more convenient setup for extending the
5259 pre-processor from the outside: raw_input always gets a string,
5262 pre-processor from the outside: raw_input always gets a string,
5260 and prefilter has to process it. We can then redefine prefilter
5263 and prefilter has to process it. We can then redefine prefilter
5261 from the outside and implement extensions for special
5264 from the outside and implement extensions for special
5262 purposes.
5265 purposes.
5263
5266
5264 Today I got one for inputting PhysicalQuantity objects
5267 Today I got one for inputting PhysicalQuantity objects
5265 (from Scientific) without needing any function calls at
5268 (from Scientific) without needing any function calls at
5266 all. Extremely convenient, and it's all done as a user-level
5269 all. Extremely convenient, and it's all done as a user-level
5267 extension (no IPython code was touched). Now instead of:
5270 extension (no IPython code was touched). Now instead of:
5268 a = PhysicalQuantity(4.2,'m/s**2')
5271 a = PhysicalQuantity(4.2,'m/s**2')
5269 one can simply say
5272 one can simply say
5270 a = 4.2 m/s**2
5273 a = 4.2 m/s**2
5271 or even
5274 or even
5272 a = 4.2 m/s^2
5275 a = 4.2 m/s^2
5273
5276
5274 I use this, but it's also a proof of concept: IPython really is
5277 I use this, but it's also a proof of concept: IPython really is
5275 fully user-extensible, even at the level of the parsing of the
5278 fully user-extensible, even at the level of the parsing of the
5276 command line. It's not trivial, but it's perfectly doable.
5279 command line. It's not trivial, but it's perfectly doable.
5277
5280
5278 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5281 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5279 the problem of modules being loaded in the inverse order in which
5282 the problem of modules being loaded in the inverse order in which
5280 they were defined in
5283 they were defined in
5281
5284
5282 * Version 0.1.8 released, 0.1.9 opened for further work.
5285 * Version 0.1.8 released, 0.1.9 opened for further work.
5283
5286
5284 * Added magics pdef, source and file. They respectively show the
5287 * Added magics pdef, source and file. They respectively show the
5285 definition line ('prototype' in C), source code and full python
5288 definition line ('prototype' in C), source code and full python
5286 file for any callable object. The object inspector oinfo uses
5289 file for any callable object. The object inspector oinfo uses
5287 these to show the same information.
5290 these to show the same information.
5288
5291
5289 * Version 0.1.7 released, 0.1.8 opened for further work.
5292 * Version 0.1.7 released, 0.1.8 opened for further work.
5290
5293
5291 * Separated all the magic functions into a class called Magic. The
5294 * Separated all the magic functions into a class called Magic. The
5292 InteractiveShell class was becoming too big for Xemacs to handle
5295 InteractiveShell class was becoming too big for Xemacs to handle
5293 (de-indenting a line would lock it up for 10 seconds while it
5296 (de-indenting a line would lock it up for 10 seconds while it
5294 backtracked on the whole class!)
5297 backtracked on the whole class!)
5295
5298
5296 FIXME: didn't work. It can be done, but right now namespaces are
5299 FIXME: didn't work. It can be done, but right now namespaces are
5297 all messed up. Do it later (reverted it for now, so at least
5300 all messed up. Do it later (reverted it for now, so at least
5298 everything works as before).
5301 everything works as before).
5299
5302
5300 * Got the object introspection system (magic_oinfo) working! I
5303 * Got the object introspection system (magic_oinfo) working! I
5301 think this is pretty much ready for release to Janko, so he can
5304 think this is pretty much ready for release to Janko, so he can
5302 test it for a while and then announce it. Pretty much 100% of what
5305 test it for a while and then announce it. Pretty much 100% of what
5303 I wanted for the 'phase 1' release is ready. Happy, tired.
5306 I wanted for the 'phase 1' release is ready. Happy, tired.
5304
5307
5305 2001-11-12 Fernando Perez <fperez@colorado.edu>
5308 2001-11-12 Fernando Perez <fperez@colorado.edu>
5306
5309
5307 * Version 0.1.6 released, 0.1.7 opened for further work.
5310 * Version 0.1.6 released, 0.1.7 opened for further work.
5308
5311
5309 * Fixed bug in printing: it used to test for truth before
5312 * Fixed bug in printing: it used to test for truth before
5310 printing, so 0 wouldn't print. Now checks for None.
5313 printing, so 0 wouldn't print. Now checks for None.
5311
5314
5312 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5315 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5313 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5316 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5314 reaches by hand into the outputcache. Think of a better way to do
5317 reaches by hand into the outputcache. Think of a better way to do
5315 this later.
5318 this later.
5316
5319
5317 * Various small fixes thanks to Nathan's comments.
5320 * Various small fixes thanks to Nathan's comments.
5318
5321
5319 * Changed magic_pprint to magic_Pprint. This way it doesn't
5322 * Changed magic_pprint to magic_Pprint. This way it doesn't
5320 collide with pprint() and the name is consistent with the command
5323 collide with pprint() and the name is consistent with the command
5321 line option.
5324 line option.
5322
5325
5323 * Changed prompt counter behavior to be fully like
5326 * Changed prompt counter behavior to be fully like
5324 Mathematica's. That is, even input that doesn't return a result
5327 Mathematica's. That is, even input that doesn't return a result
5325 raises the prompt counter. The old behavior was kind of confusing
5328 raises the prompt counter. The old behavior was kind of confusing
5326 (getting the same prompt number several times if the operation
5329 (getting the same prompt number several times if the operation
5327 didn't return a result).
5330 didn't return a result).
5328
5331
5329 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5332 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5330
5333
5331 * Fixed -Classic mode (wasn't working anymore).
5334 * Fixed -Classic mode (wasn't working anymore).
5332
5335
5333 * Added colored prompts using Nathan's new code. Colors are
5336 * Added colored prompts using Nathan's new code. Colors are
5334 currently hardwired, they can be user-configurable. For
5337 currently hardwired, they can be user-configurable. For
5335 developers, they can be chosen in file ipythonlib.py, at the
5338 developers, they can be chosen in file ipythonlib.py, at the
5336 beginning of the CachedOutput class def.
5339 beginning of the CachedOutput class def.
5337
5340
5338 2001-11-11 Fernando Perez <fperez@colorado.edu>
5341 2001-11-11 Fernando Perez <fperez@colorado.edu>
5339
5342
5340 * Version 0.1.5 released, 0.1.6 opened for further work.
5343 * Version 0.1.5 released, 0.1.6 opened for further work.
5341
5344
5342 * Changed magic_env to *return* the environment as a dict (not to
5345 * Changed magic_env to *return* the environment as a dict (not to
5343 print it). This way it prints, but it can also be processed.
5346 print it). This way it prints, but it can also be processed.
5344
5347
5345 * Added Verbose exception reporting to interactive
5348 * Added Verbose exception reporting to interactive
5346 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5349 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5347 traceback. Had to make some changes to the ultraTB file. This is
5350 traceback. Had to make some changes to the ultraTB file. This is
5348 probably the last 'big' thing in my mental todo list. This ties
5351 probably the last 'big' thing in my mental todo list. This ties
5349 in with the next entry:
5352 in with the next entry:
5350
5353
5351 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5354 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5352 has to specify is Plain, Color or Verbose for all exception
5355 has to specify is Plain, Color or Verbose for all exception
5353 handling.
5356 handling.
5354
5357
5355 * Removed ShellServices option. All this can really be done via
5358 * Removed ShellServices option. All this can really be done via
5356 the magic system. It's easier to extend, cleaner and has automatic
5359 the magic system. It's easier to extend, cleaner and has automatic
5357 namespace protection and documentation.
5360 namespace protection and documentation.
5358
5361
5359 2001-11-09 Fernando Perez <fperez@colorado.edu>
5362 2001-11-09 Fernando Perez <fperez@colorado.edu>
5360
5363
5361 * Fixed bug in output cache flushing (missing parameter to
5364 * Fixed bug in output cache flushing (missing parameter to
5362 __init__). Other small bugs fixed (found using pychecker).
5365 __init__). Other small bugs fixed (found using pychecker).
5363
5366
5364 * Version 0.1.4 opened for bugfixing.
5367 * Version 0.1.4 opened for bugfixing.
5365
5368
5366 2001-11-07 Fernando Perez <fperez@colorado.edu>
5369 2001-11-07 Fernando Perez <fperez@colorado.edu>
5367
5370
5368 * Version 0.1.3 released, mainly because of the raw_input bug.
5371 * Version 0.1.3 released, mainly because of the raw_input bug.
5369
5372
5370 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5373 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5371 and when testing for whether things were callable, a call could
5374 and when testing for whether things were callable, a call could
5372 actually be made to certain functions. They would get called again
5375 actually be made to certain functions. They would get called again
5373 once 'really' executed, with a resulting double call. A disaster
5376 once 'really' executed, with a resulting double call. A disaster
5374 in many cases (list.reverse() would never work!).
5377 in many cases (list.reverse() would never work!).
5375
5378
5376 * Removed prefilter() function, moved its code to raw_input (which
5379 * Removed prefilter() function, moved its code to raw_input (which
5377 after all was just a near-empty caller for prefilter). This saves
5380 after all was just a near-empty caller for prefilter). This saves
5378 a function call on every prompt, and simplifies the class a tiny bit.
5381 a function call on every prompt, and simplifies the class a tiny bit.
5379
5382
5380 * Fix _ip to __ip name in magic example file.
5383 * Fix _ip to __ip name in magic example file.
5381
5384
5382 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5385 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5383 work with non-gnu versions of tar.
5386 work with non-gnu versions of tar.
5384
5387
5385 2001-11-06 Fernando Perez <fperez@colorado.edu>
5388 2001-11-06 Fernando Perez <fperez@colorado.edu>
5386
5389
5387 * Version 0.1.2. Just to keep track of the recent changes.
5390 * Version 0.1.2. Just to keep track of the recent changes.
5388
5391
5389 * Fixed nasty bug in output prompt routine. It used to check 'if
5392 * Fixed nasty bug in output prompt routine. It used to check 'if
5390 arg != None...'. Problem is, this fails if arg implements a
5393 arg != None...'. Problem is, this fails if arg implements a
5391 special comparison (__cmp__) which disallows comparing to
5394 special comparison (__cmp__) which disallows comparing to
5392 None. Found it when trying to use the PhysicalQuantity module from
5395 None. Found it when trying to use the PhysicalQuantity module from
5393 ScientificPython.
5396 ScientificPython.
5394
5397
5395 2001-11-05 Fernando Perez <fperez@colorado.edu>
5398 2001-11-05 Fernando Perez <fperez@colorado.edu>
5396
5399
5397 * Also added dirs. Now the pushd/popd/dirs family functions
5400 * Also added dirs. Now the pushd/popd/dirs family functions
5398 basically like the shell, with the added convenience of going home
5401 basically like the shell, with the added convenience of going home
5399 when called with no args.
5402 when called with no args.
5400
5403
5401 * pushd/popd slightly modified to mimic shell behavior more
5404 * pushd/popd slightly modified to mimic shell behavior more
5402 closely.
5405 closely.
5403
5406
5404 * Added env,pushd,popd from ShellServices as magic functions. I
5407 * Added env,pushd,popd from ShellServices as magic functions. I
5405 think the cleanest will be to port all desired functions from
5408 think the cleanest will be to port all desired functions from
5406 ShellServices as magics and remove ShellServices altogether. This
5409 ShellServices as magics and remove ShellServices altogether. This
5407 will provide a single, clean way of adding functionality
5410 will provide a single, clean way of adding functionality
5408 (shell-type or otherwise) to IP.
5411 (shell-type or otherwise) to IP.
5409
5412
5410 2001-11-04 Fernando Perez <fperez@colorado.edu>
5413 2001-11-04 Fernando Perez <fperez@colorado.edu>
5411
5414
5412 * Added .ipython/ directory to sys.path. This way users can keep
5415 * Added .ipython/ directory to sys.path. This way users can keep
5413 customizations there and access them via import.
5416 customizations there and access them via import.
5414
5417
5415 2001-11-03 Fernando Perez <fperez@colorado.edu>
5418 2001-11-03 Fernando Perez <fperez@colorado.edu>
5416
5419
5417 * Opened version 0.1.1 for new changes.
5420 * Opened version 0.1.1 for new changes.
5418
5421
5419 * Changed version number to 0.1.0: first 'public' release, sent to
5422 * Changed version number to 0.1.0: first 'public' release, sent to
5420 Nathan and Janko.
5423 Nathan and Janko.
5421
5424
5422 * Lots of small fixes and tweaks.
5425 * Lots of small fixes and tweaks.
5423
5426
5424 * Minor changes to whos format. Now strings are shown, snipped if
5427 * Minor changes to whos format. Now strings are shown, snipped if
5425 too long.
5428 too long.
5426
5429
5427 * Changed ShellServices to work on __main__ so they show up in @who
5430 * Changed ShellServices to work on __main__ so they show up in @who
5428
5431
5429 * Help also works with ? at the end of a line:
5432 * Help also works with ? at the end of a line:
5430 ?sin and sin?
5433 ?sin and sin?
5431 both produce the same effect. This is nice, as often I use the
5434 both produce the same effect. This is nice, as often I use the
5432 tab-complete to find the name of a method, but I used to then have
5435 tab-complete to find the name of a method, but I used to then have
5433 to go to the beginning of the line to put a ? if I wanted more
5436 to go to the beginning of the line to put a ? if I wanted more
5434 info. Now I can just add the ? and hit return. Convenient.
5437 info. Now I can just add the ? and hit return. Convenient.
5435
5438
5436 2001-11-02 Fernando Perez <fperez@colorado.edu>
5439 2001-11-02 Fernando Perez <fperez@colorado.edu>
5437
5440
5438 * Python version check (>=2.1) added.
5441 * Python version check (>=2.1) added.
5439
5442
5440 * Added LazyPython documentation. At this point the docs are quite
5443 * Added LazyPython documentation. At this point the docs are quite
5441 a mess. A cleanup is in order.
5444 a mess. A cleanup is in order.
5442
5445
5443 * Auto-installer created. For some bizarre reason, the zipfiles
5446 * Auto-installer created. For some bizarre reason, the zipfiles
5444 module isn't working on my system. So I made a tar version
5447 module isn't working on my system. So I made a tar version
5445 (hopefully the command line options in various systems won't kill
5448 (hopefully the command line options in various systems won't kill
5446 me).
5449 me).
5447
5450
5448 * Fixes to Struct in genutils. Now all dictionary-like methods are
5451 * Fixes to Struct in genutils. Now all dictionary-like methods are
5449 protected (reasonably).
5452 protected (reasonably).
5450
5453
5451 * Added pager function to genutils and changed ? to print usage
5454 * Added pager function to genutils and changed ? to print usage
5452 note through it (it was too long).
5455 note through it (it was too long).
5453
5456
5454 * Added the LazyPython functionality. Works great! I changed the
5457 * Added the LazyPython functionality. Works great! I changed the
5455 auto-quote escape to ';', it's on home row and next to '. But
5458 auto-quote escape to ';', it's on home row and next to '. But
5456 both auto-quote and auto-paren (still /) escapes are command-line
5459 both auto-quote and auto-paren (still /) escapes are command-line
5457 parameters.
5460 parameters.
5458
5461
5459
5462
5460 2001-11-01 Fernando Perez <fperez@colorado.edu>
5463 2001-11-01 Fernando Perez <fperez@colorado.edu>
5461
5464
5462 * Version changed to 0.0.7. Fairly large change: configuration now
5465 * Version changed to 0.0.7. Fairly large change: configuration now
5463 is all stored in a directory, by default .ipython. There, all
5466 is all stored in a directory, by default .ipython. There, all
5464 config files have normal looking names (not .names)
5467 config files have normal looking names (not .names)
5465
5468
5466 * Version 0.0.6 Released first to Lucas and Archie as a test
5469 * Version 0.0.6 Released first to Lucas and Archie as a test
5467 run. Since it's the first 'semi-public' release, change version to
5470 run. Since it's the first 'semi-public' release, change version to
5468 > 0.0.6 for any changes now.
5471 > 0.0.6 for any changes now.
5469
5472
5470 * Stuff I had put in the ipplib.py changelog:
5473 * Stuff I had put in the ipplib.py changelog:
5471
5474
5472 Changes to InteractiveShell:
5475 Changes to InteractiveShell:
5473
5476
5474 - Made the usage message a parameter.
5477 - Made the usage message a parameter.
5475
5478
5476 - Require the name of the shell variable to be given. It's a bit
5479 - Require the name of the shell variable to be given. It's a bit
5477 of a hack, but allows the name 'shell' not to be hardwire in the
5480 of a hack, but allows the name 'shell' not to be hardwire in the
5478 magic (@) handler, which is problematic b/c it requires
5481 magic (@) handler, which is problematic b/c it requires
5479 polluting the global namespace with 'shell'. This in turn is
5482 polluting the global namespace with 'shell'. This in turn is
5480 fragile: if a user redefines a variable called shell, things
5483 fragile: if a user redefines a variable called shell, things
5481 break.
5484 break.
5482
5485
5483 - magic @: all functions available through @ need to be defined
5486 - magic @: all functions available through @ need to be defined
5484 as magic_<name>, even though they can be called simply as
5487 as magic_<name>, even though they can be called simply as
5485 @<name>. This allows the special command @magic to gather
5488 @<name>. This allows the special command @magic to gather
5486 information automatically about all existing magic functions,
5489 information automatically about all existing magic functions,
5487 even if they are run-time user extensions, by parsing the shell
5490 even if they are run-time user extensions, by parsing the shell
5488 instance __dict__ looking for special magic_ names.
5491 instance __dict__ looking for special magic_ names.
5489
5492
5490 - mainloop: added *two* local namespace parameters. This allows
5493 - mainloop: added *two* local namespace parameters. This allows
5491 the class to differentiate between parameters which were there
5494 the class to differentiate between parameters which were there
5492 before and after command line initialization was processed. This
5495 before and after command line initialization was processed. This
5493 way, later @who can show things loaded at startup by the
5496 way, later @who can show things loaded at startup by the
5494 user. This trick was necessary to make session saving/reloading
5497 user. This trick was necessary to make session saving/reloading
5495 really work: ideally after saving/exiting/reloading a session,
5498 really work: ideally after saving/exiting/reloading a session,
5496 *everythin* should look the same, including the output of @who. I
5499 *everythin* should look the same, including the output of @who. I
5497 was only able to make this work with this double namespace
5500 was only able to make this work with this double namespace
5498 trick.
5501 trick.
5499
5502
5500 - added a header to the logfile which allows (almost) full
5503 - added a header to the logfile which allows (almost) full
5501 session restoring.
5504 session restoring.
5502
5505
5503 - prepend lines beginning with @ or !, with a and log
5506 - prepend lines beginning with @ or !, with a and log
5504 them. Why? !lines: may be useful to know what you did @lines:
5507 them. Why? !lines: may be useful to know what you did @lines:
5505 they may affect session state. So when restoring a session, at
5508 they may affect session state. So when restoring a session, at
5506 least inform the user of their presence. I couldn't quite get
5509 least inform the user of their presence. I couldn't quite get
5507 them to properly re-execute, but at least the user is warned.
5510 them to properly re-execute, but at least the user is warned.
5508
5511
5509 * Started ChangeLog.
5512 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now