##// END OF EJS Templates
Moved path to extensions - pickleshare failed because it imported...
vivainio -
Show More
1 NO CONTENT: file renamed from IPython/path.py to IPython/Extensions/path.py
NO CONTENT: file renamed from IPython/path.py to IPython/Extensions/path.py
@@ -1,66 +1,73 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 One of Python's nicest features is its interactive interpreter. This allows
5 One of Python's nicest features is its interactive interpreter. This allows
6 very fast testing of ideas without the overhead of creating test files as is
6 very fast testing of ideas without the overhead of creating test files as is
7 typical in most programming languages. However, the interpreter supplied with
7 typical in most programming languages. However, the interpreter supplied with
8 the standard Python distribution is fairly primitive (and IDLE isn't really
8 the standard Python distribution is fairly primitive (and IDLE isn't really
9 much better).
9 much better).
10
10
11 IPython tries to:
11 IPython tries to:
12
12
13 i - provide an efficient environment for interactive work in Python
13 i - provide an efficient environment for interactive work in Python
14 programming. It tries to address what we see as shortcomings of the standard
14 programming. It tries to address what we see as shortcomings of the standard
15 Python prompt, and adds many features to make interactive work much more
15 Python prompt, and adds many features to make interactive work much more
16 efficient.
16 efficient.
17
17
18 ii - offer a flexible framework so that it can be used as the base
18 ii - offer a flexible framework so that it can be used as the base
19 environment for other projects and problems where Python can be the
19 environment for other projects and problems where Python can be the
20 underlying language. Specifically scientific environments like Mathematica,
20 underlying language. Specifically scientific environments like Mathematica,
21 IDL and Mathcad inspired its design, but similar ideas can be useful in many
21 IDL and Mathcad inspired its design, but similar ideas can be useful in many
22 fields. Python is a fabulous language for implementing this kind of system
22 fields. Python is a fabulous language for implementing this kind of system
23 (due to its dynamic and introspective features), and with suitable libraries
23 (due to its dynamic and introspective features), and with suitable libraries
24 entire systems could be built leveraging Python's power.
24 entire systems could be built leveraging Python's power.
25
25
26 iii - serve as an embeddable, ready to go interpreter for your own programs.
26 iii - serve as an embeddable, ready to go interpreter for your own programs.
27
27
28 IPython requires Python 2.2 or newer.
28 IPython requires Python 2.2 or newer.
29
29
30 $Id: __init__.py 1099 2006-01-29 21:05:57Z vivainio $"""
30 $Id: __init__.py 1110 2006-01-30 20:43:30Z vivainio $"""
31
31
32 #*****************************************************************************
32 #*****************************************************************************
33 # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu>
33 # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu>
34 #
34 #
35 # Distributed under the terms of the BSD License. The full license is in
35 # Distributed under the terms of the BSD License. The full license is in
36 # the file COPYING, distributed as part of this software.
36 # the file COPYING, distributed as part of this software.
37 #*****************************************************************************
37 #*****************************************************************************
38
38
39 # Enforce proper version requirements
39 # Enforce proper version requirements
40 import sys
40 import sys
41
41 if sys.version[0:3] < '2.3':
42 if sys.version[0:3] < '2.3':
42 raise ImportError, 'Python Version 2.3 or above is required.'
43 raise ImportError, 'Python Version 2.3 or above is required.'
44
45 # Make it easy to import extensions - they are always directly on pythonpath.
46 # Therefore, non-IPython modules can be added to Extensions directory
47
48 import os
49 sys.path.append(os.path.dirname(__file__) + "/Extensions")
43
50
44 # Define what gets imported with a 'from IPython import *'
51 # Define what gets imported with a 'from IPython import *'
45 __all__ = ['deep_reload','genutils','ipstruct','ultraTB','DPyGetOpt',
52 __all__ = ['deep_reload','genutils','ipstruct','ultraTB','DPyGetOpt',
46 'Itpl','hooks','ConfigLoader','OutputTrap','Release','Shell',
53 'Itpl','hooks','ConfigLoader','OutputTrap','Release','Shell',
47 'platutils','platutils_win32','platutils_posix','platutils_dummy',
54 'platutils','platutils_win32','platutils_posix','platutils_dummy',
48 'ipapi','path','rlineimpl']
55 'ipapi','rlineimpl']
49
56
50 # Load __all__ in IPython namespace so that a simple 'import IPython' gives
57 # Load __all__ in IPython namespace so that a simple 'import IPython' gives
51 # access to them via IPython.<name>
58 # access to them via IPython.<name>
52 glob,loc = globals(),locals()
59 glob,loc = globals(),locals()
53 for name in __all__:
60 for name in __all__:
54 __import__(name,glob,loc,[])
61 __import__(name,glob,loc,[])
55
62
56 # Release data
63 # Release data
57 from IPython import Release # do it explicitly so pydoc can see it - pydoc bug
64 from IPython import Release # do it explicitly so pydoc can see it - pydoc bug
58 __author__ = '%s <%s>\n%s <%s>\n%s <%s>' % \
65 __author__ = '%s <%s>\n%s <%s>\n%s <%s>' % \
59 ( Release.authors['Fernando'] + Release.authors['Janko'] + \
66 ( Release.authors['Fernando'] + Release.authors['Janko'] + \
60 Release.authors['Nathan'] )
67 Release.authors['Nathan'] )
61 __license__ = Release.license
68 __license__ = Release.license
62 __version__ = Release.version
69 __version__ = Release.version
63 __revision__ = Release.revision
70 __revision__ = Release.revision
64
71
65 # Namespace cleanup
72 # Namespace cleanup
66 del name,glob,loc
73 del name,glob,loc
@@ -1,1761 +1,1761 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 1100 2006-01-29 21:27:16Z vivainio $"""
8 $Id: genutils.py 1110 2006-01-30 20:43:30Z vivainio $"""
9
9
10 #*****************************************************************************
10 #*****************************************************************************
11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
12 #
12 #
13 # Distributed under the terms of the BSD License. The full license is in
13 # Distributed under the terms of the BSD License. The full license is in
14 # the file COPYING, distributed as part of this software.
14 # the file COPYING, distributed as part of this software.
15 #*****************************************************************************
15 #*****************************************************************************
16
16
17 from __future__ import generators # 2.2 compatibility
17 from __future__ import generators # 2.2 compatibility
18
18
19 from IPython import Release
19 from IPython import Release
20 __author__ = '%s <%s>' % Release.authors['Fernando']
20 __author__ = '%s <%s>' % Release.authors['Fernando']
21 __license__ = Release.license
21 __license__ = Release.license
22
22
23 #****************************************************************************
23 #****************************************************************************
24 # required modules from the Python standard library
24 # required modules from the Python standard library
25 import __main__
25 import __main__
26 import commands
26 import commands
27 import os
27 import os
28 import re
28 import re
29 import shlex
29 import shlex
30 import shutil
30 import shutil
31 import sys
31 import sys
32 import tempfile
32 import tempfile
33 import time
33 import time
34 import types
34 import types
35
35
36 # Other IPython utilities
36 # Other IPython utilities
37 from IPython.Itpl import Itpl,itpl,printpl
37 from IPython.Itpl import Itpl,itpl,printpl
38 from IPython import DPyGetOpt
38 from IPython import DPyGetOpt
39 from IPython.path import path
39 from path import path
40 if os.name == "nt":
40 if os.name == "nt":
41 from IPython.winconsole import get_console_size
41 from IPython.winconsole import get_console_size
42
42
43 # Build objects which appeared in Python 2.3 for 2.2, to make ipython
43 # Build objects which appeared in Python 2.3 for 2.2, to make ipython
44 # 2.2-friendly
44 # 2.2-friendly
45 try:
45 try:
46 basestring
46 basestring
47 except NameError:
47 except NameError:
48 import types
48 import types
49 basestring = (types.StringType, types.UnicodeType)
49 basestring = (types.StringType, types.UnicodeType)
50 True = 1==1
50 True = 1==1
51 False = 1==0
51 False = 1==0
52
52
53 def enumerate(obj):
53 def enumerate(obj):
54 i = -1
54 i = -1
55 for item in obj:
55 for item in obj:
56 i += 1
56 i += 1
57 yield i, item
57 yield i, item
58
58
59 # add these to the builtin namespace, so that all modules find them
59 # add these to the builtin namespace, so that all modules find them
60 import __builtin__
60 import __builtin__
61 __builtin__.basestring = basestring
61 __builtin__.basestring = basestring
62 __builtin__.True = True
62 __builtin__.True = True
63 __builtin__.False = False
63 __builtin__.False = False
64 __builtin__.enumerate = enumerate
64 __builtin__.enumerate = enumerate
65
65
66 # Try to use shlex.split for converting an input string into a sys.argv-type
66 # Try to use shlex.split for converting an input string into a sys.argv-type
67 # list. This appeared in Python 2.3, so here's a quick backport for 2.2.
67 # list. This appeared in Python 2.3, so here's a quick backport for 2.2.
68 try:
68 try:
69 shlex_split = shlex.split
69 shlex_split = shlex.split
70 except AttributeError:
70 except AttributeError:
71 _quotesre = re.compile(r'[\'"](.*)[\'"]')
71 _quotesre = re.compile(r'[\'"](.*)[\'"]')
72 _wordchars = ('abcdfeghijklmnopqrstuvwxyz'
72 _wordchars = ('abcdfeghijklmnopqrstuvwxyz'
73 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.~*?'
73 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.~*?'
74 'ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ'
74 'ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ'
75 'À�ÂÃÄÅÆÇÈÉÊËÌ�Î��ÑÒÓÔÕÖØÙÚÛÜ�Þ%s'
75 'À�ÂÃÄÅÆÇÈÉÊËÌ�Î��ÑÒÓÔÕÖØÙÚÛÜ�Þ%s'
76 % os.sep)
76 % os.sep)
77
77
78 def shlex_split(s):
78 def shlex_split(s):
79 """Simplified backport to Python 2.2 of shlex.split().
79 """Simplified backport to Python 2.2 of shlex.split().
80
80
81 This is a quick and dirty hack, since the shlex module under 2.2 lacks
81 This is a quick and dirty hack, since the shlex module under 2.2 lacks
82 several of the features needed to really match the functionality of
82 several of the features needed to really match the functionality of
83 shlex.split() in 2.3."""
83 shlex.split() in 2.3."""
84
84
85 lex = shlex.shlex(StringIO(s))
85 lex = shlex.shlex(StringIO(s))
86 # Try to get options, extensions and path separators as characters
86 # Try to get options, extensions and path separators as characters
87 lex.wordchars = _wordchars
87 lex.wordchars = _wordchars
88 lex.commenters = ''
88 lex.commenters = ''
89 # Make a list out of the lexer by hand, since in 2.2 it's not an
89 # Make a list out of the lexer by hand, since in 2.2 it's not an
90 # iterator.
90 # iterator.
91 lout = []
91 lout = []
92 while 1:
92 while 1:
93 token = lex.get_token()
93 token = lex.get_token()
94 if token == '':
94 if token == '':
95 break
95 break
96 # Try to handle quoted tokens correctly
96 # Try to handle quoted tokens correctly
97 quotes = _quotesre.match(token)
97 quotes = _quotesre.match(token)
98 if quotes:
98 if quotes:
99 token = quotes.group(1)
99 token = quotes.group(1)
100 lout.append(token)
100 lout.append(token)
101 return lout
101 return lout
102
102
103 #****************************************************************************
103 #****************************************************************************
104 # Exceptions
104 # Exceptions
105 class Error(Exception):
105 class Error(Exception):
106 """Base class for exceptions in this module."""
106 """Base class for exceptions in this module."""
107 pass
107 pass
108
108
109 #----------------------------------------------------------------------------
109 #----------------------------------------------------------------------------
110 class IOStream:
110 class IOStream:
111 def __init__(self,stream,fallback):
111 def __init__(self,stream,fallback):
112 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
112 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
113 stream = fallback
113 stream = fallback
114 self.stream = stream
114 self.stream = stream
115 self._swrite = stream.write
115 self._swrite = stream.write
116 self.flush = stream.flush
116 self.flush = stream.flush
117
117
118 def write(self,data):
118 def write(self,data):
119 try:
119 try:
120 self._swrite(data)
120 self._swrite(data)
121 except:
121 except:
122 try:
122 try:
123 # print handles some unicode issues which may trip a plain
123 # print handles some unicode issues which may trip a plain
124 # write() call. Attempt to emulate write() by using a
124 # write() call. Attempt to emulate write() by using a
125 # trailing comma
125 # trailing comma
126 print >> self.stream, data,
126 print >> self.stream, data,
127 except:
127 except:
128 # if we get here, something is seriously broken.
128 # if we get here, something is seriously broken.
129 print >> sys.stderr, \
129 print >> sys.stderr, \
130 'ERROR - failed to write data to stream:', stream
130 'ERROR - failed to write data to stream:', stream
131
131
132 class IOTerm:
132 class IOTerm:
133 """ Term holds the file or file-like objects for handling I/O operations.
133 """ Term holds the file or file-like objects for handling I/O operations.
134
134
135 These are normally just sys.stdin, sys.stdout and sys.stderr but for
135 These are normally just sys.stdin, sys.stdout and sys.stderr but for
136 Windows they can can replaced to allow editing the strings before they are
136 Windows they can can replaced to allow editing the strings before they are
137 displayed."""
137 displayed."""
138
138
139 # In the future, having IPython channel all its I/O operations through
139 # In the future, having IPython channel all its I/O operations through
140 # this class will make it easier to embed it into other environments which
140 # this class will make it easier to embed it into other environments which
141 # are not a normal terminal (such as a GUI-based shell)
141 # are not a normal terminal (such as a GUI-based shell)
142 def __init__(self,cin=None,cout=None,cerr=None):
142 def __init__(self,cin=None,cout=None,cerr=None):
143 self.cin = IOStream(cin,sys.stdin)
143 self.cin = IOStream(cin,sys.stdin)
144 self.cout = IOStream(cout,sys.stdout)
144 self.cout = IOStream(cout,sys.stdout)
145 self.cerr = IOStream(cerr,sys.stderr)
145 self.cerr = IOStream(cerr,sys.stderr)
146
146
147 # Global variable to be used for all I/O
147 # Global variable to be used for all I/O
148 Term = IOTerm()
148 Term = IOTerm()
149
149
150 import IPython.rlineimpl as readline
150 import IPython.rlineimpl as readline
151 # Remake Term to use the readline i/o facilities
151 # Remake Term to use the readline i/o facilities
152 if sys.platform == 'win32' and readline.have_readline:
152 if sys.platform == 'win32' and readline.have_readline:
153
153
154 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
154 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
155
155
156
156
157 #****************************************************************************
157 #****************************************************************************
158 # Generic warning/error printer, used by everything else
158 # Generic warning/error printer, used by everything else
159 def warn(msg,level=2,exit_val=1):
159 def warn(msg,level=2,exit_val=1):
160 """Standard warning printer. Gives formatting consistency.
160 """Standard warning printer. Gives formatting consistency.
161
161
162 Output is sent to Term.cerr (sys.stderr by default).
162 Output is sent to Term.cerr (sys.stderr by default).
163
163
164 Options:
164 Options:
165
165
166 -level(2): allows finer control:
166 -level(2): allows finer control:
167 0 -> Do nothing, dummy function.
167 0 -> Do nothing, dummy function.
168 1 -> Print message.
168 1 -> Print message.
169 2 -> Print 'WARNING:' + message. (Default level).
169 2 -> Print 'WARNING:' + message. (Default level).
170 3 -> Print 'ERROR:' + message.
170 3 -> Print 'ERROR:' + message.
171 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
171 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
172
172
173 -exit_val (1): exit value returned by sys.exit() for a level 4
173 -exit_val (1): exit value returned by sys.exit() for a level 4
174 warning. Ignored for all other levels."""
174 warning. Ignored for all other levels."""
175
175
176 if level>0:
176 if level>0:
177 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
177 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
178 print >> Term.cerr, '%s%s' % (header[level],msg)
178 print >> Term.cerr, '%s%s' % (header[level],msg)
179 if level == 4:
179 if level == 4:
180 print >> Term.cerr,'Exiting.\n'
180 print >> Term.cerr,'Exiting.\n'
181 sys.exit(exit_val)
181 sys.exit(exit_val)
182
182
183 def info(msg):
183 def info(msg):
184 """Equivalent to warn(msg,level=1)."""
184 """Equivalent to warn(msg,level=1)."""
185
185
186 warn(msg,level=1)
186 warn(msg,level=1)
187
187
188 def error(msg):
188 def error(msg):
189 """Equivalent to warn(msg,level=3)."""
189 """Equivalent to warn(msg,level=3)."""
190
190
191 warn(msg,level=3)
191 warn(msg,level=3)
192
192
193 def fatal(msg,exit_val=1):
193 def fatal(msg,exit_val=1):
194 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
194 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
195
195
196 warn(msg,exit_val=exit_val,level=4)
196 warn(msg,exit_val=exit_val,level=4)
197
197
198 #---------------------------------------------------------------------------
198 #---------------------------------------------------------------------------
199 # Debugging routines
199 # Debugging routines
200 #
200 #
201 def debugx(expr,pre_msg=''):
201 def debugx(expr,pre_msg=''):
202 """Print the value of an expression from the caller's frame.
202 """Print the value of an expression from the caller's frame.
203
203
204 Takes an expression, evaluates it in the caller's frame and prints both
204 Takes an expression, evaluates it in the caller's frame and prints both
205 the given expression and the resulting value (as well as a debug mark
205 the given expression and the resulting value (as well as a debug mark
206 indicating the name of the calling function. The input must be of a form
206 indicating the name of the calling function. The input must be of a form
207 suitable for eval().
207 suitable for eval().
208
208
209 An optional message can be passed, which will be prepended to the printed
209 An optional message can be passed, which will be prepended to the printed
210 expr->value pair."""
210 expr->value pair."""
211
211
212 cf = sys._getframe(1)
212 cf = sys._getframe(1)
213 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
213 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
214 eval(expr,cf.f_globals,cf.f_locals))
214 eval(expr,cf.f_globals,cf.f_locals))
215
215
216 # deactivate it by uncommenting the following line, which makes it a no-op
216 # deactivate it by uncommenting the following line, which makes it a no-op
217 #def debugx(expr,pre_msg=''): pass
217 #def debugx(expr,pre_msg=''): pass
218
218
219 #----------------------------------------------------------------------------
219 #----------------------------------------------------------------------------
220 StringTypes = types.StringTypes
220 StringTypes = types.StringTypes
221
221
222 # Basic timing functionality
222 # Basic timing functionality
223
223
224 # If possible (Unix), use the resource module instead of time.clock()
224 # If possible (Unix), use the resource module instead of time.clock()
225 try:
225 try:
226 import resource
226 import resource
227 def clock():
227 def clock():
228 """clock() -> floating point number
228 """clock() -> floating point number
229
229
230 Return the CPU time in seconds (user time only, system time is
230 Return the CPU time in seconds (user time only, system time is
231 ignored) since the start of the process. This is done via a call to
231 ignored) since the start of the process. This is done via a call to
232 resource.getrusage, so it avoids the wraparound problems in
232 resource.getrusage, so it avoids the wraparound problems in
233 time.clock()."""
233 time.clock()."""
234
234
235 return resource.getrusage(resource.RUSAGE_SELF)[0]
235 return resource.getrusage(resource.RUSAGE_SELF)[0]
236
236
237 def clock2():
237 def clock2():
238 """clock2() -> (t_user,t_system)
238 """clock2() -> (t_user,t_system)
239
239
240 Similar to clock(), but return a tuple of user/system times."""
240 Similar to clock(), but return a tuple of user/system times."""
241 return resource.getrusage(resource.RUSAGE_SELF)[:2]
241 return resource.getrusage(resource.RUSAGE_SELF)[:2]
242
242
243 except ImportError:
243 except ImportError:
244 clock = time.clock
244 clock = time.clock
245 def clock2():
245 def clock2():
246 """Under windows, system CPU time can't be measured.
246 """Under windows, system CPU time can't be measured.
247
247
248 This just returns clock() and zero."""
248 This just returns clock() and zero."""
249 return time.clock(),0.0
249 return time.clock(),0.0
250
250
251 def timings_out(reps,func,*args,**kw):
251 def timings_out(reps,func,*args,**kw):
252 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
252 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
253
253
254 Execute a function reps times, return a tuple with the elapsed total
254 Execute a function reps times, return a tuple with the elapsed total
255 CPU time in seconds, the time per call and the function's output.
255 CPU time in seconds, the time per call and the function's output.
256
256
257 Under Unix, the return value is the sum of user+system time consumed by
257 Under Unix, the return value is the sum of user+system time consumed by
258 the process, computed via the resource module. This prevents problems
258 the process, computed via the resource module. This prevents problems
259 related to the wraparound effect which the time.clock() function has.
259 related to the wraparound effect which the time.clock() function has.
260
260
261 Under Windows the return value is in wall clock seconds. See the
261 Under Windows the return value is in wall clock seconds. See the
262 documentation for the time module for more details."""
262 documentation for the time module for more details."""
263
263
264 reps = int(reps)
264 reps = int(reps)
265 assert reps >=1, 'reps must be >= 1'
265 assert reps >=1, 'reps must be >= 1'
266 if reps==1:
266 if reps==1:
267 start = clock()
267 start = clock()
268 out = func(*args,**kw)
268 out = func(*args,**kw)
269 tot_time = clock()-start
269 tot_time = clock()-start
270 else:
270 else:
271 rng = xrange(reps-1) # the last time is executed separately to store output
271 rng = xrange(reps-1) # the last time is executed separately to store output
272 start = clock()
272 start = clock()
273 for dummy in rng: func(*args,**kw)
273 for dummy in rng: func(*args,**kw)
274 out = func(*args,**kw) # one last time
274 out = func(*args,**kw) # one last time
275 tot_time = clock()-start
275 tot_time = clock()-start
276 av_time = tot_time / reps
276 av_time = tot_time / reps
277 return tot_time,av_time,out
277 return tot_time,av_time,out
278
278
279 def timings(reps,func,*args,**kw):
279 def timings(reps,func,*args,**kw):
280 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
280 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
281
281
282 Execute a function reps times, return a tuple with the elapsed total CPU
282 Execute a function reps times, return a tuple with the elapsed total CPU
283 time in seconds and the time per call. These are just the first two values
283 time in seconds and the time per call. These are just the first two values
284 in timings_out()."""
284 in timings_out()."""
285
285
286 return timings_out(reps,func,*args,**kw)[0:2]
286 return timings_out(reps,func,*args,**kw)[0:2]
287
287
288 def timing(func,*args,**kw):
288 def timing(func,*args,**kw):
289 """timing(func,*args,**kw) -> t_total
289 """timing(func,*args,**kw) -> t_total
290
290
291 Execute a function once, return the elapsed total CPU time in
291 Execute a function once, return the elapsed total CPU time in
292 seconds. This is just the first value in timings_out()."""
292 seconds. This is just the first value in timings_out()."""
293
293
294 return timings_out(1,func,*args,**kw)[0]
294 return timings_out(1,func,*args,**kw)[0]
295
295
296 #****************************************************************************
296 #****************************************************************************
297 # file and system
297 # file and system
298
298
299 def system(cmd,verbose=0,debug=0,header=''):
299 def system(cmd,verbose=0,debug=0,header=''):
300 """Execute a system command, return its exit status.
300 """Execute a system command, return its exit status.
301
301
302 Options:
302 Options:
303
303
304 - verbose (0): print the command to be executed.
304 - verbose (0): print the command to be executed.
305
305
306 - debug (0): only print, do not actually execute.
306 - debug (0): only print, do not actually execute.
307
307
308 - header (''): Header to print on screen prior to the executed command (it
308 - header (''): Header to print on screen prior to the executed command (it
309 is only prepended to the command, no newlines are added).
309 is only prepended to the command, no newlines are added).
310
310
311 Note: a stateful version of this function is available through the
311 Note: a stateful version of this function is available through the
312 SystemExec class."""
312 SystemExec class."""
313
313
314 stat = 0
314 stat = 0
315 if verbose or debug: print header+cmd
315 if verbose or debug: print header+cmd
316 sys.stdout.flush()
316 sys.stdout.flush()
317 if not debug: stat = os.system(cmd)
317 if not debug: stat = os.system(cmd)
318 return stat
318 return stat
319
319
320 # This function is used by ipython in a lot of places to make system calls.
320 # This function is used by ipython in a lot of places to make system calls.
321 # We need it to be slightly different under win32, due to the vagaries of
321 # We need it to be slightly different under win32, due to the vagaries of
322 # 'network shares'. A win32 override is below.
322 # 'network shares'. A win32 override is below.
323
323
324 def shell(cmd,verbose=0,debug=0,header=''):
324 def shell(cmd,verbose=0,debug=0,header=''):
325 """Execute a command in the system shell, always return None.
325 """Execute a command in the system shell, always return None.
326
326
327 Options:
327 Options:
328
328
329 - verbose (0): print the command to be executed.
329 - verbose (0): print the command to be executed.
330
330
331 - debug (0): only print, do not actually execute.
331 - debug (0): only print, do not actually execute.
332
332
333 - header (''): Header to print on screen prior to the executed command (it
333 - header (''): Header to print on screen prior to the executed command (it
334 is only prepended to the command, no newlines are added).
334 is only prepended to the command, no newlines are added).
335
335
336 Note: this is similar to genutils.system(), but it returns None so it can
336 Note: this is similar to genutils.system(), but it returns None so it can
337 be conveniently used in interactive loops without getting the return value
337 be conveniently used in interactive loops without getting the return value
338 (typically 0) printed many times."""
338 (typically 0) printed many times."""
339
339
340 stat = 0
340 stat = 0
341 if verbose or debug: print header+cmd
341 if verbose or debug: print header+cmd
342 # flush stdout so we don't mangle python's buffering
342 # flush stdout so we don't mangle python's buffering
343 sys.stdout.flush()
343 sys.stdout.flush()
344 if not debug:
344 if not debug:
345 os.system(cmd)
345 os.system(cmd)
346
346
347 # override shell() for win32 to deal with network shares
347 # override shell() for win32 to deal with network shares
348 if os.name in ('nt','dos'):
348 if os.name in ('nt','dos'):
349
349
350 shell_ori = shell
350 shell_ori = shell
351
351
352 def shell(cmd,verbose=0,debug=0,header=''):
352 def shell(cmd,verbose=0,debug=0,header=''):
353 if os.getcwd().startswith(r"\\"):
353 if os.getcwd().startswith(r"\\"):
354 path = os.getcwd()
354 path = os.getcwd()
355 # change to c drive (cannot be on UNC-share when issuing os.system,
355 # change to c drive (cannot be on UNC-share when issuing os.system,
356 # as cmd.exe cannot handle UNC addresses)
356 # as cmd.exe cannot handle UNC addresses)
357 os.chdir("c:")
357 os.chdir("c:")
358 # issue pushd to the UNC-share and then run the command
358 # issue pushd to the UNC-share and then run the command
359 try:
359 try:
360 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
360 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
361 finally:
361 finally:
362 os.chdir(path)
362 os.chdir(path)
363 else:
363 else:
364 shell_ori(cmd,verbose,debug,header)
364 shell_ori(cmd,verbose,debug,header)
365
365
366 shell.__doc__ = shell_ori.__doc__
366 shell.__doc__ = shell_ori.__doc__
367
367
368 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
368 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
369 """Dummy substitute for perl's backquotes.
369 """Dummy substitute for perl's backquotes.
370
370
371 Executes a command and returns the output.
371 Executes a command and returns the output.
372
372
373 Accepts the same arguments as system(), plus:
373 Accepts the same arguments as system(), plus:
374
374
375 - split(0): if true, the output is returned as a list split on newlines.
375 - split(0): if true, the output is returned as a list split on newlines.
376
376
377 Note: a stateful version of this function is available through the
377 Note: a stateful version of this function is available through the
378 SystemExec class."""
378 SystemExec class."""
379
379
380 if verbose or debug: print header+cmd
380 if verbose or debug: print header+cmd
381 if not debug:
381 if not debug:
382 output = commands.getoutput(cmd)
382 output = commands.getoutput(cmd)
383 if split:
383 if split:
384 return output.split('\n')
384 return output.split('\n')
385 else:
385 else:
386 return output
386 return output
387
387
388 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
388 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
389 """Return (standard output,standard error) of executing cmd in a shell.
389 """Return (standard output,standard error) of executing cmd in a shell.
390
390
391 Accepts the same arguments as system(), plus:
391 Accepts the same arguments as system(), plus:
392
392
393 - split(0): if true, each of stdout/err is returned as a list split on
393 - split(0): if true, each of stdout/err is returned as a list split on
394 newlines.
394 newlines.
395
395
396 Note: a stateful version of this function is available through the
396 Note: a stateful version of this function is available through the
397 SystemExec class."""
397 SystemExec class."""
398
398
399 if verbose or debug: print header+cmd
399 if verbose or debug: print header+cmd
400 if not cmd:
400 if not cmd:
401 if split:
401 if split:
402 return [],[]
402 return [],[]
403 else:
403 else:
404 return '',''
404 return '',''
405 if not debug:
405 if not debug:
406 pin,pout,perr = os.popen3(cmd)
406 pin,pout,perr = os.popen3(cmd)
407 tout = pout.read().rstrip()
407 tout = pout.read().rstrip()
408 terr = perr.read().rstrip()
408 terr = perr.read().rstrip()
409 pin.close()
409 pin.close()
410 pout.close()
410 pout.close()
411 perr.close()
411 perr.close()
412 if split:
412 if split:
413 return tout.split('\n'),terr.split('\n')
413 return tout.split('\n'),terr.split('\n')
414 else:
414 else:
415 return tout,terr
415 return tout,terr
416
416
417 # for compatibility with older naming conventions
417 # for compatibility with older naming conventions
418 xsys = system
418 xsys = system
419 bq = getoutput
419 bq = getoutput
420
420
421 class SystemExec:
421 class SystemExec:
422 """Access the system and getoutput functions through a stateful interface.
422 """Access the system and getoutput functions through a stateful interface.
423
423
424 Note: here we refer to the system and getoutput functions from this
424 Note: here we refer to the system and getoutput functions from this
425 library, not the ones from the standard python library.
425 library, not the ones from the standard python library.
426
426
427 This class offers the system and getoutput functions as methods, but the
427 This class offers the system and getoutput functions as methods, but the
428 verbose, debug and header parameters can be set for the instance (at
428 verbose, debug and header parameters can be set for the instance (at
429 creation time or later) so that they don't need to be specified on each
429 creation time or later) so that they don't need to be specified on each
430 call.
430 call.
431
431
432 For efficiency reasons, there's no way to override the parameters on a
432 For efficiency reasons, there's no way to override the parameters on a
433 per-call basis other than by setting instance attributes. If you need
433 per-call basis other than by setting instance attributes. If you need
434 local overrides, it's best to directly call system() or getoutput().
434 local overrides, it's best to directly call system() or getoutput().
435
435
436 The following names are provided as alternate options:
436 The following names are provided as alternate options:
437 - xsys: alias to system
437 - xsys: alias to system
438 - bq: alias to getoutput
438 - bq: alias to getoutput
439
439
440 An instance can then be created as:
440 An instance can then be created as:
441 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
441 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
442
442
443 And used as:
443 And used as:
444 >>> sysexec.xsys('pwd')
444 >>> sysexec.xsys('pwd')
445 >>> dirlist = sysexec.bq('ls -l')
445 >>> dirlist = sysexec.bq('ls -l')
446 """
446 """
447
447
448 def __init__(self,verbose=0,debug=0,header='',split=0):
448 def __init__(self,verbose=0,debug=0,header='',split=0):
449 """Specify the instance's values for verbose, debug and header."""
449 """Specify the instance's values for verbose, debug and header."""
450 setattr_list(self,'verbose debug header split')
450 setattr_list(self,'verbose debug header split')
451
451
452 def system(self,cmd):
452 def system(self,cmd):
453 """Stateful interface to system(), with the same keyword parameters."""
453 """Stateful interface to system(), with the same keyword parameters."""
454
454
455 system(cmd,self.verbose,self.debug,self.header)
455 system(cmd,self.verbose,self.debug,self.header)
456
456
457 def shell(self,cmd):
457 def shell(self,cmd):
458 """Stateful interface to shell(), with the same keyword parameters."""
458 """Stateful interface to shell(), with the same keyword parameters."""
459
459
460 shell(cmd,self.verbose,self.debug,self.header)
460 shell(cmd,self.verbose,self.debug,self.header)
461
461
462 xsys = system # alias
462 xsys = system # alias
463
463
464 def getoutput(self,cmd):
464 def getoutput(self,cmd):
465 """Stateful interface to getoutput()."""
465 """Stateful interface to getoutput()."""
466
466
467 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
467 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
468
468
469 def getoutputerror(self,cmd):
469 def getoutputerror(self,cmd):
470 """Stateful interface to getoutputerror()."""
470 """Stateful interface to getoutputerror()."""
471
471
472 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
472 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
473
473
474 bq = getoutput # alias
474 bq = getoutput # alias
475
475
476 #-----------------------------------------------------------------------------
476 #-----------------------------------------------------------------------------
477 def mutex_opts(dict,ex_op):
477 def mutex_opts(dict,ex_op):
478 """Check for presence of mutually exclusive keys in a dict.
478 """Check for presence of mutually exclusive keys in a dict.
479
479
480 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
480 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
481 for op1,op2 in ex_op:
481 for op1,op2 in ex_op:
482 if op1 in dict and op2 in dict:
482 if op1 in dict and op2 in dict:
483 raise ValueError,'\n*** ERROR in Arguments *** '\
483 raise ValueError,'\n*** ERROR in Arguments *** '\
484 'Options '+op1+' and '+op2+' are mutually exclusive.'
484 'Options '+op1+' and '+op2+' are mutually exclusive.'
485
485
486 #-----------------------------------------------------------------------------
486 #-----------------------------------------------------------------------------
487 def get_py_filename(name):
487 def get_py_filename(name):
488 """Return a valid python filename in the current directory.
488 """Return a valid python filename in the current directory.
489
489
490 If the given name is not a file, it adds '.py' and searches again.
490 If the given name is not a file, it adds '.py' and searches again.
491 Raises IOError with an informative message if the file isn't found."""
491 Raises IOError with an informative message if the file isn't found."""
492
492
493 name = os.path.expanduser(name)
493 name = os.path.expanduser(name)
494 if not os.path.isfile(name) and not name.endswith('.py'):
494 if not os.path.isfile(name) and not name.endswith('.py'):
495 name += '.py'
495 name += '.py'
496 if os.path.isfile(name):
496 if os.path.isfile(name):
497 return name
497 return name
498 else:
498 else:
499 raise IOError,'File `%s` not found.' % name
499 raise IOError,'File `%s` not found.' % name
500
500
501 #-----------------------------------------------------------------------------
501 #-----------------------------------------------------------------------------
502 def filefind(fname,alt_dirs = None):
502 def filefind(fname,alt_dirs = None):
503 """Return the given filename either in the current directory, if it
503 """Return the given filename either in the current directory, if it
504 exists, or in a specified list of directories.
504 exists, or in a specified list of directories.
505
505
506 ~ expansion is done on all file and directory names.
506 ~ expansion is done on all file and directory names.
507
507
508 Upon an unsuccessful search, raise an IOError exception."""
508 Upon an unsuccessful search, raise an IOError exception."""
509
509
510 if alt_dirs is None:
510 if alt_dirs is None:
511 try:
511 try:
512 alt_dirs = get_home_dir()
512 alt_dirs = get_home_dir()
513 except HomeDirError:
513 except HomeDirError:
514 alt_dirs = os.getcwd()
514 alt_dirs = os.getcwd()
515 search = [fname] + list_strings(alt_dirs)
515 search = [fname] + list_strings(alt_dirs)
516 search = map(os.path.expanduser,search)
516 search = map(os.path.expanduser,search)
517 #print 'search list for',fname,'list:',search # dbg
517 #print 'search list for',fname,'list:',search # dbg
518 fname = search[0]
518 fname = search[0]
519 if os.path.isfile(fname):
519 if os.path.isfile(fname):
520 return fname
520 return fname
521 for direc in search[1:]:
521 for direc in search[1:]:
522 testname = os.path.join(direc,fname)
522 testname = os.path.join(direc,fname)
523 #print 'testname',testname # dbg
523 #print 'testname',testname # dbg
524 if os.path.isfile(testname):
524 if os.path.isfile(testname):
525 return testname
525 return testname
526 raise IOError,'File' + `fname` + \
526 raise IOError,'File' + `fname` + \
527 ' not found in current or supplied directories:' + `alt_dirs`
527 ' not found in current or supplied directories:' + `alt_dirs`
528
528
529 #----------------------------------------------------------------------------
529 #----------------------------------------------------------------------------
530 def file_read(filename):
530 def file_read(filename):
531 """Read a file and close it. Returns the file source."""
531 """Read a file and close it. Returns the file source."""
532 fobj=open(filename,'r');
532 fobj=open(filename,'r');
533 source = fobj.read();
533 source = fobj.read();
534 fobj.close()
534 fobj.close()
535 return source
535 return source
536
536
537 #----------------------------------------------------------------------------
537 #----------------------------------------------------------------------------
538 def target_outdated(target,deps):
538 def target_outdated(target,deps):
539 """Determine whether a target is out of date.
539 """Determine whether a target is out of date.
540
540
541 target_outdated(target,deps) -> 1/0
541 target_outdated(target,deps) -> 1/0
542
542
543 deps: list of filenames which MUST exist.
543 deps: list of filenames which MUST exist.
544 target: single filename which may or may not exist.
544 target: single filename which may or may not exist.
545
545
546 If target doesn't exist or is older than any file listed in deps, return
546 If target doesn't exist or is older than any file listed in deps, return
547 true, otherwise return false.
547 true, otherwise return false.
548 """
548 """
549 try:
549 try:
550 target_time = os.path.getmtime(target)
550 target_time = os.path.getmtime(target)
551 except os.error:
551 except os.error:
552 return 1
552 return 1
553 for dep in deps:
553 for dep in deps:
554 dep_time = os.path.getmtime(dep)
554 dep_time = os.path.getmtime(dep)
555 if dep_time > target_time:
555 if dep_time > target_time:
556 #print "For target",target,"Dep failed:",dep # dbg
556 #print "For target",target,"Dep failed:",dep # dbg
557 #print "times (dep,tar):",dep_time,target_time # dbg
557 #print "times (dep,tar):",dep_time,target_time # dbg
558 return 1
558 return 1
559 return 0
559 return 0
560
560
561 #-----------------------------------------------------------------------------
561 #-----------------------------------------------------------------------------
562 def target_update(target,deps,cmd):
562 def target_update(target,deps,cmd):
563 """Update a target with a given command given a list of dependencies.
563 """Update a target with a given command given a list of dependencies.
564
564
565 target_update(target,deps,cmd) -> runs cmd if target is outdated.
565 target_update(target,deps,cmd) -> runs cmd if target is outdated.
566
566
567 This is just a wrapper around target_outdated() which calls the given
567 This is just a wrapper around target_outdated() which calls the given
568 command if target is outdated."""
568 command if target is outdated."""
569
569
570 if target_outdated(target,deps):
570 if target_outdated(target,deps):
571 xsys(cmd)
571 xsys(cmd)
572
572
573 #----------------------------------------------------------------------------
573 #----------------------------------------------------------------------------
574 def unquote_ends(istr):
574 def unquote_ends(istr):
575 """Remove a single pair of quotes from the endpoints of a string."""
575 """Remove a single pair of quotes from the endpoints of a string."""
576
576
577 if not istr:
577 if not istr:
578 return istr
578 return istr
579 if (istr[0]=="'" and istr[-1]=="'") or \
579 if (istr[0]=="'" and istr[-1]=="'") or \
580 (istr[0]=='"' and istr[-1]=='"'):
580 (istr[0]=='"' and istr[-1]=='"'):
581 return istr[1:-1]
581 return istr[1:-1]
582 else:
582 else:
583 return istr
583 return istr
584
584
585 #----------------------------------------------------------------------------
585 #----------------------------------------------------------------------------
586 def process_cmdline(argv,names=[],defaults={},usage=''):
586 def process_cmdline(argv,names=[],defaults={},usage=''):
587 """ Process command-line options and arguments.
587 """ Process command-line options and arguments.
588
588
589 Arguments:
589 Arguments:
590
590
591 - argv: list of arguments, typically sys.argv.
591 - argv: list of arguments, typically sys.argv.
592
592
593 - names: list of option names. See DPyGetOpt docs for details on options
593 - names: list of option names. See DPyGetOpt docs for details on options
594 syntax.
594 syntax.
595
595
596 - defaults: dict of default values.
596 - defaults: dict of default values.
597
597
598 - usage: optional usage notice to print if a wrong argument is passed.
598 - usage: optional usage notice to print if a wrong argument is passed.
599
599
600 Return a dict of options and a list of free arguments."""
600 Return a dict of options and a list of free arguments."""
601
601
602 getopt = DPyGetOpt.DPyGetOpt()
602 getopt = DPyGetOpt.DPyGetOpt()
603 getopt.setIgnoreCase(0)
603 getopt.setIgnoreCase(0)
604 getopt.parseConfiguration(names)
604 getopt.parseConfiguration(names)
605
605
606 try:
606 try:
607 getopt.processArguments(argv)
607 getopt.processArguments(argv)
608 except:
608 except:
609 print usage
609 print usage
610 warn(`sys.exc_value`,level=4)
610 warn(`sys.exc_value`,level=4)
611
611
612 defaults.update(getopt.optionValues)
612 defaults.update(getopt.optionValues)
613 args = getopt.freeValues
613 args = getopt.freeValues
614
614
615 return defaults,args
615 return defaults,args
616
616
617 #----------------------------------------------------------------------------
617 #----------------------------------------------------------------------------
618 def optstr2types(ostr):
618 def optstr2types(ostr):
619 """Convert a string of option names to a dict of type mappings.
619 """Convert a string of option names to a dict of type mappings.
620
620
621 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
621 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
622
622
623 This is used to get the types of all the options in a string formatted
623 This is used to get the types of all the options in a string formatted
624 with the conventions of DPyGetOpt. The 'type' None is used for options
624 with the conventions of DPyGetOpt. The 'type' None is used for options
625 which are strings (they need no further conversion). This function's main
625 which are strings (they need no further conversion). This function's main
626 use is to get a typemap for use with read_dict().
626 use is to get a typemap for use with read_dict().
627 """
627 """
628
628
629 typeconv = {None:'',int:'',float:''}
629 typeconv = {None:'',int:'',float:''}
630 typemap = {'s':None,'i':int,'f':float}
630 typemap = {'s':None,'i':int,'f':float}
631 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
631 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
632
632
633 for w in ostr.split():
633 for w in ostr.split():
634 oname,alias,otype = opt_re.match(w).groups()
634 oname,alias,otype = opt_re.match(w).groups()
635 if otype == '' or alias == '!': # simple switches are integers too
635 if otype == '' or alias == '!': # simple switches are integers too
636 otype = 'i'
636 otype = 'i'
637 typeconv[typemap[otype]] += oname + ' '
637 typeconv[typemap[otype]] += oname + ' '
638 return typeconv
638 return typeconv
639
639
640 #----------------------------------------------------------------------------
640 #----------------------------------------------------------------------------
641 def read_dict(filename,type_conv=None,**opt):
641 def read_dict(filename,type_conv=None,**opt):
642
642
643 """Read a dictionary of key=value pairs from an input file, optionally
643 """Read a dictionary of key=value pairs from an input file, optionally
644 performing conversions on the resulting values.
644 performing conversions on the resulting values.
645
645
646 read_dict(filename,type_conv,**opt) -> dict
646 read_dict(filename,type_conv,**opt) -> dict
647
647
648 Only one value per line is accepted, the format should be
648 Only one value per line is accepted, the format should be
649 # optional comments are ignored
649 # optional comments are ignored
650 key value\n
650 key value\n
651
651
652 Args:
652 Args:
653
653
654 - type_conv: A dictionary specifying which keys need to be converted to
654 - type_conv: A dictionary specifying which keys need to be converted to
655 which types. By default all keys are read as strings. This dictionary
655 which types. By default all keys are read as strings. This dictionary
656 should have as its keys valid conversion functions for strings
656 should have as its keys valid conversion functions for strings
657 (int,long,float,complex, or your own). The value for each key
657 (int,long,float,complex, or your own). The value for each key
658 (converter) should be a whitespace separated string containing the names
658 (converter) should be a whitespace separated string containing the names
659 of all the entries in the file to be converted using that function. For
659 of all the entries in the file to be converted using that function. For
660 keys to be left alone, use None as the conversion function (only needed
660 keys to be left alone, use None as the conversion function (only needed
661 with purge=1, see below).
661 with purge=1, see below).
662
662
663 - opt: dictionary with extra options as below (default in parens)
663 - opt: dictionary with extra options as below (default in parens)
664
664
665 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
665 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
666 of the dictionary to be returned. If purge is going to be used, the
666 of the dictionary to be returned. If purge is going to be used, the
667 set of keys to be left as strings also has to be explicitly specified
667 set of keys to be left as strings also has to be explicitly specified
668 using the (non-existent) conversion function None.
668 using the (non-existent) conversion function None.
669
669
670 fs(None): field separator. This is the key/value separator to be used
670 fs(None): field separator. This is the key/value separator to be used
671 when parsing the file. The None default means any whitespace [behavior
671 when parsing the file. The None default means any whitespace [behavior
672 of string.split()].
672 of string.split()].
673
673
674 strip(0): if 1, strip string values of leading/trailinig whitespace.
674 strip(0): if 1, strip string values of leading/trailinig whitespace.
675
675
676 warn(1): warning level if requested keys are not found in file.
676 warn(1): warning level if requested keys are not found in file.
677 - 0: silently ignore.
677 - 0: silently ignore.
678 - 1: inform but proceed.
678 - 1: inform but proceed.
679 - 2: raise KeyError exception.
679 - 2: raise KeyError exception.
680
680
681 no_empty(0): if 1, remove keys with whitespace strings as a value.
681 no_empty(0): if 1, remove keys with whitespace strings as a value.
682
682
683 unique([]): list of keys (or space separated string) which can't be
683 unique([]): list of keys (or space separated string) which can't be
684 repeated. If one such key is found in the file, each new instance
684 repeated. If one such key is found in the file, each new instance
685 overwrites the previous one. For keys not listed here, the behavior is
685 overwrites the previous one. For keys not listed here, the behavior is
686 to make a list of all appearances.
686 to make a list of all appearances.
687
687
688 Example:
688 Example:
689 If the input file test.ini has:
689 If the input file test.ini has:
690 i 3
690 i 3
691 x 4.5
691 x 4.5
692 y 5.5
692 y 5.5
693 s hi ho
693 s hi ho
694 Then:
694 Then:
695
695
696 >>> type_conv={int:'i',float:'x',None:'s'}
696 >>> type_conv={int:'i',float:'x',None:'s'}
697 >>> read_dict('test.ini')
697 >>> read_dict('test.ini')
698 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
698 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
699 >>> read_dict('test.ini',type_conv)
699 >>> read_dict('test.ini',type_conv)
700 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
700 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
701 >>> read_dict('test.ini',type_conv,purge=1)
701 >>> read_dict('test.ini',type_conv,purge=1)
702 {'i': 3, 's': 'hi ho', 'x': 4.5}
702 {'i': 3, 's': 'hi ho', 'x': 4.5}
703 """
703 """
704
704
705 # starting config
705 # starting config
706 opt.setdefault('purge',0)
706 opt.setdefault('purge',0)
707 opt.setdefault('fs',None) # field sep defaults to any whitespace
707 opt.setdefault('fs',None) # field sep defaults to any whitespace
708 opt.setdefault('strip',0)
708 opt.setdefault('strip',0)
709 opt.setdefault('warn',1)
709 opt.setdefault('warn',1)
710 opt.setdefault('no_empty',0)
710 opt.setdefault('no_empty',0)
711 opt.setdefault('unique','')
711 opt.setdefault('unique','')
712 if type(opt['unique']) in StringTypes:
712 if type(opt['unique']) in StringTypes:
713 unique_keys = qw(opt['unique'])
713 unique_keys = qw(opt['unique'])
714 elif type(opt['unique']) in (types.TupleType,types.ListType):
714 elif type(opt['unique']) in (types.TupleType,types.ListType):
715 unique_keys = opt['unique']
715 unique_keys = opt['unique']
716 else:
716 else:
717 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
717 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
718
718
719 dict = {}
719 dict = {}
720 # first read in table of values as strings
720 # first read in table of values as strings
721 file = open(filename,'r')
721 file = open(filename,'r')
722 for line in file.readlines():
722 for line in file.readlines():
723 line = line.strip()
723 line = line.strip()
724 if len(line) and line[0]=='#': continue
724 if len(line) and line[0]=='#': continue
725 if len(line)>0:
725 if len(line)>0:
726 lsplit = line.split(opt['fs'],1)
726 lsplit = line.split(opt['fs'],1)
727 try:
727 try:
728 key,val = lsplit
728 key,val = lsplit
729 except ValueError:
729 except ValueError:
730 key,val = lsplit[0],''
730 key,val = lsplit[0],''
731 key = key.strip()
731 key = key.strip()
732 if opt['strip']: val = val.strip()
732 if opt['strip']: val = val.strip()
733 if val == "''" or val == '""': val = ''
733 if val == "''" or val == '""': val = ''
734 if opt['no_empty'] and (val=='' or val.isspace()):
734 if opt['no_empty'] and (val=='' or val.isspace()):
735 continue
735 continue
736 # if a key is found more than once in the file, build a list
736 # if a key is found more than once in the file, build a list
737 # unless it's in the 'unique' list. In that case, last found in file
737 # unless it's in the 'unique' list. In that case, last found in file
738 # takes precedence. User beware.
738 # takes precedence. User beware.
739 try:
739 try:
740 if dict[key] and key in unique_keys:
740 if dict[key] and key in unique_keys:
741 dict[key] = val
741 dict[key] = val
742 elif type(dict[key]) is types.ListType:
742 elif type(dict[key]) is types.ListType:
743 dict[key].append(val)
743 dict[key].append(val)
744 else:
744 else:
745 dict[key] = [dict[key],val]
745 dict[key] = [dict[key],val]
746 except KeyError:
746 except KeyError:
747 dict[key] = val
747 dict[key] = val
748 # purge if requested
748 # purge if requested
749 if opt['purge']:
749 if opt['purge']:
750 accepted_keys = qwflat(type_conv.values())
750 accepted_keys = qwflat(type_conv.values())
751 for key in dict.keys():
751 for key in dict.keys():
752 if key in accepted_keys: continue
752 if key in accepted_keys: continue
753 del(dict[key])
753 del(dict[key])
754 # now convert if requested
754 # now convert if requested
755 if type_conv==None: return dict
755 if type_conv==None: return dict
756 conversions = type_conv.keys()
756 conversions = type_conv.keys()
757 try: conversions.remove(None)
757 try: conversions.remove(None)
758 except: pass
758 except: pass
759 for convert in conversions:
759 for convert in conversions:
760 for val in qw(type_conv[convert]):
760 for val in qw(type_conv[convert]):
761 try:
761 try:
762 dict[val] = convert(dict[val])
762 dict[val] = convert(dict[val])
763 except KeyError,e:
763 except KeyError,e:
764 if opt['warn'] == 0:
764 if opt['warn'] == 0:
765 pass
765 pass
766 elif opt['warn'] == 1:
766 elif opt['warn'] == 1:
767 print >>sys.stderr, 'Warning: key',val,\
767 print >>sys.stderr, 'Warning: key',val,\
768 'not found in file',filename
768 'not found in file',filename
769 elif opt['warn'] == 2:
769 elif opt['warn'] == 2:
770 raise KeyError,e
770 raise KeyError,e
771 else:
771 else:
772 raise ValueError,'Warning level must be 0,1 or 2'
772 raise ValueError,'Warning level must be 0,1 or 2'
773
773
774 return dict
774 return dict
775
775
776 #----------------------------------------------------------------------------
776 #----------------------------------------------------------------------------
777 def flag_calls(func):
777 def flag_calls(func):
778 """Wrap a function to detect and flag when it gets called.
778 """Wrap a function to detect and flag when it gets called.
779
779
780 This is a decorator which takes a function and wraps it in a function with
780 This is a decorator which takes a function and wraps it in a function with
781 a 'called' attribute. wrapper.called is initialized to False.
781 a 'called' attribute. wrapper.called is initialized to False.
782
782
783 The wrapper.called attribute is set to False right before each call to the
783 The wrapper.called attribute is set to False right before each call to the
784 wrapped function, so if the call fails it remains False. After the call
784 wrapped function, so if the call fails it remains False. After the call
785 completes, wrapper.called is set to True and the output is returned.
785 completes, wrapper.called is set to True and the output is returned.
786
786
787 Testing for truth in wrapper.called allows you to determine if a call to
787 Testing for truth in wrapper.called allows you to determine if a call to
788 func() was attempted and succeeded."""
788 func() was attempted and succeeded."""
789
789
790 def wrapper(*args,**kw):
790 def wrapper(*args,**kw):
791 wrapper.called = False
791 wrapper.called = False
792 out = func(*args,**kw)
792 out = func(*args,**kw)
793 wrapper.called = True
793 wrapper.called = True
794 return out
794 return out
795
795
796 wrapper.called = False
796 wrapper.called = False
797 wrapper.__doc__ = func.__doc__
797 wrapper.__doc__ = func.__doc__
798 return wrapper
798 return wrapper
799
799
800 #----------------------------------------------------------------------------
800 #----------------------------------------------------------------------------
801 class HomeDirError(Error):
801 class HomeDirError(Error):
802 pass
802 pass
803
803
804 def get_home_dir():
804 def get_home_dir():
805 """Return the closest possible equivalent to a 'home' directory.
805 """Return the closest possible equivalent to a 'home' directory.
806
806
807 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
807 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
808
808
809 Currently only Posix and NT are implemented, a HomeDirError exception is
809 Currently only Posix and NT are implemented, a HomeDirError exception is
810 raised for all other OSes. """
810 raised for all other OSes. """
811
811
812 isdir = os.path.isdir
812 isdir = os.path.isdir
813 env = os.environ
813 env = os.environ
814 try:
814 try:
815 homedir = env['HOME']
815 homedir = env['HOME']
816 if not isdir(homedir):
816 if not isdir(homedir):
817 # in case a user stuck some string which does NOT resolve to a
817 # in case a user stuck some string which does NOT resolve to a
818 # valid path, it's as good as if we hadn't foud it
818 # valid path, it's as good as if we hadn't foud it
819 raise KeyError
819 raise KeyError
820 return homedir
820 return homedir
821 except KeyError:
821 except KeyError:
822 if os.name == 'posix':
822 if os.name == 'posix':
823 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
823 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
824 elif os.name == 'nt':
824 elif os.name == 'nt':
825 # For some strange reason, win9x returns 'nt' for os.name.
825 # For some strange reason, win9x returns 'nt' for os.name.
826 try:
826 try:
827 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
827 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
828 if not isdir(homedir):
828 if not isdir(homedir):
829 homedir = os.path.join(env['USERPROFILE'])
829 homedir = os.path.join(env['USERPROFILE'])
830 if not isdir(homedir):
830 if not isdir(homedir):
831 raise HomeDirError
831 raise HomeDirError
832 return homedir
832 return homedir
833 except:
833 except:
834 try:
834 try:
835 # Use the registry to get the 'My Documents' folder.
835 # Use the registry to get the 'My Documents' folder.
836 import _winreg as wreg
836 import _winreg as wreg
837 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
837 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
838 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
838 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
839 homedir = wreg.QueryValueEx(key,'Personal')[0]
839 homedir = wreg.QueryValueEx(key,'Personal')[0]
840 key.Close()
840 key.Close()
841 if not isdir(homedir):
841 if not isdir(homedir):
842 e = ('Invalid "Personal" folder registry key '
842 e = ('Invalid "Personal" folder registry key '
843 'typically "My Documents".\n'
843 'typically "My Documents".\n'
844 'Value: %s\n'
844 'Value: %s\n'
845 'This is not a valid directory on your system.' %
845 'This is not a valid directory on your system.' %
846 homedir)
846 homedir)
847 raise HomeDirError(e)
847 raise HomeDirError(e)
848 return homedir
848 return homedir
849 except HomeDirError:
849 except HomeDirError:
850 raise
850 raise
851 except:
851 except:
852 return 'C:\\'
852 return 'C:\\'
853 elif os.name == 'dos':
853 elif os.name == 'dos':
854 # Desperate, may do absurd things in classic MacOS. May work under DOS.
854 # Desperate, may do absurd things in classic MacOS. May work under DOS.
855 return 'C:\\'
855 return 'C:\\'
856 else:
856 else:
857 raise HomeDirError,'support for your operating system not implemented.'
857 raise HomeDirError,'support for your operating system not implemented.'
858
858
859 #****************************************************************************
859 #****************************************************************************
860 # strings and text
860 # strings and text
861
861
862 class LSString(str):
862 class LSString(str):
863 """String derivative with a special access attributes.
863 """String derivative with a special access attributes.
864
864
865 These are normal strings, but with the special attributes:
865 These are normal strings, but with the special attributes:
866
866
867 .l (or .list) : value as list (split on newlines).
867 .l (or .list) : value as list (split on newlines).
868 .n (or .nlstr): original value (the string itself).
868 .n (or .nlstr): original value (the string itself).
869 .s (or .spstr): value as whitespace-separated string.
869 .s (or .spstr): value as whitespace-separated string.
870
870
871 Any values which require transformations are computed only once and
871 Any values which require transformations are computed only once and
872 cached.
872 cached.
873
873
874 Such strings are very useful to efficiently interact with the shell, which
874 Such strings are very useful to efficiently interact with the shell, which
875 typically only understands whitespace-separated options for commands."""
875 typically only understands whitespace-separated options for commands."""
876
876
877 def get_list(self):
877 def get_list(self):
878 try:
878 try:
879 return self.__list
879 return self.__list
880 except AttributeError:
880 except AttributeError:
881 self.__list = self.split('\n')
881 self.__list = self.split('\n')
882 return self.__list
882 return self.__list
883
883
884 l = list = property(get_list)
884 l = list = property(get_list)
885
885
886 def get_spstr(self):
886 def get_spstr(self):
887 try:
887 try:
888 return self.__spstr
888 return self.__spstr
889 except AttributeError:
889 except AttributeError:
890 self.__spstr = self.replace('\n',' ')
890 self.__spstr = self.replace('\n',' ')
891 return self.__spstr
891 return self.__spstr
892
892
893 s = spstr = property(get_spstr)
893 s = spstr = property(get_spstr)
894
894
895 def get_nlstr(self):
895 def get_nlstr(self):
896 return self
896 return self
897
897
898 n = nlstr = property(get_nlstr)
898 n = nlstr = property(get_nlstr)
899
899
900 def get_paths(self):
900 def get_paths(self):
901 try:
901 try:
902 return self.__paths
902 return self.__paths
903 except AttributeError:
903 except AttributeError:
904 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
904 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
905 return self.__paths
905 return self.__paths
906
906
907 p = paths = property(get_paths)
907 p = paths = property(get_paths)
908
908
909
909
910 #----------------------------------------------------------------------------
910 #----------------------------------------------------------------------------
911 class SList(list):
911 class SList(list):
912 """List derivative with a special access attributes.
912 """List derivative with a special access attributes.
913
913
914 These are normal lists, but with the special attributes:
914 These are normal lists, but with the special attributes:
915
915
916 .l (or .list) : value as list (the list itself).
916 .l (or .list) : value as list (the list itself).
917 .n (or .nlstr): value as a string, joined on newlines.
917 .n (or .nlstr): value as a string, joined on newlines.
918 .s (or .spstr): value as a string, joined on spaces.
918 .s (or .spstr): value as a string, joined on spaces.
919
919
920 Any values which require transformations are computed only once and
920 Any values which require transformations are computed only once and
921 cached."""
921 cached."""
922
922
923 def get_list(self):
923 def get_list(self):
924 return self
924 return self
925
925
926 l = list = property(get_list)
926 l = list = property(get_list)
927
927
928 def get_spstr(self):
928 def get_spstr(self):
929 try:
929 try:
930 return self.__spstr
930 return self.__spstr
931 except AttributeError:
931 except AttributeError:
932 self.__spstr = ' '.join(self)
932 self.__spstr = ' '.join(self)
933 return self.__spstr
933 return self.__spstr
934
934
935 s = spstr = property(get_spstr)
935 s = spstr = property(get_spstr)
936
936
937 def get_nlstr(self):
937 def get_nlstr(self):
938 try:
938 try:
939 return self.__nlstr
939 return self.__nlstr
940 except AttributeError:
940 except AttributeError:
941 self.__nlstr = '\n'.join(self)
941 self.__nlstr = '\n'.join(self)
942 return self.__nlstr
942 return self.__nlstr
943
943
944 n = nlstr = property(get_nlstr)
944 n = nlstr = property(get_nlstr)
945
945
946 def get_paths(self):
946 def get_paths(self):
947 try:
947 try:
948 return self.__paths
948 return self.__paths
949 except AttributeError:
949 except AttributeError:
950 self.__paths = [path(p) for p in self if os.path.exists(p)]
950 self.__paths = [path(p) for p in self if os.path.exists(p)]
951 return self.__paths
951 return self.__paths
952
952
953 p = paths = property(get_paths)
953 p = paths = property(get_paths)
954
954
955 #----------------------------------------------------------------------------
955 #----------------------------------------------------------------------------
956 def esc_quotes(strng):
956 def esc_quotes(strng):
957 """Return the input string with single and double quotes escaped out"""
957 """Return the input string with single and double quotes escaped out"""
958
958
959 return strng.replace('"','\\"').replace("'","\\'")
959 return strng.replace('"','\\"').replace("'","\\'")
960
960
961 #----------------------------------------------------------------------------
961 #----------------------------------------------------------------------------
962 def make_quoted_expr(s):
962 def make_quoted_expr(s):
963 """Return string s in appropriate quotes, using raw string if possible.
963 """Return string s in appropriate quotes, using raw string if possible.
964
964
965 Effectively this turns string: cd \ao\ao\
965 Effectively this turns string: cd \ao\ao\
966 to: r"cd \ao\ao\_"[:-1]
966 to: r"cd \ao\ao\_"[:-1]
967
967
968 Note the use of raw string and padding at the end to allow trailing backslash.
968 Note the use of raw string and padding at the end to allow trailing backslash.
969
969
970 """
970 """
971
971
972 tail = ''
972 tail = ''
973 tailpadding = ''
973 tailpadding = ''
974 raw = ''
974 raw = ''
975 if "\\" in s:
975 if "\\" in s:
976 raw = 'r'
976 raw = 'r'
977 if s.endswith('\\'):
977 if s.endswith('\\'):
978 tail = '[:-1]'
978 tail = '[:-1]'
979 tailpadding = '_'
979 tailpadding = '_'
980 if '"' not in s:
980 if '"' not in s:
981 quote = '"'
981 quote = '"'
982 elif "'" not in s:
982 elif "'" not in s:
983 quote = "'"
983 quote = "'"
984 elif '"""' not in s and not s.endswith('"'):
984 elif '"""' not in s and not s.endswith('"'):
985 quote = '"""'
985 quote = '"""'
986 elif "'''" not in s and not s.endswith("'"):
986 elif "'''" not in s and not s.endswith("'"):
987 quote = "'''"
987 quote = "'''"
988 else:
988 else:
989 # give up, backslash-escaped string will do
989 # give up, backslash-escaped string will do
990 return '"%s"' % esc_quotes(s)
990 return '"%s"' % esc_quotes(s)
991 res = itpl("$raw$quote$s$tailpadding$quote$tail")
991 res = itpl("$raw$quote$s$tailpadding$quote$tail")
992 return res
992 return res
993
993
994
994
995 #----------------------------------------------------------------------------
995 #----------------------------------------------------------------------------
996 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
996 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
997 """Take multiple lines of input.
997 """Take multiple lines of input.
998
998
999 A list with each line of input as a separate element is returned when a
999 A list with each line of input as a separate element is returned when a
1000 termination string is entered (defaults to a single '.'). Input can also
1000 termination string is entered (defaults to a single '.'). Input can also
1001 terminate via EOF (^D in Unix, ^Z-RET in Windows).
1001 terminate via EOF (^D in Unix, ^Z-RET in Windows).
1002
1002
1003 Lines of input which end in \\ are joined into single entries (and a
1003 Lines of input which end in \\ are joined into single entries (and a
1004 secondary continuation prompt is issued as long as the user terminates
1004 secondary continuation prompt is issued as long as the user terminates
1005 lines with \\). This allows entering very long strings which are still
1005 lines with \\). This allows entering very long strings which are still
1006 meant to be treated as single entities.
1006 meant to be treated as single entities.
1007 """
1007 """
1008
1008
1009 try:
1009 try:
1010 if header:
1010 if header:
1011 header += '\n'
1011 header += '\n'
1012 lines = [raw_input(header + ps1)]
1012 lines = [raw_input(header + ps1)]
1013 except EOFError:
1013 except EOFError:
1014 return []
1014 return []
1015 terminate = [terminate_str]
1015 terminate = [terminate_str]
1016 try:
1016 try:
1017 while lines[-1:] != terminate:
1017 while lines[-1:] != terminate:
1018 new_line = raw_input(ps1)
1018 new_line = raw_input(ps1)
1019 while new_line.endswith('\\'):
1019 while new_line.endswith('\\'):
1020 new_line = new_line[:-1] + raw_input(ps2)
1020 new_line = new_line[:-1] + raw_input(ps2)
1021 lines.append(new_line)
1021 lines.append(new_line)
1022
1022
1023 return lines[:-1] # don't return the termination command
1023 return lines[:-1] # don't return the termination command
1024 except EOFError:
1024 except EOFError:
1025 print
1025 print
1026 return lines
1026 return lines
1027
1027
1028 #----------------------------------------------------------------------------
1028 #----------------------------------------------------------------------------
1029 def raw_input_ext(prompt='', ps2='... '):
1029 def raw_input_ext(prompt='', ps2='... '):
1030 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1030 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1031
1031
1032 line = raw_input(prompt)
1032 line = raw_input(prompt)
1033 while line.endswith('\\'):
1033 while line.endswith('\\'):
1034 line = line[:-1] + raw_input(ps2)
1034 line = line[:-1] + raw_input(ps2)
1035 return line
1035 return line
1036
1036
1037 #----------------------------------------------------------------------------
1037 #----------------------------------------------------------------------------
1038 def ask_yes_no(prompt,default=None):
1038 def ask_yes_no(prompt,default=None):
1039 """Asks a question and returns an integer 1/0 (y/n) answer.
1039 """Asks a question and returns an integer 1/0 (y/n) answer.
1040
1040
1041 If default is given (one of 'y','n'), it is used if the user input is
1041 If default is given (one of 'y','n'), it is used if the user input is
1042 empty. Otherwise the question is repeated until an answer is given.
1042 empty. Otherwise the question is repeated until an answer is given.
1043 If EOF occurs 20 times consecutively, the default answer is assumed,
1043 If EOF occurs 20 times consecutively, the default answer is assumed,
1044 or if there is no default, an exception is raised to prevent infinite
1044 or if there is no default, an exception is raised to prevent infinite
1045 loops.
1045 loops.
1046
1046
1047 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1047 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1048
1048
1049 answers = {'y':True,'n':False,'yes':True,'no':False}
1049 answers = {'y':True,'n':False,'yes':True,'no':False}
1050 ans = None
1050 ans = None
1051 eofs, max_eofs = 0, 20
1051 eofs, max_eofs = 0, 20
1052 while ans not in answers.keys():
1052 while ans not in answers.keys():
1053 try:
1053 try:
1054 ans = raw_input(prompt+' ').lower()
1054 ans = raw_input(prompt+' ').lower()
1055 if not ans: # response was an empty string
1055 if not ans: # response was an empty string
1056 ans = default
1056 ans = default
1057 eofs = 0
1057 eofs = 0
1058 except (EOFError,KeyboardInterrupt):
1058 except (EOFError,KeyboardInterrupt):
1059 eofs = eofs + 1
1059 eofs = eofs + 1
1060 if eofs >= max_eofs:
1060 if eofs >= max_eofs:
1061 if default in answers.keys():
1061 if default in answers.keys():
1062 ans = default
1062 ans = default
1063 else:
1063 else:
1064 raise
1064 raise
1065
1065
1066 return answers[ans]
1066 return answers[ans]
1067
1067
1068 #----------------------------------------------------------------------------
1068 #----------------------------------------------------------------------------
1069 def marquee(txt='',width=78,mark='*'):
1069 def marquee(txt='',width=78,mark='*'):
1070 """Return the input string centered in a 'marquee'."""
1070 """Return the input string centered in a 'marquee'."""
1071 if not txt:
1071 if not txt:
1072 return (mark*width)[:width]
1072 return (mark*width)[:width]
1073 nmark = (width-len(txt)-2)/len(mark)/2
1073 nmark = (width-len(txt)-2)/len(mark)/2
1074 if nmark < 0: nmark =0
1074 if nmark < 0: nmark =0
1075 marks = mark*nmark
1075 marks = mark*nmark
1076 return '%s %s %s' % (marks,txt,marks)
1076 return '%s %s %s' % (marks,txt,marks)
1077
1077
1078 #----------------------------------------------------------------------------
1078 #----------------------------------------------------------------------------
1079 class EvalDict:
1079 class EvalDict:
1080 """
1080 """
1081 Emulate a dict which evaluates its contents in the caller's frame.
1081 Emulate a dict which evaluates its contents in the caller's frame.
1082
1082
1083 Usage:
1083 Usage:
1084 >>>number = 19
1084 >>>number = 19
1085 >>>text = "python"
1085 >>>text = "python"
1086 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1086 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1087 """
1087 """
1088
1088
1089 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1089 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1090 # modified (shorter) version of:
1090 # modified (shorter) version of:
1091 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1091 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1092 # Skip Montanaro (skip@pobox.com).
1092 # Skip Montanaro (skip@pobox.com).
1093
1093
1094 def __getitem__(self, name):
1094 def __getitem__(self, name):
1095 frame = sys._getframe(1)
1095 frame = sys._getframe(1)
1096 return eval(name, frame.f_globals, frame.f_locals)
1096 return eval(name, frame.f_globals, frame.f_locals)
1097
1097
1098 EvalString = EvalDict # for backwards compatibility
1098 EvalString = EvalDict # for backwards compatibility
1099 #----------------------------------------------------------------------------
1099 #----------------------------------------------------------------------------
1100 def qw(words,flat=0,sep=None,maxsplit=-1):
1100 def qw(words,flat=0,sep=None,maxsplit=-1):
1101 """Similar to Perl's qw() operator, but with some more options.
1101 """Similar to Perl's qw() operator, but with some more options.
1102
1102
1103 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1103 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1104
1104
1105 words can also be a list itself, and with flat=1, the output will be
1105 words can also be a list itself, and with flat=1, the output will be
1106 recursively flattened. Examples:
1106 recursively flattened. Examples:
1107
1107
1108 >>> qw('1 2')
1108 >>> qw('1 2')
1109 ['1', '2']
1109 ['1', '2']
1110 >>> qw(['a b','1 2',['m n','p q']])
1110 >>> qw(['a b','1 2',['m n','p q']])
1111 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1111 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1112 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1112 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1113 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1113 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1114
1114
1115 if type(words) in StringTypes:
1115 if type(words) in StringTypes:
1116 return [word.strip() for word in words.split(sep,maxsplit)
1116 return [word.strip() for word in words.split(sep,maxsplit)
1117 if word and not word.isspace() ]
1117 if word and not word.isspace() ]
1118 if flat:
1118 if flat:
1119 return flatten(map(qw,words,[1]*len(words)))
1119 return flatten(map(qw,words,[1]*len(words)))
1120 return map(qw,words)
1120 return map(qw,words)
1121
1121
1122 #----------------------------------------------------------------------------
1122 #----------------------------------------------------------------------------
1123 def qwflat(words,sep=None,maxsplit=-1):
1123 def qwflat(words,sep=None,maxsplit=-1):
1124 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1124 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1125 return qw(words,1,sep,maxsplit)
1125 return qw(words,1,sep,maxsplit)
1126
1126
1127 #----------------------------------------------------------------------------
1127 #----------------------------------------------------------------------------
1128 def qw_lol(indata):
1128 def qw_lol(indata):
1129 """qw_lol('a b') -> [['a','b']],
1129 """qw_lol('a b') -> [['a','b']],
1130 otherwise it's just a call to qw().
1130 otherwise it's just a call to qw().
1131
1131
1132 We need this to make sure the modules_some keys *always* end up as a
1132 We need this to make sure the modules_some keys *always* end up as a
1133 list of lists."""
1133 list of lists."""
1134
1134
1135 if type(indata) in StringTypes:
1135 if type(indata) in StringTypes:
1136 return [qw(indata)]
1136 return [qw(indata)]
1137 else:
1137 else:
1138 return qw(indata)
1138 return qw(indata)
1139
1139
1140 #-----------------------------------------------------------------------------
1140 #-----------------------------------------------------------------------------
1141 def list_strings(arg):
1141 def list_strings(arg):
1142 """Always return a list of strings, given a string or list of strings
1142 """Always return a list of strings, given a string or list of strings
1143 as input."""
1143 as input."""
1144
1144
1145 if type(arg) in StringTypes: return [arg]
1145 if type(arg) in StringTypes: return [arg]
1146 else: return arg
1146 else: return arg
1147
1147
1148 #----------------------------------------------------------------------------
1148 #----------------------------------------------------------------------------
1149 def grep(pat,list,case=1):
1149 def grep(pat,list,case=1):
1150 """Simple minded grep-like function.
1150 """Simple minded grep-like function.
1151 grep(pat,list) returns occurrences of pat in list, None on failure.
1151 grep(pat,list) returns occurrences of pat in list, None on failure.
1152
1152
1153 It only does simple string matching, with no support for regexps. Use the
1153 It only does simple string matching, with no support for regexps. Use the
1154 option case=0 for case-insensitive matching."""
1154 option case=0 for case-insensitive matching."""
1155
1155
1156 # This is pretty crude. At least it should implement copying only references
1156 # This is pretty crude. At least it should implement copying only references
1157 # to the original data in case it's big. Now it copies the data for output.
1157 # to the original data in case it's big. Now it copies the data for output.
1158 out=[]
1158 out=[]
1159 if case:
1159 if case:
1160 for term in list:
1160 for term in list:
1161 if term.find(pat)>-1: out.append(term)
1161 if term.find(pat)>-1: out.append(term)
1162 else:
1162 else:
1163 lpat=pat.lower()
1163 lpat=pat.lower()
1164 for term in list:
1164 for term in list:
1165 if term.lower().find(lpat)>-1: out.append(term)
1165 if term.lower().find(lpat)>-1: out.append(term)
1166
1166
1167 if len(out): return out
1167 if len(out): return out
1168 else: return None
1168 else: return None
1169
1169
1170 #----------------------------------------------------------------------------
1170 #----------------------------------------------------------------------------
1171 def dgrep(pat,*opts):
1171 def dgrep(pat,*opts):
1172 """Return grep() on dir()+dir(__builtins__).
1172 """Return grep() on dir()+dir(__builtins__).
1173
1173
1174 A very common use of grep() when working interactively."""
1174 A very common use of grep() when working interactively."""
1175
1175
1176 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1176 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1177
1177
1178 #----------------------------------------------------------------------------
1178 #----------------------------------------------------------------------------
1179 def idgrep(pat):
1179 def idgrep(pat):
1180 """Case-insensitive dgrep()"""
1180 """Case-insensitive dgrep()"""
1181
1181
1182 return dgrep(pat,0)
1182 return dgrep(pat,0)
1183
1183
1184 #----------------------------------------------------------------------------
1184 #----------------------------------------------------------------------------
1185 def igrep(pat,list):
1185 def igrep(pat,list):
1186 """Synonym for case-insensitive grep."""
1186 """Synonym for case-insensitive grep."""
1187
1187
1188 return grep(pat,list,case=0)
1188 return grep(pat,list,case=0)
1189
1189
1190 #----------------------------------------------------------------------------
1190 #----------------------------------------------------------------------------
1191 def indent(str,nspaces=4,ntabs=0):
1191 def indent(str,nspaces=4,ntabs=0):
1192 """Indent a string a given number of spaces or tabstops.
1192 """Indent a string a given number of spaces or tabstops.
1193
1193
1194 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1194 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1195 """
1195 """
1196 if str is None:
1196 if str is None:
1197 return
1197 return
1198 ind = '\t'*ntabs+' '*nspaces
1198 ind = '\t'*ntabs+' '*nspaces
1199 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1199 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1200 if outstr.endswith(os.linesep+ind):
1200 if outstr.endswith(os.linesep+ind):
1201 return outstr[:-len(ind)]
1201 return outstr[:-len(ind)]
1202 else:
1202 else:
1203 return outstr
1203 return outstr
1204
1204
1205 #-----------------------------------------------------------------------------
1205 #-----------------------------------------------------------------------------
1206 def native_line_ends(filename,backup=1):
1206 def native_line_ends(filename,backup=1):
1207 """Convert (in-place) a file to line-ends native to the current OS.
1207 """Convert (in-place) a file to line-ends native to the current OS.
1208
1208
1209 If the optional backup argument is given as false, no backup of the
1209 If the optional backup argument is given as false, no backup of the
1210 original file is left. """
1210 original file is left. """
1211
1211
1212 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1212 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1213
1213
1214 bak_filename = filename + backup_suffixes[os.name]
1214 bak_filename = filename + backup_suffixes[os.name]
1215
1215
1216 original = open(filename).read()
1216 original = open(filename).read()
1217 shutil.copy2(filename,bak_filename)
1217 shutil.copy2(filename,bak_filename)
1218 try:
1218 try:
1219 new = open(filename,'wb')
1219 new = open(filename,'wb')
1220 new.write(os.linesep.join(original.splitlines()))
1220 new.write(os.linesep.join(original.splitlines()))
1221 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1221 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1222 new.close()
1222 new.close()
1223 except:
1223 except:
1224 os.rename(bak_filename,filename)
1224 os.rename(bak_filename,filename)
1225 if not backup:
1225 if not backup:
1226 try:
1226 try:
1227 os.remove(bak_filename)
1227 os.remove(bak_filename)
1228 except:
1228 except:
1229 pass
1229 pass
1230
1230
1231 #----------------------------------------------------------------------------
1231 #----------------------------------------------------------------------------
1232 def get_pager_cmd(pager_cmd = None):
1232 def get_pager_cmd(pager_cmd = None):
1233 """Return a pager command.
1233 """Return a pager command.
1234
1234
1235 Makes some attempts at finding an OS-correct one."""
1235 Makes some attempts at finding an OS-correct one."""
1236
1236
1237 if os.name == 'posix':
1237 if os.name == 'posix':
1238 default_pager_cmd = 'less -r' # -r for color control sequences
1238 default_pager_cmd = 'less -r' # -r for color control sequences
1239 elif os.name in ['nt','dos']:
1239 elif os.name in ['nt','dos']:
1240 default_pager_cmd = 'type'
1240 default_pager_cmd = 'type'
1241
1241
1242 if pager_cmd is None:
1242 if pager_cmd is None:
1243 try:
1243 try:
1244 pager_cmd = os.environ['PAGER']
1244 pager_cmd = os.environ['PAGER']
1245 except:
1245 except:
1246 pager_cmd = default_pager_cmd
1246 pager_cmd = default_pager_cmd
1247 return pager_cmd
1247 return pager_cmd
1248
1248
1249 #-----------------------------------------------------------------------------
1249 #-----------------------------------------------------------------------------
1250 def get_pager_start(pager,start):
1250 def get_pager_start(pager,start):
1251 """Return the string for paging files with an offset.
1251 """Return the string for paging files with an offset.
1252
1252
1253 This is the '+N' argument which less and more (under Unix) accept.
1253 This is the '+N' argument which less and more (under Unix) accept.
1254 """
1254 """
1255
1255
1256 if pager in ['less','more']:
1256 if pager in ['less','more']:
1257 if start:
1257 if start:
1258 start_string = '+' + str(start)
1258 start_string = '+' + str(start)
1259 else:
1259 else:
1260 start_string = ''
1260 start_string = ''
1261 else:
1261 else:
1262 start_string = ''
1262 start_string = ''
1263 return start_string
1263 return start_string
1264
1264
1265 #----------------------------------------------------------------------------
1265 #----------------------------------------------------------------------------
1266 if os.name == "nt":
1266 if os.name == "nt":
1267 import msvcrt
1267 import msvcrt
1268 def page_more():
1268 def page_more():
1269 """ Smart pausing between pages
1269 """ Smart pausing between pages
1270
1270
1271 @return: True if need print more lines, False if quit
1271 @return: True if need print more lines, False if quit
1272 """
1272 """
1273 Term.cout.write('---Return to continue, q to quit--- ')
1273 Term.cout.write('---Return to continue, q to quit--- ')
1274 ans = msvcrt.getch()
1274 ans = msvcrt.getch()
1275 if ans in ("q", "Q"):
1275 if ans in ("q", "Q"):
1276 result = False
1276 result = False
1277 else:
1277 else:
1278 result = True
1278 result = True
1279 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1279 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1280 return result
1280 return result
1281 else:
1281 else:
1282 def page_more():
1282 def page_more():
1283 ans = raw_input('---Return to continue, q to quit--- ')
1283 ans = raw_input('---Return to continue, q to quit--- ')
1284 if ans.lower().startswith('q'):
1284 if ans.lower().startswith('q'):
1285 return False
1285 return False
1286 else:
1286 else:
1287 return True
1287 return True
1288
1288
1289 esc_re = re.compile(r"(\x1b[^m]+m)")
1289 esc_re = re.compile(r"(\x1b[^m]+m)")
1290
1290
1291 def page_dumb(strng,start=0,screen_lines=25):
1291 def page_dumb(strng,start=0,screen_lines=25):
1292 """Very dumb 'pager' in Python, for when nothing else works.
1292 """Very dumb 'pager' in Python, for when nothing else works.
1293
1293
1294 Only moves forward, same interface as page(), except for pager_cmd and
1294 Only moves forward, same interface as page(), except for pager_cmd and
1295 mode."""
1295 mode."""
1296
1296
1297 out_ln = strng.splitlines()[start:]
1297 out_ln = strng.splitlines()[start:]
1298 screens = chop(out_ln,screen_lines-1)
1298 screens = chop(out_ln,screen_lines-1)
1299 if len(screens) == 1:
1299 if len(screens) == 1:
1300 print >>Term.cout, os.linesep.join(screens[0])
1300 print >>Term.cout, os.linesep.join(screens[0])
1301 else:
1301 else:
1302 last_escape = ""
1302 last_escape = ""
1303 for scr in screens[0:-1]:
1303 for scr in screens[0:-1]:
1304 hunk = os.linesep.join(scr)
1304 hunk = os.linesep.join(scr)
1305 print >>Term.cout, last_escape + hunk
1305 print >>Term.cout, last_escape + hunk
1306 if not page_more():
1306 if not page_more():
1307 return
1307 return
1308 esc_list = esc_re.findall(hunk)
1308 esc_list = esc_re.findall(hunk)
1309 if len(esc_list) > 0:
1309 if len(esc_list) > 0:
1310 last_escape = esc_list[-1]
1310 last_escape = esc_list[-1]
1311 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1311 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1312
1312
1313 #----------------------------------------------------------------------------
1313 #----------------------------------------------------------------------------
1314 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1314 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1315 """Print a string, piping through a pager after a certain length.
1315 """Print a string, piping through a pager after a certain length.
1316
1316
1317 The screen_lines parameter specifies the number of *usable* lines of your
1317 The screen_lines parameter specifies the number of *usable* lines of your
1318 terminal screen (total lines minus lines you need to reserve to show other
1318 terminal screen (total lines minus lines you need to reserve to show other
1319 information).
1319 information).
1320
1320
1321 If you set screen_lines to a number <=0, page() will try to auto-determine
1321 If you set screen_lines to a number <=0, page() will try to auto-determine
1322 your screen size and will only use up to (screen_size+screen_lines) for
1322 your screen size and will only use up to (screen_size+screen_lines) for
1323 printing, paging after that. That is, if you want auto-detection but need
1323 printing, paging after that. That is, if you want auto-detection but need
1324 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1324 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1325 auto-detection without any lines reserved simply use screen_lines = 0.
1325 auto-detection without any lines reserved simply use screen_lines = 0.
1326
1326
1327 If a string won't fit in the allowed lines, it is sent through the
1327 If a string won't fit in the allowed lines, it is sent through the
1328 specified pager command. If none given, look for PAGER in the environment,
1328 specified pager command. If none given, look for PAGER in the environment,
1329 and ultimately default to less.
1329 and ultimately default to less.
1330
1330
1331 If no system pager works, the string is sent through a 'dumb pager'
1331 If no system pager works, the string is sent through a 'dumb pager'
1332 written in python, very simplistic.
1332 written in python, very simplistic.
1333 """
1333 """
1334
1334
1335 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1335 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1336 TERM = os.environ.get('TERM','dumb')
1336 TERM = os.environ.get('TERM','dumb')
1337 if TERM in ['dumb','emacs'] and os.name != 'nt':
1337 if TERM in ['dumb','emacs'] and os.name != 'nt':
1338 print strng
1338 print strng
1339 return
1339 return
1340 # chop off the topmost part of the string we don't want to see
1340 # chop off the topmost part of the string we don't want to see
1341 str_lines = strng.split(os.linesep)[start:]
1341 str_lines = strng.split(os.linesep)[start:]
1342 str_toprint = os.linesep.join(str_lines)
1342 str_toprint = os.linesep.join(str_lines)
1343 num_newlines = len(str_lines)
1343 num_newlines = len(str_lines)
1344 len_str = len(str_toprint)
1344 len_str = len(str_toprint)
1345
1345
1346 # Dumb heuristics to guesstimate number of on-screen lines the string
1346 # Dumb heuristics to guesstimate number of on-screen lines the string
1347 # takes. Very basic, but good enough for docstrings in reasonable
1347 # takes. Very basic, but good enough for docstrings in reasonable
1348 # terminals. If someone later feels like refining it, it's not hard.
1348 # terminals. If someone later feels like refining it, it's not hard.
1349 numlines = max(num_newlines,int(len_str/80)+1)
1349 numlines = max(num_newlines,int(len_str/80)+1)
1350
1350
1351 if os.name == "nt":
1351 if os.name == "nt":
1352 screen_lines_def = get_console_size(defaulty=25)[1]
1352 screen_lines_def = get_console_size(defaulty=25)[1]
1353 else:
1353 else:
1354 screen_lines_def = 25 # default value if we can't auto-determine
1354 screen_lines_def = 25 # default value if we can't auto-determine
1355
1355
1356 # auto-determine screen size
1356 # auto-determine screen size
1357 if screen_lines <= 0:
1357 if screen_lines <= 0:
1358 if TERM=='xterm':
1358 if TERM=='xterm':
1359 try:
1359 try:
1360 import curses
1360 import curses
1361 if hasattr(curses,'initscr'):
1361 if hasattr(curses,'initscr'):
1362 use_curses = 1
1362 use_curses = 1
1363 else:
1363 else:
1364 use_curses = 0
1364 use_curses = 0
1365 except ImportError:
1365 except ImportError:
1366 use_curses = 0
1366 use_curses = 0
1367 else:
1367 else:
1368 # curses causes problems on many terminals other than xterm.
1368 # curses causes problems on many terminals other than xterm.
1369 use_curses = 0
1369 use_curses = 0
1370 if use_curses:
1370 if use_curses:
1371 scr = curses.initscr()
1371 scr = curses.initscr()
1372 screen_lines_real,screen_cols = scr.getmaxyx()
1372 screen_lines_real,screen_cols = scr.getmaxyx()
1373 curses.endwin()
1373 curses.endwin()
1374 screen_lines += screen_lines_real
1374 screen_lines += screen_lines_real
1375 #print '***Screen size:',screen_lines_real,'lines x',\
1375 #print '***Screen size:',screen_lines_real,'lines x',\
1376 #screen_cols,'columns.' # dbg
1376 #screen_cols,'columns.' # dbg
1377 else:
1377 else:
1378 screen_lines += screen_lines_def
1378 screen_lines += screen_lines_def
1379
1379
1380 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1380 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1381 if numlines <= screen_lines :
1381 if numlines <= screen_lines :
1382 #print '*** normal print' # dbg
1382 #print '*** normal print' # dbg
1383 print >>Term.cout, str_toprint
1383 print >>Term.cout, str_toprint
1384 else:
1384 else:
1385 # Try to open pager and default to internal one if that fails.
1385 # Try to open pager and default to internal one if that fails.
1386 # All failure modes are tagged as 'retval=1', to match the return
1386 # All failure modes are tagged as 'retval=1', to match the return
1387 # value of a failed system command. If any intermediate attempt
1387 # value of a failed system command. If any intermediate attempt
1388 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1388 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1389 pager_cmd = get_pager_cmd(pager_cmd)
1389 pager_cmd = get_pager_cmd(pager_cmd)
1390 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1390 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1391 if os.name == 'nt':
1391 if os.name == 'nt':
1392 if pager_cmd.startswith('type'):
1392 if pager_cmd.startswith('type'):
1393 # The default WinXP 'type' command is failing on complex strings.
1393 # The default WinXP 'type' command is failing on complex strings.
1394 retval = 1
1394 retval = 1
1395 else:
1395 else:
1396 tmpname = tempfile.mktemp('.txt')
1396 tmpname = tempfile.mktemp('.txt')
1397 tmpfile = file(tmpname,'wt')
1397 tmpfile = file(tmpname,'wt')
1398 tmpfile.write(strng)
1398 tmpfile.write(strng)
1399 tmpfile.close()
1399 tmpfile.close()
1400 cmd = "%s < %s" % (pager_cmd,tmpname)
1400 cmd = "%s < %s" % (pager_cmd,tmpname)
1401 if os.system(cmd):
1401 if os.system(cmd):
1402 retval = 1
1402 retval = 1
1403 else:
1403 else:
1404 retval = None
1404 retval = None
1405 os.remove(tmpname)
1405 os.remove(tmpname)
1406 else:
1406 else:
1407 try:
1407 try:
1408 retval = None
1408 retval = None
1409 # if I use popen4, things hang. No idea why.
1409 # if I use popen4, things hang. No idea why.
1410 #pager,shell_out = os.popen4(pager_cmd)
1410 #pager,shell_out = os.popen4(pager_cmd)
1411 pager = os.popen(pager_cmd,'w')
1411 pager = os.popen(pager_cmd,'w')
1412 pager.write(strng)
1412 pager.write(strng)
1413 pager.close()
1413 pager.close()
1414 retval = pager.close() # success returns None
1414 retval = pager.close() # success returns None
1415 except IOError,msg: # broken pipe when user quits
1415 except IOError,msg: # broken pipe when user quits
1416 if msg.args == (32,'Broken pipe'):
1416 if msg.args == (32,'Broken pipe'):
1417 retval = None
1417 retval = None
1418 else:
1418 else:
1419 retval = 1
1419 retval = 1
1420 except OSError:
1420 except OSError:
1421 # Other strange problems, sometimes seen in Win2k/cygwin
1421 # Other strange problems, sometimes seen in Win2k/cygwin
1422 retval = 1
1422 retval = 1
1423 if retval is not None:
1423 if retval is not None:
1424 page_dumb(strng,screen_lines=screen_lines)
1424 page_dumb(strng,screen_lines=screen_lines)
1425
1425
1426 #----------------------------------------------------------------------------
1426 #----------------------------------------------------------------------------
1427 def page_file(fname,start = 0, pager_cmd = None):
1427 def page_file(fname,start = 0, pager_cmd = None):
1428 """Page a file, using an optional pager command and starting line.
1428 """Page a file, using an optional pager command and starting line.
1429 """
1429 """
1430
1430
1431 pager_cmd = get_pager_cmd(pager_cmd)
1431 pager_cmd = get_pager_cmd(pager_cmd)
1432 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1432 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1433
1433
1434 try:
1434 try:
1435 if os.environ['TERM'] in ['emacs','dumb']:
1435 if os.environ['TERM'] in ['emacs','dumb']:
1436 raise EnvironmentError
1436 raise EnvironmentError
1437 xsys(pager_cmd + ' ' + fname)
1437 xsys(pager_cmd + ' ' + fname)
1438 except:
1438 except:
1439 try:
1439 try:
1440 if start > 0:
1440 if start > 0:
1441 start -= 1
1441 start -= 1
1442 page(open(fname).read(),start)
1442 page(open(fname).read(),start)
1443 except:
1443 except:
1444 print 'Unable to show file',`fname`
1444 print 'Unable to show file',`fname`
1445
1445
1446 #----------------------------------------------------------------------------
1446 #----------------------------------------------------------------------------
1447 def snip_print(str,width = 75,print_full = 0,header = ''):
1447 def snip_print(str,width = 75,print_full = 0,header = ''):
1448 """Print a string snipping the midsection to fit in width.
1448 """Print a string snipping the midsection to fit in width.
1449
1449
1450 print_full: mode control:
1450 print_full: mode control:
1451 - 0: only snip long strings
1451 - 0: only snip long strings
1452 - 1: send to page() directly.
1452 - 1: send to page() directly.
1453 - 2: snip long strings and ask for full length viewing with page()
1453 - 2: snip long strings and ask for full length viewing with page()
1454 Return 1 if snipping was necessary, 0 otherwise."""
1454 Return 1 if snipping was necessary, 0 otherwise."""
1455
1455
1456 if print_full == 1:
1456 if print_full == 1:
1457 page(header+str)
1457 page(header+str)
1458 return 0
1458 return 0
1459
1459
1460 print header,
1460 print header,
1461 if len(str) < width:
1461 if len(str) < width:
1462 print str
1462 print str
1463 snip = 0
1463 snip = 0
1464 else:
1464 else:
1465 whalf = int((width -5)/2)
1465 whalf = int((width -5)/2)
1466 print str[:whalf] + ' <...> ' + str[-whalf:]
1466 print str[:whalf] + ' <...> ' + str[-whalf:]
1467 snip = 1
1467 snip = 1
1468 if snip and print_full == 2:
1468 if snip and print_full == 2:
1469 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1469 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1470 page(str)
1470 page(str)
1471 return snip
1471 return snip
1472
1472
1473 #****************************************************************************
1473 #****************************************************************************
1474 # lists, dicts and structures
1474 # lists, dicts and structures
1475
1475
1476 def belong(candidates,checklist):
1476 def belong(candidates,checklist):
1477 """Check whether a list of items appear in a given list of options.
1477 """Check whether a list of items appear in a given list of options.
1478
1478
1479 Returns a list of 1 and 0, one for each candidate given."""
1479 Returns a list of 1 and 0, one for each candidate given."""
1480
1480
1481 return [x in checklist for x in candidates]
1481 return [x in checklist for x in candidates]
1482
1482
1483 #----------------------------------------------------------------------------
1483 #----------------------------------------------------------------------------
1484 def uniq_stable(elems):
1484 def uniq_stable(elems):
1485 """uniq_stable(elems) -> list
1485 """uniq_stable(elems) -> list
1486
1486
1487 Return from an iterable, a list of all the unique elements in the input,
1487 Return from an iterable, a list of all the unique elements in the input,
1488 but maintaining the order in which they first appear.
1488 but maintaining the order in which they first appear.
1489
1489
1490 A naive solution to this problem which just makes a dictionary with the
1490 A naive solution to this problem which just makes a dictionary with the
1491 elements as keys fails to respect the stability condition, since
1491 elements as keys fails to respect the stability condition, since
1492 dictionaries are unsorted by nature.
1492 dictionaries are unsorted by nature.
1493
1493
1494 Note: All elements in the input must be valid dictionary keys for this
1494 Note: All elements in the input must be valid dictionary keys for this
1495 routine to work, as it internally uses a dictionary for efficiency
1495 routine to work, as it internally uses a dictionary for efficiency
1496 reasons."""
1496 reasons."""
1497
1497
1498 unique = []
1498 unique = []
1499 unique_dict = {}
1499 unique_dict = {}
1500 for nn in elems:
1500 for nn in elems:
1501 if nn not in unique_dict:
1501 if nn not in unique_dict:
1502 unique.append(nn)
1502 unique.append(nn)
1503 unique_dict[nn] = None
1503 unique_dict[nn] = None
1504 return unique
1504 return unique
1505
1505
1506 #----------------------------------------------------------------------------
1506 #----------------------------------------------------------------------------
1507 class NLprinter:
1507 class NLprinter:
1508 """Print an arbitrarily nested list, indicating index numbers.
1508 """Print an arbitrarily nested list, indicating index numbers.
1509
1509
1510 An instance of this class called nlprint is available and callable as a
1510 An instance of this class called nlprint is available and callable as a
1511 function.
1511 function.
1512
1512
1513 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1513 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1514 and using 'sep' to separate the index from the value. """
1514 and using 'sep' to separate the index from the value. """
1515
1515
1516 def __init__(self):
1516 def __init__(self):
1517 self.depth = 0
1517 self.depth = 0
1518
1518
1519 def __call__(self,lst,pos='',**kw):
1519 def __call__(self,lst,pos='',**kw):
1520 """Prints the nested list numbering levels."""
1520 """Prints the nested list numbering levels."""
1521 kw.setdefault('indent',' ')
1521 kw.setdefault('indent',' ')
1522 kw.setdefault('sep',': ')
1522 kw.setdefault('sep',': ')
1523 kw.setdefault('start',0)
1523 kw.setdefault('start',0)
1524 kw.setdefault('stop',len(lst))
1524 kw.setdefault('stop',len(lst))
1525 # we need to remove start and stop from kw so they don't propagate
1525 # we need to remove start and stop from kw so they don't propagate
1526 # into a recursive call for a nested list.
1526 # into a recursive call for a nested list.
1527 start = kw['start']; del kw['start']
1527 start = kw['start']; del kw['start']
1528 stop = kw['stop']; del kw['stop']
1528 stop = kw['stop']; del kw['stop']
1529 if self.depth == 0 and 'header' in kw.keys():
1529 if self.depth == 0 and 'header' in kw.keys():
1530 print kw['header']
1530 print kw['header']
1531
1531
1532 for idx in range(start,stop):
1532 for idx in range(start,stop):
1533 elem = lst[idx]
1533 elem = lst[idx]
1534 if type(elem)==type([]):
1534 if type(elem)==type([]):
1535 self.depth += 1
1535 self.depth += 1
1536 self.__call__(elem,itpl('$pos$idx,'),**kw)
1536 self.__call__(elem,itpl('$pos$idx,'),**kw)
1537 self.depth -= 1
1537 self.depth -= 1
1538 else:
1538 else:
1539 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1539 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1540
1540
1541 nlprint = NLprinter()
1541 nlprint = NLprinter()
1542 #----------------------------------------------------------------------------
1542 #----------------------------------------------------------------------------
1543 def all_belong(candidates,checklist):
1543 def all_belong(candidates,checklist):
1544 """Check whether a list of items ALL appear in a given list of options.
1544 """Check whether a list of items ALL appear in a given list of options.
1545
1545
1546 Returns a single 1 or 0 value."""
1546 Returns a single 1 or 0 value."""
1547
1547
1548 return 1-(0 in [x in checklist for x in candidates])
1548 return 1-(0 in [x in checklist for x in candidates])
1549
1549
1550 #----------------------------------------------------------------------------
1550 #----------------------------------------------------------------------------
1551 def sort_compare(lst1,lst2,inplace = 1):
1551 def sort_compare(lst1,lst2,inplace = 1):
1552 """Sort and compare two lists.
1552 """Sort and compare two lists.
1553
1553
1554 By default it does it in place, thus modifying the lists. Use inplace = 0
1554 By default it does it in place, thus modifying the lists. Use inplace = 0
1555 to avoid that (at the cost of temporary copy creation)."""
1555 to avoid that (at the cost of temporary copy creation)."""
1556 if not inplace:
1556 if not inplace:
1557 lst1 = lst1[:]
1557 lst1 = lst1[:]
1558 lst2 = lst2[:]
1558 lst2 = lst2[:]
1559 lst1.sort(); lst2.sort()
1559 lst1.sort(); lst2.sort()
1560 return lst1 == lst2
1560 return lst1 == lst2
1561
1561
1562 #----------------------------------------------------------------------------
1562 #----------------------------------------------------------------------------
1563 def mkdict(**kwargs):
1563 def mkdict(**kwargs):
1564 """Return a dict from a keyword list.
1564 """Return a dict from a keyword list.
1565
1565
1566 It's just syntactic sugar for making ditcionary creation more convenient:
1566 It's just syntactic sugar for making ditcionary creation more convenient:
1567 # the standard way
1567 # the standard way
1568 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1568 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1569 # a cleaner way
1569 # a cleaner way
1570 >>>data = dict(red=1, green=2, blue=3)
1570 >>>data = dict(red=1, green=2, blue=3)
1571
1571
1572 If you need more than this, look at the Struct() class."""
1572 If you need more than this, look at the Struct() class."""
1573
1573
1574 return kwargs
1574 return kwargs
1575
1575
1576 #----------------------------------------------------------------------------
1576 #----------------------------------------------------------------------------
1577 def list2dict(lst):
1577 def list2dict(lst):
1578 """Takes a list of (key,value) pairs and turns it into a dict."""
1578 """Takes a list of (key,value) pairs and turns it into a dict."""
1579
1579
1580 dic = {}
1580 dic = {}
1581 for k,v in lst: dic[k] = v
1581 for k,v in lst: dic[k] = v
1582 return dic
1582 return dic
1583
1583
1584 #----------------------------------------------------------------------------
1584 #----------------------------------------------------------------------------
1585 def list2dict2(lst,default=''):
1585 def list2dict2(lst,default=''):
1586 """Takes a list and turns it into a dict.
1586 """Takes a list and turns it into a dict.
1587 Much slower than list2dict, but more versatile. This version can take
1587 Much slower than list2dict, but more versatile. This version can take
1588 lists with sublists of arbitrary length (including sclars)."""
1588 lists with sublists of arbitrary length (including sclars)."""
1589
1589
1590 dic = {}
1590 dic = {}
1591 for elem in lst:
1591 for elem in lst:
1592 if type(elem) in (types.ListType,types.TupleType):
1592 if type(elem) in (types.ListType,types.TupleType):
1593 size = len(elem)
1593 size = len(elem)
1594 if size == 0:
1594 if size == 0:
1595 pass
1595 pass
1596 elif size == 1:
1596 elif size == 1:
1597 dic[elem] = default
1597 dic[elem] = default
1598 else:
1598 else:
1599 k,v = elem[0], elem[1:]
1599 k,v = elem[0], elem[1:]
1600 if len(v) == 1: v = v[0]
1600 if len(v) == 1: v = v[0]
1601 dic[k] = v
1601 dic[k] = v
1602 else:
1602 else:
1603 dic[elem] = default
1603 dic[elem] = default
1604 return dic
1604 return dic
1605
1605
1606 #----------------------------------------------------------------------------
1606 #----------------------------------------------------------------------------
1607 def flatten(seq):
1607 def flatten(seq):
1608 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1608 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1609
1609
1610 # bug in python??? (YES. Fixed in 2.2, let's leave the kludgy fix in).
1610 # bug in python??? (YES. Fixed in 2.2, let's leave the kludgy fix in).
1611
1611
1612 # if the x=0 isn't made, a *global* variable x is left over after calling
1612 # if the x=0 isn't made, a *global* variable x is left over after calling
1613 # this function, with the value of the last element in the return
1613 # this function, with the value of the last element in the return
1614 # list. This does seem like a bug big time to me.
1614 # list. This does seem like a bug big time to me.
1615
1615
1616 # the problem is fixed with the x=0, which seems to force the creation of
1616 # the problem is fixed with the x=0, which seems to force the creation of
1617 # a local name
1617 # a local name
1618
1618
1619 x = 0
1619 x = 0
1620 return [x for subseq in seq for x in subseq]
1620 return [x for subseq in seq for x in subseq]
1621
1621
1622 #----------------------------------------------------------------------------
1622 #----------------------------------------------------------------------------
1623 def get_slice(seq,start=0,stop=None,step=1):
1623 def get_slice(seq,start=0,stop=None,step=1):
1624 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1624 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1625 if stop == None:
1625 if stop == None:
1626 stop = len(seq)
1626 stop = len(seq)
1627 item = lambda i: seq[i]
1627 item = lambda i: seq[i]
1628 return map(item,xrange(start,stop,step))
1628 return map(item,xrange(start,stop,step))
1629
1629
1630 #----------------------------------------------------------------------------
1630 #----------------------------------------------------------------------------
1631 def chop(seq,size):
1631 def chop(seq,size):
1632 """Chop a sequence into chunks of the given size."""
1632 """Chop a sequence into chunks of the given size."""
1633 chunk = lambda i: seq[i:i+size]
1633 chunk = lambda i: seq[i:i+size]
1634 return map(chunk,xrange(0,len(seq),size))
1634 return map(chunk,xrange(0,len(seq),size))
1635
1635
1636 #----------------------------------------------------------------------------
1636 #----------------------------------------------------------------------------
1637 def with(object, **args):
1637 def with(object, **args):
1638 """Set multiple attributes for an object, similar to Pascal's with.
1638 """Set multiple attributes for an object, similar to Pascal's with.
1639
1639
1640 Example:
1640 Example:
1641 with(jim,
1641 with(jim,
1642 born = 1960,
1642 born = 1960,
1643 haircolour = 'Brown',
1643 haircolour = 'Brown',
1644 eyecolour = 'Green')
1644 eyecolour = 'Green')
1645
1645
1646 Credit: Greg Ewing, in
1646 Credit: Greg Ewing, in
1647 http://mail.python.org/pipermail/python-list/2001-May/040703.html"""
1647 http://mail.python.org/pipermail/python-list/2001-May/040703.html"""
1648
1648
1649 object.__dict__.update(args)
1649 object.__dict__.update(args)
1650
1650
1651 #----------------------------------------------------------------------------
1651 #----------------------------------------------------------------------------
1652 def setattr_list(obj,alist,nspace = None):
1652 def setattr_list(obj,alist,nspace = None):
1653 """Set a list of attributes for an object taken from a namespace.
1653 """Set a list of attributes for an object taken from a namespace.
1654
1654
1655 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1655 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1656 alist with their values taken from nspace, which must be a dict (something
1656 alist with their values taken from nspace, which must be a dict (something
1657 like locals() will often do) If nspace isn't given, locals() of the
1657 like locals() will often do) If nspace isn't given, locals() of the
1658 *caller* is used, so in most cases you can omit it.
1658 *caller* is used, so in most cases you can omit it.
1659
1659
1660 Note that alist can be given as a string, which will be automatically
1660 Note that alist can be given as a string, which will be automatically
1661 split into a list on whitespace. If given as a list, it must be a list of
1661 split into a list on whitespace. If given as a list, it must be a list of
1662 *strings* (the variable names themselves), not of variables."""
1662 *strings* (the variable names themselves), not of variables."""
1663
1663
1664 # this grabs the local variables from the *previous* call frame -- that is
1664 # this grabs the local variables from the *previous* call frame -- that is
1665 # the locals from the function that called setattr_list().
1665 # the locals from the function that called setattr_list().
1666 # - snipped from weave.inline()
1666 # - snipped from weave.inline()
1667 if nspace is None:
1667 if nspace is None:
1668 call_frame = sys._getframe().f_back
1668 call_frame = sys._getframe().f_back
1669 nspace = call_frame.f_locals
1669 nspace = call_frame.f_locals
1670
1670
1671 if type(alist) in StringTypes:
1671 if type(alist) in StringTypes:
1672 alist = alist.split()
1672 alist = alist.split()
1673 for attr in alist:
1673 for attr in alist:
1674 val = eval(attr,nspace)
1674 val = eval(attr,nspace)
1675 setattr(obj,attr,val)
1675 setattr(obj,attr,val)
1676
1676
1677 #----------------------------------------------------------------------------
1677 #----------------------------------------------------------------------------
1678 def getattr_list(obj,alist,*args):
1678 def getattr_list(obj,alist,*args):
1679 """getattr_list(obj,alist[, default]) -> attribute list.
1679 """getattr_list(obj,alist[, default]) -> attribute list.
1680
1680
1681 Get a list of named attributes for an object. When a default argument is
1681 Get a list of named attributes for an object. When a default argument is
1682 given, it is returned when the attribute doesn't exist; without it, an
1682 given, it is returned when the attribute doesn't exist; without it, an
1683 exception is raised in that case.
1683 exception is raised in that case.
1684
1684
1685 Note that alist can be given as a string, which will be automatically
1685 Note that alist can be given as a string, which will be automatically
1686 split into a list on whitespace. If given as a list, it must be a list of
1686 split into a list on whitespace. If given as a list, it must be a list of
1687 *strings* (the variable names themselves), not of variables."""
1687 *strings* (the variable names themselves), not of variables."""
1688
1688
1689 if type(alist) in StringTypes:
1689 if type(alist) in StringTypes:
1690 alist = alist.split()
1690 alist = alist.split()
1691 if args:
1691 if args:
1692 if len(args)==1:
1692 if len(args)==1:
1693 default = args[0]
1693 default = args[0]
1694 return map(lambda attr: getattr(obj,attr,default),alist)
1694 return map(lambda attr: getattr(obj,attr,default),alist)
1695 else:
1695 else:
1696 raise ValueError,'getattr_list() takes only one optional argument'
1696 raise ValueError,'getattr_list() takes only one optional argument'
1697 else:
1697 else:
1698 return map(lambda attr: getattr(obj,attr),alist)
1698 return map(lambda attr: getattr(obj,attr),alist)
1699
1699
1700 #----------------------------------------------------------------------------
1700 #----------------------------------------------------------------------------
1701 def map_method(method,object_list,*argseq,**kw):
1701 def map_method(method,object_list,*argseq,**kw):
1702 """map_method(method,object_list,*args,**kw) -> list
1702 """map_method(method,object_list,*args,**kw) -> list
1703
1703
1704 Return a list of the results of applying the methods to the items of the
1704 Return a list of the results of applying the methods to the items of the
1705 argument sequence(s). If more than one sequence is given, the method is
1705 argument sequence(s). If more than one sequence is given, the method is
1706 called with an argument list consisting of the corresponding item of each
1706 called with an argument list consisting of the corresponding item of each
1707 sequence. All sequences must be of the same length.
1707 sequence. All sequences must be of the same length.
1708
1708
1709 Keyword arguments are passed verbatim to all objects called.
1709 Keyword arguments are passed verbatim to all objects called.
1710
1710
1711 This is Python code, so it's not nearly as fast as the builtin map()."""
1711 This is Python code, so it's not nearly as fast as the builtin map()."""
1712
1712
1713 out_list = []
1713 out_list = []
1714 idx = 0
1714 idx = 0
1715 for object in object_list:
1715 for object in object_list:
1716 try:
1716 try:
1717 handler = getattr(object, method)
1717 handler = getattr(object, method)
1718 except AttributeError:
1718 except AttributeError:
1719 out_list.append(None)
1719 out_list.append(None)
1720 else:
1720 else:
1721 if argseq:
1721 if argseq:
1722 args = map(lambda lst:lst[idx],argseq)
1722 args = map(lambda lst:lst[idx],argseq)
1723 #print 'ob',object,'hand',handler,'ar',args # dbg
1723 #print 'ob',object,'hand',handler,'ar',args # dbg
1724 out_list.append(handler(args,**kw))
1724 out_list.append(handler(args,**kw))
1725 else:
1725 else:
1726 out_list.append(handler(**kw))
1726 out_list.append(handler(**kw))
1727 idx += 1
1727 idx += 1
1728 return out_list
1728 return out_list
1729
1729
1730 #----------------------------------------------------------------------------
1730 #----------------------------------------------------------------------------
1731 def import_fail_info(mod_name,fns=None):
1731 def import_fail_info(mod_name,fns=None):
1732 """Inform load failure for a module."""
1732 """Inform load failure for a module."""
1733
1733
1734 if fns == None:
1734 if fns == None:
1735 warn("Loading of %s failed.\n" % (mod_name,))
1735 warn("Loading of %s failed.\n" % (mod_name,))
1736 else:
1736 else:
1737 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1737 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1738
1738
1739 #----------------------------------------------------------------------------
1739 #----------------------------------------------------------------------------
1740 # Proposed popitem() extension, written as a method
1740 # Proposed popitem() extension, written as a method
1741
1741
1742 class NotGiven: pass
1742 class NotGiven: pass
1743
1743
1744 def popkey(dct,key,default=NotGiven):
1744 def popkey(dct,key,default=NotGiven):
1745 """Return dct[key] and delete dct[key].
1745 """Return dct[key] and delete dct[key].
1746
1746
1747 If default is given, return it if dct[key] doesn't exist, otherwise raise
1747 If default is given, return it if dct[key] doesn't exist, otherwise raise
1748 KeyError. """
1748 KeyError. """
1749
1749
1750 try:
1750 try:
1751 val = dct[key]
1751 val = dct[key]
1752 except KeyError:
1752 except KeyError:
1753 if default is NotGiven:
1753 if default is NotGiven:
1754 raise
1754 raise
1755 else:
1755 else:
1756 return default
1756 return default
1757 else:
1757 else:
1758 del dct[key]
1758 del dct[key]
1759 return val
1759 return val
1760 #*************************** end of file <genutils.py> **********************
1760 #*************************** end of file <genutils.py> **********************
1761
1761
@@ -1,5141 +1,5145 b''
1 2006-01-30 Ville Vainio <vivainio@gmail.com>
1 2006-01-30 Ville Vainio <vivainio@gmail.com>
2
2
3 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
3 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
4 Now %store and bookmarks work through PickleShare, meaning that
4 Now %store and bookmarks work through PickleShare, meaning that
5 concurrent access is possible and all ipython sessions see the
5 concurrent access is possible and all ipython sessions see the
6 same database situation all the time, instead of snapshot of
6 same database situation all the time, instead of snapshot of
7 the situation when the session was started. Hence, %bookmark
7 the situation when the session was started. Hence, %bookmark
8 results are immediately accessible from othes sessions. The database
8 results are immediately accessible from othes sessions. The database
9 is also available for use by user extensions. See:
9 is also available for use by user extensions. See:
10 http://www.python.org/pypi/pickleshare
10 http://www.python.org/pypi/pickleshare
11
11
12 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
12 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
13
13
14 * aliases can now be %store'd
14 * aliases can now be %store'd
15
16 * path.py move to Extensions so that pickleshare does not need
17 IPython-specific import. Extensions added to pythonpath right
18 at __init__.
15
19
16 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
20 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
17
21
18 * IPython/iplib.py (interact): Fix that we were not catching
22 * IPython/iplib.py (interact): Fix that we were not catching
19 KeyboardInterrupt exceptions properly. I'm not quite sure why the
23 KeyboardInterrupt exceptions properly. I'm not quite sure why the
20 logic here had to change, but it's fixed now.
24 logic here had to change, but it's fixed now.
21
25
22 2006-01-29 Ville Vainio <vivainio@gmail.com>
26 2006-01-29 Ville Vainio <vivainio@gmail.com>
23
27
24 * iplib.py: Try to import pyreadline on Windows.
28 * iplib.py: Try to import pyreadline on Windows.
25
29
26 2006-01-27 Ville Vainio <vivainio@gmail.com>
30 2006-01-27 Ville Vainio <vivainio@gmail.com>
27
31
28 * iplib.py: Expose ipapi as _ip in builtin namespace.
32 * iplib.py: Expose ipapi as _ip in builtin namespace.
29 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
33 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
30 and ip_set_hook (-> _ip.set_hook) redundant. % and !
34 and ip_set_hook (-> _ip.set_hook) redundant. % and !
31 syntax now produce _ip.* variant of the commands.
35 syntax now produce _ip.* variant of the commands.
32
36
33 * "_ip.options().autoedit_syntax = 2" automatically throws
37 * "_ip.options().autoedit_syntax = 2" automatically throws
34 user to editor for syntax error correction without prompting.
38 user to editor for syntax error correction without prompting.
35
39
36 2006-01-27 Ville Vainio <vivainio@gmail.com>
40 2006-01-27 Ville Vainio <vivainio@gmail.com>
37
41
38 * ipmaker.py: Give "realistic" sys.argv for scripts (without
42 * ipmaker.py: Give "realistic" sys.argv for scripts (without
39 'ipython' at argv[0]) executed through command line.
43 'ipython' at argv[0]) executed through command line.
40 NOTE: this DEPRECATES calling ipython with multiple scripts
44 NOTE: this DEPRECATES calling ipython with multiple scripts
41 ("ipython a.py b.py c.py")
45 ("ipython a.py b.py c.py")
42
46
43 * iplib.py, hooks.py: Added configurable input prefilter,
47 * iplib.py, hooks.py: Added configurable input prefilter,
44 named 'input_prefilter'. See ext_rescapture.py for example
48 named 'input_prefilter'. See ext_rescapture.py for example
45 usage.
49 usage.
46
50
47 * ext_rescapture.py, Magic.py: Better system command output capture
51 * ext_rescapture.py, Magic.py: Better system command output capture
48 through 'var = !ls' (deprecates user-visible %sc). Same notation
52 through 'var = !ls' (deprecates user-visible %sc). Same notation
49 applies for magics, 'var = %alias' assigns alias list to var.
53 applies for magics, 'var = %alias' assigns alias list to var.
50
54
51 * ipapi.py: added meta() for accessing extension-usable data store.
55 * ipapi.py: added meta() for accessing extension-usable data store.
52
56
53 * iplib.py: added InteractiveShell.getapi(). New magics should be
57 * iplib.py: added InteractiveShell.getapi(). New magics should be
54 written doing self.getapi() instead of using the shell directly.
58 written doing self.getapi() instead of using the shell directly.
55
59
56 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
60 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
57 %store foo >> ~/myfoo.txt to store variables to files (in clean
61 %store foo >> ~/myfoo.txt to store variables to files (in clean
58 textual form, not a restorable pickle).
62 textual form, not a restorable pickle).
59
63
60 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
64 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
61
65
62 * usage.py, Magic.py: added %quickref
66 * usage.py, Magic.py: added %quickref
63
67
64 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
68 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
65
69
66 * GetoptErrors when invoking magics etc. with wrong args
70 * GetoptErrors when invoking magics etc. with wrong args
67 are now more helpful:
71 are now more helpful:
68 GetoptError: option -l not recognized (allowed: "qb" )
72 GetoptError: option -l not recognized (allowed: "qb" )
69
73
70 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
74 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
71
75
72 * IPython/demo.py (Demo.show): Flush stdout after each block, so
76 * IPython/demo.py (Demo.show): Flush stdout after each block, so
73 computationally intensive blocks don't appear to stall the demo.
77 computationally intensive blocks don't appear to stall the demo.
74
78
75 2006-01-24 Ville Vainio <vivainio@gmail.com>
79 2006-01-24 Ville Vainio <vivainio@gmail.com>
76
80
77 * iplib.py, hooks.py: 'result_display' hook can return a non-None
81 * iplib.py, hooks.py: 'result_display' hook can return a non-None
78 value to manipulate resulting history entry.
82 value to manipulate resulting history entry.
79
83
80 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
84 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
81 to instance methods of IPApi class, to make extending an embedded
85 to instance methods of IPApi class, to make extending an embedded
82 IPython feasible. See ext_rehashdir.py for example usage.
86 IPython feasible. See ext_rehashdir.py for example usage.
83
87
84 * Merged 1071-1076 from banches/0.7.1
88 * Merged 1071-1076 from banches/0.7.1
85
89
86
90
87 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
91 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
88
92
89 * tools/release (daystamp): Fix build tools to use the new
93 * tools/release (daystamp): Fix build tools to use the new
90 eggsetup.py script to build lightweight eggs.
94 eggsetup.py script to build lightweight eggs.
91
95
92 * Applied changesets 1062 and 1064 before 0.7.1 release.
96 * Applied changesets 1062 and 1064 before 0.7.1 release.
93
97
94 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
98 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
95 see the raw input history (without conversions like %ls ->
99 see the raw input history (without conversions like %ls ->
96 ipmagic("ls")). After a request from W. Stein, SAGE
100 ipmagic("ls")). After a request from W. Stein, SAGE
97 (http://modular.ucsd.edu/sage) developer. This information is
101 (http://modular.ucsd.edu/sage) developer. This information is
98 stored in the input_hist_raw attribute of the IPython instance, so
102 stored in the input_hist_raw attribute of the IPython instance, so
99 developers can access it if needed (it's an InputList instance).
103 developers can access it if needed (it's an InputList instance).
100
104
101 * Versionstring = 0.7.2.svn
105 * Versionstring = 0.7.2.svn
102
106
103 * eggsetup.py: A separate script for constructing eggs, creates
107 * eggsetup.py: A separate script for constructing eggs, creates
104 proper launch scripts even on Windows (an .exe file in
108 proper launch scripts even on Windows (an .exe file in
105 \python24\scripts).
109 \python24\scripts).
106
110
107 * ipapi.py: launch_new_instance, launch entry point needed for the
111 * ipapi.py: launch_new_instance, launch entry point needed for the
108 egg.
112 egg.
109
113
110 2006-01-23 Ville Vainio <vivainio@gmail.com>
114 2006-01-23 Ville Vainio <vivainio@gmail.com>
111
115
112 * Added %cpaste magic for pasting python code
116 * Added %cpaste magic for pasting python code
113
117
114 2006-01-22 Ville Vainio <vivainio@gmail.com>
118 2006-01-22 Ville Vainio <vivainio@gmail.com>
115
119
116 * Merge from branches/0.7.1 into trunk, revs 1052-1057
120 * Merge from branches/0.7.1 into trunk, revs 1052-1057
117
121
118 * Versionstring = 0.7.2.svn
122 * Versionstring = 0.7.2.svn
119
123
120 * eggsetup.py: A separate script for constructing eggs, creates
124 * eggsetup.py: A separate script for constructing eggs, creates
121 proper launch scripts even on Windows (an .exe file in
125 proper launch scripts even on Windows (an .exe file in
122 \python24\scripts).
126 \python24\scripts).
123
127
124 * ipapi.py: launch_new_instance, launch entry point needed for the
128 * ipapi.py: launch_new_instance, launch entry point needed for the
125 egg.
129 egg.
126
130
127 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
131 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
128
132
129 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
133 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
130 %pfile foo would print the file for foo even if it was a binary.
134 %pfile foo would print the file for foo even if it was a binary.
131 Now, extensions '.so' and '.dll' are skipped.
135 Now, extensions '.so' and '.dll' are skipped.
132
136
133 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
137 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
134 bug, where macros would fail in all threaded modes. I'm not 100%
138 bug, where macros would fail in all threaded modes. I'm not 100%
135 sure, so I'm going to put out an rc instead of making a release
139 sure, so I'm going to put out an rc instead of making a release
136 today, and wait for feedback for at least a few days.
140 today, and wait for feedback for at least a few days.
137
141
138 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
142 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
139 it...) the handling of pasting external code with autoindent on.
143 it...) the handling of pasting external code with autoindent on.
140 To get out of a multiline input, the rule will appear for most
144 To get out of a multiline input, the rule will appear for most
141 users unchanged: two blank lines or change the indent level
145 users unchanged: two blank lines or change the indent level
142 proposed by IPython. But there is a twist now: you can
146 proposed by IPython. But there is a twist now: you can
143 add/subtract only *one or two spaces*. If you add/subtract three
147 add/subtract only *one or two spaces*. If you add/subtract three
144 or more (unless you completely delete the line), IPython will
148 or more (unless you completely delete the line), IPython will
145 accept that line, and you'll need to enter a second one of pure
149 accept that line, and you'll need to enter a second one of pure
146 whitespace. I know it sounds complicated, but I can't find a
150 whitespace. I know it sounds complicated, but I can't find a
147 different solution that covers all the cases, with the right
151 different solution that covers all the cases, with the right
148 heuristics. Hopefully in actual use, nobody will really notice
152 heuristics. Hopefully in actual use, nobody will really notice
149 all these strange rules and things will 'just work'.
153 all these strange rules and things will 'just work'.
150
154
151 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
155 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
152
156
153 * IPython/iplib.py (interact): catch exceptions which can be
157 * IPython/iplib.py (interact): catch exceptions which can be
154 triggered asynchronously by signal handlers. Thanks to an
158 triggered asynchronously by signal handlers. Thanks to an
155 automatic crash report, submitted by Colin Kingsley
159 automatic crash report, submitted by Colin Kingsley
156 <tercel-AT-gentoo.org>.
160 <tercel-AT-gentoo.org>.
157
161
158 2006-01-20 Ville Vainio <vivainio@gmail.com>
162 2006-01-20 Ville Vainio <vivainio@gmail.com>
159
163
160 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
164 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
161 (%rehashdir, very useful, try it out) of how to extend ipython
165 (%rehashdir, very useful, try it out) of how to extend ipython
162 with new magics. Also added Extensions dir to pythonpath to make
166 with new magics. Also added Extensions dir to pythonpath to make
163 importing extensions easy.
167 importing extensions easy.
164
168
165 * %store now complains when trying to store interactively declared
169 * %store now complains when trying to store interactively declared
166 classes / instances of those classes.
170 classes / instances of those classes.
167
171
168 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
172 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
169 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
173 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
170 if they exist, and ipy_user_conf.py with some defaults is created for
174 if they exist, and ipy_user_conf.py with some defaults is created for
171 the user.
175 the user.
172
176
173 * Startup rehashing done by the config file, not InterpreterExec.
177 * Startup rehashing done by the config file, not InterpreterExec.
174 This means system commands are available even without selecting the
178 This means system commands are available even without selecting the
175 pysh profile. It's the sensible default after all.
179 pysh profile. It's the sensible default after all.
176
180
177 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
181 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
178
182
179 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
183 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
180 multiline code with autoindent on working. But I am really not
184 multiline code with autoindent on working. But I am really not
181 sure, so this needs more testing. Will commit a debug-enabled
185 sure, so this needs more testing. Will commit a debug-enabled
182 version for now, while I test it some more, so that Ville and
186 version for now, while I test it some more, so that Ville and
183 others may also catch any problems. Also made
187 others may also catch any problems. Also made
184 self.indent_current_str() a method, to ensure that there's no
188 self.indent_current_str() a method, to ensure that there's no
185 chance of the indent space count and the corresponding string
189 chance of the indent space count and the corresponding string
186 falling out of sync. All code needing the string should just call
190 falling out of sync. All code needing the string should just call
187 the method.
191 the method.
188
192
189 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
193 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
190
194
191 * IPython/Magic.py (magic_edit): fix check for when users don't
195 * IPython/Magic.py (magic_edit): fix check for when users don't
192 save their output files, the try/except was in the wrong section.
196 save their output files, the try/except was in the wrong section.
193
197
194 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
198 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
195
199
196 * IPython/Magic.py (magic_run): fix __file__ global missing from
200 * IPython/Magic.py (magic_run): fix __file__ global missing from
197 script's namespace when executed via %run. After a report by
201 script's namespace when executed via %run. After a report by
198 Vivian.
202 Vivian.
199
203
200 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
204 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
201 when using python 2.4. The parent constructor changed in 2.4, and
205 when using python 2.4. The parent constructor changed in 2.4, and
202 we need to track it directly (we can't call it, as it messes up
206 we need to track it directly (we can't call it, as it messes up
203 readline and tab-completion inside our pdb would stop working).
207 readline and tab-completion inside our pdb would stop working).
204 After a bug report by R. Bernstein <rocky-AT-panix.com>.
208 After a bug report by R. Bernstein <rocky-AT-panix.com>.
205
209
206 2006-01-16 Ville Vainio <vivainio@gmail.com>
210 2006-01-16 Ville Vainio <vivainio@gmail.com>
207
211
208 * Ipython/magic.py:Reverted back to old %edit functionality
212 * Ipython/magic.py:Reverted back to old %edit functionality
209 that returns file contents on exit.
213 that returns file contents on exit.
210
214
211 * IPython/path.py: Added Jason Orendorff's "path" module to
215 * IPython/path.py: Added Jason Orendorff's "path" module to
212 IPython tree, http://www.jorendorff.com/articles/python/path/.
216 IPython tree, http://www.jorendorff.com/articles/python/path/.
213 You can get path objects conveniently through %sc, and !!, e.g.:
217 You can get path objects conveniently through %sc, and !!, e.g.:
214 sc files=ls
218 sc files=ls
215 for p in files.paths: # or files.p
219 for p in files.paths: # or files.p
216 print p,p.mtime
220 print p,p.mtime
217
221
218 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
222 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
219 now work again without considering the exclusion regexp -
223 now work again without considering the exclusion regexp -
220 hence, things like ',foo my/path' turn to 'foo("my/path")'
224 hence, things like ',foo my/path' turn to 'foo("my/path")'
221 instead of syntax error.
225 instead of syntax error.
222
226
223
227
224 2006-01-14 Ville Vainio <vivainio@gmail.com>
228 2006-01-14 Ville Vainio <vivainio@gmail.com>
225
229
226 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
230 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
227 ipapi decorators for python 2.4 users, options() provides access to rc
231 ipapi decorators for python 2.4 users, options() provides access to rc
228 data.
232 data.
229
233
230 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
234 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
231 as path separators (even on Linux ;-). Space character after
235 as path separators (even on Linux ;-). Space character after
232 backslash (as yielded by tab completer) is still space;
236 backslash (as yielded by tab completer) is still space;
233 "%cd long\ name" works as expected.
237 "%cd long\ name" works as expected.
234
238
235 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
239 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
236 as "chain of command", with priority. API stays the same,
240 as "chain of command", with priority. API stays the same,
237 TryNext exception raised by a hook function signals that
241 TryNext exception raised by a hook function signals that
238 current hook failed and next hook should try handling it, as
242 current hook failed and next hook should try handling it, as
239 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
243 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
240 requested configurable display hook, which is now implemented.
244 requested configurable display hook, which is now implemented.
241
245
242 2006-01-13 Ville Vainio <vivainio@gmail.com>
246 2006-01-13 Ville Vainio <vivainio@gmail.com>
243
247
244 * IPython/platutils*.py: platform specific utility functions,
248 * IPython/platutils*.py: platform specific utility functions,
245 so far only set_term_title is implemented (change terminal
249 so far only set_term_title is implemented (change terminal
246 label in windowing systems). %cd now changes the title to
250 label in windowing systems). %cd now changes the title to
247 current dir.
251 current dir.
248
252
249 * IPython/Release.py: Added myself to "authors" list,
253 * IPython/Release.py: Added myself to "authors" list,
250 had to create new files.
254 had to create new files.
251
255
252 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
256 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
253 shell escape; not a known bug but had potential to be one in the
257 shell escape; not a known bug but had potential to be one in the
254 future.
258 future.
255
259
256 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
260 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
257 extension API for IPython! See the module for usage example. Fix
261 extension API for IPython! See the module for usage example. Fix
258 OInspect for docstring-less magic functions.
262 OInspect for docstring-less magic functions.
259
263
260
264
261 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
265 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
262
266
263 * IPython/iplib.py (raw_input): temporarily deactivate all
267 * IPython/iplib.py (raw_input): temporarily deactivate all
264 attempts at allowing pasting of code with autoindent on. It
268 attempts at allowing pasting of code with autoindent on. It
265 introduced bugs (reported by Prabhu) and I can't seem to find a
269 introduced bugs (reported by Prabhu) and I can't seem to find a
266 robust combination which works in all cases. Will have to revisit
270 robust combination which works in all cases. Will have to revisit
267 later.
271 later.
268
272
269 * IPython/genutils.py: remove isspace() function. We've dropped
273 * IPython/genutils.py: remove isspace() function. We've dropped
270 2.2 compatibility, so it's OK to use the string method.
274 2.2 compatibility, so it's OK to use the string method.
271
275
272 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
276 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
273
277
274 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
278 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
275 matching what NOT to autocall on, to include all python binary
279 matching what NOT to autocall on, to include all python binary
276 operators (including things like 'and', 'or', 'is' and 'in').
280 operators (including things like 'and', 'or', 'is' and 'in').
277 Prompted by a bug report on 'foo & bar', but I realized we had
281 Prompted by a bug report on 'foo & bar', but I realized we had
278 many more potential bug cases with other operators. The regexp is
282 many more potential bug cases with other operators. The regexp is
279 self.re_exclude_auto, it's fairly commented.
283 self.re_exclude_auto, it's fairly commented.
280
284
281 2006-01-12 Ville Vainio <vivainio@gmail.com>
285 2006-01-12 Ville Vainio <vivainio@gmail.com>
282
286
283 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
287 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
284 Prettified and hardened string/backslash quoting with ipsystem(),
288 Prettified and hardened string/backslash quoting with ipsystem(),
285 ipalias() and ipmagic(). Now even \ characters are passed to
289 ipalias() and ipmagic(). Now even \ characters are passed to
286 %magics, !shell escapes and aliases exactly as they are in the
290 %magics, !shell escapes and aliases exactly as they are in the
287 ipython command line. Should improve backslash experience,
291 ipython command line. Should improve backslash experience,
288 particularly in Windows (path delimiter for some commands that
292 particularly in Windows (path delimiter for some commands that
289 won't understand '/'), but Unix benefits as well (regexps). %cd
293 won't understand '/'), but Unix benefits as well (regexps). %cd
290 magic still doesn't support backslash path delimiters, though. Also
294 magic still doesn't support backslash path delimiters, though. Also
291 deleted all pretense of supporting multiline command strings in
295 deleted all pretense of supporting multiline command strings in
292 !system or %magic commands. Thanks to Jerry McRae for suggestions.
296 !system or %magic commands. Thanks to Jerry McRae for suggestions.
293
297
294 * doc/build_doc_instructions.txt added. Documentation on how to
298 * doc/build_doc_instructions.txt added. Documentation on how to
295 use doc/update_manual.py, added yesterday. Both files contributed
299 use doc/update_manual.py, added yesterday. Both files contributed
296 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
300 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
297 doc/*.sh for deprecation at a later date.
301 doc/*.sh for deprecation at a later date.
298
302
299 * /ipython.py Added ipython.py to root directory for
303 * /ipython.py Added ipython.py to root directory for
300 zero-installation (tar xzvf ipython.tgz; cd ipython; python
304 zero-installation (tar xzvf ipython.tgz; cd ipython; python
301 ipython.py) and development convenience (no need to kee doing
305 ipython.py) and development convenience (no need to kee doing
302 "setup.py install" between changes).
306 "setup.py install" between changes).
303
307
304 * Made ! and !! shell escapes work (again) in multiline expressions:
308 * Made ! and !! shell escapes work (again) in multiline expressions:
305 if 1:
309 if 1:
306 !ls
310 !ls
307 !!ls
311 !!ls
308
312
309 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
313 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
310
314
311 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
315 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
312 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
316 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
313 module in case-insensitive installation. Was causing crashes
317 module in case-insensitive installation. Was causing crashes
314 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
318 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
315
319
316 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
320 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
317 <marienz-AT-gentoo.org>, closes
321 <marienz-AT-gentoo.org>, closes
318 http://www.scipy.net/roundup/ipython/issue51.
322 http://www.scipy.net/roundup/ipython/issue51.
319
323
320 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
324 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
321
325
322 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
326 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
323 problem of excessive CPU usage under *nix and keyboard lag under
327 problem of excessive CPU usage under *nix and keyboard lag under
324 win32.
328 win32.
325
329
326 2006-01-10 *** Released version 0.7.0
330 2006-01-10 *** Released version 0.7.0
327
331
328 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
332 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
329
333
330 * IPython/Release.py (revision): tag version number to 0.7.0,
334 * IPython/Release.py (revision): tag version number to 0.7.0,
331 ready for release.
335 ready for release.
332
336
333 * IPython/Magic.py (magic_edit): Add print statement to %edit so
337 * IPython/Magic.py (magic_edit): Add print statement to %edit so
334 it informs the user of the name of the temp. file used. This can
338 it informs the user of the name of the temp. file used. This can
335 help if you decide later to reuse that same file, so you know
339 help if you decide later to reuse that same file, so you know
336 where to copy the info from.
340 where to copy the info from.
337
341
338 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
342 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
339
343
340 * setup_bdist_egg.py: little script to build an egg. Added
344 * setup_bdist_egg.py: little script to build an egg. Added
341 support in the release tools as well.
345 support in the release tools as well.
342
346
343 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
347 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
344
348
345 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
349 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
346 version selection (new -wxversion command line and ipythonrc
350 version selection (new -wxversion command line and ipythonrc
347 parameter). Patch contributed by Arnd Baecker
351 parameter). Patch contributed by Arnd Baecker
348 <arnd.baecker-AT-web.de>.
352 <arnd.baecker-AT-web.de>.
349
353
350 * IPython/iplib.py (embed_mainloop): fix tab-completion in
354 * IPython/iplib.py (embed_mainloop): fix tab-completion in
351 embedded instances, for variables defined at the interactive
355 embedded instances, for variables defined at the interactive
352 prompt of the embedded ipython. Reported by Arnd.
356 prompt of the embedded ipython. Reported by Arnd.
353
357
354 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
358 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
355 it can be used as a (stateful) toggle, or with a direct parameter.
359 it can be used as a (stateful) toggle, or with a direct parameter.
356
360
357 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
361 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
358 could be triggered in certain cases and cause the traceback
362 could be triggered in certain cases and cause the traceback
359 printer not to work.
363 printer not to work.
360
364
361 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
365 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
362
366
363 * IPython/iplib.py (_should_recompile): Small fix, closes
367 * IPython/iplib.py (_should_recompile): Small fix, closes
364 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
368 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
365
369
366 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
370 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
367
371
368 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
372 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
369 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
373 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
370 Moad for help with tracking it down.
374 Moad for help with tracking it down.
371
375
372 * IPython/iplib.py (handle_auto): fix autocall handling for
376 * IPython/iplib.py (handle_auto): fix autocall handling for
373 objects which support BOTH __getitem__ and __call__ (so that f [x]
377 objects which support BOTH __getitem__ and __call__ (so that f [x]
374 is left alone, instead of becoming f([x]) automatically).
378 is left alone, instead of becoming f([x]) automatically).
375
379
376 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
380 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
377 Ville's patch.
381 Ville's patch.
378
382
379 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
383 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
380
384
381 * IPython/iplib.py (handle_auto): changed autocall semantics to
385 * IPython/iplib.py (handle_auto): changed autocall semantics to
382 include 'smart' mode, where the autocall transformation is NOT
386 include 'smart' mode, where the autocall transformation is NOT
383 applied if there are no arguments on the line. This allows you to
387 applied if there are no arguments on the line. This allows you to
384 just type 'foo' if foo is a callable to see its internal form,
388 just type 'foo' if foo is a callable to see its internal form,
385 instead of having it called with no arguments (typically a
389 instead of having it called with no arguments (typically a
386 mistake). The old 'full' autocall still exists: for that, you
390 mistake). The old 'full' autocall still exists: for that, you
387 need to set the 'autocall' parameter to 2 in your ipythonrc file.
391 need to set the 'autocall' parameter to 2 in your ipythonrc file.
388
392
389 * IPython/completer.py (Completer.attr_matches): add
393 * IPython/completer.py (Completer.attr_matches): add
390 tab-completion support for Enthoughts' traits. After a report by
394 tab-completion support for Enthoughts' traits. After a report by
391 Arnd and a patch by Prabhu.
395 Arnd and a patch by Prabhu.
392
396
393 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
397 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
394
398
395 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
399 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
396 Schmolck's patch to fix inspect.getinnerframes().
400 Schmolck's patch to fix inspect.getinnerframes().
397
401
398 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
402 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
399 for embedded instances, regarding handling of namespaces and items
403 for embedded instances, regarding handling of namespaces and items
400 added to the __builtin__ one. Multiple embedded instances and
404 added to the __builtin__ one. Multiple embedded instances and
401 recursive embeddings should work better now (though I'm not sure
405 recursive embeddings should work better now (though I'm not sure
402 I've got all the corner cases fixed, that code is a bit of a brain
406 I've got all the corner cases fixed, that code is a bit of a brain
403 twister).
407 twister).
404
408
405 * IPython/Magic.py (magic_edit): added support to edit in-memory
409 * IPython/Magic.py (magic_edit): added support to edit in-memory
406 macros (automatically creates the necessary temp files). %edit
410 macros (automatically creates the necessary temp files). %edit
407 also doesn't return the file contents anymore, it's just noise.
411 also doesn't return the file contents anymore, it's just noise.
408
412
409 * IPython/completer.py (Completer.attr_matches): revert change to
413 * IPython/completer.py (Completer.attr_matches): revert change to
410 complete only on attributes listed in __all__. I realized it
414 complete only on attributes listed in __all__. I realized it
411 cripples the tab-completion system as a tool for exploring the
415 cripples the tab-completion system as a tool for exploring the
412 internals of unknown libraries (it renders any non-__all__
416 internals of unknown libraries (it renders any non-__all__
413 attribute off-limits). I got bit by this when trying to see
417 attribute off-limits). I got bit by this when trying to see
414 something inside the dis module.
418 something inside the dis module.
415
419
416 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
420 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
417
421
418 * IPython/iplib.py (InteractiveShell.__init__): add .meta
422 * IPython/iplib.py (InteractiveShell.__init__): add .meta
419 namespace for users and extension writers to hold data in. This
423 namespace for users and extension writers to hold data in. This
420 follows the discussion in
424 follows the discussion in
421 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
425 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
422
426
423 * IPython/completer.py (IPCompleter.complete): small patch to help
427 * IPython/completer.py (IPCompleter.complete): small patch to help
424 tab-completion under Emacs, after a suggestion by John Barnard
428 tab-completion under Emacs, after a suggestion by John Barnard
425 <barnarj-AT-ccf.org>.
429 <barnarj-AT-ccf.org>.
426
430
427 * IPython/Magic.py (Magic.extract_input_slices): added support for
431 * IPython/Magic.py (Magic.extract_input_slices): added support for
428 the slice notation in magics to use N-M to represent numbers N...M
432 the slice notation in magics to use N-M to represent numbers N...M
429 (closed endpoints). This is used by %macro and %save.
433 (closed endpoints). This is used by %macro and %save.
430
434
431 * IPython/completer.py (Completer.attr_matches): for modules which
435 * IPython/completer.py (Completer.attr_matches): for modules which
432 define __all__, complete only on those. After a patch by Jeffrey
436 define __all__, complete only on those. After a patch by Jeffrey
433 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
437 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
434 speed up this routine.
438 speed up this routine.
435
439
436 * IPython/Logger.py (Logger.log): fix a history handling bug. I
440 * IPython/Logger.py (Logger.log): fix a history handling bug. I
437 don't know if this is the end of it, but the behavior now is
441 don't know if this is the end of it, but the behavior now is
438 certainly much more correct. Note that coupled with macros,
442 certainly much more correct. Note that coupled with macros,
439 slightly surprising (at first) behavior may occur: a macro will in
443 slightly surprising (at first) behavior may occur: a macro will in
440 general expand to multiple lines of input, so upon exiting, the
444 general expand to multiple lines of input, so upon exiting, the
441 in/out counters will both be bumped by the corresponding amount
445 in/out counters will both be bumped by the corresponding amount
442 (as if the macro's contents had been typed interactively). Typing
446 (as if the macro's contents had been typed interactively). Typing
443 %hist will reveal the intermediate (silently processed) lines.
447 %hist will reveal the intermediate (silently processed) lines.
444
448
445 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
449 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
446 pickle to fail (%run was overwriting __main__ and not restoring
450 pickle to fail (%run was overwriting __main__ and not restoring
447 it, but pickle relies on __main__ to operate).
451 it, but pickle relies on __main__ to operate).
448
452
449 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
453 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
450 using properties, but forgot to make the main InteractiveShell
454 using properties, but forgot to make the main InteractiveShell
451 class a new-style class. Properties fail silently, and
455 class a new-style class. Properties fail silently, and
452 misteriously, with old-style class (getters work, but
456 misteriously, with old-style class (getters work, but
453 setters don't do anything).
457 setters don't do anything).
454
458
455 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
459 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
456
460
457 * IPython/Magic.py (magic_history): fix history reporting bug (I
461 * IPython/Magic.py (magic_history): fix history reporting bug (I
458 know some nasties are still there, I just can't seem to find a
462 know some nasties are still there, I just can't seem to find a
459 reproducible test case to track them down; the input history is
463 reproducible test case to track them down; the input history is
460 falling out of sync...)
464 falling out of sync...)
461
465
462 * IPython/iplib.py (handle_shell_escape): fix bug where both
466 * IPython/iplib.py (handle_shell_escape): fix bug where both
463 aliases and system accesses where broken for indented code (such
467 aliases and system accesses where broken for indented code (such
464 as loops).
468 as loops).
465
469
466 * IPython/genutils.py (shell): fix small but critical bug for
470 * IPython/genutils.py (shell): fix small but critical bug for
467 win32 system access.
471 win32 system access.
468
472
469 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
473 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
470
474
471 * IPython/iplib.py (showtraceback): remove use of the
475 * IPython/iplib.py (showtraceback): remove use of the
472 sys.last_{type/value/traceback} structures, which are non
476 sys.last_{type/value/traceback} structures, which are non
473 thread-safe.
477 thread-safe.
474 (_prefilter): change control flow to ensure that we NEVER
478 (_prefilter): change control flow to ensure that we NEVER
475 introspect objects when autocall is off. This will guarantee that
479 introspect objects when autocall is off. This will guarantee that
476 having an input line of the form 'x.y', where access to attribute
480 having an input line of the form 'x.y', where access to attribute
477 'y' has side effects, doesn't trigger the side effect TWICE. It
481 'y' has side effects, doesn't trigger the side effect TWICE. It
478 is important to note that, with autocall on, these side effects
482 is important to note that, with autocall on, these side effects
479 can still happen.
483 can still happen.
480 (ipsystem): new builtin, to complete the ip{magic/alias/system}
484 (ipsystem): new builtin, to complete the ip{magic/alias/system}
481 trio. IPython offers these three kinds of special calls which are
485 trio. IPython offers these three kinds of special calls which are
482 not python code, and it's a good thing to have their call method
486 not python code, and it's a good thing to have their call method
483 be accessible as pure python functions (not just special syntax at
487 be accessible as pure python functions (not just special syntax at
484 the command line). It gives us a better internal implementation
488 the command line). It gives us a better internal implementation
485 structure, as well as exposing these for user scripting more
489 structure, as well as exposing these for user scripting more
486 cleanly.
490 cleanly.
487
491
488 * IPython/macro.py (Macro.__init__): moved macros to a standalone
492 * IPython/macro.py (Macro.__init__): moved macros to a standalone
489 file. Now that they'll be more likely to be used with the
493 file. Now that they'll be more likely to be used with the
490 persistance system (%store), I want to make sure their module path
494 persistance system (%store), I want to make sure their module path
491 doesn't change in the future, so that we don't break things for
495 doesn't change in the future, so that we don't break things for
492 users' persisted data.
496 users' persisted data.
493
497
494 * IPython/iplib.py (autoindent_update): move indentation
498 * IPython/iplib.py (autoindent_update): move indentation
495 management into the _text_ processing loop, not the keyboard
499 management into the _text_ processing loop, not the keyboard
496 interactive one. This is necessary to correctly process non-typed
500 interactive one. This is necessary to correctly process non-typed
497 multiline input (such as macros).
501 multiline input (such as macros).
498
502
499 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
503 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
500 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
504 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
501 which was producing problems in the resulting manual.
505 which was producing problems in the resulting manual.
502 (magic_whos): improve reporting of instances (show their class,
506 (magic_whos): improve reporting of instances (show their class,
503 instead of simply printing 'instance' which isn't terribly
507 instead of simply printing 'instance' which isn't terribly
504 informative).
508 informative).
505
509
506 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
510 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
507 (minor mods) to support network shares under win32.
511 (minor mods) to support network shares under win32.
508
512
509 * IPython/winconsole.py (get_console_size): add new winconsole
513 * IPython/winconsole.py (get_console_size): add new winconsole
510 module and fixes to page_dumb() to improve its behavior under
514 module and fixes to page_dumb() to improve its behavior under
511 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
515 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
512
516
513 * IPython/Magic.py (Macro): simplified Macro class to just
517 * IPython/Magic.py (Macro): simplified Macro class to just
514 subclass list. We've had only 2.2 compatibility for a very long
518 subclass list. We've had only 2.2 compatibility for a very long
515 time, yet I was still avoiding subclassing the builtin types. No
519 time, yet I was still avoiding subclassing the builtin types. No
516 more (I'm also starting to use properties, though I won't shift to
520 more (I'm also starting to use properties, though I won't shift to
517 2.3-specific features quite yet).
521 2.3-specific features quite yet).
518 (magic_store): added Ville's patch for lightweight variable
522 (magic_store): added Ville's patch for lightweight variable
519 persistence, after a request on the user list by Matt Wilkie
523 persistence, after a request on the user list by Matt Wilkie
520 <maphew-AT-gmail.com>. The new %store magic's docstring has full
524 <maphew-AT-gmail.com>. The new %store magic's docstring has full
521 details.
525 details.
522
526
523 * IPython/iplib.py (InteractiveShell.post_config_initialization):
527 * IPython/iplib.py (InteractiveShell.post_config_initialization):
524 changed the default logfile name from 'ipython.log' to
528 changed the default logfile name from 'ipython.log' to
525 'ipython_log.py'. These logs are real python files, and now that
529 'ipython_log.py'. These logs are real python files, and now that
526 we have much better multiline support, people are more likely to
530 we have much better multiline support, people are more likely to
527 want to use them as such. Might as well name them correctly.
531 want to use them as such. Might as well name them correctly.
528
532
529 * IPython/Magic.py: substantial cleanup. While we can't stop
533 * IPython/Magic.py: substantial cleanup. While we can't stop
530 using magics as mixins, due to the existing customizations 'out
534 using magics as mixins, due to the existing customizations 'out
531 there' which rely on the mixin naming conventions, at least I
535 there' which rely on the mixin naming conventions, at least I
532 cleaned out all cross-class name usage. So once we are OK with
536 cleaned out all cross-class name usage. So once we are OK with
533 breaking compatibility, the two systems can be separated.
537 breaking compatibility, the two systems can be separated.
534
538
535 * IPython/Logger.py: major cleanup. This one is NOT a mixin
539 * IPython/Logger.py: major cleanup. This one is NOT a mixin
536 anymore, and the class is a fair bit less hideous as well. New
540 anymore, and the class is a fair bit less hideous as well. New
537 features were also introduced: timestamping of input, and logging
541 features were also introduced: timestamping of input, and logging
538 of output results. These are user-visible with the -t and -o
542 of output results. These are user-visible with the -t and -o
539 options to %logstart. Closes
543 options to %logstart. Closes
540 http://www.scipy.net/roundup/ipython/issue11 and a request by
544 http://www.scipy.net/roundup/ipython/issue11 and a request by
541 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
545 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
542
546
543 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
547 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
544
548
545 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
549 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
546 better hadnle backslashes in paths. See the thread 'More Windows
550 better hadnle backslashes in paths. See the thread 'More Windows
547 questions part 2 - \/ characters revisited' on the iypthon user
551 questions part 2 - \/ characters revisited' on the iypthon user
548 list:
552 list:
549 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
553 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
550
554
551 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
555 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
552
556
553 (InteractiveShell.__init__): change threaded shells to not use the
557 (InteractiveShell.__init__): change threaded shells to not use the
554 ipython crash handler. This was causing more problems than not,
558 ipython crash handler. This was causing more problems than not,
555 as exceptions in the main thread (GUI code, typically) would
559 as exceptions in the main thread (GUI code, typically) would
556 always show up as a 'crash', when they really weren't.
560 always show up as a 'crash', when they really weren't.
557
561
558 The colors and exception mode commands (%colors/%xmode) have been
562 The colors and exception mode commands (%colors/%xmode) have been
559 synchronized to also take this into account, so users can get
563 synchronized to also take this into account, so users can get
560 verbose exceptions for their threaded code as well. I also added
564 verbose exceptions for their threaded code as well. I also added
561 support for activating pdb inside this exception handler as well,
565 support for activating pdb inside this exception handler as well,
562 so now GUI authors can use IPython's enhanced pdb at runtime.
566 so now GUI authors can use IPython's enhanced pdb at runtime.
563
567
564 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
568 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
565 true by default, and add it to the shipped ipythonrc file. Since
569 true by default, and add it to the shipped ipythonrc file. Since
566 this asks the user before proceeding, I think it's OK to make it
570 this asks the user before proceeding, I think it's OK to make it
567 true by default.
571 true by default.
568
572
569 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
573 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
570 of the previous special-casing of input in the eval loop. I think
574 of the previous special-casing of input in the eval loop. I think
571 this is cleaner, as they really are commands and shouldn't have
575 this is cleaner, as they really are commands and shouldn't have
572 a special role in the middle of the core code.
576 a special role in the middle of the core code.
573
577
574 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
578 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
575
579
576 * IPython/iplib.py (edit_syntax_error): added support for
580 * IPython/iplib.py (edit_syntax_error): added support for
577 automatically reopening the editor if the file had a syntax error
581 automatically reopening the editor if the file had a syntax error
578 in it. Thanks to scottt who provided the patch at:
582 in it. Thanks to scottt who provided the patch at:
579 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
583 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
580 version committed).
584 version committed).
581
585
582 * IPython/iplib.py (handle_normal): add suport for multi-line
586 * IPython/iplib.py (handle_normal): add suport for multi-line
583 input with emtpy lines. This fixes
587 input with emtpy lines. This fixes
584 http://www.scipy.net/roundup/ipython/issue43 and a similar
588 http://www.scipy.net/roundup/ipython/issue43 and a similar
585 discussion on the user list.
589 discussion on the user list.
586
590
587 WARNING: a behavior change is necessarily introduced to support
591 WARNING: a behavior change is necessarily introduced to support
588 blank lines: now a single blank line with whitespace does NOT
592 blank lines: now a single blank line with whitespace does NOT
589 break the input loop, which means that when autoindent is on, by
593 break the input loop, which means that when autoindent is on, by
590 default hitting return on the next (indented) line does NOT exit.
594 default hitting return on the next (indented) line does NOT exit.
591
595
592 Instead, to exit a multiline input you can either have:
596 Instead, to exit a multiline input you can either have:
593
597
594 - TWO whitespace lines (just hit return again), or
598 - TWO whitespace lines (just hit return again), or
595 - a single whitespace line of a different length than provided
599 - a single whitespace line of a different length than provided
596 by the autoindent (add or remove a space).
600 by the autoindent (add or remove a space).
597
601
598 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
602 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
599 module to better organize all readline-related functionality.
603 module to better organize all readline-related functionality.
600 I've deleted FlexCompleter and put all completion clases here.
604 I've deleted FlexCompleter and put all completion clases here.
601
605
602 * IPython/iplib.py (raw_input): improve indentation management.
606 * IPython/iplib.py (raw_input): improve indentation management.
603 It is now possible to paste indented code with autoindent on, and
607 It is now possible to paste indented code with autoindent on, and
604 the code is interpreted correctly (though it still looks bad on
608 the code is interpreted correctly (though it still looks bad on
605 screen, due to the line-oriented nature of ipython).
609 screen, due to the line-oriented nature of ipython).
606 (MagicCompleter.complete): change behavior so that a TAB key on an
610 (MagicCompleter.complete): change behavior so that a TAB key on an
607 otherwise empty line actually inserts a tab, instead of completing
611 otherwise empty line actually inserts a tab, instead of completing
608 on the entire global namespace. This makes it easier to use the
612 on the entire global namespace. This makes it easier to use the
609 TAB key for indentation. After a request by Hans Meine
613 TAB key for indentation. After a request by Hans Meine
610 <hans_meine-AT-gmx.net>
614 <hans_meine-AT-gmx.net>
611 (_prefilter): add support so that typing plain 'exit' or 'quit'
615 (_prefilter): add support so that typing plain 'exit' or 'quit'
612 does a sensible thing. Originally I tried to deviate as little as
616 does a sensible thing. Originally I tried to deviate as little as
613 possible from the default python behavior, but even that one may
617 possible from the default python behavior, but even that one may
614 change in this direction (thread on python-dev to that effect).
618 change in this direction (thread on python-dev to that effect).
615 Regardless, ipython should do the right thing even if CPython's
619 Regardless, ipython should do the right thing even if CPython's
616 '>>>' prompt doesn't.
620 '>>>' prompt doesn't.
617 (InteractiveShell): removed subclassing code.InteractiveConsole
621 (InteractiveShell): removed subclassing code.InteractiveConsole
618 class. By now we'd overridden just about all of its methods: I've
622 class. By now we'd overridden just about all of its methods: I've
619 copied the remaining two over, and now ipython is a standalone
623 copied the remaining two over, and now ipython is a standalone
620 class. This will provide a clearer picture for the chainsaw
624 class. This will provide a clearer picture for the chainsaw
621 branch refactoring.
625 branch refactoring.
622
626
623 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
627 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
624
628
625 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
629 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
626 failures for objects which break when dir() is called on them.
630 failures for objects which break when dir() is called on them.
627
631
628 * IPython/FlexCompleter.py (Completer.__init__): Added support for
632 * IPython/FlexCompleter.py (Completer.__init__): Added support for
629 distinct local and global namespaces in the completer API. This
633 distinct local and global namespaces in the completer API. This
630 change allows us top properly handle completion with distinct
634 change allows us top properly handle completion with distinct
631 scopes, including in embedded instances (this had never really
635 scopes, including in embedded instances (this had never really
632 worked correctly).
636 worked correctly).
633
637
634 Note: this introduces a change in the constructor for
638 Note: this introduces a change in the constructor for
635 MagicCompleter, as a new global_namespace parameter is now the
639 MagicCompleter, as a new global_namespace parameter is now the
636 second argument (the others were bumped one position).
640 second argument (the others were bumped one position).
637
641
638 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
642 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
639
643
640 * IPython/iplib.py (embed_mainloop): fix tab-completion in
644 * IPython/iplib.py (embed_mainloop): fix tab-completion in
641 embedded instances (which can be done now thanks to Vivian's
645 embedded instances (which can be done now thanks to Vivian's
642 frame-handling fixes for pdb).
646 frame-handling fixes for pdb).
643 (InteractiveShell.__init__): Fix namespace handling problem in
647 (InteractiveShell.__init__): Fix namespace handling problem in
644 embedded instances. We were overwriting __main__ unconditionally,
648 embedded instances. We were overwriting __main__ unconditionally,
645 and this should only be done for 'full' (non-embedded) IPython;
649 and this should only be done for 'full' (non-embedded) IPython;
646 embedded instances must respect the caller's __main__. Thanks to
650 embedded instances must respect the caller's __main__. Thanks to
647 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
651 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
648
652
649 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
653 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
650
654
651 * setup.py: added download_url to setup(). This registers the
655 * setup.py: added download_url to setup(). This registers the
652 download address at PyPI, which is not only useful to humans
656 download address at PyPI, which is not only useful to humans
653 browsing the site, but is also picked up by setuptools (the Eggs
657 browsing the site, but is also picked up by setuptools (the Eggs
654 machinery). Thanks to Ville and R. Kern for the info/discussion
658 machinery). Thanks to Ville and R. Kern for the info/discussion
655 on this.
659 on this.
656
660
657 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
661 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
658
662
659 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
663 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
660 This brings a lot of nice functionality to the pdb mode, which now
664 This brings a lot of nice functionality to the pdb mode, which now
661 has tab-completion, syntax highlighting, and better stack handling
665 has tab-completion, syntax highlighting, and better stack handling
662 than before. Many thanks to Vivian De Smedt
666 than before. Many thanks to Vivian De Smedt
663 <vivian-AT-vdesmedt.com> for the original patches.
667 <vivian-AT-vdesmedt.com> for the original patches.
664
668
665 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
669 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
666
670
667 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
671 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
668 sequence to consistently accept the banner argument. The
672 sequence to consistently accept the banner argument. The
669 inconsistency was tripping SAGE, thanks to Gary Zablackis
673 inconsistency was tripping SAGE, thanks to Gary Zablackis
670 <gzabl-AT-yahoo.com> for the report.
674 <gzabl-AT-yahoo.com> for the report.
671
675
672 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
676 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
673
677
674 * IPython/iplib.py (InteractiveShell.post_config_initialization):
678 * IPython/iplib.py (InteractiveShell.post_config_initialization):
675 Fix bug where a naked 'alias' call in the ipythonrc file would
679 Fix bug where a naked 'alias' call in the ipythonrc file would
676 cause a crash. Bug reported by Jorgen Stenarson.
680 cause a crash. Bug reported by Jorgen Stenarson.
677
681
678 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
682 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
679
683
680 * IPython/ipmaker.py (make_IPython): cleanups which should improve
684 * IPython/ipmaker.py (make_IPython): cleanups which should improve
681 startup time.
685 startup time.
682
686
683 * IPython/iplib.py (runcode): my globals 'fix' for embedded
687 * IPython/iplib.py (runcode): my globals 'fix' for embedded
684 instances had introduced a bug with globals in normal code. Now
688 instances had introduced a bug with globals in normal code. Now
685 it's working in all cases.
689 it's working in all cases.
686
690
687 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
691 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
688 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
692 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
689 has been introduced to set the default case sensitivity of the
693 has been introduced to set the default case sensitivity of the
690 searches. Users can still select either mode at runtime on a
694 searches. Users can still select either mode at runtime on a
691 per-search basis.
695 per-search basis.
692
696
693 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
697 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
694
698
695 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
699 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
696 attributes in wildcard searches for subclasses. Modified version
700 attributes in wildcard searches for subclasses. Modified version
697 of a patch by Jorgen.
701 of a patch by Jorgen.
698
702
699 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
703 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
700
704
701 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
705 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
702 embedded instances. I added a user_global_ns attribute to the
706 embedded instances. I added a user_global_ns attribute to the
703 InteractiveShell class to handle this.
707 InteractiveShell class to handle this.
704
708
705 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
709 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
706
710
707 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
711 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
708 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
712 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
709 (reported under win32, but may happen also in other platforms).
713 (reported under win32, but may happen also in other platforms).
710 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
714 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
711
715
712 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
716 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
713
717
714 * IPython/Magic.py (magic_psearch): new support for wildcard
718 * IPython/Magic.py (magic_psearch): new support for wildcard
715 patterns. Now, typing ?a*b will list all names which begin with a
719 patterns. Now, typing ?a*b will list all names which begin with a
716 and end in b, for example. The %psearch magic has full
720 and end in b, for example. The %psearch magic has full
717 docstrings. Many thanks to Jörgen Stenarson
721 docstrings. Many thanks to Jörgen Stenarson
718 <jorgen.stenarson-AT-bostream.nu>, author of the patches
722 <jorgen.stenarson-AT-bostream.nu>, author of the patches
719 implementing this functionality.
723 implementing this functionality.
720
724
721 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
725 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
722
726
723 * Manual: fixed long-standing annoyance of double-dashes (as in
727 * Manual: fixed long-standing annoyance of double-dashes (as in
724 --prefix=~, for example) being stripped in the HTML version. This
728 --prefix=~, for example) being stripped in the HTML version. This
725 is a latex2html bug, but a workaround was provided. Many thanks
729 is a latex2html bug, but a workaround was provided. Many thanks
726 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
730 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
727 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
731 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
728 rolling. This seemingly small issue had tripped a number of users
732 rolling. This seemingly small issue had tripped a number of users
729 when first installing, so I'm glad to see it gone.
733 when first installing, so I'm glad to see it gone.
730
734
731 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
735 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
732
736
733 * IPython/Extensions/numeric_formats.py: fix missing import,
737 * IPython/Extensions/numeric_formats.py: fix missing import,
734 reported by Stephen Walton.
738 reported by Stephen Walton.
735
739
736 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
740 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
737
741
738 * IPython/demo.py: finish demo module, fully documented now.
742 * IPython/demo.py: finish demo module, fully documented now.
739
743
740 * IPython/genutils.py (file_read): simple little utility to read a
744 * IPython/genutils.py (file_read): simple little utility to read a
741 file and ensure it's closed afterwards.
745 file and ensure it's closed afterwards.
742
746
743 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
747 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
744
748
745 * IPython/demo.py (Demo.__init__): added support for individually
749 * IPython/demo.py (Demo.__init__): added support for individually
746 tagging blocks for automatic execution.
750 tagging blocks for automatic execution.
747
751
748 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
752 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
749 syntax-highlighted python sources, requested by John.
753 syntax-highlighted python sources, requested by John.
750
754
751 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
755 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
752
756
753 * IPython/demo.py (Demo.again): fix bug where again() blocks after
757 * IPython/demo.py (Demo.again): fix bug where again() blocks after
754 finishing.
758 finishing.
755
759
756 * IPython/genutils.py (shlex_split): moved from Magic to here,
760 * IPython/genutils.py (shlex_split): moved from Magic to here,
757 where all 2.2 compatibility stuff lives. I needed it for demo.py.
761 where all 2.2 compatibility stuff lives. I needed it for demo.py.
758
762
759 * IPython/demo.py (Demo.__init__): added support for silent
763 * IPython/demo.py (Demo.__init__): added support for silent
760 blocks, improved marks as regexps, docstrings written.
764 blocks, improved marks as regexps, docstrings written.
761 (Demo.__init__): better docstring, added support for sys.argv.
765 (Demo.__init__): better docstring, added support for sys.argv.
762
766
763 * IPython/genutils.py (marquee): little utility used by the demo
767 * IPython/genutils.py (marquee): little utility used by the demo
764 code, handy in general.
768 code, handy in general.
765
769
766 * IPython/demo.py (Demo.__init__): new class for interactive
770 * IPython/demo.py (Demo.__init__): new class for interactive
767 demos. Not documented yet, I just wrote it in a hurry for
771 demos. Not documented yet, I just wrote it in a hurry for
768 scipy'05. Will docstring later.
772 scipy'05. Will docstring later.
769
773
770 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
774 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
771
775
772 * IPython/Shell.py (sigint_handler): Drastic simplification which
776 * IPython/Shell.py (sigint_handler): Drastic simplification which
773 also seems to make Ctrl-C work correctly across threads! This is
777 also seems to make Ctrl-C work correctly across threads! This is
774 so simple, that I can't beleive I'd missed it before. Needs more
778 so simple, that I can't beleive I'd missed it before. Needs more
775 testing, though.
779 testing, though.
776 (KBINT): Never mind, revert changes. I'm sure I'd tried something
780 (KBINT): Never mind, revert changes. I'm sure I'd tried something
777 like this before...
781 like this before...
778
782
779 * IPython/genutils.py (get_home_dir): add protection against
783 * IPython/genutils.py (get_home_dir): add protection against
780 non-dirs in win32 registry.
784 non-dirs in win32 registry.
781
785
782 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
786 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
783 bug where dict was mutated while iterating (pysh crash).
787 bug where dict was mutated while iterating (pysh crash).
784
788
785 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
789 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
786
790
787 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
791 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
788 spurious newlines added by this routine. After a report by
792 spurious newlines added by this routine. After a report by
789 F. Mantegazza.
793 F. Mantegazza.
790
794
791 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
795 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
792
796
793 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
797 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
794 calls. These were a leftover from the GTK 1.x days, and can cause
798 calls. These were a leftover from the GTK 1.x days, and can cause
795 problems in certain cases (after a report by John Hunter).
799 problems in certain cases (after a report by John Hunter).
796
800
797 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
801 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
798 os.getcwd() fails at init time. Thanks to patch from David Remahl
802 os.getcwd() fails at init time. Thanks to patch from David Remahl
799 <chmod007-AT-mac.com>.
803 <chmod007-AT-mac.com>.
800 (InteractiveShell.__init__): prevent certain special magics from
804 (InteractiveShell.__init__): prevent certain special magics from
801 being shadowed by aliases. Closes
805 being shadowed by aliases. Closes
802 http://www.scipy.net/roundup/ipython/issue41.
806 http://www.scipy.net/roundup/ipython/issue41.
803
807
804 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
808 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
805
809
806 * IPython/iplib.py (InteractiveShell.complete): Added new
810 * IPython/iplib.py (InteractiveShell.complete): Added new
807 top-level completion method to expose the completion mechanism
811 top-level completion method to expose the completion mechanism
808 beyond readline-based environments.
812 beyond readline-based environments.
809
813
810 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
814 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
811
815
812 * tools/ipsvnc (svnversion): fix svnversion capture.
816 * tools/ipsvnc (svnversion): fix svnversion capture.
813
817
814 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
818 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
815 attribute to self, which was missing. Before, it was set by a
819 attribute to self, which was missing. Before, it was set by a
816 routine which in certain cases wasn't being called, so the
820 routine which in certain cases wasn't being called, so the
817 instance could end up missing the attribute. This caused a crash.
821 instance could end up missing the attribute. This caused a crash.
818 Closes http://www.scipy.net/roundup/ipython/issue40.
822 Closes http://www.scipy.net/roundup/ipython/issue40.
819
823
820 2005-08-16 Fernando Perez <fperez@colorado.edu>
824 2005-08-16 Fernando Perez <fperez@colorado.edu>
821
825
822 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
826 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
823 contains non-string attribute. Closes
827 contains non-string attribute. Closes
824 http://www.scipy.net/roundup/ipython/issue38.
828 http://www.scipy.net/roundup/ipython/issue38.
825
829
826 2005-08-14 Fernando Perez <fperez@colorado.edu>
830 2005-08-14 Fernando Perez <fperez@colorado.edu>
827
831
828 * tools/ipsvnc: Minor improvements, to add changeset info.
832 * tools/ipsvnc: Minor improvements, to add changeset info.
829
833
830 2005-08-12 Fernando Perez <fperez@colorado.edu>
834 2005-08-12 Fernando Perez <fperez@colorado.edu>
831
835
832 * IPython/iplib.py (runsource): remove self.code_to_run_src
836 * IPython/iplib.py (runsource): remove self.code_to_run_src
833 attribute. I realized this is nothing more than
837 attribute. I realized this is nothing more than
834 '\n'.join(self.buffer), and having the same data in two different
838 '\n'.join(self.buffer), and having the same data in two different
835 places is just asking for synchronization bugs. This may impact
839 places is just asking for synchronization bugs. This may impact
836 people who have custom exception handlers, so I need to warn
840 people who have custom exception handlers, so I need to warn
837 ipython-dev about it (F. Mantegazza may use them).
841 ipython-dev about it (F. Mantegazza may use them).
838
842
839 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
843 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
840
844
841 * IPython/genutils.py: fix 2.2 compatibility (generators)
845 * IPython/genutils.py: fix 2.2 compatibility (generators)
842
846
843 2005-07-18 Fernando Perez <fperez@colorado.edu>
847 2005-07-18 Fernando Perez <fperez@colorado.edu>
844
848
845 * IPython/genutils.py (get_home_dir): fix to help users with
849 * IPython/genutils.py (get_home_dir): fix to help users with
846 invalid $HOME under win32.
850 invalid $HOME under win32.
847
851
848 2005-07-17 Fernando Perez <fperez@colorado.edu>
852 2005-07-17 Fernando Perez <fperez@colorado.edu>
849
853
850 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
854 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
851 some old hacks and clean up a bit other routines; code should be
855 some old hacks and clean up a bit other routines; code should be
852 simpler and a bit faster.
856 simpler and a bit faster.
853
857
854 * IPython/iplib.py (interact): removed some last-resort attempts
858 * IPython/iplib.py (interact): removed some last-resort attempts
855 to survive broken stdout/stderr. That code was only making it
859 to survive broken stdout/stderr. That code was only making it
856 harder to abstract out the i/o (necessary for gui integration),
860 harder to abstract out the i/o (necessary for gui integration),
857 and the crashes it could prevent were extremely rare in practice
861 and the crashes it could prevent were extremely rare in practice
858 (besides being fully user-induced in a pretty violent manner).
862 (besides being fully user-induced in a pretty violent manner).
859
863
860 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
864 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
861 Nothing major yet, but the code is simpler to read; this should
865 Nothing major yet, but the code is simpler to read; this should
862 make it easier to do more serious modifications in the future.
866 make it easier to do more serious modifications in the future.
863
867
864 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
868 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
865 which broke in .15 (thanks to a report by Ville).
869 which broke in .15 (thanks to a report by Ville).
866
870
867 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
871 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
868 be quite correct, I know next to nothing about unicode). This
872 be quite correct, I know next to nothing about unicode). This
869 will allow unicode strings to be used in prompts, amongst other
873 will allow unicode strings to be used in prompts, amongst other
870 cases. It also will prevent ipython from crashing when unicode
874 cases. It also will prevent ipython from crashing when unicode
871 shows up unexpectedly in many places. If ascii encoding fails, we
875 shows up unexpectedly in many places. If ascii encoding fails, we
872 assume utf_8. Currently the encoding is not a user-visible
876 assume utf_8. Currently the encoding is not a user-visible
873 setting, though it could be made so if there is demand for it.
877 setting, though it could be made so if there is demand for it.
874
878
875 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
879 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
876
880
877 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
881 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
878
882
879 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
883 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
880
884
881 * IPython/genutils.py: Add 2.2 compatibility here, so all other
885 * IPython/genutils.py: Add 2.2 compatibility here, so all other
882 code can work transparently for 2.2/2.3.
886 code can work transparently for 2.2/2.3.
883
887
884 2005-07-16 Fernando Perez <fperez@colorado.edu>
888 2005-07-16 Fernando Perez <fperez@colorado.edu>
885
889
886 * IPython/ultraTB.py (ExceptionColors): Make a global variable
890 * IPython/ultraTB.py (ExceptionColors): Make a global variable
887 out of the color scheme table used for coloring exception
891 out of the color scheme table used for coloring exception
888 tracebacks. This allows user code to add new schemes at runtime.
892 tracebacks. This allows user code to add new schemes at runtime.
889 This is a minimally modified version of the patch at
893 This is a minimally modified version of the patch at
890 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
894 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
891 for the contribution.
895 for the contribution.
892
896
893 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
897 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
894 slightly modified version of the patch in
898 slightly modified version of the patch in
895 http://www.scipy.net/roundup/ipython/issue34, which also allows me
899 http://www.scipy.net/roundup/ipython/issue34, which also allows me
896 to remove the previous try/except solution (which was costlier).
900 to remove the previous try/except solution (which was costlier).
897 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
901 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
898
902
899 2005-06-08 Fernando Perez <fperez@colorado.edu>
903 2005-06-08 Fernando Perez <fperez@colorado.edu>
900
904
901 * IPython/iplib.py (write/write_err): Add methods to abstract all
905 * IPython/iplib.py (write/write_err): Add methods to abstract all
902 I/O a bit more.
906 I/O a bit more.
903
907
904 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
908 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
905 warning, reported by Aric Hagberg, fix by JD Hunter.
909 warning, reported by Aric Hagberg, fix by JD Hunter.
906
910
907 2005-06-02 *** Released version 0.6.15
911 2005-06-02 *** Released version 0.6.15
908
912
909 2005-06-01 Fernando Perez <fperez@colorado.edu>
913 2005-06-01 Fernando Perez <fperez@colorado.edu>
910
914
911 * IPython/iplib.py (MagicCompleter.file_matches): Fix
915 * IPython/iplib.py (MagicCompleter.file_matches): Fix
912 tab-completion of filenames within open-quoted strings. Note that
916 tab-completion of filenames within open-quoted strings. Note that
913 this requires that in ~/.ipython/ipythonrc, users change the
917 this requires that in ~/.ipython/ipythonrc, users change the
914 readline delimiters configuration to read:
918 readline delimiters configuration to read:
915
919
916 readline_remove_delims -/~
920 readline_remove_delims -/~
917
921
918
922
919 2005-05-31 *** Released version 0.6.14
923 2005-05-31 *** Released version 0.6.14
920
924
921 2005-05-29 Fernando Perez <fperez@colorado.edu>
925 2005-05-29 Fernando Perez <fperez@colorado.edu>
922
926
923 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
927 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
924 with files not on the filesystem. Reported by Eliyahu Sandler
928 with files not on the filesystem. Reported by Eliyahu Sandler
925 <eli@gondolin.net>
929 <eli@gondolin.net>
926
930
927 2005-05-22 Fernando Perez <fperez@colorado.edu>
931 2005-05-22 Fernando Perez <fperez@colorado.edu>
928
932
929 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
933 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
930 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
934 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
931
935
932 2005-05-19 Fernando Perez <fperez@colorado.edu>
936 2005-05-19 Fernando Perez <fperez@colorado.edu>
933
937
934 * IPython/iplib.py (safe_execfile): close a file which could be
938 * IPython/iplib.py (safe_execfile): close a file which could be
935 left open (causing problems in win32, which locks open files).
939 left open (causing problems in win32, which locks open files).
936 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
940 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
937
941
938 2005-05-18 Fernando Perez <fperez@colorado.edu>
942 2005-05-18 Fernando Perez <fperez@colorado.edu>
939
943
940 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
944 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
941 keyword arguments correctly to safe_execfile().
945 keyword arguments correctly to safe_execfile().
942
946
943 2005-05-13 Fernando Perez <fperez@colorado.edu>
947 2005-05-13 Fernando Perez <fperez@colorado.edu>
944
948
945 * ipython.1: Added info about Qt to manpage, and threads warning
949 * ipython.1: Added info about Qt to manpage, and threads warning
946 to usage page (invoked with --help).
950 to usage page (invoked with --help).
947
951
948 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
952 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
949 new matcher (it goes at the end of the priority list) to do
953 new matcher (it goes at the end of the priority list) to do
950 tab-completion on named function arguments. Submitted by George
954 tab-completion on named function arguments. Submitted by George
951 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
955 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
952 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
956 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
953 for more details.
957 for more details.
954
958
955 * IPython/Magic.py (magic_run): Added new -e flag to ignore
959 * IPython/Magic.py (magic_run): Added new -e flag to ignore
956 SystemExit exceptions in the script being run. Thanks to a report
960 SystemExit exceptions in the script being run. Thanks to a report
957 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
961 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
958 producing very annoying behavior when running unit tests.
962 producing very annoying behavior when running unit tests.
959
963
960 2005-05-12 Fernando Perez <fperez@colorado.edu>
964 2005-05-12 Fernando Perez <fperez@colorado.edu>
961
965
962 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
966 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
963 which I'd broken (again) due to a changed regexp. In the process,
967 which I'd broken (again) due to a changed regexp. In the process,
964 added ';' as an escape to auto-quote the whole line without
968 added ';' as an escape to auto-quote the whole line without
965 splitting its arguments. Thanks to a report by Jerry McRae
969 splitting its arguments. Thanks to a report by Jerry McRae
966 <qrs0xyc02-AT-sneakemail.com>.
970 <qrs0xyc02-AT-sneakemail.com>.
967
971
968 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
972 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
969 possible crashes caused by a TokenError. Reported by Ed Schofield
973 possible crashes caused by a TokenError. Reported by Ed Schofield
970 <schofield-AT-ftw.at>.
974 <schofield-AT-ftw.at>.
971
975
972 2005-05-06 Fernando Perez <fperez@colorado.edu>
976 2005-05-06 Fernando Perez <fperez@colorado.edu>
973
977
974 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
978 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
975
979
976 2005-04-29 Fernando Perez <fperez@colorado.edu>
980 2005-04-29 Fernando Perez <fperez@colorado.edu>
977
981
978 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
982 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
979 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
983 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
980 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
984 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
981 which provides support for Qt interactive usage (similar to the
985 which provides support for Qt interactive usage (similar to the
982 existing one for WX and GTK). This had been often requested.
986 existing one for WX and GTK). This had been often requested.
983
987
984 2005-04-14 *** Released version 0.6.13
988 2005-04-14 *** Released version 0.6.13
985
989
986 2005-04-08 Fernando Perez <fperez@colorado.edu>
990 2005-04-08 Fernando Perez <fperez@colorado.edu>
987
991
988 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
992 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
989 from _ofind, which gets called on almost every input line. Now,
993 from _ofind, which gets called on almost every input line. Now,
990 we only try to get docstrings if they are actually going to be
994 we only try to get docstrings if they are actually going to be
991 used (the overhead of fetching unnecessary docstrings can be
995 used (the overhead of fetching unnecessary docstrings can be
992 noticeable for certain objects, such as Pyro proxies).
996 noticeable for certain objects, such as Pyro proxies).
993
997
994 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
998 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
995 for completers. For some reason I had been passing them the state
999 for completers. For some reason I had been passing them the state
996 variable, which completers never actually need, and was in
1000 variable, which completers never actually need, and was in
997 conflict with the rlcompleter API. Custom completers ONLY need to
1001 conflict with the rlcompleter API. Custom completers ONLY need to
998 take the text parameter.
1002 take the text parameter.
999
1003
1000 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1004 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1001 work correctly in pysh. I've also moved all the logic which used
1005 work correctly in pysh. I've also moved all the logic which used
1002 to be in pysh.py here, which will prevent problems with future
1006 to be in pysh.py here, which will prevent problems with future
1003 upgrades. However, this time I must warn users to update their
1007 upgrades. However, this time I must warn users to update their
1004 pysh profile to include the line
1008 pysh profile to include the line
1005
1009
1006 import_all IPython.Extensions.InterpreterExec
1010 import_all IPython.Extensions.InterpreterExec
1007
1011
1008 because otherwise things won't work for them. They MUST also
1012 because otherwise things won't work for them. They MUST also
1009 delete pysh.py and the line
1013 delete pysh.py and the line
1010
1014
1011 execfile pysh.py
1015 execfile pysh.py
1012
1016
1013 from their ipythonrc-pysh.
1017 from their ipythonrc-pysh.
1014
1018
1015 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1019 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1016 robust in the face of objects whose dir() returns non-strings
1020 robust in the face of objects whose dir() returns non-strings
1017 (which it shouldn't, but some broken libs like ITK do). Thanks to
1021 (which it shouldn't, but some broken libs like ITK do). Thanks to
1018 a patch by John Hunter (implemented differently, though). Also
1022 a patch by John Hunter (implemented differently, though). Also
1019 minor improvements by using .extend instead of + on lists.
1023 minor improvements by using .extend instead of + on lists.
1020
1024
1021 * pysh.py:
1025 * pysh.py:
1022
1026
1023 2005-04-06 Fernando Perez <fperez@colorado.edu>
1027 2005-04-06 Fernando Perez <fperez@colorado.edu>
1024
1028
1025 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1029 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1026 by default, so that all users benefit from it. Those who don't
1030 by default, so that all users benefit from it. Those who don't
1027 want it can still turn it off.
1031 want it can still turn it off.
1028
1032
1029 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1033 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1030 config file, I'd forgotten about this, so users were getting it
1034 config file, I'd forgotten about this, so users were getting it
1031 off by default.
1035 off by default.
1032
1036
1033 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1037 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1034 consistency. Now magics can be called in multiline statements,
1038 consistency. Now magics can be called in multiline statements,
1035 and python variables can be expanded in magic calls via $var.
1039 and python variables can be expanded in magic calls via $var.
1036 This makes the magic system behave just like aliases or !system
1040 This makes the magic system behave just like aliases or !system
1037 calls.
1041 calls.
1038
1042
1039 2005-03-28 Fernando Perez <fperez@colorado.edu>
1043 2005-03-28 Fernando Perez <fperez@colorado.edu>
1040
1044
1041 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1045 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1042 expensive string additions for building command. Add support for
1046 expensive string additions for building command. Add support for
1043 trailing ';' when autocall is used.
1047 trailing ';' when autocall is used.
1044
1048
1045 2005-03-26 Fernando Perez <fperez@colorado.edu>
1049 2005-03-26 Fernando Perez <fperez@colorado.edu>
1046
1050
1047 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1051 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1048 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1052 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1049 ipython.el robust against prompts with any number of spaces
1053 ipython.el robust against prompts with any number of spaces
1050 (including 0) after the ':' character.
1054 (including 0) after the ':' character.
1051
1055
1052 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1056 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1053 continuation prompt, which misled users to think the line was
1057 continuation prompt, which misled users to think the line was
1054 already indented. Closes debian Bug#300847, reported to me by
1058 already indented. Closes debian Bug#300847, reported to me by
1055 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1059 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1056
1060
1057 2005-03-23 Fernando Perez <fperez@colorado.edu>
1061 2005-03-23 Fernando Perez <fperez@colorado.edu>
1058
1062
1059 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1063 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1060 properly aligned if they have embedded newlines.
1064 properly aligned if they have embedded newlines.
1061
1065
1062 * IPython/iplib.py (runlines): Add a public method to expose
1066 * IPython/iplib.py (runlines): Add a public method to expose
1063 IPython's code execution machinery, so that users can run strings
1067 IPython's code execution machinery, so that users can run strings
1064 as if they had been typed at the prompt interactively.
1068 as if they had been typed at the prompt interactively.
1065 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1069 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1066 methods which can call the system shell, but with python variable
1070 methods which can call the system shell, but with python variable
1067 expansion. The three such methods are: __IPYTHON__.system,
1071 expansion. The three such methods are: __IPYTHON__.system,
1068 .getoutput and .getoutputerror. These need to be documented in a
1072 .getoutput and .getoutputerror. These need to be documented in a
1069 'public API' section (to be written) of the manual.
1073 'public API' section (to be written) of the manual.
1070
1074
1071 2005-03-20 Fernando Perez <fperez@colorado.edu>
1075 2005-03-20 Fernando Perez <fperez@colorado.edu>
1072
1076
1073 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1077 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1074 for custom exception handling. This is quite powerful, and it
1078 for custom exception handling. This is quite powerful, and it
1075 allows for user-installable exception handlers which can trap
1079 allows for user-installable exception handlers which can trap
1076 custom exceptions at runtime and treat them separately from
1080 custom exceptions at runtime and treat them separately from
1077 IPython's default mechanisms. At the request of Frédéric
1081 IPython's default mechanisms. At the request of Frédéric
1078 Mantegazza <mantegazza-AT-ill.fr>.
1082 Mantegazza <mantegazza-AT-ill.fr>.
1079 (InteractiveShell.set_custom_completer): public API function to
1083 (InteractiveShell.set_custom_completer): public API function to
1080 add new completers at runtime.
1084 add new completers at runtime.
1081
1085
1082 2005-03-19 Fernando Perez <fperez@colorado.edu>
1086 2005-03-19 Fernando Perez <fperez@colorado.edu>
1083
1087
1084 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1088 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1085 allow objects which provide their docstrings via non-standard
1089 allow objects which provide their docstrings via non-standard
1086 mechanisms (like Pyro proxies) to still be inspected by ipython's
1090 mechanisms (like Pyro proxies) to still be inspected by ipython's
1087 ? system.
1091 ? system.
1088
1092
1089 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1093 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1090 automatic capture system. I tried quite hard to make it work
1094 automatic capture system. I tried quite hard to make it work
1091 reliably, and simply failed. I tried many combinations with the
1095 reliably, and simply failed. I tried many combinations with the
1092 subprocess module, but eventually nothing worked in all needed
1096 subprocess module, but eventually nothing worked in all needed
1093 cases (not blocking stdin for the child, duplicating stdout
1097 cases (not blocking stdin for the child, duplicating stdout
1094 without blocking, etc). The new %sc/%sx still do capture to these
1098 without blocking, etc). The new %sc/%sx still do capture to these
1095 magical list/string objects which make shell use much more
1099 magical list/string objects which make shell use much more
1096 conveninent, so not all is lost.
1100 conveninent, so not all is lost.
1097
1101
1098 XXX - FIX MANUAL for the change above!
1102 XXX - FIX MANUAL for the change above!
1099
1103
1100 (runsource): I copied code.py's runsource() into ipython to modify
1104 (runsource): I copied code.py's runsource() into ipython to modify
1101 it a bit. Now the code object and source to be executed are
1105 it a bit. Now the code object and source to be executed are
1102 stored in ipython. This makes this info accessible to third-party
1106 stored in ipython. This makes this info accessible to third-party
1103 tools, like custom exception handlers. After a request by Frédéric
1107 tools, like custom exception handlers. After a request by Frédéric
1104 Mantegazza <mantegazza-AT-ill.fr>.
1108 Mantegazza <mantegazza-AT-ill.fr>.
1105
1109
1106 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1110 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1107 history-search via readline (like C-p/C-n). I'd wanted this for a
1111 history-search via readline (like C-p/C-n). I'd wanted this for a
1108 long time, but only recently found out how to do it. For users
1112 long time, but only recently found out how to do it. For users
1109 who already have their ipythonrc files made and want this, just
1113 who already have their ipythonrc files made and want this, just
1110 add:
1114 add:
1111
1115
1112 readline_parse_and_bind "\e[A": history-search-backward
1116 readline_parse_and_bind "\e[A": history-search-backward
1113 readline_parse_and_bind "\e[B": history-search-forward
1117 readline_parse_and_bind "\e[B": history-search-forward
1114
1118
1115 2005-03-18 Fernando Perez <fperez@colorado.edu>
1119 2005-03-18 Fernando Perez <fperez@colorado.edu>
1116
1120
1117 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1121 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1118 LSString and SList classes which allow transparent conversions
1122 LSString and SList classes which allow transparent conversions
1119 between list mode and whitespace-separated string.
1123 between list mode and whitespace-separated string.
1120 (magic_r): Fix recursion problem in %r.
1124 (magic_r): Fix recursion problem in %r.
1121
1125
1122 * IPython/genutils.py (LSString): New class to be used for
1126 * IPython/genutils.py (LSString): New class to be used for
1123 automatic storage of the results of all alias/system calls in _o
1127 automatic storage of the results of all alias/system calls in _o
1124 and _e (stdout/err). These provide a .l/.list attribute which
1128 and _e (stdout/err). These provide a .l/.list attribute which
1125 does automatic splitting on newlines. This means that for most
1129 does automatic splitting on newlines. This means that for most
1126 uses, you'll never need to do capturing of output with %sc/%sx
1130 uses, you'll never need to do capturing of output with %sc/%sx
1127 anymore, since ipython keeps this always done for you. Note that
1131 anymore, since ipython keeps this always done for you. Note that
1128 only the LAST results are stored, the _o/e variables are
1132 only the LAST results are stored, the _o/e variables are
1129 overwritten on each call. If you need to save their contents
1133 overwritten on each call. If you need to save their contents
1130 further, simply bind them to any other name.
1134 further, simply bind them to any other name.
1131
1135
1132 2005-03-17 Fernando Perez <fperez@colorado.edu>
1136 2005-03-17 Fernando Perez <fperez@colorado.edu>
1133
1137
1134 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1138 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1135 prompt namespace handling.
1139 prompt namespace handling.
1136
1140
1137 2005-03-16 Fernando Perez <fperez@colorado.edu>
1141 2005-03-16 Fernando Perez <fperez@colorado.edu>
1138
1142
1139 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1143 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1140 classic prompts to be '>>> ' (final space was missing, and it
1144 classic prompts to be '>>> ' (final space was missing, and it
1141 trips the emacs python mode).
1145 trips the emacs python mode).
1142 (BasePrompt.__str__): Added safe support for dynamic prompt
1146 (BasePrompt.__str__): Added safe support for dynamic prompt
1143 strings. Now you can set your prompt string to be '$x', and the
1147 strings. Now you can set your prompt string to be '$x', and the
1144 value of x will be printed from your interactive namespace. The
1148 value of x will be printed from your interactive namespace. The
1145 interpolation syntax includes the full Itpl support, so
1149 interpolation syntax includes the full Itpl support, so
1146 ${foo()+x+bar()} is a valid prompt string now, and the function
1150 ${foo()+x+bar()} is a valid prompt string now, and the function
1147 calls will be made at runtime.
1151 calls will be made at runtime.
1148
1152
1149 2005-03-15 Fernando Perez <fperez@colorado.edu>
1153 2005-03-15 Fernando Perez <fperez@colorado.edu>
1150
1154
1151 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1155 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1152 avoid name clashes in pylab. %hist still works, it just forwards
1156 avoid name clashes in pylab. %hist still works, it just forwards
1153 the call to %history.
1157 the call to %history.
1154
1158
1155 2005-03-02 *** Released version 0.6.12
1159 2005-03-02 *** Released version 0.6.12
1156
1160
1157 2005-03-02 Fernando Perez <fperez@colorado.edu>
1161 2005-03-02 Fernando Perez <fperez@colorado.edu>
1158
1162
1159 * IPython/iplib.py (handle_magic): log magic calls properly as
1163 * IPython/iplib.py (handle_magic): log magic calls properly as
1160 ipmagic() function calls.
1164 ipmagic() function calls.
1161
1165
1162 * IPython/Magic.py (magic_time): Improved %time to support
1166 * IPython/Magic.py (magic_time): Improved %time to support
1163 statements and provide wall-clock as well as CPU time.
1167 statements and provide wall-clock as well as CPU time.
1164
1168
1165 2005-02-27 Fernando Perez <fperez@colorado.edu>
1169 2005-02-27 Fernando Perez <fperez@colorado.edu>
1166
1170
1167 * IPython/hooks.py: New hooks module, to expose user-modifiable
1171 * IPython/hooks.py: New hooks module, to expose user-modifiable
1168 IPython functionality in a clean manner. For now only the editor
1172 IPython functionality in a clean manner. For now only the editor
1169 hook is actually written, and other thigns which I intend to turn
1173 hook is actually written, and other thigns which I intend to turn
1170 into proper hooks aren't yet there. The display and prefilter
1174 into proper hooks aren't yet there. The display and prefilter
1171 stuff, for example, should be hooks. But at least now the
1175 stuff, for example, should be hooks. But at least now the
1172 framework is in place, and the rest can be moved here with more
1176 framework is in place, and the rest can be moved here with more
1173 time later. IPython had had a .hooks variable for a long time for
1177 time later. IPython had had a .hooks variable for a long time for
1174 this purpose, but I'd never actually used it for anything.
1178 this purpose, but I'd never actually used it for anything.
1175
1179
1176 2005-02-26 Fernando Perez <fperez@colorado.edu>
1180 2005-02-26 Fernando Perez <fperez@colorado.edu>
1177
1181
1178 * IPython/ipmaker.py (make_IPython): make the default ipython
1182 * IPython/ipmaker.py (make_IPython): make the default ipython
1179 directory be called _ipython under win32, to follow more the
1183 directory be called _ipython under win32, to follow more the
1180 naming peculiarities of that platform (where buggy software like
1184 naming peculiarities of that platform (where buggy software like
1181 Visual Sourcesafe breaks with .named directories). Reported by
1185 Visual Sourcesafe breaks with .named directories). Reported by
1182 Ville Vainio.
1186 Ville Vainio.
1183
1187
1184 2005-02-23 Fernando Perez <fperez@colorado.edu>
1188 2005-02-23 Fernando Perez <fperez@colorado.edu>
1185
1189
1186 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1190 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1187 auto_aliases for win32 which were causing problems. Users can
1191 auto_aliases for win32 which were causing problems. Users can
1188 define the ones they personally like.
1192 define the ones they personally like.
1189
1193
1190 2005-02-21 Fernando Perez <fperez@colorado.edu>
1194 2005-02-21 Fernando Perez <fperez@colorado.edu>
1191
1195
1192 * IPython/Magic.py (magic_time): new magic to time execution of
1196 * IPython/Magic.py (magic_time): new magic to time execution of
1193 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1197 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1194
1198
1195 2005-02-19 Fernando Perez <fperez@colorado.edu>
1199 2005-02-19 Fernando Perez <fperez@colorado.edu>
1196
1200
1197 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1201 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1198 into keys (for prompts, for example).
1202 into keys (for prompts, for example).
1199
1203
1200 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1204 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1201 prompts in case users want them. This introduces a small behavior
1205 prompts in case users want them. This introduces a small behavior
1202 change: ipython does not automatically add a space to all prompts
1206 change: ipython does not automatically add a space to all prompts
1203 anymore. To get the old prompts with a space, users should add it
1207 anymore. To get the old prompts with a space, users should add it
1204 manually to their ipythonrc file, so for example prompt_in1 should
1208 manually to their ipythonrc file, so for example prompt_in1 should
1205 now read 'In [\#]: ' instead of 'In [\#]:'.
1209 now read 'In [\#]: ' instead of 'In [\#]:'.
1206 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1210 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1207 file) to control left-padding of secondary prompts.
1211 file) to control left-padding of secondary prompts.
1208
1212
1209 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1213 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1210 the profiler can't be imported. Fix for Debian, which removed
1214 the profiler can't be imported. Fix for Debian, which removed
1211 profile.py because of License issues. I applied a slightly
1215 profile.py because of License issues. I applied a slightly
1212 modified version of the original Debian patch at
1216 modified version of the original Debian patch at
1213 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1217 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1214
1218
1215 2005-02-17 Fernando Perez <fperez@colorado.edu>
1219 2005-02-17 Fernando Perez <fperez@colorado.edu>
1216
1220
1217 * IPython/genutils.py (native_line_ends): Fix bug which would
1221 * IPython/genutils.py (native_line_ends): Fix bug which would
1218 cause improper line-ends under win32 b/c I was not opening files
1222 cause improper line-ends under win32 b/c I was not opening files
1219 in binary mode. Bug report and fix thanks to Ville.
1223 in binary mode. Bug report and fix thanks to Ville.
1220
1224
1221 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1225 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1222 trying to catch spurious foo[1] autocalls. My fix actually broke
1226 trying to catch spurious foo[1] autocalls. My fix actually broke
1223 ',/' autoquote/call with explicit escape (bad regexp).
1227 ',/' autoquote/call with explicit escape (bad regexp).
1224
1228
1225 2005-02-15 *** Released version 0.6.11
1229 2005-02-15 *** Released version 0.6.11
1226
1230
1227 2005-02-14 Fernando Perez <fperez@colorado.edu>
1231 2005-02-14 Fernando Perez <fperez@colorado.edu>
1228
1232
1229 * IPython/background_jobs.py: New background job management
1233 * IPython/background_jobs.py: New background job management
1230 subsystem. This is implemented via a new set of classes, and
1234 subsystem. This is implemented via a new set of classes, and
1231 IPython now provides a builtin 'jobs' object for background job
1235 IPython now provides a builtin 'jobs' object for background job
1232 execution. A convenience %bg magic serves as a lightweight
1236 execution. A convenience %bg magic serves as a lightweight
1233 frontend for starting the more common type of calls. This was
1237 frontend for starting the more common type of calls. This was
1234 inspired by discussions with B. Granger and the BackgroundCommand
1238 inspired by discussions with B. Granger and the BackgroundCommand
1235 class described in the book Python Scripting for Computational
1239 class described in the book Python Scripting for Computational
1236 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1240 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1237 (although ultimately no code from this text was used, as IPython's
1241 (although ultimately no code from this text was used, as IPython's
1238 system is a separate implementation).
1242 system is a separate implementation).
1239
1243
1240 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1244 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1241 to control the completion of single/double underscore names
1245 to control the completion of single/double underscore names
1242 separately. As documented in the example ipytonrc file, the
1246 separately. As documented in the example ipytonrc file, the
1243 readline_omit__names variable can now be set to 2, to omit even
1247 readline_omit__names variable can now be set to 2, to omit even
1244 single underscore names. Thanks to a patch by Brian Wong
1248 single underscore names. Thanks to a patch by Brian Wong
1245 <BrianWong-AT-AirgoNetworks.Com>.
1249 <BrianWong-AT-AirgoNetworks.Com>.
1246 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1250 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1247 be autocalled as foo([1]) if foo were callable. A problem for
1251 be autocalled as foo([1]) if foo were callable. A problem for
1248 things which are both callable and implement __getitem__.
1252 things which are both callable and implement __getitem__.
1249 (init_readline): Fix autoindentation for win32. Thanks to a patch
1253 (init_readline): Fix autoindentation for win32. Thanks to a patch
1250 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1254 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1251
1255
1252 2005-02-12 Fernando Perez <fperez@colorado.edu>
1256 2005-02-12 Fernando Perez <fperez@colorado.edu>
1253
1257
1254 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1258 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1255 which I had written long ago to sort out user error messages which
1259 which I had written long ago to sort out user error messages which
1256 may occur during startup. This seemed like a good idea initially,
1260 may occur during startup. This seemed like a good idea initially,
1257 but it has proven a disaster in retrospect. I don't want to
1261 but it has proven a disaster in retrospect. I don't want to
1258 change much code for now, so my fix is to set the internal 'debug'
1262 change much code for now, so my fix is to set the internal 'debug'
1259 flag to true everywhere, whose only job was precisely to control
1263 flag to true everywhere, whose only job was precisely to control
1260 this subsystem. This closes issue 28 (as well as avoiding all
1264 this subsystem. This closes issue 28 (as well as avoiding all
1261 sorts of strange hangups which occur from time to time).
1265 sorts of strange hangups which occur from time to time).
1262
1266
1263 2005-02-07 Fernando Perez <fperez@colorado.edu>
1267 2005-02-07 Fernando Perez <fperez@colorado.edu>
1264
1268
1265 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1269 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1266 previous call produced a syntax error.
1270 previous call produced a syntax error.
1267
1271
1268 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1272 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1269 classes without constructor.
1273 classes without constructor.
1270
1274
1271 2005-02-06 Fernando Perez <fperez@colorado.edu>
1275 2005-02-06 Fernando Perez <fperez@colorado.edu>
1272
1276
1273 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1277 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1274 completions with the results of each matcher, so we return results
1278 completions with the results of each matcher, so we return results
1275 to the user from all namespaces. This breaks with ipython
1279 to the user from all namespaces. This breaks with ipython
1276 tradition, but I think it's a nicer behavior. Now you get all
1280 tradition, but I think it's a nicer behavior. Now you get all
1277 possible completions listed, from all possible namespaces (python,
1281 possible completions listed, from all possible namespaces (python,
1278 filesystem, magics...) After a request by John Hunter
1282 filesystem, magics...) After a request by John Hunter
1279 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1283 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1280
1284
1281 2005-02-05 Fernando Perez <fperez@colorado.edu>
1285 2005-02-05 Fernando Perez <fperez@colorado.edu>
1282
1286
1283 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1287 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1284 the call had quote characters in it (the quotes were stripped).
1288 the call had quote characters in it (the quotes were stripped).
1285
1289
1286 2005-01-31 Fernando Perez <fperez@colorado.edu>
1290 2005-01-31 Fernando Perez <fperez@colorado.edu>
1287
1291
1288 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1292 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1289 Itpl.itpl() to make the code more robust against psyco
1293 Itpl.itpl() to make the code more robust against psyco
1290 optimizations.
1294 optimizations.
1291
1295
1292 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1296 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1293 of causing an exception. Quicker, cleaner.
1297 of causing an exception. Quicker, cleaner.
1294
1298
1295 2005-01-28 Fernando Perez <fperez@colorado.edu>
1299 2005-01-28 Fernando Perez <fperez@colorado.edu>
1296
1300
1297 * scripts/ipython_win_post_install.py (install): hardcode
1301 * scripts/ipython_win_post_install.py (install): hardcode
1298 sys.prefix+'python.exe' as the executable path. It turns out that
1302 sys.prefix+'python.exe' as the executable path. It turns out that
1299 during the post-installation run, sys.executable resolves to the
1303 during the post-installation run, sys.executable resolves to the
1300 name of the binary installer! I should report this as a distutils
1304 name of the binary installer! I should report this as a distutils
1301 bug, I think. I updated the .10 release with this tiny fix, to
1305 bug, I think. I updated the .10 release with this tiny fix, to
1302 avoid annoying the lists further.
1306 avoid annoying the lists further.
1303
1307
1304 2005-01-27 *** Released version 0.6.10
1308 2005-01-27 *** Released version 0.6.10
1305
1309
1306 2005-01-27 Fernando Perez <fperez@colorado.edu>
1310 2005-01-27 Fernando Perez <fperez@colorado.edu>
1307
1311
1308 * IPython/numutils.py (norm): Added 'inf' as optional name for
1312 * IPython/numutils.py (norm): Added 'inf' as optional name for
1309 L-infinity norm, included references to mathworld.com for vector
1313 L-infinity norm, included references to mathworld.com for vector
1310 norm definitions.
1314 norm definitions.
1311 (amin/amax): added amin/amax for array min/max. Similar to what
1315 (amin/amax): added amin/amax for array min/max. Similar to what
1312 pylab ships with after the recent reorganization of names.
1316 pylab ships with after the recent reorganization of names.
1313 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1317 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1314
1318
1315 * ipython.el: committed Alex's recent fixes and improvements.
1319 * ipython.el: committed Alex's recent fixes and improvements.
1316 Tested with python-mode from CVS, and it looks excellent. Since
1320 Tested with python-mode from CVS, and it looks excellent. Since
1317 python-mode hasn't released anything in a while, I'm temporarily
1321 python-mode hasn't released anything in a while, I'm temporarily
1318 putting a copy of today's CVS (v 4.70) of python-mode in:
1322 putting a copy of today's CVS (v 4.70) of python-mode in:
1319 http://ipython.scipy.org/tmp/python-mode.el
1323 http://ipython.scipy.org/tmp/python-mode.el
1320
1324
1321 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1325 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1322 sys.executable for the executable name, instead of assuming it's
1326 sys.executable for the executable name, instead of assuming it's
1323 called 'python.exe' (the post-installer would have produced broken
1327 called 'python.exe' (the post-installer would have produced broken
1324 setups on systems with a differently named python binary).
1328 setups on systems with a differently named python binary).
1325
1329
1326 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1330 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1327 references to os.linesep, to make the code more
1331 references to os.linesep, to make the code more
1328 platform-independent. This is also part of the win32 coloring
1332 platform-independent. This is also part of the win32 coloring
1329 fixes.
1333 fixes.
1330
1334
1331 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1335 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1332 lines, which actually cause coloring bugs because the length of
1336 lines, which actually cause coloring bugs because the length of
1333 the line is very difficult to correctly compute with embedded
1337 the line is very difficult to correctly compute with embedded
1334 escapes. This was the source of all the coloring problems under
1338 escapes. This was the source of all the coloring problems under
1335 Win32. I think that _finally_, Win32 users have a properly
1339 Win32. I think that _finally_, Win32 users have a properly
1336 working ipython in all respects. This would never have happened
1340 working ipython in all respects. This would never have happened
1337 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1341 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1338
1342
1339 2005-01-26 *** Released version 0.6.9
1343 2005-01-26 *** Released version 0.6.9
1340
1344
1341 2005-01-25 Fernando Perez <fperez@colorado.edu>
1345 2005-01-25 Fernando Perez <fperez@colorado.edu>
1342
1346
1343 * setup.py: finally, we have a true Windows installer, thanks to
1347 * setup.py: finally, we have a true Windows installer, thanks to
1344 the excellent work of Viktor Ransmayr
1348 the excellent work of Viktor Ransmayr
1345 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1349 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1346 Windows users. The setup routine is quite a bit cleaner thanks to
1350 Windows users. The setup routine is quite a bit cleaner thanks to
1347 this, and the post-install script uses the proper functions to
1351 this, and the post-install script uses the proper functions to
1348 allow a clean de-installation using the standard Windows Control
1352 allow a clean de-installation using the standard Windows Control
1349 Panel.
1353 Panel.
1350
1354
1351 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1355 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1352 environment variable under all OSes (including win32) if
1356 environment variable under all OSes (including win32) if
1353 available. This will give consistency to win32 users who have set
1357 available. This will give consistency to win32 users who have set
1354 this variable for any reason. If os.environ['HOME'] fails, the
1358 this variable for any reason. If os.environ['HOME'] fails, the
1355 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1359 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1356
1360
1357 2005-01-24 Fernando Perez <fperez@colorado.edu>
1361 2005-01-24 Fernando Perez <fperez@colorado.edu>
1358
1362
1359 * IPython/numutils.py (empty_like): add empty_like(), similar to
1363 * IPython/numutils.py (empty_like): add empty_like(), similar to
1360 zeros_like() but taking advantage of the new empty() Numeric routine.
1364 zeros_like() but taking advantage of the new empty() Numeric routine.
1361
1365
1362 2005-01-23 *** Released version 0.6.8
1366 2005-01-23 *** Released version 0.6.8
1363
1367
1364 2005-01-22 Fernando Perez <fperez@colorado.edu>
1368 2005-01-22 Fernando Perez <fperez@colorado.edu>
1365
1369
1366 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1370 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1367 automatic show() calls. After discussing things with JDH, it
1371 automatic show() calls. After discussing things with JDH, it
1368 turns out there are too many corner cases where this can go wrong.
1372 turns out there are too many corner cases where this can go wrong.
1369 It's best not to try to be 'too smart', and simply have ipython
1373 It's best not to try to be 'too smart', and simply have ipython
1370 reproduce as much as possible the default behavior of a normal
1374 reproduce as much as possible the default behavior of a normal
1371 python shell.
1375 python shell.
1372
1376
1373 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1377 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1374 line-splitting regexp and _prefilter() to avoid calling getattr()
1378 line-splitting regexp and _prefilter() to avoid calling getattr()
1375 on assignments. This closes
1379 on assignments. This closes
1376 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1380 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1377 readline uses getattr(), so a simple <TAB> keypress is still
1381 readline uses getattr(), so a simple <TAB> keypress is still
1378 enough to trigger getattr() calls on an object.
1382 enough to trigger getattr() calls on an object.
1379
1383
1380 2005-01-21 Fernando Perez <fperez@colorado.edu>
1384 2005-01-21 Fernando Perez <fperez@colorado.edu>
1381
1385
1382 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1386 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1383 docstring under pylab so it doesn't mask the original.
1387 docstring under pylab so it doesn't mask the original.
1384
1388
1385 2005-01-21 *** Released version 0.6.7
1389 2005-01-21 *** Released version 0.6.7
1386
1390
1387 2005-01-21 Fernando Perez <fperez@colorado.edu>
1391 2005-01-21 Fernando Perez <fperez@colorado.edu>
1388
1392
1389 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1393 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1390 signal handling for win32 users in multithreaded mode.
1394 signal handling for win32 users in multithreaded mode.
1391
1395
1392 2005-01-17 Fernando Perez <fperez@colorado.edu>
1396 2005-01-17 Fernando Perez <fperez@colorado.edu>
1393
1397
1394 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1398 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1395 instances with no __init__. After a crash report by Norbert Nemec
1399 instances with no __init__. After a crash report by Norbert Nemec
1396 <Norbert-AT-nemec-online.de>.
1400 <Norbert-AT-nemec-online.de>.
1397
1401
1398 2005-01-14 Fernando Perez <fperez@colorado.edu>
1402 2005-01-14 Fernando Perez <fperez@colorado.edu>
1399
1403
1400 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1404 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1401 names for verbose exceptions, when multiple dotted names and the
1405 names for verbose exceptions, when multiple dotted names and the
1402 'parent' object were present on the same line.
1406 'parent' object were present on the same line.
1403
1407
1404 2005-01-11 Fernando Perez <fperez@colorado.edu>
1408 2005-01-11 Fernando Perez <fperez@colorado.edu>
1405
1409
1406 * IPython/genutils.py (flag_calls): new utility to trap and flag
1410 * IPython/genutils.py (flag_calls): new utility to trap and flag
1407 calls in functions. I need it to clean up matplotlib support.
1411 calls in functions. I need it to clean up matplotlib support.
1408 Also removed some deprecated code in genutils.
1412 Also removed some deprecated code in genutils.
1409
1413
1410 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1414 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1411 that matplotlib scripts called with %run, which don't call show()
1415 that matplotlib scripts called with %run, which don't call show()
1412 themselves, still have their plotting windows open.
1416 themselves, still have their plotting windows open.
1413
1417
1414 2005-01-05 Fernando Perez <fperez@colorado.edu>
1418 2005-01-05 Fernando Perez <fperez@colorado.edu>
1415
1419
1416 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1420 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1417 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1421 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1418
1422
1419 2004-12-19 Fernando Perez <fperez@colorado.edu>
1423 2004-12-19 Fernando Perez <fperez@colorado.edu>
1420
1424
1421 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1425 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1422 parent_runcode, which was an eyesore. The same result can be
1426 parent_runcode, which was an eyesore. The same result can be
1423 obtained with Python's regular superclass mechanisms.
1427 obtained with Python's regular superclass mechanisms.
1424
1428
1425 2004-12-17 Fernando Perez <fperez@colorado.edu>
1429 2004-12-17 Fernando Perez <fperez@colorado.edu>
1426
1430
1427 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1431 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1428 reported by Prabhu.
1432 reported by Prabhu.
1429 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1433 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1430 sys.stderr) instead of explicitly calling sys.stderr. This helps
1434 sys.stderr) instead of explicitly calling sys.stderr. This helps
1431 maintain our I/O abstractions clean, for future GUI embeddings.
1435 maintain our I/O abstractions clean, for future GUI embeddings.
1432
1436
1433 * IPython/genutils.py (info): added new utility for sys.stderr
1437 * IPython/genutils.py (info): added new utility for sys.stderr
1434 unified info message handling (thin wrapper around warn()).
1438 unified info message handling (thin wrapper around warn()).
1435
1439
1436 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1440 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1437 composite (dotted) names on verbose exceptions.
1441 composite (dotted) names on verbose exceptions.
1438 (VerboseTB.nullrepr): harden against another kind of errors which
1442 (VerboseTB.nullrepr): harden against another kind of errors which
1439 Python's inspect module can trigger, and which were crashing
1443 Python's inspect module can trigger, and which were crashing
1440 IPython. Thanks to a report by Marco Lombardi
1444 IPython. Thanks to a report by Marco Lombardi
1441 <mlombard-AT-ma010192.hq.eso.org>.
1445 <mlombard-AT-ma010192.hq.eso.org>.
1442
1446
1443 2004-12-13 *** Released version 0.6.6
1447 2004-12-13 *** Released version 0.6.6
1444
1448
1445 2004-12-12 Fernando Perez <fperez@colorado.edu>
1449 2004-12-12 Fernando Perez <fperez@colorado.edu>
1446
1450
1447 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1451 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1448 generated by pygtk upon initialization if it was built without
1452 generated by pygtk upon initialization if it was built without
1449 threads (for matplotlib users). After a crash reported by
1453 threads (for matplotlib users). After a crash reported by
1450 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1454 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1451
1455
1452 * IPython/ipmaker.py (make_IPython): fix small bug in the
1456 * IPython/ipmaker.py (make_IPython): fix small bug in the
1453 import_some parameter for multiple imports.
1457 import_some parameter for multiple imports.
1454
1458
1455 * IPython/iplib.py (ipmagic): simplified the interface of
1459 * IPython/iplib.py (ipmagic): simplified the interface of
1456 ipmagic() to take a single string argument, just as it would be
1460 ipmagic() to take a single string argument, just as it would be
1457 typed at the IPython cmd line.
1461 typed at the IPython cmd line.
1458 (ipalias): Added new ipalias() with an interface identical to
1462 (ipalias): Added new ipalias() with an interface identical to
1459 ipmagic(). This completes exposing a pure python interface to the
1463 ipmagic(). This completes exposing a pure python interface to the
1460 alias and magic system, which can be used in loops or more complex
1464 alias and magic system, which can be used in loops or more complex
1461 code where IPython's automatic line mangling is not active.
1465 code where IPython's automatic line mangling is not active.
1462
1466
1463 * IPython/genutils.py (timing): changed interface of timing to
1467 * IPython/genutils.py (timing): changed interface of timing to
1464 simply run code once, which is the most common case. timings()
1468 simply run code once, which is the most common case. timings()
1465 remains unchanged, for the cases where you want multiple runs.
1469 remains unchanged, for the cases where you want multiple runs.
1466
1470
1467 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1471 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1468 bug where Python2.2 crashes with exec'ing code which does not end
1472 bug where Python2.2 crashes with exec'ing code which does not end
1469 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1473 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1470 before.
1474 before.
1471
1475
1472 2004-12-10 Fernando Perez <fperez@colorado.edu>
1476 2004-12-10 Fernando Perez <fperez@colorado.edu>
1473
1477
1474 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1478 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1475 -t to -T, to accomodate the new -t flag in %run (the %run and
1479 -t to -T, to accomodate the new -t flag in %run (the %run and
1476 %prun options are kind of intermixed, and it's not easy to change
1480 %prun options are kind of intermixed, and it's not easy to change
1477 this with the limitations of python's getopt).
1481 this with the limitations of python's getopt).
1478
1482
1479 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1483 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1480 the execution of scripts. It's not as fine-tuned as timeit.py,
1484 the execution of scripts. It's not as fine-tuned as timeit.py,
1481 but it works from inside ipython (and under 2.2, which lacks
1485 but it works from inside ipython (and under 2.2, which lacks
1482 timeit.py). Optionally a number of runs > 1 can be given for
1486 timeit.py). Optionally a number of runs > 1 can be given for
1483 timing very short-running code.
1487 timing very short-running code.
1484
1488
1485 * IPython/genutils.py (uniq_stable): new routine which returns a
1489 * IPython/genutils.py (uniq_stable): new routine which returns a
1486 list of unique elements in any iterable, but in stable order of
1490 list of unique elements in any iterable, but in stable order of
1487 appearance. I needed this for the ultraTB fixes, and it's a handy
1491 appearance. I needed this for the ultraTB fixes, and it's a handy
1488 utility.
1492 utility.
1489
1493
1490 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1494 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1491 dotted names in Verbose exceptions. This had been broken since
1495 dotted names in Verbose exceptions. This had been broken since
1492 the very start, now x.y will properly be printed in a Verbose
1496 the very start, now x.y will properly be printed in a Verbose
1493 traceback, instead of x being shown and y appearing always as an
1497 traceback, instead of x being shown and y appearing always as an
1494 'undefined global'. Getting this to work was a bit tricky,
1498 'undefined global'. Getting this to work was a bit tricky,
1495 because by default python tokenizers are stateless. Saved by
1499 because by default python tokenizers are stateless. Saved by
1496 python's ability to easily add a bit of state to an arbitrary
1500 python's ability to easily add a bit of state to an arbitrary
1497 function (without needing to build a full-blown callable object).
1501 function (without needing to build a full-blown callable object).
1498
1502
1499 Also big cleanup of this code, which had horrendous runtime
1503 Also big cleanup of this code, which had horrendous runtime
1500 lookups of zillions of attributes for colorization. Moved all
1504 lookups of zillions of attributes for colorization. Moved all
1501 this code into a few templates, which make it cleaner and quicker.
1505 this code into a few templates, which make it cleaner and quicker.
1502
1506
1503 Printout quality was also improved for Verbose exceptions: one
1507 Printout quality was also improved for Verbose exceptions: one
1504 variable per line, and memory addresses are printed (this can be
1508 variable per line, and memory addresses are printed (this can be
1505 quite handy in nasty debugging situations, which is what Verbose
1509 quite handy in nasty debugging situations, which is what Verbose
1506 is for).
1510 is for).
1507
1511
1508 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1512 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1509 the command line as scripts to be loaded by embedded instances.
1513 the command line as scripts to be loaded by embedded instances.
1510 Doing so has the potential for an infinite recursion if there are
1514 Doing so has the potential for an infinite recursion if there are
1511 exceptions thrown in the process. This fixes a strange crash
1515 exceptions thrown in the process. This fixes a strange crash
1512 reported by Philippe MULLER <muller-AT-irit.fr>.
1516 reported by Philippe MULLER <muller-AT-irit.fr>.
1513
1517
1514 2004-12-09 Fernando Perez <fperez@colorado.edu>
1518 2004-12-09 Fernando Perez <fperez@colorado.edu>
1515
1519
1516 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1520 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1517 to reflect new names in matplotlib, which now expose the
1521 to reflect new names in matplotlib, which now expose the
1518 matlab-compatible interface via a pylab module instead of the
1522 matlab-compatible interface via a pylab module instead of the
1519 'matlab' name. The new code is backwards compatible, so users of
1523 'matlab' name. The new code is backwards compatible, so users of
1520 all matplotlib versions are OK. Patch by J. Hunter.
1524 all matplotlib versions are OK. Patch by J. Hunter.
1521
1525
1522 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1526 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1523 of __init__ docstrings for instances (class docstrings are already
1527 of __init__ docstrings for instances (class docstrings are already
1524 automatically printed). Instances with customized docstrings
1528 automatically printed). Instances with customized docstrings
1525 (indep. of the class) are also recognized and all 3 separate
1529 (indep. of the class) are also recognized and all 3 separate
1526 docstrings are printed (instance, class, constructor). After some
1530 docstrings are printed (instance, class, constructor). After some
1527 comments/suggestions by J. Hunter.
1531 comments/suggestions by J. Hunter.
1528
1532
1529 2004-12-05 Fernando Perez <fperez@colorado.edu>
1533 2004-12-05 Fernando Perez <fperez@colorado.edu>
1530
1534
1531 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1535 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1532 warnings when tab-completion fails and triggers an exception.
1536 warnings when tab-completion fails and triggers an exception.
1533
1537
1534 2004-12-03 Fernando Perez <fperez@colorado.edu>
1538 2004-12-03 Fernando Perez <fperez@colorado.edu>
1535
1539
1536 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1540 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1537 be triggered when using 'run -p'. An incorrect option flag was
1541 be triggered when using 'run -p'. An incorrect option flag was
1538 being set ('d' instead of 'D').
1542 being set ('d' instead of 'D').
1539 (manpage): fix missing escaped \- sign.
1543 (manpage): fix missing escaped \- sign.
1540
1544
1541 2004-11-30 *** Released version 0.6.5
1545 2004-11-30 *** Released version 0.6.5
1542
1546
1543 2004-11-30 Fernando Perez <fperez@colorado.edu>
1547 2004-11-30 Fernando Perez <fperez@colorado.edu>
1544
1548
1545 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1549 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1546 setting with -d option.
1550 setting with -d option.
1547
1551
1548 * setup.py (docfiles): Fix problem where the doc glob I was using
1552 * setup.py (docfiles): Fix problem where the doc glob I was using
1549 was COMPLETELY BROKEN. It was giving the right files by pure
1553 was COMPLETELY BROKEN. It was giving the right files by pure
1550 accident, but failed once I tried to include ipython.el. Note:
1554 accident, but failed once I tried to include ipython.el. Note:
1551 glob() does NOT allow you to do exclusion on multiple endings!
1555 glob() does NOT allow you to do exclusion on multiple endings!
1552
1556
1553 2004-11-29 Fernando Perez <fperez@colorado.edu>
1557 2004-11-29 Fernando Perez <fperez@colorado.edu>
1554
1558
1555 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1559 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1556 the manpage as the source. Better formatting & consistency.
1560 the manpage as the source. Better formatting & consistency.
1557
1561
1558 * IPython/Magic.py (magic_run): Added new -d option, to run
1562 * IPython/Magic.py (magic_run): Added new -d option, to run
1559 scripts under the control of the python pdb debugger. Note that
1563 scripts under the control of the python pdb debugger. Note that
1560 this required changing the %prun option -d to -D, to avoid a clash
1564 this required changing the %prun option -d to -D, to avoid a clash
1561 (since %run must pass options to %prun, and getopt is too dumb to
1565 (since %run must pass options to %prun, and getopt is too dumb to
1562 handle options with string values with embedded spaces). Thanks
1566 handle options with string values with embedded spaces). Thanks
1563 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1567 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1564 (magic_who_ls): added type matching to %who and %whos, so that one
1568 (magic_who_ls): added type matching to %who and %whos, so that one
1565 can filter their output to only include variables of certain
1569 can filter their output to only include variables of certain
1566 types. Another suggestion by Matthew.
1570 types. Another suggestion by Matthew.
1567 (magic_whos): Added memory summaries in kb and Mb for arrays.
1571 (magic_whos): Added memory summaries in kb and Mb for arrays.
1568 (magic_who): Improve formatting (break lines every 9 vars).
1572 (magic_who): Improve formatting (break lines every 9 vars).
1569
1573
1570 2004-11-28 Fernando Perez <fperez@colorado.edu>
1574 2004-11-28 Fernando Perez <fperez@colorado.edu>
1571
1575
1572 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1576 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1573 cache when empty lines were present.
1577 cache when empty lines were present.
1574
1578
1575 2004-11-24 Fernando Perez <fperez@colorado.edu>
1579 2004-11-24 Fernando Perez <fperez@colorado.edu>
1576
1580
1577 * IPython/usage.py (__doc__): document the re-activated threading
1581 * IPython/usage.py (__doc__): document the re-activated threading
1578 options for WX and GTK.
1582 options for WX and GTK.
1579
1583
1580 2004-11-23 Fernando Perez <fperez@colorado.edu>
1584 2004-11-23 Fernando Perez <fperez@colorado.edu>
1581
1585
1582 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1586 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1583 the -wthread and -gthread options, along with a new -tk one to try
1587 the -wthread and -gthread options, along with a new -tk one to try
1584 and coordinate Tk threading with wx/gtk. The tk support is very
1588 and coordinate Tk threading with wx/gtk. The tk support is very
1585 platform dependent, since it seems to require Tcl and Tk to be
1589 platform dependent, since it seems to require Tcl and Tk to be
1586 built with threads (Fedora1/2 appears NOT to have it, but in
1590 built with threads (Fedora1/2 appears NOT to have it, but in
1587 Prabhu's Debian boxes it works OK). But even with some Tk
1591 Prabhu's Debian boxes it works OK). But even with some Tk
1588 limitations, this is a great improvement.
1592 limitations, this is a great improvement.
1589
1593
1590 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1594 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1591 info in user prompts. Patch by Prabhu.
1595 info in user prompts. Patch by Prabhu.
1592
1596
1593 2004-11-18 Fernando Perez <fperez@colorado.edu>
1597 2004-11-18 Fernando Perez <fperez@colorado.edu>
1594
1598
1595 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1599 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1596 EOFErrors and bail, to avoid infinite loops if a non-terminating
1600 EOFErrors and bail, to avoid infinite loops if a non-terminating
1597 file is fed into ipython. Patch submitted in issue 19 by user,
1601 file is fed into ipython. Patch submitted in issue 19 by user,
1598 many thanks.
1602 many thanks.
1599
1603
1600 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1604 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1601 autoquote/parens in continuation prompts, which can cause lots of
1605 autoquote/parens in continuation prompts, which can cause lots of
1602 problems. Closes roundup issue 20.
1606 problems. Closes roundup issue 20.
1603
1607
1604 2004-11-17 Fernando Perez <fperez@colorado.edu>
1608 2004-11-17 Fernando Perez <fperez@colorado.edu>
1605
1609
1606 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1610 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1607 reported as debian bug #280505. I'm not sure my local changelog
1611 reported as debian bug #280505. I'm not sure my local changelog
1608 entry has the proper debian format (Jack?).
1612 entry has the proper debian format (Jack?).
1609
1613
1610 2004-11-08 *** Released version 0.6.4
1614 2004-11-08 *** Released version 0.6.4
1611
1615
1612 2004-11-08 Fernando Perez <fperez@colorado.edu>
1616 2004-11-08 Fernando Perez <fperez@colorado.edu>
1613
1617
1614 * IPython/iplib.py (init_readline): Fix exit message for Windows
1618 * IPython/iplib.py (init_readline): Fix exit message for Windows
1615 when readline is active. Thanks to a report by Eric Jones
1619 when readline is active. Thanks to a report by Eric Jones
1616 <eric-AT-enthought.com>.
1620 <eric-AT-enthought.com>.
1617
1621
1618 2004-11-07 Fernando Perez <fperez@colorado.edu>
1622 2004-11-07 Fernando Perez <fperez@colorado.edu>
1619
1623
1620 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1624 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1621 sometimes seen by win2k/cygwin users.
1625 sometimes seen by win2k/cygwin users.
1622
1626
1623 2004-11-06 Fernando Perez <fperez@colorado.edu>
1627 2004-11-06 Fernando Perez <fperez@colorado.edu>
1624
1628
1625 * IPython/iplib.py (interact): Change the handling of %Exit from
1629 * IPython/iplib.py (interact): Change the handling of %Exit from
1626 trying to propagate a SystemExit to an internal ipython flag.
1630 trying to propagate a SystemExit to an internal ipython flag.
1627 This is less elegant than using Python's exception mechanism, but
1631 This is less elegant than using Python's exception mechanism, but
1628 I can't get that to work reliably with threads, so under -pylab
1632 I can't get that to work reliably with threads, so under -pylab
1629 %Exit was hanging IPython. Cross-thread exception handling is
1633 %Exit was hanging IPython. Cross-thread exception handling is
1630 really a bitch. Thaks to a bug report by Stephen Walton
1634 really a bitch. Thaks to a bug report by Stephen Walton
1631 <stephen.walton-AT-csun.edu>.
1635 <stephen.walton-AT-csun.edu>.
1632
1636
1633 2004-11-04 Fernando Perez <fperez@colorado.edu>
1637 2004-11-04 Fernando Perez <fperez@colorado.edu>
1634
1638
1635 * IPython/iplib.py (raw_input_original): store a pointer to the
1639 * IPython/iplib.py (raw_input_original): store a pointer to the
1636 true raw_input to harden against code which can modify it
1640 true raw_input to harden against code which can modify it
1637 (wx.py.PyShell does this and would otherwise crash ipython).
1641 (wx.py.PyShell does this and would otherwise crash ipython).
1638 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1642 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1639
1643
1640 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1644 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1641 Ctrl-C problem, which does not mess up the input line.
1645 Ctrl-C problem, which does not mess up the input line.
1642
1646
1643 2004-11-03 Fernando Perez <fperez@colorado.edu>
1647 2004-11-03 Fernando Perez <fperez@colorado.edu>
1644
1648
1645 * IPython/Release.py: Changed licensing to BSD, in all files.
1649 * IPython/Release.py: Changed licensing to BSD, in all files.
1646 (name): lowercase name for tarball/RPM release.
1650 (name): lowercase name for tarball/RPM release.
1647
1651
1648 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1652 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1649 use throughout ipython.
1653 use throughout ipython.
1650
1654
1651 * IPython/Magic.py (Magic._ofind): Switch to using the new
1655 * IPython/Magic.py (Magic._ofind): Switch to using the new
1652 OInspect.getdoc() function.
1656 OInspect.getdoc() function.
1653
1657
1654 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1658 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1655 of the line currently being canceled via Ctrl-C. It's extremely
1659 of the line currently being canceled via Ctrl-C. It's extremely
1656 ugly, but I don't know how to do it better (the problem is one of
1660 ugly, but I don't know how to do it better (the problem is one of
1657 handling cross-thread exceptions).
1661 handling cross-thread exceptions).
1658
1662
1659 2004-10-28 Fernando Perez <fperez@colorado.edu>
1663 2004-10-28 Fernando Perez <fperez@colorado.edu>
1660
1664
1661 * IPython/Shell.py (signal_handler): add signal handlers to trap
1665 * IPython/Shell.py (signal_handler): add signal handlers to trap
1662 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1666 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1663 report by Francesc Alted.
1667 report by Francesc Alted.
1664
1668
1665 2004-10-21 Fernando Perez <fperez@colorado.edu>
1669 2004-10-21 Fernando Perez <fperez@colorado.edu>
1666
1670
1667 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1671 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1668 to % for pysh syntax extensions.
1672 to % for pysh syntax extensions.
1669
1673
1670 2004-10-09 Fernando Perez <fperez@colorado.edu>
1674 2004-10-09 Fernando Perez <fperez@colorado.edu>
1671
1675
1672 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1676 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1673 arrays to print a more useful summary, without calling str(arr).
1677 arrays to print a more useful summary, without calling str(arr).
1674 This avoids the problem of extremely lengthy computations which
1678 This avoids the problem of extremely lengthy computations which
1675 occur if arr is large, and appear to the user as a system lockup
1679 occur if arr is large, and appear to the user as a system lockup
1676 with 100% cpu activity. After a suggestion by Kristian Sandberg
1680 with 100% cpu activity. After a suggestion by Kristian Sandberg
1677 <Kristian.Sandberg@colorado.edu>.
1681 <Kristian.Sandberg@colorado.edu>.
1678 (Magic.__init__): fix bug in global magic escapes not being
1682 (Magic.__init__): fix bug in global magic escapes not being
1679 correctly set.
1683 correctly set.
1680
1684
1681 2004-10-08 Fernando Perez <fperez@colorado.edu>
1685 2004-10-08 Fernando Perez <fperez@colorado.edu>
1682
1686
1683 * IPython/Magic.py (__license__): change to absolute imports of
1687 * IPython/Magic.py (__license__): change to absolute imports of
1684 ipython's own internal packages, to start adapting to the absolute
1688 ipython's own internal packages, to start adapting to the absolute
1685 import requirement of PEP-328.
1689 import requirement of PEP-328.
1686
1690
1687 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1691 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1688 files, and standardize author/license marks through the Release
1692 files, and standardize author/license marks through the Release
1689 module instead of having per/file stuff (except for files with
1693 module instead of having per/file stuff (except for files with
1690 particular licenses, like the MIT/PSF-licensed codes).
1694 particular licenses, like the MIT/PSF-licensed codes).
1691
1695
1692 * IPython/Debugger.py: remove dead code for python 2.1
1696 * IPython/Debugger.py: remove dead code for python 2.1
1693
1697
1694 2004-10-04 Fernando Perez <fperez@colorado.edu>
1698 2004-10-04 Fernando Perez <fperez@colorado.edu>
1695
1699
1696 * IPython/iplib.py (ipmagic): New function for accessing magics
1700 * IPython/iplib.py (ipmagic): New function for accessing magics
1697 via a normal python function call.
1701 via a normal python function call.
1698
1702
1699 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1703 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1700 from '@' to '%', to accomodate the new @decorator syntax of python
1704 from '@' to '%', to accomodate the new @decorator syntax of python
1701 2.4.
1705 2.4.
1702
1706
1703 2004-09-29 Fernando Perez <fperez@colorado.edu>
1707 2004-09-29 Fernando Perez <fperez@colorado.edu>
1704
1708
1705 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1709 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1706 matplotlib.use to prevent running scripts which try to switch
1710 matplotlib.use to prevent running scripts which try to switch
1707 interactive backends from within ipython. This will just crash
1711 interactive backends from within ipython. This will just crash
1708 the python interpreter, so we can't allow it (but a detailed error
1712 the python interpreter, so we can't allow it (but a detailed error
1709 is given to the user).
1713 is given to the user).
1710
1714
1711 2004-09-28 Fernando Perez <fperez@colorado.edu>
1715 2004-09-28 Fernando Perez <fperez@colorado.edu>
1712
1716
1713 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1717 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1714 matplotlib-related fixes so that using @run with non-matplotlib
1718 matplotlib-related fixes so that using @run with non-matplotlib
1715 scripts doesn't pop up spurious plot windows. This requires
1719 scripts doesn't pop up spurious plot windows. This requires
1716 matplotlib >= 0.63, where I had to make some changes as well.
1720 matplotlib >= 0.63, where I had to make some changes as well.
1717
1721
1718 * IPython/ipmaker.py (make_IPython): update version requirement to
1722 * IPython/ipmaker.py (make_IPython): update version requirement to
1719 python 2.2.
1723 python 2.2.
1720
1724
1721 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1725 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1722 banner arg for embedded customization.
1726 banner arg for embedded customization.
1723
1727
1724 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1728 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1725 explicit uses of __IP as the IPython's instance name. Now things
1729 explicit uses of __IP as the IPython's instance name. Now things
1726 are properly handled via the shell.name value. The actual code
1730 are properly handled via the shell.name value. The actual code
1727 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1731 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1728 is much better than before. I'll clean things completely when the
1732 is much better than before. I'll clean things completely when the
1729 magic stuff gets a real overhaul.
1733 magic stuff gets a real overhaul.
1730
1734
1731 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1735 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1732 minor changes to debian dir.
1736 minor changes to debian dir.
1733
1737
1734 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1738 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1735 pointer to the shell itself in the interactive namespace even when
1739 pointer to the shell itself in the interactive namespace even when
1736 a user-supplied dict is provided. This is needed for embedding
1740 a user-supplied dict is provided. This is needed for embedding
1737 purposes (found by tests with Michel Sanner).
1741 purposes (found by tests with Michel Sanner).
1738
1742
1739 2004-09-27 Fernando Perez <fperez@colorado.edu>
1743 2004-09-27 Fernando Perez <fperez@colorado.edu>
1740
1744
1741 * IPython/UserConfig/ipythonrc: remove []{} from
1745 * IPython/UserConfig/ipythonrc: remove []{} from
1742 readline_remove_delims, so that things like [modname.<TAB> do
1746 readline_remove_delims, so that things like [modname.<TAB> do
1743 proper completion. This disables [].TAB, but that's a less common
1747 proper completion. This disables [].TAB, but that's a less common
1744 case than module names in list comprehensions, for example.
1748 case than module names in list comprehensions, for example.
1745 Thanks to a report by Andrea Riciputi.
1749 Thanks to a report by Andrea Riciputi.
1746
1750
1747 2004-09-09 Fernando Perez <fperez@colorado.edu>
1751 2004-09-09 Fernando Perez <fperez@colorado.edu>
1748
1752
1749 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1753 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1750 blocking problems in win32 and osx. Fix by John.
1754 blocking problems in win32 and osx. Fix by John.
1751
1755
1752 2004-09-08 Fernando Perez <fperez@colorado.edu>
1756 2004-09-08 Fernando Perez <fperez@colorado.edu>
1753
1757
1754 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1758 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1755 for Win32 and OSX. Fix by John Hunter.
1759 for Win32 and OSX. Fix by John Hunter.
1756
1760
1757 2004-08-30 *** Released version 0.6.3
1761 2004-08-30 *** Released version 0.6.3
1758
1762
1759 2004-08-30 Fernando Perez <fperez@colorado.edu>
1763 2004-08-30 Fernando Perez <fperez@colorado.edu>
1760
1764
1761 * setup.py (isfile): Add manpages to list of dependent files to be
1765 * setup.py (isfile): Add manpages to list of dependent files to be
1762 updated.
1766 updated.
1763
1767
1764 2004-08-27 Fernando Perez <fperez@colorado.edu>
1768 2004-08-27 Fernando Perez <fperez@colorado.edu>
1765
1769
1766 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1770 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1767 for now. They don't really work with standalone WX/GTK code
1771 for now. They don't really work with standalone WX/GTK code
1768 (though matplotlib IS working fine with both of those backends).
1772 (though matplotlib IS working fine with both of those backends).
1769 This will neeed much more testing. I disabled most things with
1773 This will neeed much more testing. I disabled most things with
1770 comments, so turning it back on later should be pretty easy.
1774 comments, so turning it back on later should be pretty easy.
1771
1775
1772 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1776 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1773 autocalling of expressions like r'foo', by modifying the line
1777 autocalling of expressions like r'foo', by modifying the line
1774 split regexp. Closes
1778 split regexp. Closes
1775 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1779 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1776 Riley <ipythonbugs-AT-sabi.net>.
1780 Riley <ipythonbugs-AT-sabi.net>.
1777 (InteractiveShell.mainloop): honor --nobanner with banner
1781 (InteractiveShell.mainloop): honor --nobanner with banner
1778 extensions.
1782 extensions.
1779
1783
1780 * IPython/Shell.py: Significant refactoring of all classes, so
1784 * IPython/Shell.py: Significant refactoring of all classes, so
1781 that we can really support ALL matplotlib backends and threading
1785 that we can really support ALL matplotlib backends and threading
1782 models (John spotted a bug with Tk which required this). Now we
1786 models (John spotted a bug with Tk which required this). Now we
1783 should support single-threaded, WX-threads and GTK-threads, both
1787 should support single-threaded, WX-threads and GTK-threads, both
1784 for generic code and for matplotlib.
1788 for generic code and for matplotlib.
1785
1789
1786 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1790 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1787 -pylab, to simplify things for users. Will also remove the pylab
1791 -pylab, to simplify things for users. Will also remove the pylab
1788 profile, since now all of matplotlib configuration is directly
1792 profile, since now all of matplotlib configuration is directly
1789 handled here. This also reduces startup time.
1793 handled here. This also reduces startup time.
1790
1794
1791 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1795 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1792 shell wasn't being correctly called. Also in IPShellWX.
1796 shell wasn't being correctly called. Also in IPShellWX.
1793
1797
1794 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1798 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1795 fine-tune banner.
1799 fine-tune banner.
1796
1800
1797 * IPython/numutils.py (spike): Deprecate these spike functions,
1801 * IPython/numutils.py (spike): Deprecate these spike functions,
1798 delete (long deprecated) gnuplot_exec handler.
1802 delete (long deprecated) gnuplot_exec handler.
1799
1803
1800 2004-08-26 Fernando Perez <fperez@colorado.edu>
1804 2004-08-26 Fernando Perez <fperez@colorado.edu>
1801
1805
1802 * ipython.1: Update for threading options, plus some others which
1806 * ipython.1: Update for threading options, plus some others which
1803 were missing.
1807 were missing.
1804
1808
1805 * IPython/ipmaker.py (__call__): Added -wthread option for
1809 * IPython/ipmaker.py (__call__): Added -wthread option for
1806 wxpython thread handling. Make sure threading options are only
1810 wxpython thread handling. Make sure threading options are only
1807 valid at the command line.
1811 valid at the command line.
1808
1812
1809 * scripts/ipython: moved shell selection into a factory function
1813 * scripts/ipython: moved shell selection into a factory function
1810 in Shell.py, to keep the starter script to a minimum.
1814 in Shell.py, to keep the starter script to a minimum.
1811
1815
1812 2004-08-25 Fernando Perez <fperez@colorado.edu>
1816 2004-08-25 Fernando Perez <fperez@colorado.edu>
1813
1817
1814 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1818 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1815 John. Along with some recent changes he made to matplotlib, the
1819 John. Along with some recent changes he made to matplotlib, the
1816 next versions of both systems should work very well together.
1820 next versions of both systems should work very well together.
1817
1821
1818 2004-08-24 Fernando Perez <fperez@colorado.edu>
1822 2004-08-24 Fernando Perez <fperez@colorado.edu>
1819
1823
1820 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1824 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1821 tried to switch the profiling to using hotshot, but I'm getting
1825 tried to switch the profiling to using hotshot, but I'm getting
1822 strange errors from prof.runctx() there. I may be misreading the
1826 strange errors from prof.runctx() there. I may be misreading the
1823 docs, but it looks weird. For now the profiling code will
1827 docs, but it looks weird. For now the profiling code will
1824 continue to use the standard profiler.
1828 continue to use the standard profiler.
1825
1829
1826 2004-08-23 Fernando Perez <fperez@colorado.edu>
1830 2004-08-23 Fernando Perez <fperez@colorado.edu>
1827
1831
1828 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1832 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1829 threaded shell, by John Hunter. It's not quite ready yet, but
1833 threaded shell, by John Hunter. It's not quite ready yet, but
1830 close.
1834 close.
1831
1835
1832 2004-08-22 Fernando Perez <fperez@colorado.edu>
1836 2004-08-22 Fernando Perez <fperez@colorado.edu>
1833
1837
1834 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1838 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1835 in Magic and ultraTB.
1839 in Magic and ultraTB.
1836
1840
1837 * ipython.1: document threading options in manpage.
1841 * ipython.1: document threading options in manpage.
1838
1842
1839 * scripts/ipython: Changed name of -thread option to -gthread,
1843 * scripts/ipython: Changed name of -thread option to -gthread,
1840 since this is GTK specific. I want to leave the door open for a
1844 since this is GTK specific. I want to leave the door open for a
1841 -wthread option for WX, which will most likely be necessary. This
1845 -wthread option for WX, which will most likely be necessary. This
1842 change affects usage and ipmaker as well.
1846 change affects usage and ipmaker as well.
1843
1847
1844 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1848 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1845 handle the matplotlib shell issues. Code by John Hunter
1849 handle the matplotlib shell issues. Code by John Hunter
1846 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1850 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1847 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1851 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1848 broken (and disabled for end users) for now, but it puts the
1852 broken (and disabled for end users) for now, but it puts the
1849 infrastructure in place.
1853 infrastructure in place.
1850
1854
1851 2004-08-21 Fernando Perez <fperez@colorado.edu>
1855 2004-08-21 Fernando Perez <fperez@colorado.edu>
1852
1856
1853 * ipythonrc-pylab: Add matplotlib support.
1857 * ipythonrc-pylab: Add matplotlib support.
1854
1858
1855 * matplotlib_config.py: new files for matplotlib support, part of
1859 * matplotlib_config.py: new files for matplotlib support, part of
1856 the pylab profile.
1860 the pylab profile.
1857
1861
1858 * IPython/usage.py (__doc__): documented the threading options.
1862 * IPython/usage.py (__doc__): documented the threading options.
1859
1863
1860 2004-08-20 Fernando Perez <fperez@colorado.edu>
1864 2004-08-20 Fernando Perez <fperez@colorado.edu>
1861
1865
1862 * ipython: Modified the main calling routine to handle the -thread
1866 * ipython: Modified the main calling routine to handle the -thread
1863 and -mpthread options. This needs to be done as a top-level hack,
1867 and -mpthread options. This needs to be done as a top-level hack,
1864 because it determines which class to instantiate for IPython
1868 because it determines which class to instantiate for IPython
1865 itself.
1869 itself.
1866
1870
1867 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1871 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1868 classes to support multithreaded GTK operation without blocking,
1872 classes to support multithreaded GTK operation without blocking,
1869 and matplotlib with all backends. This is a lot of still very
1873 and matplotlib with all backends. This is a lot of still very
1870 experimental code, and threads are tricky. So it may still have a
1874 experimental code, and threads are tricky. So it may still have a
1871 few rough edges... This code owes a lot to
1875 few rough edges... This code owes a lot to
1872 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1876 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1873 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1877 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1874 to John Hunter for all the matplotlib work.
1878 to John Hunter for all the matplotlib work.
1875
1879
1876 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1880 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1877 options for gtk thread and matplotlib support.
1881 options for gtk thread and matplotlib support.
1878
1882
1879 2004-08-16 Fernando Perez <fperez@colorado.edu>
1883 2004-08-16 Fernando Perez <fperez@colorado.edu>
1880
1884
1881 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1885 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1882 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1886 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1883 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1887 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1884
1888
1885 2004-08-11 Fernando Perez <fperez@colorado.edu>
1889 2004-08-11 Fernando Perez <fperez@colorado.edu>
1886
1890
1887 * setup.py (isfile): Fix build so documentation gets updated for
1891 * setup.py (isfile): Fix build so documentation gets updated for
1888 rpms (it was only done for .tgz builds).
1892 rpms (it was only done for .tgz builds).
1889
1893
1890 2004-08-10 Fernando Perez <fperez@colorado.edu>
1894 2004-08-10 Fernando Perez <fperez@colorado.edu>
1891
1895
1892 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1896 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1893
1897
1894 * iplib.py : Silence syntax error exceptions in tab-completion.
1898 * iplib.py : Silence syntax error exceptions in tab-completion.
1895
1899
1896 2004-08-05 Fernando Perez <fperez@colorado.edu>
1900 2004-08-05 Fernando Perez <fperez@colorado.edu>
1897
1901
1898 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1902 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1899 'color off' mark for continuation prompts. This was causing long
1903 'color off' mark for continuation prompts. This was causing long
1900 continuation lines to mis-wrap.
1904 continuation lines to mis-wrap.
1901
1905
1902 2004-08-01 Fernando Perez <fperez@colorado.edu>
1906 2004-08-01 Fernando Perez <fperez@colorado.edu>
1903
1907
1904 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1908 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1905 for building ipython to be a parameter. All this is necessary
1909 for building ipython to be a parameter. All this is necessary
1906 right now to have a multithreaded version, but this insane
1910 right now to have a multithreaded version, but this insane
1907 non-design will be cleaned up soon. For now, it's a hack that
1911 non-design will be cleaned up soon. For now, it's a hack that
1908 works.
1912 works.
1909
1913
1910 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1914 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1911 args in various places. No bugs so far, but it's a dangerous
1915 args in various places. No bugs so far, but it's a dangerous
1912 practice.
1916 practice.
1913
1917
1914 2004-07-31 Fernando Perez <fperez@colorado.edu>
1918 2004-07-31 Fernando Perez <fperez@colorado.edu>
1915
1919
1916 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1920 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1917 fix completion of files with dots in their names under most
1921 fix completion of files with dots in their names under most
1918 profiles (pysh was OK because the completion order is different).
1922 profiles (pysh was OK because the completion order is different).
1919
1923
1920 2004-07-27 Fernando Perez <fperez@colorado.edu>
1924 2004-07-27 Fernando Perez <fperez@colorado.edu>
1921
1925
1922 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1926 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1923 keywords manually, b/c the one in keyword.py was removed in python
1927 keywords manually, b/c the one in keyword.py was removed in python
1924 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1928 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1925 This is NOT a bug under python 2.3 and earlier.
1929 This is NOT a bug under python 2.3 and earlier.
1926
1930
1927 2004-07-26 Fernando Perez <fperez@colorado.edu>
1931 2004-07-26 Fernando Perez <fperez@colorado.edu>
1928
1932
1929 * IPython/ultraTB.py (VerboseTB.text): Add another
1933 * IPython/ultraTB.py (VerboseTB.text): Add another
1930 linecache.checkcache() call to try to prevent inspect.py from
1934 linecache.checkcache() call to try to prevent inspect.py from
1931 crashing under python 2.3. I think this fixes
1935 crashing under python 2.3. I think this fixes
1932 http://www.scipy.net/roundup/ipython/issue17.
1936 http://www.scipy.net/roundup/ipython/issue17.
1933
1937
1934 2004-07-26 *** Released version 0.6.2
1938 2004-07-26 *** Released version 0.6.2
1935
1939
1936 2004-07-26 Fernando Perez <fperez@colorado.edu>
1940 2004-07-26 Fernando Perez <fperez@colorado.edu>
1937
1941
1938 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1942 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1939 fail for any number.
1943 fail for any number.
1940 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1944 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1941 empty bookmarks.
1945 empty bookmarks.
1942
1946
1943 2004-07-26 *** Released version 0.6.1
1947 2004-07-26 *** Released version 0.6.1
1944
1948
1945 2004-07-26 Fernando Perez <fperez@colorado.edu>
1949 2004-07-26 Fernando Perez <fperez@colorado.edu>
1946
1950
1947 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1951 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1948
1952
1949 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1953 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1950 escaping '()[]{}' in filenames.
1954 escaping '()[]{}' in filenames.
1951
1955
1952 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1956 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1953 Python 2.2 users who lack a proper shlex.split.
1957 Python 2.2 users who lack a proper shlex.split.
1954
1958
1955 2004-07-19 Fernando Perez <fperez@colorado.edu>
1959 2004-07-19 Fernando Perez <fperez@colorado.edu>
1956
1960
1957 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1961 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1958 for reading readline's init file. I follow the normal chain:
1962 for reading readline's init file. I follow the normal chain:
1959 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1963 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1960 report by Mike Heeter. This closes
1964 report by Mike Heeter. This closes
1961 http://www.scipy.net/roundup/ipython/issue16.
1965 http://www.scipy.net/roundup/ipython/issue16.
1962
1966
1963 2004-07-18 Fernando Perez <fperez@colorado.edu>
1967 2004-07-18 Fernando Perez <fperez@colorado.edu>
1964
1968
1965 * IPython/iplib.py (__init__): Add better handling of '\' under
1969 * IPython/iplib.py (__init__): Add better handling of '\' under
1966 Win32 for filenames. After a patch by Ville.
1970 Win32 for filenames. After a patch by Ville.
1967
1971
1968 2004-07-17 Fernando Perez <fperez@colorado.edu>
1972 2004-07-17 Fernando Perez <fperez@colorado.edu>
1969
1973
1970 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1974 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1971 autocalling would be triggered for 'foo is bar' if foo is
1975 autocalling would be triggered for 'foo is bar' if foo is
1972 callable. I also cleaned up the autocall detection code to use a
1976 callable. I also cleaned up the autocall detection code to use a
1973 regexp, which is faster. Bug reported by Alexander Schmolck.
1977 regexp, which is faster. Bug reported by Alexander Schmolck.
1974
1978
1975 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1979 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1976 '?' in them would confuse the help system. Reported by Alex
1980 '?' in them would confuse the help system. Reported by Alex
1977 Schmolck.
1981 Schmolck.
1978
1982
1979 2004-07-16 Fernando Perez <fperez@colorado.edu>
1983 2004-07-16 Fernando Perez <fperez@colorado.edu>
1980
1984
1981 * IPython/GnuplotInteractive.py (__all__): added plot2.
1985 * IPython/GnuplotInteractive.py (__all__): added plot2.
1982
1986
1983 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1987 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1984 plotting dictionaries, lists or tuples of 1d arrays.
1988 plotting dictionaries, lists or tuples of 1d arrays.
1985
1989
1986 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1990 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1987 optimizations.
1991 optimizations.
1988
1992
1989 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1993 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1990 the information which was there from Janko's original IPP code:
1994 the information which was there from Janko's original IPP code:
1991
1995
1992 03.05.99 20:53 porto.ifm.uni-kiel.de
1996 03.05.99 20:53 porto.ifm.uni-kiel.de
1993 --Started changelog.
1997 --Started changelog.
1994 --make clear do what it say it does
1998 --make clear do what it say it does
1995 --added pretty output of lines from inputcache
1999 --added pretty output of lines from inputcache
1996 --Made Logger a mixin class, simplifies handling of switches
2000 --Made Logger a mixin class, simplifies handling of switches
1997 --Added own completer class. .string<TAB> expands to last history
2001 --Added own completer class. .string<TAB> expands to last history
1998 line which starts with string. The new expansion is also present
2002 line which starts with string. The new expansion is also present
1999 with Ctrl-r from the readline library. But this shows, who this
2003 with Ctrl-r from the readline library. But this shows, who this
2000 can be done for other cases.
2004 can be done for other cases.
2001 --Added convention that all shell functions should accept a
2005 --Added convention that all shell functions should accept a
2002 parameter_string This opens the door for different behaviour for
2006 parameter_string This opens the door for different behaviour for
2003 each function. @cd is a good example of this.
2007 each function. @cd is a good example of this.
2004
2008
2005 04.05.99 12:12 porto.ifm.uni-kiel.de
2009 04.05.99 12:12 porto.ifm.uni-kiel.de
2006 --added logfile rotation
2010 --added logfile rotation
2007 --added new mainloop method which freezes first the namespace
2011 --added new mainloop method which freezes first the namespace
2008
2012
2009 07.05.99 21:24 porto.ifm.uni-kiel.de
2013 07.05.99 21:24 porto.ifm.uni-kiel.de
2010 --added the docreader classes. Now there is a help system.
2014 --added the docreader classes. Now there is a help system.
2011 -This is only a first try. Currently it's not easy to put new
2015 -This is only a first try. Currently it's not easy to put new
2012 stuff in the indices. But this is the way to go. Info would be
2016 stuff in the indices. But this is the way to go. Info would be
2013 better, but HTML is every where and not everybody has an info
2017 better, but HTML is every where and not everybody has an info
2014 system installed and it's not so easy to change html-docs to info.
2018 system installed and it's not so easy to change html-docs to info.
2015 --added global logfile option
2019 --added global logfile option
2016 --there is now a hook for object inspection method pinfo needs to
2020 --there is now a hook for object inspection method pinfo needs to
2017 be provided for this. Can be reached by two '??'.
2021 be provided for this. Can be reached by two '??'.
2018
2022
2019 08.05.99 20:51 porto.ifm.uni-kiel.de
2023 08.05.99 20:51 porto.ifm.uni-kiel.de
2020 --added a README
2024 --added a README
2021 --bug in rc file. Something has changed so functions in the rc
2025 --bug in rc file. Something has changed so functions in the rc
2022 file need to reference the shell and not self. Not clear if it's a
2026 file need to reference the shell and not self. Not clear if it's a
2023 bug or feature.
2027 bug or feature.
2024 --changed rc file for new behavior
2028 --changed rc file for new behavior
2025
2029
2026 2004-07-15 Fernando Perez <fperez@colorado.edu>
2030 2004-07-15 Fernando Perez <fperez@colorado.edu>
2027
2031
2028 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2032 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2029 cache was falling out of sync in bizarre manners when multi-line
2033 cache was falling out of sync in bizarre manners when multi-line
2030 input was present. Minor optimizations and cleanup.
2034 input was present. Minor optimizations and cleanup.
2031
2035
2032 (Logger): Remove old Changelog info for cleanup. This is the
2036 (Logger): Remove old Changelog info for cleanup. This is the
2033 information which was there from Janko's original code:
2037 information which was there from Janko's original code:
2034
2038
2035 Changes to Logger: - made the default log filename a parameter
2039 Changes to Logger: - made the default log filename a parameter
2036
2040
2037 - put a check for lines beginning with !@? in log(). Needed
2041 - put a check for lines beginning with !@? in log(). Needed
2038 (even if the handlers properly log their lines) for mid-session
2042 (even if the handlers properly log their lines) for mid-session
2039 logging activation to work properly. Without this, lines logged
2043 logging activation to work properly. Without this, lines logged
2040 in mid session, which get read from the cache, would end up
2044 in mid session, which get read from the cache, would end up
2041 'bare' (with !@? in the open) in the log. Now they are caught
2045 'bare' (with !@? in the open) in the log. Now they are caught
2042 and prepended with a #.
2046 and prepended with a #.
2043
2047
2044 * IPython/iplib.py (InteractiveShell.init_readline): added check
2048 * IPython/iplib.py (InteractiveShell.init_readline): added check
2045 in case MagicCompleter fails to be defined, so we don't crash.
2049 in case MagicCompleter fails to be defined, so we don't crash.
2046
2050
2047 2004-07-13 Fernando Perez <fperez@colorado.edu>
2051 2004-07-13 Fernando Perez <fperez@colorado.edu>
2048
2052
2049 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2053 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2050 of EPS if the requested filename ends in '.eps'.
2054 of EPS if the requested filename ends in '.eps'.
2051
2055
2052 2004-07-04 Fernando Perez <fperez@colorado.edu>
2056 2004-07-04 Fernando Perez <fperez@colorado.edu>
2053
2057
2054 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2058 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2055 escaping of quotes when calling the shell.
2059 escaping of quotes when calling the shell.
2056
2060
2057 2004-07-02 Fernando Perez <fperez@colorado.edu>
2061 2004-07-02 Fernando Perez <fperez@colorado.edu>
2058
2062
2059 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2063 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2060 gettext not working because we were clobbering '_'. Fixes
2064 gettext not working because we were clobbering '_'. Fixes
2061 http://www.scipy.net/roundup/ipython/issue6.
2065 http://www.scipy.net/roundup/ipython/issue6.
2062
2066
2063 2004-07-01 Fernando Perez <fperez@colorado.edu>
2067 2004-07-01 Fernando Perez <fperez@colorado.edu>
2064
2068
2065 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2069 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2066 into @cd. Patch by Ville.
2070 into @cd. Patch by Ville.
2067
2071
2068 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2072 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2069 new function to store things after ipmaker runs. Patch by Ville.
2073 new function to store things after ipmaker runs. Patch by Ville.
2070 Eventually this will go away once ipmaker is removed and the class
2074 Eventually this will go away once ipmaker is removed and the class
2071 gets cleaned up, but for now it's ok. Key functionality here is
2075 gets cleaned up, but for now it's ok. Key functionality here is
2072 the addition of the persistent storage mechanism, a dict for
2076 the addition of the persistent storage mechanism, a dict for
2073 keeping data across sessions (for now just bookmarks, but more can
2077 keeping data across sessions (for now just bookmarks, but more can
2074 be implemented later).
2078 be implemented later).
2075
2079
2076 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2080 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2077 persistent across sections. Patch by Ville, I modified it
2081 persistent across sections. Patch by Ville, I modified it
2078 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2082 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2079 added a '-l' option to list all bookmarks.
2083 added a '-l' option to list all bookmarks.
2080
2084
2081 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2085 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2082 center for cleanup. Registered with atexit.register(). I moved
2086 center for cleanup. Registered with atexit.register(). I moved
2083 here the old exit_cleanup(). After a patch by Ville.
2087 here the old exit_cleanup(). After a patch by Ville.
2084
2088
2085 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2089 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2086 characters in the hacked shlex_split for python 2.2.
2090 characters in the hacked shlex_split for python 2.2.
2087
2091
2088 * IPython/iplib.py (file_matches): more fixes to filenames with
2092 * IPython/iplib.py (file_matches): more fixes to filenames with
2089 whitespace in them. It's not perfect, but limitations in python's
2093 whitespace in them. It's not perfect, but limitations in python's
2090 readline make it impossible to go further.
2094 readline make it impossible to go further.
2091
2095
2092 2004-06-29 Fernando Perez <fperez@colorado.edu>
2096 2004-06-29 Fernando Perez <fperez@colorado.edu>
2093
2097
2094 * IPython/iplib.py (file_matches): escape whitespace correctly in
2098 * IPython/iplib.py (file_matches): escape whitespace correctly in
2095 filename completions. Bug reported by Ville.
2099 filename completions. Bug reported by Ville.
2096
2100
2097 2004-06-28 Fernando Perez <fperez@colorado.edu>
2101 2004-06-28 Fernando Perez <fperez@colorado.edu>
2098
2102
2099 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2103 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2100 the history file will be called 'history-PROFNAME' (or just
2104 the history file will be called 'history-PROFNAME' (or just
2101 'history' if no profile is loaded). I was getting annoyed at
2105 'history' if no profile is loaded). I was getting annoyed at
2102 getting my Numerical work history clobbered by pysh sessions.
2106 getting my Numerical work history clobbered by pysh sessions.
2103
2107
2104 * IPython/iplib.py (InteractiveShell.__init__): Internal
2108 * IPython/iplib.py (InteractiveShell.__init__): Internal
2105 getoutputerror() function so that we can honor the system_verbose
2109 getoutputerror() function so that we can honor the system_verbose
2106 flag for _all_ system calls. I also added escaping of #
2110 flag for _all_ system calls. I also added escaping of #
2107 characters here to avoid confusing Itpl.
2111 characters here to avoid confusing Itpl.
2108
2112
2109 * IPython/Magic.py (shlex_split): removed call to shell in
2113 * IPython/Magic.py (shlex_split): removed call to shell in
2110 parse_options and replaced it with shlex.split(). The annoying
2114 parse_options and replaced it with shlex.split(). The annoying
2111 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2115 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2112 to backport it from 2.3, with several frail hacks (the shlex
2116 to backport it from 2.3, with several frail hacks (the shlex
2113 module is rather limited in 2.2). Thanks to a suggestion by Ville
2117 module is rather limited in 2.2). Thanks to a suggestion by Ville
2114 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2118 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2115 problem.
2119 problem.
2116
2120
2117 (Magic.magic_system_verbose): new toggle to print the actual
2121 (Magic.magic_system_verbose): new toggle to print the actual
2118 system calls made by ipython. Mainly for debugging purposes.
2122 system calls made by ipython. Mainly for debugging purposes.
2119
2123
2120 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2124 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2121 doesn't support persistence. Reported (and fix suggested) by
2125 doesn't support persistence. Reported (and fix suggested) by
2122 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2126 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2123
2127
2124 2004-06-26 Fernando Perez <fperez@colorado.edu>
2128 2004-06-26 Fernando Perez <fperez@colorado.edu>
2125
2129
2126 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2130 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2127 continue prompts.
2131 continue prompts.
2128
2132
2129 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2133 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2130 function (basically a big docstring) and a few more things here to
2134 function (basically a big docstring) and a few more things here to
2131 speedup startup. pysh.py is now very lightweight. We want because
2135 speedup startup. pysh.py is now very lightweight. We want because
2132 it gets execfile'd, while InterpreterExec gets imported, so
2136 it gets execfile'd, while InterpreterExec gets imported, so
2133 byte-compilation saves time.
2137 byte-compilation saves time.
2134
2138
2135 2004-06-25 Fernando Perez <fperez@colorado.edu>
2139 2004-06-25 Fernando Perez <fperez@colorado.edu>
2136
2140
2137 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2141 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2138 -NUM', which was recently broken.
2142 -NUM', which was recently broken.
2139
2143
2140 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2144 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2141 in multi-line input (but not !!, which doesn't make sense there).
2145 in multi-line input (but not !!, which doesn't make sense there).
2142
2146
2143 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2147 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2144 It's just too useful, and people can turn it off in the less
2148 It's just too useful, and people can turn it off in the less
2145 common cases where it's a problem.
2149 common cases where it's a problem.
2146
2150
2147 2004-06-24 Fernando Perez <fperez@colorado.edu>
2151 2004-06-24 Fernando Perez <fperez@colorado.edu>
2148
2152
2149 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2153 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2150 special syntaxes (like alias calling) is now allied in multi-line
2154 special syntaxes (like alias calling) is now allied in multi-line
2151 input. This is still _very_ experimental, but it's necessary for
2155 input. This is still _very_ experimental, but it's necessary for
2152 efficient shell usage combining python looping syntax with system
2156 efficient shell usage combining python looping syntax with system
2153 calls. For now it's restricted to aliases, I don't think it
2157 calls. For now it's restricted to aliases, I don't think it
2154 really even makes sense to have this for magics.
2158 really even makes sense to have this for magics.
2155
2159
2156 2004-06-23 Fernando Perez <fperez@colorado.edu>
2160 2004-06-23 Fernando Perez <fperez@colorado.edu>
2157
2161
2158 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2162 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2159 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2163 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2160
2164
2161 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2165 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2162 extensions under Windows (after code sent by Gary Bishop). The
2166 extensions under Windows (after code sent by Gary Bishop). The
2163 extensions considered 'executable' are stored in IPython's rc
2167 extensions considered 'executable' are stored in IPython's rc
2164 structure as win_exec_ext.
2168 structure as win_exec_ext.
2165
2169
2166 * IPython/genutils.py (shell): new function, like system() but
2170 * IPython/genutils.py (shell): new function, like system() but
2167 without return value. Very useful for interactive shell work.
2171 without return value. Very useful for interactive shell work.
2168
2172
2169 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2173 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2170 delete aliases.
2174 delete aliases.
2171
2175
2172 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2176 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2173 sure that the alias table doesn't contain python keywords.
2177 sure that the alias table doesn't contain python keywords.
2174
2178
2175 2004-06-21 Fernando Perez <fperez@colorado.edu>
2179 2004-06-21 Fernando Perez <fperez@colorado.edu>
2176
2180
2177 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2181 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2178 non-existent items are found in $PATH. Reported by Thorsten.
2182 non-existent items are found in $PATH. Reported by Thorsten.
2179
2183
2180 2004-06-20 Fernando Perez <fperez@colorado.edu>
2184 2004-06-20 Fernando Perez <fperez@colorado.edu>
2181
2185
2182 * IPython/iplib.py (complete): modified the completer so that the
2186 * IPython/iplib.py (complete): modified the completer so that the
2183 order of priorities can be easily changed at runtime.
2187 order of priorities can be easily changed at runtime.
2184
2188
2185 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2189 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2186 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2190 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2187
2191
2188 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2192 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2189 expand Python variables prepended with $ in all system calls. The
2193 expand Python variables prepended with $ in all system calls. The
2190 same was done to InteractiveShell.handle_shell_escape. Now all
2194 same was done to InteractiveShell.handle_shell_escape. Now all
2191 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2195 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2192 expansion of python variables and expressions according to the
2196 expansion of python variables and expressions according to the
2193 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2197 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2194
2198
2195 Though PEP-215 has been rejected, a similar (but simpler) one
2199 Though PEP-215 has been rejected, a similar (but simpler) one
2196 seems like it will go into Python 2.4, PEP-292 -
2200 seems like it will go into Python 2.4, PEP-292 -
2197 http://www.python.org/peps/pep-0292.html.
2201 http://www.python.org/peps/pep-0292.html.
2198
2202
2199 I'll keep the full syntax of PEP-215, since IPython has since the
2203 I'll keep the full syntax of PEP-215, since IPython has since the
2200 start used Ka-Ping Yee's reference implementation discussed there
2204 start used Ka-Ping Yee's reference implementation discussed there
2201 (Itpl), and I actually like the powerful semantics it offers.
2205 (Itpl), and I actually like the powerful semantics it offers.
2202
2206
2203 In order to access normal shell variables, the $ has to be escaped
2207 In order to access normal shell variables, the $ has to be escaped
2204 via an extra $. For example:
2208 via an extra $. For example:
2205
2209
2206 In [7]: PATH='a python variable'
2210 In [7]: PATH='a python variable'
2207
2211
2208 In [8]: !echo $PATH
2212 In [8]: !echo $PATH
2209 a python variable
2213 a python variable
2210
2214
2211 In [9]: !echo $$PATH
2215 In [9]: !echo $$PATH
2212 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2216 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2213
2217
2214 (Magic.parse_options): escape $ so the shell doesn't evaluate
2218 (Magic.parse_options): escape $ so the shell doesn't evaluate
2215 things prematurely.
2219 things prematurely.
2216
2220
2217 * IPython/iplib.py (InteractiveShell.call_alias): added the
2221 * IPython/iplib.py (InteractiveShell.call_alias): added the
2218 ability for aliases to expand python variables via $.
2222 ability for aliases to expand python variables via $.
2219
2223
2220 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2224 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2221 system, now there's a @rehash/@rehashx pair of magics. These work
2225 system, now there's a @rehash/@rehashx pair of magics. These work
2222 like the csh rehash command, and can be invoked at any time. They
2226 like the csh rehash command, and can be invoked at any time. They
2223 build a table of aliases to everything in the user's $PATH
2227 build a table of aliases to everything in the user's $PATH
2224 (@rehash uses everything, @rehashx is slower but only adds
2228 (@rehash uses everything, @rehashx is slower but only adds
2225 executable files). With this, the pysh.py-based shell profile can
2229 executable files). With this, the pysh.py-based shell profile can
2226 now simply call rehash upon startup, and full access to all
2230 now simply call rehash upon startup, and full access to all
2227 programs in the user's path is obtained.
2231 programs in the user's path is obtained.
2228
2232
2229 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2233 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2230 functionality is now fully in place. I removed the old dynamic
2234 functionality is now fully in place. I removed the old dynamic
2231 code generation based approach, in favor of a much lighter one
2235 code generation based approach, in favor of a much lighter one
2232 based on a simple dict. The advantage is that this allows me to
2236 based on a simple dict. The advantage is that this allows me to
2233 now have thousands of aliases with negligible cost (unthinkable
2237 now have thousands of aliases with negligible cost (unthinkable
2234 with the old system).
2238 with the old system).
2235
2239
2236 2004-06-19 Fernando Perez <fperez@colorado.edu>
2240 2004-06-19 Fernando Perez <fperez@colorado.edu>
2237
2241
2238 * IPython/iplib.py (__init__): extended MagicCompleter class to
2242 * IPython/iplib.py (__init__): extended MagicCompleter class to
2239 also complete (last in priority) on user aliases.
2243 also complete (last in priority) on user aliases.
2240
2244
2241 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2245 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2242 call to eval.
2246 call to eval.
2243 (ItplNS.__init__): Added a new class which functions like Itpl,
2247 (ItplNS.__init__): Added a new class which functions like Itpl,
2244 but allows configuring the namespace for the evaluation to occur
2248 but allows configuring the namespace for the evaluation to occur
2245 in.
2249 in.
2246
2250
2247 2004-06-18 Fernando Perez <fperez@colorado.edu>
2251 2004-06-18 Fernando Perez <fperez@colorado.edu>
2248
2252
2249 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2253 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2250 better message when 'exit' or 'quit' are typed (a common newbie
2254 better message when 'exit' or 'quit' are typed (a common newbie
2251 confusion).
2255 confusion).
2252
2256
2253 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2257 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2254 check for Windows users.
2258 check for Windows users.
2255
2259
2256 * IPython/iplib.py (InteractiveShell.user_setup): removed
2260 * IPython/iplib.py (InteractiveShell.user_setup): removed
2257 disabling of colors for Windows. I'll test at runtime and issue a
2261 disabling of colors for Windows. I'll test at runtime and issue a
2258 warning if Gary's readline isn't found, as to nudge users to
2262 warning if Gary's readline isn't found, as to nudge users to
2259 download it.
2263 download it.
2260
2264
2261 2004-06-16 Fernando Perez <fperez@colorado.edu>
2265 2004-06-16 Fernando Perez <fperez@colorado.edu>
2262
2266
2263 * IPython/genutils.py (Stream.__init__): changed to print errors
2267 * IPython/genutils.py (Stream.__init__): changed to print errors
2264 to sys.stderr. I had a circular dependency here. Now it's
2268 to sys.stderr. I had a circular dependency here. Now it's
2265 possible to run ipython as IDLE's shell (consider this pre-alpha,
2269 possible to run ipython as IDLE's shell (consider this pre-alpha,
2266 since true stdout things end up in the starting terminal instead
2270 since true stdout things end up in the starting terminal instead
2267 of IDLE's out).
2271 of IDLE's out).
2268
2272
2269 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2273 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2270 users who haven't # updated their prompt_in2 definitions. Remove
2274 users who haven't # updated their prompt_in2 definitions. Remove
2271 eventually.
2275 eventually.
2272 (multiple_replace): added credit to original ASPN recipe.
2276 (multiple_replace): added credit to original ASPN recipe.
2273
2277
2274 2004-06-15 Fernando Perez <fperez@colorado.edu>
2278 2004-06-15 Fernando Perez <fperez@colorado.edu>
2275
2279
2276 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2280 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2277 list of auto-defined aliases.
2281 list of auto-defined aliases.
2278
2282
2279 2004-06-13 Fernando Perez <fperez@colorado.edu>
2283 2004-06-13 Fernando Perez <fperez@colorado.edu>
2280
2284
2281 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2285 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2282 install was really requested (so setup.py can be used for other
2286 install was really requested (so setup.py can be used for other
2283 things under Windows).
2287 things under Windows).
2284
2288
2285 2004-06-10 Fernando Perez <fperez@colorado.edu>
2289 2004-06-10 Fernando Perez <fperez@colorado.edu>
2286
2290
2287 * IPython/Logger.py (Logger.create_log): Manually remove any old
2291 * IPython/Logger.py (Logger.create_log): Manually remove any old
2288 backup, since os.remove may fail under Windows. Fixes bug
2292 backup, since os.remove may fail under Windows. Fixes bug
2289 reported by Thorsten.
2293 reported by Thorsten.
2290
2294
2291 2004-06-09 Fernando Perez <fperez@colorado.edu>
2295 2004-06-09 Fernando Perez <fperez@colorado.edu>
2292
2296
2293 * examples/example-embed.py: fixed all references to %n (replaced
2297 * examples/example-embed.py: fixed all references to %n (replaced
2294 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2298 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2295 for all examples and the manual as well.
2299 for all examples and the manual as well.
2296
2300
2297 2004-06-08 Fernando Perez <fperez@colorado.edu>
2301 2004-06-08 Fernando Perez <fperez@colorado.edu>
2298
2302
2299 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2303 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2300 alignment and color management. All 3 prompt subsystems now
2304 alignment and color management. All 3 prompt subsystems now
2301 inherit from BasePrompt.
2305 inherit from BasePrompt.
2302
2306
2303 * tools/release: updates for windows installer build and tag rpms
2307 * tools/release: updates for windows installer build and tag rpms
2304 with python version (since paths are fixed).
2308 with python version (since paths are fixed).
2305
2309
2306 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2310 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2307 which will become eventually obsolete. Also fixed the default
2311 which will become eventually obsolete. Also fixed the default
2308 prompt_in2 to use \D, so at least new users start with the correct
2312 prompt_in2 to use \D, so at least new users start with the correct
2309 defaults.
2313 defaults.
2310 WARNING: Users with existing ipythonrc files will need to apply
2314 WARNING: Users with existing ipythonrc files will need to apply
2311 this fix manually!
2315 this fix manually!
2312
2316
2313 * setup.py: make windows installer (.exe). This is finally the
2317 * setup.py: make windows installer (.exe). This is finally the
2314 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2318 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2315 which I hadn't included because it required Python 2.3 (or recent
2319 which I hadn't included because it required Python 2.3 (or recent
2316 distutils).
2320 distutils).
2317
2321
2318 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2322 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2319 usage of new '\D' escape.
2323 usage of new '\D' escape.
2320
2324
2321 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2325 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2322 lacks os.getuid())
2326 lacks os.getuid())
2323 (CachedOutput.set_colors): Added the ability to turn coloring
2327 (CachedOutput.set_colors): Added the ability to turn coloring
2324 on/off with @colors even for manually defined prompt colors. It
2328 on/off with @colors even for manually defined prompt colors. It
2325 uses a nasty global, but it works safely and via the generic color
2329 uses a nasty global, but it works safely and via the generic color
2326 handling mechanism.
2330 handling mechanism.
2327 (Prompt2.__init__): Introduced new escape '\D' for continuation
2331 (Prompt2.__init__): Introduced new escape '\D' for continuation
2328 prompts. It represents the counter ('\#') as dots.
2332 prompts. It represents the counter ('\#') as dots.
2329 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2333 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2330 need to update their ipythonrc files and replace '%n' with '\D' in
2334 need to update their ipythonrc files and replace '%n' with '\D' in
2331 their prompt_in2 settings everywhere. Sorry, but there's
2335 their prompt_in2 settings everywhere. Sorry, but there's
2332 otherwise no clean way to get all prompts to properly align. The
2336 otherwise no clean way to get all prompts to properly align. The
2333 ipythonrc shipped with IPython has been updated.
2337 ipythonrc shipped with IPython has been updated.
2334
2338
2335 2004-06-07 Fernando Perez <fperez@colorado.edu>
2339 2004-06-07 Fernando Perez <fperez@colorado.edu>
2336
2340
2337 * setup.py (isfile): Pass local_icons option to latex2html, so the
2341 * setup.py (isfile): Pass local_icons option to latex2html, so the
2338 resulting HTML file is self-contained. Thanks to
2342 resulting HTML file is self-contained. Thanks to
2339 dryice-AT-liu.com.cn for the tip.
2343 dryice-AT-liu.com.cn for the tip.
2340
2344
2341 * pysh.py: I created a new profile 'shell', which implements a
2345 * pysh.py: I created a new profile 'shell', which implements a
2342 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2346 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2343 system shell, nor will it become one anytime soon. It's mainly
2347 system shell, nor will it become one anytime soon. It's mainly
2344 meant to illustrate the use of the new flexible bash-like prompts.
2348 meant to illustrate the use of the new flexible bash-like prompts.
2345 I guess it could be used by hardy souls for true shell management,
2349 I guess it could be used by hardy souls for true shell management,
2346 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2350 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2347 profile. This uses the InterpreterExec extension provided by
2351 profile. This uses the InterpreterExec extension provided by
2348 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2352 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2349
2353
2350 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2354 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2351 auto-align itself with the length of the previous input prompt
2355 auto-align itself with the length of the previous input prompt
2352 (taking into account the invisible color escapes).
2356 (taking into account the invisible color escapes).
2353 (CachedOutput.__init__): Large restructuring of this class. Now
2357 (CachedOutput.__init__): Large restructuring of this class. Now
2354 all three prompts (primary1, primary2, output) are proper objects,
2358 all three prompts (primary1, primary2, output) are proper objects,
2355 managed by the 'parent' CachedOutput class. The code is still a
2359 managed by the 'parent' CachedOutput class. The code is still a
2356 bit hackish (all prompts share state via a pointer to the cache),
2360 bit hackish (all prompts share state via a pointer to the cache),
2357 but it's overall far cleaner than before.
2361 but it's overall far cleaner than before.
2358
2362
2359 * IPython/genutils.py (getoutputerror): modified to add verbose,
2363 * IPython/genutils.py (getoutputerror): modified to add verbose,
2360 debug and header options. This makes the interface of all getout*
2364 debug and header options. This makes the interface of all getout*
2361 functions uniform.
2365 functions uniform.
2362 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2366 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2363
2367
2364 * IPython/Magic.py (Magic.default_option): added a function to
2368 * IPython/Magic.py (Magic.default_option): added a function to
2365 allow registering default options for any magic command. This
2369 allow registering default options for any magic command. This
2366 makes it easy to have profiles which customize the magics globally
2370 makes it easy to have profiles which customize the magics globally
2367 for a certain use. The values set through this function are
2371 for a certain use. The values set through this function are
2368 picked up by the parse_options() method, which all magics should
2372 picked up by the parse_options() method, which all magics should
2369 use to parse their options.
2373 use to parse their options.
2370
2374
2371 * IPython/genutils.py (warn): modified the warnings framework to
2375 * IPython/genutils.py (warn): modified the warnings framework to
2372 use the Term I/O class. I'm trying to slowly unify all of
2376 use the Term I/O class. I'm trying to slowly unify all of
2373 IPython's I/O operations to pass through Term.
2377 IPython's I/O operations to pass through Term.
2374
2378
2375 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2379 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2376 the secondary prompt to correctly match the length of the primary
2380 the secondary prompt to correctly match the length of the primary
2377 one for any prompt. Now multi-line code will properly line up
2381 one for any prompt. Now multi-line code will properly line up
2378 even for path dependent prompts, such as the new ones available
2382 even for path dependent prompts, such as the new ones available
2379 via the prompt_specials.
2383 via the prompt_specials.
2380
2384
2381 2004-06-06 Fernando Perez <fperez@colorado.edu>
2385 2004-06-06 Fernando Perez <fperez@colorado.edu>
2382
2386
2383 * IPython/Prompts.py (prompt_specials): Added the ability to have
2387 * IPython/Prompts.py (prompt_specials): Added the ability to have
2384 bash-like special sequences in the prompts, which get
2388 bash-like special sequences in the prompts, which get
2385 automatically expanded. Things like hostname, current working
2389 automatically expanded. Things like hostname, current working
2386 directory and username are implemented already, but it's easy to
2390 directory and username are implemented already, but it's easy to
2387 add more in the future. Thanks to a patch by W.J. van der Laan
2391 add more in the future. Thanks to a patch by W.J. van der Laan
2388 <gnufnork-AT-hetdigitalegat.nl>
2392 <gnufnork-AT-hetdigitalegat.nl>
2389 (prompt_specials): Added color support for prompt strings, so
2393 (prompt_specials): Added color support for prompt strings, so
2390 users can define arbitrary color setups for their prompts.
2394 users can define arbitrary color setups for their prompts.
2391
2395
2392 2004-06-05 Fernando Perez <fperez@colorado.edu>
2396 2004-06-05 Fernando Perez <fperez@colorado.edu>
2393
2397
2394 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2398 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2395 code to load Gary Bishop's readline and configure it
2399 code to load Gary Bishop's readline and configure it
2396 automatically. Thanks to Gary for help on this.
2400 automatically. Thanks to Gary for help on this.
2397
2401
2398 2004-06-01 Fernando Perez <fperez@colorado.edu>
2402 2004-06-01 Fernando Perez <fperez@colorado.edu>
2399
2403
2400 * IPython/Logger.py (Logger.create_log): fix bug for logging
2404 * IPython/Logger.py (Logger.create_log): fix bug for logging
2401 with no filename (previous fix was incomplete).
2405 with no filename (previous fix was incomplete).
2402
2406
2403 2004-05-25 Fernando Perez <fperez@colorado.edu>
2407 2004-05-25 Fernando Perez <fperez@colorado.edu>
2404
2408
2405 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2409 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2406 parens would get passed to the shell.
2410 parens would get passed to the shell.
2407
2411
2408 2004-05-20 Fernando Perez <fperez@colorado.edu>
2412 2004-05-20 Fernando Perez <fperez@colorado.edu>
2409
2413
2410 * IPython/Magic.py (Magic.magic_prun): changed default profile
2414 * IPython/Magic.py (Magic.magic_prun): changed default profile
2411 sort order to 'time' (the more common profiling need).
2415 sort order to 'time' (the more common profiling need).
2412
2416
2413 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2417 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2414 so that source code shown is guaranteed in sync with the file on
2418 so that source code shown is guaranteed in sync with the file on
2415 disk (also changed in psource). Similar fix to the one for
2419 disk (also changed in psource). Similar fix to the one for
2416 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2420 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2417 <yann.ledu-AT-noos.fr>.
2421 <yann.ledu-AT-noos.fr>.
2418
2422
2419 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2423 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2420 with a single option would not be correctly parsed. Closes
2424 with a single option would not be correctly parsed. Closes
2421 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2425 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2422 introduced in 0.6.0 (on 2004-05-06).
2426 introduced in 0.6.0 (on 2004-05-06).
2423
2427
2424 2004-05-13 *** Released version 0.6.0
2428 2004-05-13 *** Released version 0.6.0
2425
2429
2426 2004-05-13 Fernando Perez <fperez@colorado.edu>
2430 2004-05-13 Fernando Perez <fperez@colorado.edu>
2427
2431
2428 * debian/: Added debian/ directory to CVS, so that debian support
2432 * debian/: Added debian/ directory to CVS, so that debian support
2429 is publicly accessible. The debian package is maintained by Jack
2433 is publicly accessible. The debian package is maintained by Jack
2430 Moffit <jack-AT-xiph.org>.
2434 Moffit <jack-AT-xiph.org>.
2431
2435
2432 * Documentation: included the notes about an ipython-based system
2436 * Documentation: included the notes about an ipython-based system
2433 shell (the hypothetical 'pysh') into the new_design.pdf document,
2437 shell (the hypothetical 'pysh') into the new_design.pdf document,
2434 so that these ideas get distributed to users along with the
2438 so that these ideas get distributed to users along with the
2435 official documentation.
2439 official documentation.
2436
2440
2437 2004-05-10 Fernando Perez <fperez@colorado.edu>
2441 2004-05-10 Fernando Perez <fperez@colorado.edu>
2438
2442
2439 * IPython/Logger.py (Logger.create_log): fix recently introduced
2443 * IPython/Logger.py (Logger.create_log): fix recently introduced
2440 bug (misindented line) where logstart would fail when not given an
2444 bug (misindented line) where logstart would fail when not given an
2441 explicit filename.
2445 explicit filename.
2442
2446
2443 2004-05-09 Fernando Perez <fperez@colorado.edu>
2447 2004-05-09 Fernando Perez <fperez@colorado.edu>
2444
2448
2445 * IPython/Magic.py (Magic.parse_options): skip system call when
2449 * IPython/Magic.py (Magic.parse_options): skip system call when
2446 there are no options to look for. Faster, cleaner for the common
2450 there are no options to look for. Faster, cleaner for the common
2447 case.
2451 case.
2448
2452
2449 * Documentation: many updates to the manual: describing Windows
2453 * Documentation: many updates to the manual: describing Windows
2450 support better, Gnuplot updates, credits, misc small stuff. Also
2454 support better, Gnuplot updates, credits, misc small stuff. Also
2451 updated the new_design doc a bit.
2455 updated the new_design doc a bit.
2452
2456
2453 2004-05-06 *** Released version 0.6.0.rc1
2457 2004-05-06 *** Released version 0.6.0.rc1
2454
2458
2455 2004-05-06 Fernando Perez <fperez@colorado.edu>
2459 2004-05-06 Fernando Perez <fperez@colorado.edu>
2456
2460
2457 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2461 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2458 operations to use the vastly more efficient list/''.join() method.
2462 operations to use the vastly more efficient list/''.join() method.
2459 (FormattedTB.text): Fix
2463 (FormattedTB.text): Fix
2460 http://www.scipy.net/roundup/ipython/issue12 - exception source
2464 http://www.scipy.net/roundup/ipython/issue12 - exception source
2461 extract not updated after reload. Thanks to Mike Salib
2465 extract not updated after reload. Thanks to Mike Salib
2462 <msalib-AT-mit.edu> for pinning the source of the problem.
2466 <msalib-AT-mit.edu> for pinning the source of the problem.
2463 Fortunately, the solution works inside ipython and doesn't require
2467 Fortunately, the solution works inside ipython and doesn't require
2464 any changes to python proper.
2468 any changes to python proper.
2465
2469
2466 * IPython/Magic.py (Magic.parse_options): Improved to process the
2470 * IPython/Magic.py (Magic.parse_options): Improved to process the
2467 argument list as a true shell would (by actually using the
2471 argument list as a true shell would (by actually using the
2468 underlying system shell). This way, all @magics automatically get
2472 underlying system shell). This way, all @magics automatically get
2469 shell expansion for variables. Thanks to a comment by Alex
2473 shell expansion for variables. Thanks to a comment by Alex
2470 Schmolck.
2474 Schmolck.
2471
2475
2472 2004-04-04 Fernando Perez <fperez@colorado.edu>
2476 2004-04-04 Fernando Perez <fperez@colorado.edu>
2473
2477
2474 * IPython/iplib.py (InteractiveShell.interact): Added a special
2478 * IPython/iplib.py (InteractiveShell.interact): Added a special
2475 trap for a debugger quit exception, which is basically impossible
2479 trap for a debugger quit exception, which is basically impossible
2476 to handle by normal mechanisms, given what pdb does to the stack.
2480 to handle by normal mechanisms, given what pdb does to the stack.
2477 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2481 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2478
2482
2479 2004-04-03 Fernando Perez <fperez@colorado.edu>
2483 2004-04-03 Fernando Perez <fperez@colorado.edu>
2480
2484
2481 * IPython/genutils.py (Term): Standardized the names of the Term
2485 * IPython/genutils.py (Term): Standardized the names of the Term
2482 class streams to cin/cout/cerr, following C++ naming conventions
2486 class streams to cin/cout/cerr, following C++ naming conventions
2483 (I can't use in/out/err because 'in' is not a valid attribute
2487 (I can't use in/out/err because 'in' is not a valid attribute
2484 name).
2488 name).
2485
2489
2486 * IPython/iplib.py (InteractiveShell.interact): don't increment
2490 * IPython/iplib.py (InteractiveShell.interact): don't increment
2487 the prompt if there's no user input. By Daniel 'Dang' Griffith
2491 the prompt if there's no user input. By Daniel 'Dang' Griffith
2488 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2492 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2489 Francois Pinard.
2493 Francois Pinard.
2490
2494
2491 2004-04-02 Fernando Perez <fperez@colorado.edu>
2495 2004-04-02 Fernando Perez <fperez@colorado.edu>
2492
2496
2493 * IPython/genutils.py (Stream.__init__): Modified to survive at
2497 * IPython/genutils.py (Stream.__init__): Modified to survive at
2494 least importing in contexts where stdin/out/err aren't true file
2498 least importing in contexts where stdin/out/err aren't true file
2495 objects, such as PyCrust (they lack fileno() and mode). However,
2499 objects, such as PyCrust (they lack fileno() and mode). However,
2496 the recovery facilities which rely on these things existing will
2500 the recovery facilities which rely on these things existing will
2497 not work.
2501 not work.
2498
2502
2499 2004-04-01 Fernando Perez <fperez@colorado.edu>
2503 2004-04-01 Fernando Perez <fperez@colorado.edu>
2500
2504
2501 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2505 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2502 use the new getoutputerror() function, so it properly
2506 use the new getoutputerror() function, so it properly
2503 distinguishes stdout/err.
2507 distinguishes stdout/err.
2504
2508
2505 * IPython/genutils.py (getoutputerror): added a function to
2509 * IPython/genutils.py (getoutputerror): added a function to
2506 capture separately the standard output and error of a command.
2510 capture separately the standard output and error of a command.
2507 After a comment from dang on the mailing lists. This code is
2511 After a comment from dang on the mailing lists. This code is
2508 basically a modified version of commands.getstatusoutput(), from
2512 basically a modified version of commands.getstatusoutput(), from
2509 the standard library.
2513 the standard library.
2510
2514
2511 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2515 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2512 '!!' as a special syntax (shorthand) to access @sx.
2516 '!!' as a special syntax (shorthand) to access @sx.
2513
2517
2514 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2518 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2515 command and return its output as a list split on '\n'.
2519 command and return its output as a list split on '\n'.
2516
2520
2517 2004-03-31 Fernando Perez <fperez@colorado.edu>
2521 2004-03-31 Fernando Perez <fperez@colorado.edu>
2518
2522
2519 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2523 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2520 method to dictionaries used as FakeModule instances if they lack
2524 method to dictionaries used as FakeModule instances if they lack
2521 it. At least pydoc in python2.3 breaks for runtime-defined
2525 it. At least pydoc in python2.3 breaks for runtime-defined
2522 functions without this hack. At some point I need to _really_
2526 functions without this hack. At some point I need to _really_
2523 understand what FakeModule is doing, because it's a gross hack.
2527 understand what FakeModule is doing, because it's a gross hack.
2524 But it solves Arnd's problem for now...
2528 But it solves Arnd's problem for now...
2525
2529
2526 2004-02-27 Fernando Perez <fperez@colorado.edu>
2530 2004-02-27 Fernando Perez <fperez@colorado.edu>
2527
2531
2528 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2532 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2529 mode would behave erratically. Also increased the number of
2533 mode would behave erratically. Also increased the number of
2530 possible logs in rotate mod to 999. Thanks to Rod Holland
2534 possible logs in rotate mod to 999. Thanks to Rod Holland
2531 <rhh@StructureLABS.com> for the report and fixes.
2535 <rhh@StructureLABS.com> for the report and fixes.
2532
2536
2533 2004-02-26 Fernando Perez <fperez@colorado.edu>
2537 2004-02-26 Fernando Perez <fperez@colorado.edu>
2534
2538
2535 * IPython/genutils.py (page): Check that the curses module really
2539 * IPython/genutils.py (page): Check that the curses module really
2536 has the initscr attribute before trying to use it. For some
2540 has the initscr attribute before trying to use it. For some
2537 reason, the Solaris curses module is missing this. I think this
2541 reason, the Solaris curses module is missing this. I think this
2538 should be considered a Solaris python bug, but I'm not sure.
2542 should be considered a Solaris python bug, but I'm not sure.
2539
2543
2540 2004-01-17 Fernando Perez <fperez@colorado.edu>
2544 2004-01-17 Fernando Perez <fperez@colorado.edu>
2541
2545
2542 * IPython/genutils.py (Stream.__init__): Changes to try to make
2546 * IPython/genutils.py (Stream.__init__): Changes to try to make
2543 ipython robust against stdin/out/err being closed by the user.
2547 ipython robust against stdin/out/err being closed by the user.
2544 This is 'user error' (and blocks a normal python session, at least
2548 This is 'user error' (and blocks a normal python session, at least
2545 the stdout case). However, Ipython should be able to survive such
2549 the stdout case). However, Ipython should be able to survive such
2546 instances of abuse as gracefully as possible. To simplify the
2550 instances of abuse as gracefully as possible. To simplify the
2547 coding and maintain compatibility with Gary Bishop's Term
2551 coding and maintain compatibility with Gary Bishop's Term
2548 contributions, I've made use of classmethods for this. I think
2552 contributions, I've made use of classmethods for this. I think
2549 this introduces a dependency on python 2.2.
2553 this introduces a dependency on python 2.2.
2550
2554
2551 2004-01-13 Fernando Perez <fperez@colorado.edu>
2555 2004-01-13 Fernando Perez <fperez@colorado.edu>
2552
2556
2553 * IPython/numutils.py (exp_safe): simplified the code a bit and
2557 * IPython/numutils.py (exp_safe): simplified the code a bit and
2554 removed the need for importing the kinds module altogether.
2558 removed the need for importing the kinds module altogether.
2555
2559
2556 2004-01-06 Fernando Perez <fperez@colorado.edu>
2560 2004-01-06 Fernando Perez <fperez@colorado.edu>
2557
2561
2558 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2562 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2559 a magic function instead, after some community feedback. No
2563 a magic function instead, after some community feedback. No
2560 special syntax will exist for it, but its name is deliberately
2564 special syntax will exist for it, but its name is deliberately
2561 very short.
2565 very short.
2562
2566
2563 2003-12-20 Fernando Perez <fperez@colorado.edu>
2567 2003-12-20 Fernando Perez <fperez@colorado.edu>
2564
2568
2565 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2569 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2566 new functionality, to automagically assign the result of a shell
2570 new functionality, to automagically assign the result of a shell
2567 command to a variable. I'll solicit some community feedback on
2571 command to a variable. I'll solicit some community feedback on
2568 this before making it permanent.
2572 this before making it permanent.
2569
2573
2570 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2574 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2571 requested about callables for which inspect couldn't obtain a
2575 requested about callables for which inspect couldn't obtain a
2572 proper argspec. Thanks to a crash report sent by Etienne
2576 proper argspec. Thanks to a crash report sent by Etienne
2573 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2577 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2574
2578
2575 2003-12-09 Fernando Perez <fperez@colorado.edu>
2579 2003-12-09 Fernando Perez <fperez@colorado.edu>
2576
2580
2577 * IPython/genutils.py (page): patch for the pager to work across
2581 * IPython/genutils.py (page): patch for the pager to work across
2578 various versions of Windows. By Gary Bishop.
2582 various versions of Windows. By Gary Bishop.
2579
2583
2580 2003-12-04 Fernando Perez <fperez@colorado.edu>
2584 2003-12-04 Fernando Perez <fperez@colorado.edu>
2581
2585
2582 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2586 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2583 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2587 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2584 While I tested this and it looks ok, there may still be corner
2588 While I tested this and it looks ok, there may still be corner
2585 cases I've missed.
2589 cases I've missed.
2586
2590
2587 2003-12-01 Fernando Perez <fperez@colorado.edu>
2591 2003-12-01 Fernando Perez <fperez@colorado.edu>
2588
2592
2589 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2593 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2590 where a line like 'p,q=1,2' would fail because the automagic
2594 where a line like 'p,q=1,2' would fail because the automagic
2591 system would be triggered for @p.
2595 system would be triggered for @p.
2592
2596
2593 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2597 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2594 cleanups, code unmodified.
2598 cleanups, code unmodified.
2595
2599
2596 * IPython/genutils.py (Term): added a class for IPython to handle
2600 * IPython/genutils.py (Term): added a class for IPython to handle
2597 output. In most cases it will just be a proxy for stdout/err, but
2601 output. In most cases it will just be a proxy for stdout/err, but
2598 having this allows modifications to be made for some platforms,
2602 having this allows modifications to be made for some platforms,
2599 such as handling color escapes under Windows. All of this code
2603 such as handling color escapes under Windows. All of this code
2600 was contributed by Gary Bishop, with minor modifications by me.
2604 was contributed by Gary Bishop, with minor modifications by me.
2601 The actual changes affect many files.
2605 The actual changes affect many files.
2602
2606
2603 2003-11-30 Fernando Perez <fperez@colorado.edu>
2607 2003-11-30 Fernando Perez <fperez@colorado.edu>
2604
2608
2605 * IPython/iplib.py (file_matches): new completion code, courtesy
2609 * IPython/iplib.py (file_matches): new completion code, courtesy
2606 of Jeff Collins. This enables filename completion again under
2610 of Jeff Collins. This enables filename completion again under
2607 python 2.3, which disabled it at the C level.
2611 python 2.3, which disabled it at the C level.
2608
2612
2609 2003-11-11 Fernando Perez <fperez@colorado.edu>
2613 2003-11-11 Fernando Perez <fperez@colorado.edu>
2610
2614
2611 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2615 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2612 for Numeric.array(map(...)), but often convenient.
2616 for Numeric.array(map(...)), but often convenient.
2613
2617
2614 2003-11-05 Fernando Perez <fperez@colorado.edu>
2618 2003-11-05 Fernando Perez <fperez@colorado.edu>
2615
2619
2616 * IPython/numutils.py (frange): Changed a call from int() to
2620 * IPython/numutils.py (frange): Changed a call from int() to
2617 int(round()) to prevent a problem reported with arange() in the
2621 int(round()) to prevent a problem reported with arange() in the
2618 numpy list.
2622 numpy list.
2619
2623
2620 2003-10-06 Fernando Perez <fperez@colorado.edu>
2624 2003-10-06 Fernando Perez <fperez@colorado.edu>
2621
2625
2622 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2626 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2623 prevent crashes if sys lacks an argv attribute (it happens with
2627 prevent crashes if sys lacks an argv attribute (it happens with
2624 embedded interpreters which build a bare-bones sys module).
2628 embedded interpreters which build a bare-bones sys module).
2625 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2629 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2626
2630
2627 2003-09-24 Fernando Perez <fperez@colorado.edu>
2631 2003-09-24 Fernando Perez <fperez@colorado.edu>
2628
2632
2629 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2633 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2630 to protect against poorly written user objects where __getattr__
2634 to protect against poorly written user objects where __getattr__
2631 raises exceptions other than AttributeError. Thanks to a bug
2635 raises exceptions other than AttributeError. Thanks to a bug
2632 report by Oliver Sander <osander-AT-gmx.de>.
2636 report by Oliver Sander <osander-AT-gmx.de>.
2633
2637
2634 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2638 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2635 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2639 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2636
2640
2637 2003-09-09 Fernando Perez <fperez@colorado.edu>
2641 2003-09-09 Fernando Perez <fperez@colorado.edu>
2638
2642
2639 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2643 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2640 unpacking a list whith a callable as first element would
2644 unpacking a list whith a callable as first element would
2641 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2645 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2642 Collins.
2646 Collins.
2643
2647
2644 2003-08-25 *** Released version 0.5.0
2648 2003-08-25 *** Released version 0.5.0
2645
2649
2646 2003-08-22 Fernando Perez <fperez@colorado.edu>
2650 2003-08-22 Fernando Perez <fperez@colorado.edu>
2647
2651
2648 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2652 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2649 improperly defined user exceptions. Thanks to feedback from Mark
2653 improperly defined user exceptions. Thanks to feedback from Mark
2650 Russell <mrussell-AT-verio.net>.
2654 Russell <mrussell-AT-verio.net>.
2651
2655
2652 2003-08-20 Fernando Perez <fperez@colorado.edu>
2656 2003-08-20 Fernando Perez <fperez@colorado.edu>
2653
2657
2654 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2658 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2655 printing so that it would print multi-line string forms starting
2659 printing so that it would print multi-line string forms starting
2656 with a new line. This way the formatting is better respected for
2660 with a new line. This way the formatting is better respected for
2657 objects which work hard to make nice string forms.
2661 objects which work hard to make nice string forms.
2658
2662
2659 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2663 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2660 autocall would overtake data access for objects with both
2664 autocall would overtake data access for objects with both
2661 __getitem__ and __call__.
2665 __getitem__ and __call__.
2662
2666
2663 2003-08-19 *** Released version 0.5.0-rc1
2667 2003-08-19 *** Released version 0.5.0-rc1
2664
2668
2665 2003-08-19 Fernando Perez <fperez@colorado.edu>
2669 2003-08-19 Fernando Perez <fperez@colorado.edu>
2666
2670
2667 * IPython/deep_reload.py (load_tail): single tiny change here
2671 * IPython/deep_reload.py (load_tail): single tiny change here
2668 seems to fix the long-standing bug of dreload() failing to work
2672 seems to fix the long-standing bug of dreload() failing to work
2669 for dotted names. But this module is pretty tricky, so I may have
2673 for dotted names. But this module is pretty tricky, so I may have
2670 missed some subtlety. Needs more testing!.
2674 missed some subtlety. Needs more testing!.
2671
2675
2672 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2676 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2673 exceptions which have badly implemented __str__ methods.
2677 exceptions which have badly implemented __str__ methods.
2674 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2678 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2675 which I've been getting reports about from Python 2.3 users. I
2679 which I've been getting reports about from Python 2.3 users. I
2676 wish I had a simple test case to reproduce the problem, so I could
2680 wish I had a simple test case to reproduce the problem, so I could
2677 either write a cleaner workaround or file a bug report if
2681 either write a cleaner workaround or file a bug report if
2678 necessary.
2682 necessary.
2679
2683
2680 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2684 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2681 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2685 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2682 a bug report by Tjabo Kloppenburg.
2686 a bug report by Tjabo Kloppenburg.
2683
2687
2684 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2688 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2685 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2689 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2686 seems rather unstable. Thanks to a bug report by Tjabo
2690 seems rather unstable. Thanks to a bug report by Tjabo
2687 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2691 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2688
2692
2689 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2693 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2690 this out soon because of the critical fixes in the inner loop for
2694 this out soon because of the critical fixes in the inner loop for
2691 generators.
2695 generators.
2692
2696
2693 * IPython/Magic.py (Magic.getargspec): removed. This (and
2697 * IPython/Magic.py (Magic.getargspec): removed. This (and
2694 _get_def) have been obsoleted by OInspect for a long time, I
2698 _get_def) have been obsoleted by OInspect for a long time, I
2695 hadn't noticed that they were dead code.
2699 hadn't noticed that they were dead code.
2696 (Magic._ofind): restored _ofind functionality for a few literals
2700 (Magic._ofind): restored _ofind functionality for a few literals
2697 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2701 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2698 for things like "hello".capitalize?, since that would require a
2702 for things like "hello".capitalize?, since that would require a
2699 potentially dangerous eval() again.
2703 potentially dangerous eval() again.
2700
2704
2701 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2705 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2702 logic a bit more to clean up the escapes handling and minimize the
2706 logic a bit more to clean up the escapes handling and minimize the
2703 use of _ofind to only necessary cases. The interactive 'feel' of
2707 use of _ofind to only necessary cases. The interactive 'feel' of
2704 IPython should have improved quite a bit with the changes in
2708 IPython should have improved quite a bit with the changes in
2705 _prefilter and _ofind (besides being far safer than before).
2709 _prefilter and _ofind (besides being far safer than before).
2706
2710
2707 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2711 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2708 obscure, never reported). Edit would fail to find the object to
2712 obscure, never reported). Edit would fail to find the object to
2709 edit under some circumstances.
2713 edit under some circumstances.
2710 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2714 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2711 which were causing double-calling of generators. Those eval calls
2715 which were causing double-calling of generators. Those eval calls
2712 were _very_ dangerous, since code with side effects could be
2716 were _very_ dangerous, since code with side effects could be
2713 triggered. As they say, 'eval is evil'... These were the
2717 triggered. As they say, 'eval is evil'... These were the
2714 nastiest evals in IPython. Besides, _ofind is now far simpler,
2718 nastiest evals in IPython. Besides, _ofind is now far simpler,
2715 and it should also be quite a bit faster. Its use of inspect is
2719 and it should also be quite a bit faster. Its use of inspect is
2716 also safer, so perhaps some of the inspect-related crashes I've
2720 also safer, so perhaps some of the inspect-related crashes I've
2717 seen lately with Python 2.3 might be taken care of. That will
2721 seen lately with Python 2.3 might be taken care of. That will
2718 need more testing.
2722 need more testing.
2719
2723
2720 2003-08-17 Fernando Perez <fperez@colorado.edu>
2724 2003-08-17 Fernando Perez <fperez@colorado.edu>
2721
2725
2722 * IPython/iplib.py (InteractiveShell._prefilter): significant
2726 * IPython/iplib.py (InteractiveShell._prefilter): significant
2723 simplifications to the logic for handling user escapes. Faster
2727 simplifications to the logic for handling user escapes. Faster
2724 and simpler code.
2728 and simpler code.
2725
2729
2726 2003-08-14 Fernando Perez <fperez@colorado.edu>
2730 2003-08-14 Fernando Perez <fperez@colorado.edu>
2727
2731
2728 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2732 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2729 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2733 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2730 but it should be quite a bit faster. And the recursive version
2734 but it should be quite a bit faster. And the recursive version
2731 generated O(log N) intermediate storage for all rank>1 arrays,
2735 generated O(log N) intermediate storage for all rank>1 arrays,
2732 even if they were contiguous.
2736 even if they were contiguous.
2733 (l1norm): Added this function.
2737 (l1norm): Added this function.
2734 (norm): Added this function for arbitrary norms (including
2738 (norm): Added this function for arbitrary norms (including
2735 l-infinity). l1 and l2 are still special cases for convenience
2739 l-infinity). l1 and l2 are still special cases for convenience
2736 and speed.
2740 and speed.
2737
2741
2738 2003-08-03 Fernando Perez <fperez@colorado.edu>
2742 2003-08-03 Fernando Perez <fperez@colorado.edu>
2739
2743
2740 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2744 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2741 exceptions, which now raise PendingDeprecationWarnings in Python
2745 exceptions, which now raise PendingDeprecationWarnings in Python
2742 2.3. There were some in Magic and some in Gnuplot2.
2746 2.3. There were some in Magic and some in Gnuplot2.
2743
2747
2744 2003-06-30 Fernando Perez <fperez@colorado.edu>
2748 2003-06-30 Fernando Perez <fperez@colorado.edu>
2745
2749
2746 * IPython/genutils.py (page): modified to call curses only for
2750 * IPython/genutils.py (page): modified to call curses only for
2747 terminals where TERM=='xterm'. After problems under many other
2751 terminals where TERM=='xterm'. After problems under many other
2748 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2752 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2749
2753
2750 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2754 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2751 would be triggered when readline was absent. This was just an old
2755 would be triggered when readline was absent. This was just an old
2752 debugging statement I'd forgotten to take out.
2756 debugging statement I'd forgotten to take out.
2753
2757
2754 2003-06-20 Fernando Perez <fperez@colorado.edu>
2758 2003-06-20 Fernando Perez <fperez@colorado.edu>
2755
2759
2756 * IPython/genutils.py (clock): modified to return only user time
2760 * IPython/genutils.py (clock): modified to return only user time
2757 (not counting system time), after a discussion on scipy. While
2761 (not counting system time), after a discussion on scipy. While
2758 system time may be a useful quantity occasionally, it may much
2762 system time may be a useful quantity occasionally, it may much
2759 more easily be skewed by occasional swapping or other similar
2763 more easily be skewed by occasional swapping or other similar
2760 activity.
2764 activity.
2761
2765
2762 2003-06-05 Fernando Perez <fperez@colorado.edu>
2766 2003-06-05 Fernando Perez <fperez@colorado.edu>
2763
2767
2764 * IPython/numutils.py (identity): new function, for building
2768 * IPython/numutils.py (identity): new function, for building
2765 arbitrary rank Kronecker deltas (mostly backwards compatible with
2769 arbitrary rank Kronecker deltas (mostly backwards compatible with
2766 Numeric.identity)
2770 Numeric.identity)
2767
2771
2768 2003-06-03 Fernando Perez <fperez@colorado.edu>
2772 2003-06-03 Fernando Perez <fperez@colorado.edu>
2769
2773
2770 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2774 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2771 arguments passed to magics with spaces, to allow trailing '\' to
2775 arguments passed to magics with spaces, to allow trailing '\' to
2772 work normally (mainly for Windows users).
2776 work normally (mainly for Windows users).
2773
2777
2774 2003-05-29 Fernando Perez <fperez@colorado.edu>
2778 2003-05-29 Fernando Perez <fperez@colorado.edu>
2775
2779
2776 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2780 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2777 instead of pydoc.help. This fixes a bizarre behavior where
2781 instead of pydoc.help. This fixes a bizarre behavior where
2778 printing '%s' % locals() would trigger the help system. Now
2782 printing '%s' % locals() would trigger the help system. Now
2779 ipython behaves like normal python does.
2783 ipython behaves like normal python does.
2780
2784
2781 Note that if one does 'from pydoc import help', the bizarre
2785 Note that if one does 'from pydoc import help', the bizarre
2782 behavior returns, but this will also happen in normal python, so
2786 behavior returns, but this will also happen in normal python, so
2783 it's not an ipython bug anymore (it has to do with how pydoc.help
2787 it's not an ipython bug anymore (it has to do with how pydoc.help
2784 is implemented).
2788 is implemented).
2785
2789
2786 2003-05-22 Fernando Perez <fperez@colorado.edu>
2790 2003-05-22 Fernando Perez <fperez@colorado.edu>
2787
2791
2788 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2792 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2789 return [] instead of None when nothing matches, also match to end
2793 return [] instead of None when nothing matches, also match to end
2790 of line. Patch by Gary Bishop.
2794 of line. Patch by Gary Bishop.
2791
2795
2792 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2796 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2793 protection as before, for files passed on the command line. This
2797 protection as before, for files passed on the command line. This
2794 prevents the CrashHandler from kicking in if user files call into
2798 prevents the CrashHandler from kicking in if user files call into
2795 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2799 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2796 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2800 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2797
2801
2798 2003-05-20 *** Released version 0.4.0
2802 2003-05-20 *** Released version 0.4.0
2799
2803
2800 2003-05-20 Fernando Perez <fperez@colorado.edu>
2804 2003-05-20 Fernando Perez <fperez@colorado.edu>
2801
2805
2802 * setup.py: added support for manpages. It's a bit hackish b/c of
2806 * setup.py: added support for manpages. It's a bit hackish b/c of
2803 a bug in the way the bdist_rpm distutils target handles gzipped
2807 a bug in the way the bdist_rpm distutils target handles gzipped
2804 manpages, but it works. After a patch by Jack.
2808 manpages, but it works. After a patch by Jack.
2805
2809
2806 2003-05-19 Fernando Perez <fperez@colorado.edu>
2810 2003-05-19 Fernando Perez <fperez@colorado.edu>
2807
2811
2808 * IPython/numutils.py: added a mockup of the kinds module, since
2812 * IPython/numutils.py: added a mockup of the kinds module, since
2809 it was recently removed from Numeric. This way, numutils will
2813 it was recently removed from Numeric. This way, numutils will
2810 work for all users even if they are missing kinds.
2814 work for all users even if they are missing kinds.
2811
2815
2812 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2816 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2813 failure, which can occur with SWIG-wrapped extensions. After a
2817 failure, which can occur with SWIG-wrapped extensions. After a
2814 crash report from Prabhu.
2818 crash report from Prabhu.
2815
2819
2816 2003-05-16 Fernando Perez <fperez@colorado.edu>
2820 2003-05-16 Fernando Perez <fperez@colorado.edu>
2817
2821
2818 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2822 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2819 protect ipython from user code which may call directly
2823 protect ipython from user code which may call directly
2820 sys.excepthook (this looks like an ipython crash to the user, even
2824 sys.excepthook (this looks like an ipython crash to the user, even
2821 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2825 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2822 This is especially important to help users of WxWindows, but may
2826 This is especially important to help users of WxWindows, but may
2823 also be useful in other cases.
2827 also be useful in other cases.
2824
2828
2825 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2829 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2826 an optional tb_offset to be specified, and to preserve exception
2830 an optional tb_offset to be specified, and to preserve exception
2827 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2831 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2828
2832
2829 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2833 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2830
2834
2831 2003-05-15 Fernando Perez <fperez@colorado.edu>
2835 2003-05-15 Fernando Perez <fperez@colorado.edu>
2832
2836
2833 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2837 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2834 installing for a new user under Windows.
2838 installing for a new user under Windows.
2835
2839
2836 2003-05-12 Fernando Perez <fperez@colorado.edu>
2840 2003-05-12 Fernando Perez <fperez@colorado.edu>
2837
2841
2838 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2842 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2839 handler for Emacs comint-based lines. Currently it doesn't do
2843 handler for Emacs comint-based lines. Currently it doesn't do
2840 much (but importantly, it doesn't update the history cache). In
2844 much (but importantly, it doesn't update the history cache). In
2841 the future it may be expanded if Alex needs more functionality
2845 the future it may be expanded if Alex needs more functionality
2842 there.
2846 there.
2843
2847
2844 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2848 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2845 info to crash reports.
2849 info to crash reports.
2846
2850
2847 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2851 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2848 just like Python's -c. Also fixed crash with invalid -color
2852 just like Python's -c. Also fixed crash with invalid -color
2849 option value at startup. Thanks to Will French
2853 option value at startup. Thanks to Will French
2850 <wfrench-AT-bestweb.net> for the bug report.
2854 <wfrench-AT-bestweb.net> for the bug report.
2851
2855
2852 2003-05-09 Fernando Perez <fperez@colorado.edu>
2856 2003-05-09 Fernando Perez <fperez@colorado.edu>
2853
2857
2854 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2858 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2855 to EvalDict (it's a mapping, after all) and simplified its code
2859 to EvalDict (it's a mapping, after all) and simplified its code
2856 quite a bit, after a nice discussion on c.l.py where Gustavo
2860 quite a bit, after a nice discussion on c.l.py where Gustavo
2857 Córdova <gcordova-AT-sismex.com> suggested the new version.
2861 Córdova <gcordova-AT-sismex.com> suggested the new version.
2858
2862
2859 2003-04-30 Fernando Perez <fperez@colorado.edu>
2863 2003-04-30 Fernando Perez <fperez@colorado.edu>
2860
2864
2861 * IPython/genutils.py (timings_out): modified it to reduce its
2865 * IPython/genutils.py (timings_out): modified it to reduce its
2862 overhead in the common reps==1 case.
2866 overhead in the common reps==1 case.
2863
2867
2864 2003-04-29 Fernando Perez <fperez@colorado.edu>
2868 2003-04-29 Fernando Perez <fperez@colorado.edu>
2865
2869
2866 * IPython/genutils.py (timings_out): Modified to use the resource
2870 * IPython/genutils.py (timings_out): Modified to use the resource
2867 module, which avoids the wraparound problems of time.clock().
2871 module, which avoids the wraparound problems of time.clock().
2868
2872
2869 2003-04-17 *** Released version 0.2.15pre4
2873 2003-04-17 *** Released version 0.2.15pre4
2870
2874
2871 2003-04-17 Fernando Perez <fperez@colorado.edu>
2875 2003-04-17 Fernando Perez <fperez@colorado.edu>
2872
2876
2873 * setup.py (scriptfiles): Split windows-specific stuff over to a
2877 * setup.py (scriptfiles): Split windows-specific stuff over to a
2874 separate file, in an attempt to have a Windows GUI installer.
2878 separate file, in an attempt to have a Windows GUI installer.
2875 That didn't work, but part of the groundwork is done.
2879 That didn't work, but part of the groundwork is done.
2876
2880
2877 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2881 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2878 indent/unindent with 4 spaces. Particularly useful in combination
2882 indent/unindent with 4 spaces. Particularly useful in combination
2879 with the new auto-indent option.
2883 with the new auto-indent option.
2880
2884
2881 2003-04-16 Fernando Perez <fperez@colorado.edu>
2885 2003-04-16 Fernando Perez <fperez@colorado.edu>
2882
2886
2883 * IPython/Magic.py: various replacements of self.rc for
2887 * IPython/Magic.py: various replacements of self.rc for
2884 self.shell.rc. A lot more remains to be done to fully disentangle
2888 self.shell.rc. A lot more remains to be done to fully disentangle
2885 this class from the main Shell class.
2889 this class from the main Shell class.
2886
2890
2887 * IPython/GnuplotRuntime.py: added checks for mouse support so
2891 * IPython/GnuplotRuntime.py: added checks for mouse support so
2888 that we don't try to enable it if the current gnuplot doesn't
2892 that we don't try to enable it if the current gnuplot doesn't
2889 really support it. Also added checks so that we don't try to
2893 really support it. Also added checks so that we don't try to
2890 enable persist under Windows (where Gnuplot doesn't recognize the
2894 enable persist under Windows (where Gnuplot doesn't recognize the
2891 option).
2895 option).
2892
2896
2893 * IPython/iplib.py (InteractiveShell.interact): Added optional
2897 * IPython/iplib.py (InteractiveShell.interact): Added optional
2894 auto-indenting code, after a patch by King C. Shu
2898 auto-indenting code, after a patch by King C. Shu
2895 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2899 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2896 get along well with pasting indented code. If I ever figure out
2900 get along well with pasting indented code. If I ever figure out
2897 how to make that part go well, it will become on by default.
2901 how to make that part go well, it will become on by default.
2898
2902
2899 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2903 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2900 crash ipython if there was an unmatched '%' in the user's prompt
2904 crash ipython if there was an unmatched '%' in the user's prompt
2901 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2905 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2902
2906
2903 * IPython/iplib.py (InteractiveShell.interact): removed the
2907 * IPython/iplib.py (InteractiveShell.interact): removed the
2904 ability to ask the user whether he wants to crash or not at the
2908 ability to ask the user whether he wants to crash or not at the
2905 'last line' exception handler. Calling functions at that point
2909 'last line' exception handler. Calling functions at that point
2906 changes the stack, and the error reports would have incorrect
2910 changes the stack, and the error reports would have incorrect
2907 tracebacks.
2911 tracebacks.
2908
2912
2909 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2913 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2910 pass through a peger a pretty-printed form of any object. After a
2914 pass through a peger a pretty-printed form of any object. After a
2911 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2915 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2912
2916
2913 2003-04-14 Fernando Perez <fperez@colorado.edu>
2917 2003-04-14 Fernando Perez <fperez@colorado.edu>
2914
2918
2915 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2919 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2916 all files in ~ would be modified at first install (instead of
2920 all files in ~ would be modified at first install (instead of
2917 ~/.ipython). This could be potentially disastrous, as the
2921 ~/.ipython). This could be potentially disastrous, as the
2918 modification (make line-endings native) could damage binary files.
2922 modification (make line-endings native) could damage binary files.
2919
2923
2920 2003-04-10 Fernando Perez <fperez@colorado.edu>
2924 2003-04-10 Fernando Perez <fperez@colorado.edu>
2921
2925
2922 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2926 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2923 handle only lines which are invalid python. This now means that
2927 handle only lines which are invalid python. This now means that
2924 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2928 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2925 for the bug report.
2929 for the bug report.
2926
2930
2927 2003-04-01 Fernando Perez <fperez@colorado.edu>
2931 2003-04-01 Fernando Perez <fperez@colorado.edu>
2928
2932
2929 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2933 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2930 where failing to set sys.last_traceback would crash pdb.pm().
2934 where failing to set sys.last_traceback would crash pdb.pm().
2931 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2935 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2932 report.
2936 report.
2933
2937
2934 2003-03-25 Fernando Perez <fperez@colorado.edu>
2938 2003-03-25 Fernando Perez <fperez@colorado.edu>
2935
2939
2936 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2940 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2937 before printing it (it had a lot of spurious blank lines at the
2941 before printing it (it had a lot of spurious blank lines at the
2938 end).
2942 end).
2939
2943
2940 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2944 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2941 output would be sent 21 times! Obviously people don't use this
2945 output would be sent 21 times! Obviously people don't use this
2942 too often, or I would have heard about it.
2946 too often, or I would have heard about it.
2943
2947
2944 2003-03-24 Fernando Perez <fperez@colorado.edu>
2948 2003-03-24 Fernando Perez <fperez@colorado.edu>
2945
2949
2946 * setup.py (scriptfiles): renamed the data_files parameter from
2950 * setup.py (scriptfiles): renamed the data_files parameter from
2947 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2951 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2948 for the patch.
2952 for the patch.
2949
2953
2950 2003-03-20 Fernando Perez <fperez@colorado.edu>
2954 2003-03-20 Fernando Perez <fperez@colorado.edu>
2951
2955
2952 * IPython/genutils.py (error): added error() and fatal()
2956 * IPython/genutils.py (error): added error() and fatal()
2953 functions.
2957 functions.
2954
2958
2955 2003-03-18 *** Released version 0.2.15pre3
2959 2003-03-18 *** Released version 0.2.15pre3
2956
2960
2957 2003-03-18 Fernando Perez <fperez@colorado.edu>
2961 2003-03-18 Fernando Perez <fperez@colorado.edu>
2958
2962
2959 * setupext/install_data_ext.py
2963 * setupext/install_data_ext.py
2960 (install_data_ext.initialize_options): Class contributed by Jack
2964 (install_data_ext.initialize_options): Class contributed by Jack
2961 Moffit for fixing the old distutils hack. He is sending this to
2965 Moffit for fixing the old distutils hack. He is sending this to
2962 the distutils folks so in the future we may not need it as a
2966 the distutils folks so in the future we may not need it as a
2963 private fix.
2967 private fix.
2964
2968
2965 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2969 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2966 changes for Debian packaging. See his patch for full details.
2970 changes for Debian packaging. See his patch for full details.
2967 The old distutils hack of making the ipythonrc* files carry a
2971 The old distutils hack of making the ipythonrc* files carry a
2968 bogus .py extension is gone, at last. Examples were moved to a
2972 bogus .py extension is gone, at last. Examples were moved to a
2969 separate subdir under doc/, and the separate executable scripts
2973 separate subdir under doc/, and the separate executable scripts
2970 now live in their own directory. Overall a great cleanup. The
2974 now live in their own directory. Overall a great cleanup. The
2971 manual was updated to use the new files, and setup.py has been
2975 manual was updated to use the new files, and setup.py has been
2972 fixed for this setup.
2976 fixed for this setup.
2973
2977
2974 * IPython/PyColorize.py (Parser.usage): made non-executable and
2978 * IPython/PyColorize.py (Parser.usage): made non-executable and
2975 created a pycolor wrapper around it to be included as a script.
2979 created a pycolor wrapper around it to be included as a script.
2976
2980
2977 2003-03-12 *** Released version 0.2.15pre2
2981 2003-03-12 *** Released version 0.2.15pre2
2978
2982
2979 2003-03-12 Fernando Perez <fperez@colorado.edu>
2983 2003-03-12 Fernando Perez <fperez@colorado.edu>
2980
2984
2981 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2985 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2982 long-standing problem with garbage characters in some terminals.
2986 long-standing problem with garbage characters in some terminals.
2983 The issue was really that the \001 and \002 escapes must _only_ be
2987 The issue was really that the \001 and \002 escapes must _only_ be
2984 passed to input prompts (which call readline), but _never_ to
2988 passed to input prompts (which call readline), but _never_ to
2985 normal text to be printed on screen. I changed ColorANSI to have
2989 normal text to be printed on screen. I changed ColorANSI to have
2986 two classes: TermColors and InputTermColors, each with the
2990 two classes: TermColors and InputTermColors, each with the
2987 appropriate escapes for input prompts or normal text. The code in
2991 appropriate escapes for input prompts or normal text. The code in
2988 Prompts.py got slightly more complicated, but this very old and
2992 Prompts.py got slightly more complicated, but this very old and
2989 annoying bug is finally fixed.
2993 annoying bug is finally fixed.
2990
2994
2991 All the credit for nailing down the real origin of this problem
2995 All the credit for nailing down the real origin of this problem
2992 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2996 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2993 *Many* thanks to him for spending quite a bit of effort on this.
2997 *Many* thanks to him for spending quite a bit of effort on this.
2994
2998
2995 2003-03-05 *** Released version 0.2.15pre1
2999 2003-03-05 *** Released version 0.2.15pre1
2996
3000
2997 2003-03-03 Fernando Perez <fperez@colorado.edu>
3001 2003-03-03 Fernando Perez <fperez@colorado.edu>
2998
3002
2999 * IPython/FakeModule.py: Moved the former _FakeModule to a
3003 * IPython/FakeModule.py: Moved the former _FakeModule to a
3000 separate file, because it's also needed by Magic (to fix a similar
3004 separate file, because it's also needed by Magic (to fix a similar
3001 pickle-related issue in @run).
3005 pickle-related issue in @run).
3002
3006
3003 2003-03-02 Fernando Perez <fperez@colorado.edu>
3007 2003-03-02 Fernando Perez <fperez@colorado.edu>
3004
3008
3005 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3009 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3006 the autocall option at runtime.
3010 the autocall option at runtime.
3007 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3011 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3008 across Magic.py to start separating Magic from InteractiveShell.
3012 across Magic.py to start separating Magic from InteractiveShell.
3009 (Magic._ofind): Fixed to return proper namespace for dotted
3013 (Magic._ofind): Fixed to return proper namespace for dotted
3010 names. Before, a dotted name would always return 'not currently
3014 names. Before, a dotted name would always return 'not currently
3011 defined', because it would find the 'parent'. s.x would be found,
3015 defined', because it would find the 'parent'. s.x would be found,
3012 but since 'x' isn't defined by itself, it would get confused.
3016 but since 'x' isn't defined by itself, it would get confused.
3013 (Magic.magic_run): Fixed pickling problems reported by Ralf
3017 (Magic.magic_run): Fixed pickling problems reported by Ralf
3014 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3018 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3015 that I'd used when Mike Heeter reported similar issues at the
3019 that I'd used when Mike Heeter reported similar issues at the
3016 top-level, but now for @run. It boils down to injecting the
3020 top-level, but now for @run. It boils down to injecting the
3017 namespace where code is being executed with something that looks
3021 namespace where code is being executed with something that looks
3018 enough like a module to fool pickle.dump(). Since a pickle stores
3022 enough like a module to fool pickle.dump(). Since a pickle stores
3019 a named reference to the importing module, we need this for
3023 a named reference to the importing module, we need this for
3020 pickles to save something sensible.
3024 pickles to save something sensible.
3021
3025
3022 * IPython/ipmaker.py (make_IPython): added an autocall option.
3026 * IPython/ipmaker.py (make_IPython): added an autocall option.
3023
3027
3024 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3028 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3025 the auto-eval code. Now autocalling is an option, and the code is
3029 the auto-eval code. Now autocalling is an option, and the code is
3026 also vastly safer. There is no more eval() involved at all.
3030 also vastly safer. There is no more eval() involved at all.
3027
3031
3028 2003-03-01 Fernando Perez <fperez@colorado.edu>
3032 2003-03-01 Fernando Perez <fperez@colorado.edu>
3029
3033
3030 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3034 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3031 dict with named keys instead of a tuple.
3035 dict with named keys instead of a tuple.
3032
3036
3033 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3037 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3034
3038
3035 * setup.py (make_shortcut): Fixed message about directories
3039 * setup.py (make_shortcut): Fixed message about directories
3036 created during Windows installation (the directories were ok, just
3040 created during Windows installation (the directories were ok, just
3037 the printed message was misleading). Thanks to Chris Liechti
3041 the printed message was misleading). Thanks to Chris Liechti
3038 <cliechti-AT-gmx.net> for the heads up.
3042 <cliechti-AT-gmx.net> for the heads up.
3039
3043
3040 2003-02-21 Fernando Perez <fperez@colorado.edu>
3044 2003-02-21 Fernando Perez <fperez@colorado.edu>
3041
3045
3042 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3046 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3043 of ValueError exception when checking for auto-execution. This
3047 of ValueError exception when checking for auto-execution. This
3044 one is raised by things like Numeric arrays arr.flat when the
3048 one is raised by things like Numeric arrays arr.flat when the
3045 array is non-contiguous.
3049 array is non-contiguous.
3046
3050
3047 2003-01-31 Fernando Perez <fperez@colorado.edu>
3051 2003-01-31 Fernando Perez <fperez@colorado.edu>
3048
3052
3049 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3053 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3050 not return any value at all (even though the command would get
3054 not return any value at all (even though the command would get
3051 executed).
3055 executed).
3052 (xsys): Flush stdout right after printing the command to ensure
3056 (xsys): Flush stdout right after printing the command to ensure
3053 proper ordering of commands and command output in the total
3057 proper ordering of commands and command output in the total
3054 output.
3058 output.
3055 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3059 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3056 system/getoutput as defaults. The old ones are kept for
3060 system/getoutput as defaults. The old ones are kept for
3057 compatibility reasons, so no code which uses this library needs
3061 compatibility reasons, so no code which uses this library needs
3058 changing.
3062 changing.
3059
3063
3060 2003-01-27 *** Released version 0.2.14
3064 2003-01-27 *** Released version 0.2.14
3061
3065
3062 2003-01-25 Fernando Perez <fperez@colorado.edu>
3066 2003-01-25 Fernando Perez <fperez@colorado.edu>
3063
3067
3064 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3068 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3065 functions defined in previous edit sessions could not be re-edited
3069 functions defined in previous edit sessions could not be re-edited
3066 (because the temp files were immediately removed). Now temp files
3070 (because the temp files were immediately removed). Now temp files
3067 are removed only at IPython's exit.
3071 are removed only at IPython's exit.
3068 (Magic.magic_run): Improved @run to perform shell-like expansions
3072 (Magic.magic_run): Improved @run to perform shell-like expansions
3069 on its arguments (~users and $VARS). With this, @run becomes more
3073 on its arguments (~users and $VARS). With this, @run becomes more
3070 like a normal command-line.
3074 like a normal command-line.
3071
3075
3072 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3076 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3073 bugs related to embedding and cleaned up that code. A fairly
3077 bugs related to embedding and cleaned up that code. A fairly
3074 important one was the impossibility to access the global namespace
3078 important one was the impossibility to access the global namespace
3075 through the embedded IPython (only local variables were visible).
3079 through the embedded IPython (only local variables were visible).
3076
3080
3077 2003-01-14 Fernando Perez <fperez@colorado.edu>
3081 2003-01-14 Fernando Perez <fperez@colorado.edu>
3078
3082
3079 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3083 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3080 auto-calling to be a bit more conservative. Now it doesn't get
3084 auto-calling to be a bit more conservative. Now it doesn't get
3081 triggered if any of '!=()<>' are in the rest of the input line, to
3085 triggered if any of '!=()<>' are in the rest of the input line, to
3082 allow comparing callables. Thanks to Alex for the heads up.
3086 allow comparing callables. Thanks to Alex for the heads up.
3083
3087
3084 2003-01-07 Fernando Perez <fperez@colorado.edu>
3088 2003-01-07 Fernando Perez <fperez@colorado.edu>
3085
3089
3086 * IPython/genutils.py (page): fixed estimation of the number of
3090 * IPython/genutils.py (page): fixed estimation of the number of
3087 lines in a string to be paged to simply count newlines. This
3091 lines in a string to be paged to simply count newlines. This
3088 prevents over-guessing due to embedded escape sequences. A better
3092 prevents over-guessing due to embedded escape sequences. A better
3089 long-term solution would involve stripping out the control chars
3093 long-term solution would involve stripping out the control chars
3090 for the count, but it's potentially so expensive I just don't
3094 for the count, but it's potentially so expensive I just don't
3091 think it's worth doing.
3095 think it's worth doing.
3092
3096
3093 2002-12-19 *** Released version 0.2.14pre50
3097 2002-12-19 *** Released version 0.2.14pre50
3094
3098
3095 2002-12-19 Fernando Perez <fperez@colorado.edu>
3099 2002-12-19 Fernando Perez <fperez@colorado.edu>
3096
3100
3097 * tools/release (version): Changed release scripts to inform
3101 * tools/release (version): Changed release scripts to inform
3098 Andrea and build a NEWS file with a list of recent changes.
3102 Andrea and build a NEWS file with a list of recent changes.
3099
3103
3100 * IPython/ColorANSI.py (__all__): changed terminal detection
3104 * IPython/ColorANSI.py (__all__): changed terminal detection
3101 code. Seems to work better for xterms without breaking
3105 code. Seems to work better for xterms without breaking
3102 konsole. Will need more testing to determine if WinXP and Mac OSX
3106 konsole. Will need more testing to determine if WinXP and Mac OSX
3103 also work ok.
3107 also work ok.
3104
3108
3105 2002-12-18 *** Released version 0.2.14pre49
3109 2002-12-18 *** Released version 0.2.14pre49
3106
3110
3107 2002-12-18 Fernando Perez <fperez@colorado.edu>
3111 2002-12-18 Fernando Perez <fperez@colorado.edu>
3108
3112
3109 * Docs: added new info about Mac OSX, from Andrea.
3113 * Docs: added new info about Mac OSX, from Andrea.
3110
3114
3111 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3115 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3112 allow direct plotting of python strings whose format is the same
3116 allow direct plotting of python strings whose format is the same
3113 of gnuplot data files.
3117 of gnuplot data files.
3114
3118
3115 2002-12-16 Fernando Perez <fperez@colorado.edu>
3119 2002-12-16 Fernando Perez <fperez@colorado.edu>
3116
3120
3117 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3121 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3118 value of exit question to be acknowledged.
3122 value of exit question to be acknowledged.
3119
3123
3120 2002-12-03 Fernando Perez <fperez@colorado.edu>
3124 2002-12-03 Fernando Perez <fperez@colorado.edu>
3121
3125
3122 * IPython/ipmaker.py: removed generators, which had been added
3126 * IPython/ipmaker.py: removed generators, which had been added
3123 by mistake in an earlier debugging run. This was causing trouble
3127 by mistake in an earlier debugging run. This was causing trouble
3124 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3128 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3125 for pointing this out.
3129 for pointing this out.
3126
3130
3127 2002-11-17 Fernando Perez <fperez@colorado.edu>
3131 2002-11-17 Fernando Perez <fperez@colorado.edu>
3128
3132
3129 * Manual: updated the Gnuplot section.
3133 * Manual: updated the Gnuplot section.
3130
3134
3131 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3135 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3132 a much better split of what goes in Runtime and what goes in
3136 a much better split of what goes in Runtime and what goes in
3133 Interactive.
3137 Interactive.
3134
3138
3135 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3139 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3136 being imported from iplib.
3140 being imported from iplib.
3137
3141
3138 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3142 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3139 for command-passing. Now the global Gnuplot instance is called
3143 for command-passing. Now the global Gnuplot instance is called
3140 'gp' instead of 'g', which was really a far too fragile and
3144 'gp' instead of 'g', which was really a far too fragile and
3141 common name.
3145 common name.
3142
3146
3143 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3147 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3144 bounding boxes generated by Gnuplot for square plots.
3148 bounding boxes generated by Gnuplot for square plots.
3145
3149
3146 * IPython/genutils.py (popkey): new function added. I should
3150 * IPython/genutils.py (popkey): new function added. I should
3147 suggest this on c.l.py as a dict method, it seems useful.
3151 suggest this on c.l.py as a dict method, it seems useful.
3148
3152
3149 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3153 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3150 to transparently handle PostScript generation. MUCH better than
3154 to transparently handle PostScript generation. MUCH better than
3151 the previous plot_eps/replot_eps (which I removed now). The code
3155 the previous plot_eps/replot_eps (which I removed now). The code
3152 is also fairly clean and well documented now (including
3156 is also fairly clean and well documented now (including
3153 docstrings).
3157 docstrings).
3154
3158
3155 2002-11-13 Fernando Perez <fperez@colorado.edu>
3159 2002-11-13 Fernando Perez <fperez@colorado.edu>
3156
3160
3157 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3161 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3158 (inconsistent with options).
3162 (inconsistent with options).
3159
3163
3160 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3164 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3161 manually disabled, I don't know why. Fixed it.
3165 manually disabled, I don't know why. Fixed it.
3162 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3166 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3163 eps output.
3167 eps output.
3164
3168
3165 2002-11-12 Fernando Perez <fperez@colorado.edu>
3169 2002-11-12 Fernando Perez <fperez@colorado.edu>
3166
3170
3167 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3171 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3168 don't propagate up to caller. Fixes crash reported by François
3172 don't propagate up to caller. Fixes crash reported by François
3169 Pinard.
3173 Pinard.
3170
3174
3171 2002-11-09 Fernando Perez <fperez@colorado.edu>
3175 2002-11-09 Fernando Perez <fperez@colorado.edu>
3172
3176
3173 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3177 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3174 history file for new users.
3178 history file for new users.
3175 (make_IPython): fixed bug where initial install would leave the
3179 (make_IPython): fixed bug where initial install would leave the
3176 user running in the .ipython dir.
3180 user running in the .ipython dir.
3177 (make_IPython): fixed bug where config dir .ipython would be
3181 (make_IPython): fixed bug where config dir .ipython would be
3178 created regardless of the given -ipythondir option. Thanks to Cory
3182 created regardless of the given -ipythondir option. Thanks to Cory
3179 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3183 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3180
3184
3181 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3185 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3182 type confirmations. Will need to use it in all of IPython's code
3186 type confirmations. Will need to use it in all of IPython's code
3183 consistently.
3187 consistently.
3184
3188
3185 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3189 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3186 context to print 31 lines instead of the default 5. This will make
3190 context to print 31 lines instead of the default 5. This will make
3187 the crash reports extremely detailed in case the problem is in
3191 the crash reports extremely detailed in case the problem is in
3188 libraries I don't have access to.
3192 libraries I don't have access to.
3189
3193
3190 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3194 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3191 line of defense' code to still crash, but giving users fair
3195 line of defense' code to still crash, but giving users fair
3192 warning. I don't want internal errors to go unreported: if there's
3196 warning. I don't want internal errors to go unreported: if there's
3193 an internal problem, IPython should crash and generate a full
3197 an internal problem, IPython should crash and generate a full
3194 report.
3198 report.
3195
3199
3196 2002-11-08 Fernando Perez <fperez@colorado.edu>
3200 2002-11-08 Fernando Perez <fperez@colorado.edu>
3197
3201
3198 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3202 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3199 otherwise uncaught exceptions which can appear if people set
3203 otherwise uncaught exceptions which can appear if people set
3200 sys.stdout to something badly broken. Thanks to a crash report
3204 sys.stdout to something badly broken. Thanks to a crash report
3201 from henni-AT-mail.brainbot.com.
3205 from henni-AT-mail.brainbot.com.
3202
3206
3203 2002-11-04 Fernando Perez <fperez@colorado.edu>
3207 2002-11-04 Fernando Perez <fperez@colorado.edu>
3204
3208
3205 * IPython/iplib.py (InteractiveShell.interact): added
3209 * IPython/iplib.py (InteractiveShell.interact): added
3206 __IPYTHON__active to the builtins. It's a flag which goes on when
3210 __IPYTHON__active to the builtins. It's a flag which goes on when
3207 the interaction starts and goes off again when it stops. This
3211 the interaction starts and goes off again when it stops. This
3208 allows embedding code to detect being inside IPython. Before this
3212 allows embedding code to detect being inside IPython. Before this
3209 was done via __IPYTHON__, but that only shows that an IPython
3213 was done via __IPYTHON__, but that only shows that an IPython
3210 instance has been created.
3214 instance has been created.
3211
3215
3212 * IPython/Magic.py (Magic.magic_env): I realized that in a
3216 * IPython/Magic.py (Magic.magic_env): I realized that in a
3213 UserDict, instance.data holds the data as a normal dict. So I
3217 UserDict, instance.data holds the data as a normal dict. So I
3214 modified @env to return os.environ.data instead of rebuilding a
3218 modified @env to return os.environ.data instead of rebuilding a
3215 dict by hand.
3219 dict by hand.
3216
3220
3217 2002-11-02 Fernando Perez <fperez@colorado.edu>
3221 2002-11-02 Fernando Perez <fperez@colorado.edu>
3218
3222
3219 * IPython/genutils.py (warn): changed so that level 1 prints no
3223 * IPython/genutils.py (warn): changed so that level 1 prints no
3220 header. Level 2 is now the default (with 'WARNING' header, as
3224 header. Level 2 is now the default (with 'WARNING' header, as
3221 before). I think I tracked all places where changes were needed in
3225 before). I think I tracked all places where changes were needed in
3222 IPython, but outside code using the old level numbering may have
3226 IPython, but outside code using the old level numbering may have
3223 broken.
3227 broken.
3224
3228
3225 * IPython/iplib.py (InteractiveShell.runcode): added this to
3229 * IPython/iplib.py (InteractiveShell.runcode): added this to
3226 handle the tracebacks in SystemExit traps correctly. The previous
3230 handle the tracebacks in SystemExit traps correctly. The previous
3227 code (through interact) was printing more of the stack than
3231 code (through interact) was printing more of the stack than
3228 necessary, showing IPython internal code to the user.
3232 necessary, showing IPython internal code to the user.
3229
3233
3230 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3234 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3231 default. Now that the default at the confirmation prompt is yes,
3235 default. Now that the default at the confirmation prompt is yes,
3232 it's not so intrusive. François' argument that ipython sessions
3236 it's not so intrusive. François' argument that ipython sessions
3233 tend to be complex enough not to lose them from an accidental C-d,
3237 tend to be complex enough not to lose them from an accidental C-d,
3234 is a valid one.
3238 is a valid one.
3235
3239
3236 * IPython/iplib.py (InteractiveShell.interact): added a
3240 * IPython/iplib.py (InteractiveShell.interact): added a
3237 showtraceback() call to the SystemExit trap, and modified the exit
3241 showtraceback() call to the SystemExit trap, and modified the exit
3238 confirmation to have yes as the default.
3242 confirmation to have yes as the default.
3239
3243
3240 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3244 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3241 this file. It's been gone from the code for a long time, this was
3245 this file. It's been gone from the code for a long time, this was
3242 simply leftover junk.
3246 simply leftover junk.
3243
3247
3244 2002-11-01 Fernando Perez <fperez@colorado.edu>
3248 2002-11-01 Fernando Perez <fperez@colorado.edu>
3245
3249
3246 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3250 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3247 added. If set, IPython now traps EOF and asks for
3251 added. If set, IPython now traps EOF and asks for
3248 confirmation. After a request by François Pinard.
3252 confirmation. After a request by François Pinard.
3249
3253
3250 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3254 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3251 of @abort, and with a new (better) mechanism for handling the
3255 of @abort, and with a new (better) mechanism for handling the
3252 exceptions.
3256 exceptions.
3253
3257
3254 2002-10-27 Fernando Perez <fperez@colorado.edu>
3258 2002-10-27 Fernando Perez <fperez@colorado.edu>
3255
3259
3256 * IPython/usage.py (__doc__): updated the --help information and
3260 * IPython/usage.py (__doc__): updated the --help information and
3257 the ipythonrc file to indicate that -log generates
3261 the ipythonrc file to indicate that -log generates
3258 ./ipython.log. Also fixed the corresponding info in @logstart.
3262 ./ipython.log. Also fixed the corresponding info in @logstart.
3259 This and several other fixes in the manuals thanks to reports by
3263 This and several other fixes in the manuals thanks to reports by
3260 François Pinard <pinard-AT-iro.umontreal.ca>.
3264 François Pinard <pinard-AT-iro.umontreal.ca>.
3261
3265
3262 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3266 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3263 refer to @logstart (instead of @log, which doesn't exist).
3267 refer to @logstart (instead of @log, which doesn't exist).
3264
3268
3265 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3269 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3266 AttributeError crash. Thanks to Christopher Armstrong
3270 AttributeError crash. Thanks to Christopher Armstrong
3267 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3271 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3268 introduced recently (in 0.2.14pre37) with the fix to the eval
3272 introduced recently (in 0.2.14pre37) with the fix to the eval
3269 problem mentioned below.
3273 problem mentioned below.
3270
3274
3271 2002-10-17 Fernando Perez <fperez@colorado.edu>
3275 2002-10-17 Fernando Perez <fperez@colorado.edu>
3272
3276
3273 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3277 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3274 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3278 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3275
3279
3276 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3280 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3277 this function to fix a problem reported by Alex Schmolck. He saw
3281 this function to fix a problem reported by Alex Schmolck. He saw
3278 it with list comprehensions and generators, which were getting
3282 it with list comprehensions and generators, which were getting
3279 called twice. The real problem was an 'eval' call in testing for
3283 called twice. The real problem was an 'eval' call in testing for
3280 automagic which was evaluating the input line silently.
3284 automagic which was evaluating the input line silently.
3281
3285
3282 This is a potentially very nasty bug, if the input has side
3286 This is a potentially very nasty bug, if the input has side
3283 effects which must not be repeated. The code is much cleaner now,
3287 effects which must not be repeated. The code is much cleaner now,
3284 without any blanket 'except' left and with a regexp test for
3288 without any blanket 'except' left and with a regexp test for
3285 actual function names.
3289 actual function names.
3286
3290
3287 But an eval remains, which I'm not fully comfortable with. I just
3291 But an eval remains, which I'm not fully comfortable with. I just
3288 don't know how to find out if an expression could be a callable in
3292 don't know how to find out if an expression could be a callable in
3289 the user's namespace without doing an eval on the string. However
3293 the user's namespace without doing an eval on the string. However
3290 that string is now much more strictly checked so that no code
3294 that string is now much more strictly checked so that no code
3291 slips by, so the eval should only happen for things that can
3295 slips by, so the eval should only happen for things that can
3292 really be only function/method names.
3296 really be only function/method names.
3293
3297
3294 2002-10-15 Fernando Perez <fperez@colorado.edu>
3298 2002-10-15 Fernando Perez <fperez@colorado.edu>
3295
3299
3296 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3300 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3297 OSX information to main manual, removed README_Mac_OSX file from
3301 OSX information to main manual, removed README_Mac_OSX file from
3298 distribution. Also updated credits for recent additions.
3302 distribution. Also updated credits for recent additions.
3299
3303
3300 2002-10-10 Fernando Perez <fperez@colorado.edu>
3304 2002-10-10 Fernando Perez <fperez@colorado.edu>
3301
3305
3302 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3306 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3303 terminal-related issues. Many thanks to Andrea Riciputi
3307 terminal-related issues. Many thanks to Andrea Riciputi
3304 <andrea.riciputi-AT-libero.it> for writing it.
3308 <andrea.riciputi-AT-libero.it> for writing it.
3305
3309
3306 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3310 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3307 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3311 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3308
3312
3309 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3313 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3310 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3314 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3311 <syver-en-AT-online.no> who both submitted patches for this problem.
3315 <syver-en-AT-online.no> who both submitted patches for this problem.
3312
3316
3313 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3317 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3314 global embedding to make sure that things don't overwrite user
3318 global embedding to make sure that things don't overwrite user
3315 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3319 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3316
3320
3317 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3321 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3318 compatibility. Thanks to Hayden Callow
3322 compatibility. Thanks to Hayden Callow
3319 <h.callow-AT-elec.canterbury.ac.nz>
3323 <h.callow-AT-elec.canterbury.ac.nz>
3320
3324
3321 2002-10-04 Fernando Perez <fperez@colorado.edu>
3325 2002-10-04 Fernando Perez <fperez@colorado.edu>
3322
3326
3323 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3327 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3324 Gnuplot.File objects.
3328 Gnuplot.File objects.
3325
3329
3326 2002-07-23 Fernando Perez <fperez@colorado.edu>
3330 2002-07-23 Fernando Perez <fperez@colorado.edu>
3327
3331
3328 * IPython/genutils.py (timing): Added timings() and timing() for
3332 * IPython/genutils.py (timing): Added timings() and timing() for
3329 quick access to the most commonly needed data, the execution
3333 quick access to the most commonly needed data, the execution
3330 times. Old timing() renamed to timings_out().
3334 times. Old timing() renamed to timings_out().
3331
3335
3332 2002-07-18 Fernando Perez <fperez@colorado.edu>
3336 2002-07-18 Fernando Perez <fperez@colorado.edu>
3333
3337
3334 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3338 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3335 bug with nested instances disrupting the parent's tab completion.
3339 bug with nested instances disrupting the parent's tab completion.
3336
3340
3337 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3341 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3338 all_completions code to begin the emacs integration.
3342 all_completions code to begin the emacs integration.
3339
3343
3340 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3344 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3341 argument to allow titling individual arrays when plotting.
3345 argument to allow titling individual arrays when plotting.
3342
3346
3343 2002-07-15 Fernando Perez <fperez@colorado.edu>
3347 2002-07-15 Fernando Perez <fperez@colorado.edu>
3344
3348
3345 * setup.py (make_shortcut): changed to retrieve the value of
3349 * setup.py (make_shortcut): changed to retrieve the value of
3346 'Program Files' directory from the registry (this value changes in
3350 'Program Files' directory from the registry (this value changes in
3347 non-english versions of Windows). Thanks to Thomas Fanslau
3351 non-english versions of Windows). Thanks to Thomas Fanslau
3348 <tfanslau-AT-gmx.de> for the report.
3352 <tfanslau-AT-gmx.de> for the report.
3349
3353
3350 2002-07-10 Fernando Perez <fperez@colorado.edu>
3354 2002-07-10 Fernando Perez <fperez@colorado.edu>
3351
3355
3352 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3356 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3353 a bug in pdb, which crashes if a line with only whitespace is
3357 a bug in pdb, which crashes if a line with only whitespace is
3354 entered. Bug report submitted to sourceforge.
3358 entered. Bug report submitted to sourceforge.
3355
3359
3356 2002-07-09 Fernando Perez <fperez@colorado.edu>
3360 2002-07-09 Fernando Perez <fperez@colorado.edu>
3357
3361
3358 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3362 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3359 reporting exceptions (it's a bug in inspect.py, I just set a
3363 reporting exceptions (it's a bug in inspect.py, I just set a
3360 workaround).
3364 workaround).
3361
3365
3362 2002-07-08 Fernando Perez <fperez@colorado.edu>
3366 2002-07-08 Fernando Perez <fperez@colorado.edu>
3363
3367
3364 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3368 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3365 __IPYTHON__ in __builtins__ to show up in user_ns.
3369 __IPYTHON__ in __builtins__ to show up in user_ns.
3366
3370
3367 2002-07-03 Fernando Perez <fperez@colorado.edu>
3371 2002-07-03 Fernando Perez <fperez@colorado.edu>
3368
3372
3369 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3373 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3370 name from @gp_set_instance to @gp_set_default.
3374 name from @gp_set_instance to @gp_set_default.
3371
3375
3372 * IPython/ipmaker.py (make_IPython): default editor value set to
3376 * IPython/ipmaker.py (make_IPython): default editor value set to
3373 '0' (a string), to match the rc file. Otherwise will crash when
3377 '0' (a string), to match the rc file. Otherwise will crash when
3374 .strip() is called on it.
3378 .strip() is called on it.
3375
3379
3376
3380
3377 2002-06-28 Fernando Perez <fperez@colorado.edu>
3381 2002-06-28 Fernando Perez <fperez@colorado.edu>
3378
3382
3379 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3383 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3380 of files in current directory when a file is executed via
3384 of files in current directory when a file is executed via
3381 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3385 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3382
3386
3383 * setup.py (manfiles): fix for rpm builds, submitted by RA
3387 * setup.py (manfiles): fix for rpm builds, submitted by RA
3384 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3388 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3385
3389
3386 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3390 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3387 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3391 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3388 string!). A. Schmolck caught this one.
3392 string!). A. Schmolck caught this one.
3389
3393
3390 2002-06-27 Fernando Perez <fperez@colorado.edu>
3394 2002-06-27 Fernando Perez <fperez@colorado.edu>
3391
3395
3392 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3396 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3393 defined files at the cmd line. __name__ wasn't being set to
3397 defined files at the cmd line. __name__ wasn't being set to
3394 __main__.
3398 __main__.
3395
3399
3396 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3400 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3397 regular lists and tuples besides Numeric arrays.
3401 regular lists and tuples besides Numeric arrays.
3398
3402
3399 * IPython/Prompts.py (CachedOutput.__call__): Added output
3403 * IPython/Prompts.py (CachedOutput.__call__): Added output
3400 supression for input ending with ';'. Similar to Mathematica and
3404 supression for input ending with ';'. Similar to Mathematica and
3401 Matlab. The _* vars and Out[] list are still updated, just like
3405 Matlab. The _* vars and Out[] list are still updated, just like
3402 Mathematica behaves.
3406 Mathematica behaves.
3403
3407
3404 2002-06-25 Fernando Perez <fperez@colorado.edu>
3408 2002-06-25 Fernando Perez <fperez@colorado.edu>
3405
3409
3406 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3410 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3407 .ini extensions for profiels under Windows.
3411 .ini extensions for profiels under Windows.
3408
3412
3409 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3413 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3410 string form. Fix contributed by Alexander Schmolck
3414 string form. Fix contributed by Alexander Schmolck
3411 <a.schmolck-AT-gmx.net>
3415 <a.schmolck-AT-gmx.net>
3412
3416
3413 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3417 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3414 pre-configured Gnuplot instance.
3418 pre-configured Gnuplot instance.
3415
3419
3416 2002-06-21 Fernando Perez <fperez@colorado.edu>
3420 2002-06-21 Fernando Perez <fperez@colorado.edu>
3417
3421
3418 * IPython/numutils.py (exp_safe): new function, works around the
3422 * IPython/numutils.py (exp_safe): new function, works around the
3419 underflow problems in Numeric.
3423 underflow problems in Numeric.
3420 (log2): New fn. Safe log in base 2: returns exact integer answer
3424 (log2): New fn. Safe log in base 2: returns exact integer answer
3421 for exact integer powers of 2.
3425 for exact integer powers of 2.
3422
3426
3423 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3427 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3424 properly.
3428 properly.
3425
3429
3426 2002-06-20 Fernando Perez <fperez@colorado.edu>
3430 2002-06-20 Fernando Perez <fperez@colorado.edu>
3427
3431
3428 * IPython/genutils.py (timing): new function like
3432 * IPython/genutils.py (timing): new function like
3429 Mathematica's. Similar to time_test, but returns more info.
3433 Mathematica's. Similar to time_test, but returns more info.
3430
3434
3431 2002-06-18 Fernando Perez <fperez@colorado.edu>
3435 2002-06-18 Fernando Perez <fperez@colorado.edu>
3432
3436
3433 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3437 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3434 according to Mike Heeter's suggestions.
3438 according to Mike Heeter's suggestions.
3435
3439
3436 2002-06-16 Fernando Perez <fperez@colorado.edu>
3440 2002-06-16 Fernando Perez <fperez@colorado.edu>
3437
3441
3438 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3442 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3439 system. GnuplotMagic is gone as a user-directory option. New files
3443 system. GnuplotMagic is gone as a user-directory option. New files
3440 make it easier to use all the gnuplot stuff both from external
3444 make it easier to use all the gnuplot stuff both from external
3441 programs as well as from IPython. Had to rewrite part of
3445 programs as well as from IPython. Had to rewrite part of
3442 hardcopy() b/c of a strange bug: often the ps files simply don't
3446 hardcopy() b/c of a strange bug: often the ps files simply don't
3443 get created, and require a repeat of the command (often several
3447 get created, and require a repeat of the command (often several
3444 times).
3448 times).
3445
3449
3446 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3450 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3447 resolve output channel at call time, so that if sys.stderr has
3451 resolve output channel at call time, so that if sys.stderr has
3448 been redirected by user this gets honored.
3452 been redirected by user this gets honored.
3449
3453
3450 2002-06-13 Fernando Perez <fperez@colorado.edu>
3454 2002-06-13 Fernando Perez <fperez@colorado.edu>
3451
3455
3452 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3456 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3453 IPShell. Kept a copy with the old names to avoid breaking people's
3457 IPShell. Kept a copy with the old names to avoid breaking people's
3454 embedded code.
3458 embedded code.
3455
3459
3456 * IPython/ipython: simplified it to the bare minimum after
3460 * IPython/ipython: simplified it to the bare minimum after
3457 Holger's suggestions. Added info about how to use it in
3461 Holger's suggestions. Added info about how to use it in
3458 PYTHONSTARTUP.
3462 PYTHONSTARTUP.
3459
3463
3460 * IPython/Shell.py (IPythonShell): changed the options passing
3464 * IPython/Shell.py (IPythonShell): changed the options passing
3461 from a string with funky %s replacements to a straight list. Maybe
3465 from a string with funky %s replacements to a straight list. Maybe
3462 a bit more typing, but it follows sys.argv conventions, so there's
3466 a bit more typing, but it follows sys.argv conventions, so there's
3463 less special-casing to remember.
3467 less special-casing to remember.
3464
3468
3465 2002-06-12 Fernando Perez <fperez@colorado.edu>
3469 2002-06-12 Fernando Perez <fperez@colorado.edu>
3466
3470
3467 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3471 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3468 command. Thanks to a suggestion by Mike Heeter.
3472 command. Thanks to a suggestion by Mike Heeter.
3469 (Magic.magic_pfile): added behavior to look at filenames if given
3473 (Magic.magic_pfile): added behavior to look at filenames if given
3470 arg is not a defined object.
3474 arg is not a defined object.
3471 (Magic.magic_save): New @save function to save code snippets. Also
3475 (Magic.magic_save): New @save function to save code snippets. Also
3472 a Mike Heeter idea.
3476 a Mike Heeter idea.
3473
3477
3474 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3478 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3475 plot() and replot(). Much more convenient now, especially for
3479 plot() and replot(). Much more convenient now, especially for
3476 interactive use.
3480 interactive use.
3477
3481
3478 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3482 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3479 filenames.
3483 filenames.
3480
3484
3481 2002-06-02 Fernando Perez <fperez@colorado.edu>
3485 2002-06-02 Fernando Perez <fperez@colorado.edu>
3482
3486
3483 * IPython/Struct.py (Struct.__init__): modified to admit
3487 * IPython/Struct.py (Struct.__init__): modified to admit
3484 initialization via another struct.
3488 initialization via another struct.
3485
3489
3486 * IPython/genutils.py (SystemExec.__init__): New stateful
3490 * IPython/genutils.py (SystemExec.__init__): New stateful
3487 interface to xsys and bq. Useful for writing system scripts.
3491 interface to xsys and bq. Useful for writing system scripts.
3488
3492
3489 2002-05-30 Fernando Perez <fperez@colorado.edu>
3493 2002-05-30 Fernando Perez <fperez@colorado.edu>
3490
3494
3491 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3495 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3492 documents. This will make the user download smaller (it's getting
3496 documents. This will make the user download smaller (it's getting
3493 too big).
3497 too big).
3494
3498
3495 2002-05-29 Fernando Perez <fperez@colorado.edu>
3499 2002-05-29 Fernando Perez <fperez@colorado.edu>
3496
3500
3497 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3501 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3498 fix problems with shelve and pickle. Seems to work, but I don't
3502 fix problems with shelve and pickle. Seems to work, but I don't
3499 know if corner cases break it. Thanks to Mike Heeter
3503 know if corner cases break it. Thanks to Mike Heeter
3500 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3504 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3501
3505
3502 2002-05-24 Fernando Perez <fperez@colorado.edu>
3506 2002-05-24 Fernando Perez <fperez@colorado.edu>
3503
3507
3504 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3508 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3505 macros having broken.
3509 macros having broken.
3506
3510
3507 2002-05-21 Fernando Perez <fperez@colorado.edu>
3511 2002-05-21 Fernando Perez <fperez@colorado.edu>
3508
3512
3509 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3513 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3510 introduced logging bug: all history before logging started was
3514 introduced logging bug: all history before logging started was
3511 being written one character per line! This came from the redesign
3515 being written one character per line! This came from the redesign
3512 of the input history as a special list which slices to strings,
3516 of the input history as a special list which slices to strings,
3513 not to lists.
3517 not to lists.
3514
3518
3515 2002-05-20 Fernando Perez <fperez@colorado.edu>
3519 2002-05-20 Fernando Perez <fperez@colorado.edu>
3516
3520
3517 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3521 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3518 be an attribute of all classes in this module. The design of these
3522 be an attribute of all classes in this module. The design of these
3519 classes needs some serious overhauling.
3523 classes needs some serious overhauling.
3520
3524
3521 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3525 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3522 which was ignoring '_' in option names.
3526 which was ignoring '_' in option names.
3523
3527
3524 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3528 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3525 'Verbose_novars' to 'Context' and made it the new default. It's a
3529 'Verbose_novars' to 'Context' and made it the new default. It's a
3526 bit more readable and also safer than verbose.
3530 bit more readable and also safer than verbose.
3527
3531
3528 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3532 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3529 triple-quoted strings.
3533 triple-quoted strings.
3530
3534
3531 * IPython/OInspect.py (__all__): new module exposing the object
3535 * IPython/OInspect.py (__all__): new module exposing the object
3532 introspection facilities. Now the corresponding magics are dummy
3536 introspection facilities. Now the corresponding magics are dummy
3533 wrappers around this. Having this module will make it much easier
3537 wrappers around this. Having this module will make it much easier
3534 to put these functions into our modified pdb.
3538 to put these functions into our modified pdb.
3535 This new object inspector system uses the new colorizing module,
3539 This new object inspector system uses the new colorizing module,
3536 so source code and other things are nicely syntax highlighted.
3540 so source code and other things are nicely syntax highlighted.
3537
3541
3538 2002-05-18 Fernando Perez <fperez@colorado.edu>
3542 2002-05-18 Fernando Perez <fperez@colorado.edu>
3539
3543
3540 * IPython/ColorANSI.py: Split the coloring tools into a separate
3544 * IPython/ColorANSI.py: Split the coloring tools into a separate
3541 module so I can use them in other code easier (they were part of
3545 module so I can use them in other code easier (they were part of
3542 ultraTB).
3546 ultraTB).
3543
3547
3544 2002-05-17 Fernando Perez <fperez@colorado.edu>
3548 2002-05-17 Fernando Perez <fperez@colorado.edu>
3545
3549
3546 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3550 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3547 fixed it to set the global 'g' also to the called instance, as
3551 fixed it to set the global 'g' also to the called instance, as
3548 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3552 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3549 user's 'g' variables).
3553 user's 'g' variables).
3550
3554
3551 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3555 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3552 global variables (aliases to _ih,_oh) so that users which expect
3556 global variables (aliases to _ih,_oh) so that users which expect
3553 In[5] or Out[7] to work aren't unpleasantly surprised.
3557 In[5] or Out[7] to work aren't unpleasantly surprised.
3554 (InputList.__getslice__): new class to allow executing slices of
3558 (InputList.__getslice__): new class to allow executing slices of
3555 input history directly. Very simple class, complements the use of
3559 input history directly. Very simple class, complements the use of
3556 macros.
3560 macros.
3557
3561
3558 2002-05-16 Fernando Perez <fperez@colorado.edu>
3562 2002-05-16 Fernando Perez <fperez@colorado.edu>
3559
3563
3560 * setup.py (docdirbase): make doc directory be just doc/IPython
3564 * setup.py (docdirbase): make doc directory be just doc/IPython
3561 without version numbers, it will reduce clutter for users.
3565 without version numbers, it will reduce clutter for users.
3562
3566
3563 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3567 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3564 execfile call to prevent possible memory leak. See for details:
3568 execfile call to prevent possible memory leak. See for details:
3565 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3569 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3566
3570
3567 2002-05-15 Fernando Perez <fperez@colorado.edu>
3571 2002-05-15 Fernando Perez <fperez@colorado.edu>
3568
3572
3569 * IPython/Magic.py (Magic.magic_psource): made the object
3573 * IPython/Magic.py (Magic.magic_psource): made the object
3570 introspection names be more standard: pdoc, pdef, pfile and
3574 introspection names be more standard: pdoc, pdef, pfile and
3571 psource. They all print/page their output, and it makes
3575 psource. They all print/page their output, and it makes
3572 remembering them easier. Kept old names for compatibility as
3576 remembering them easier. Kept old names for compatibility as
3573 aliases.
3577 aliases.
3574
3578
3575 2002-05-14 Fernando Perez <fperez@colorado.edu>
3579 2002-05-14 Fernando Perez <fperez@colorado.edu>
3576
3580
3577 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3581 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3578 what the mouse problem was. The trick is to use gnuplot with temp
3582 what the mouse problem was. The trick is to use gnuplot with temp
3579 files and NOT with pipes (for data communication), because having
3583 files and NOT with pipes (for data communication), because having
3580 both pipes and the mouse on is bad news.
3584 both pipes and the mouse on is bad news.
3581
3585
3582 2002-05-13 Fernando Perez <fperez@colorado.edu>
3586 2002-05-13 Fernando Perez <fperez@colorado.edu>
3583
3587
3584 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3588 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3585 bug. Information would be reported about builtins even when
3589 bug. Information would be reported about builtins even when
3586 user-defined functions overrode them.
3590 user-defined functions overrode them.
3587
3591
3588 2002-05-11 Fernando Perez <fperez@colorado.edu>
3592 2002-05-11 Fernando Perez <fperez@colorado.edu>
3589
3593
3590 * IPython/__init__.py (__all__): removed FlexCompleter from
3594 * IPython/__init__.py (__all__): removed FlexCompleter from
3591 __all__ so that things don't fail in platforms without readline.
3595 __all__ so that things don't fail in platforms without readline.
3592
3596
3593 2002-05-10 Fernando Perez <fperez@colorado.edu>
3597 2002-05-10 Fernando Perez <fperez@colorado.edu>
3594
3598
3595 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3599 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3596 it requires Numeric, effectively making Numeric a dependency for
3600 it requires Numeric, effectively making Numeric a dependency for
3597 IPython.
3601 IPython.
3598
3602
3599 * Released 0.2.13
3603 * Released 0.2.13
3600
3604
3601 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3605 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3602 profiler interface. Now all the major options from the profiler
3606 profiler interface. Now all the major options from the profiler
3603 module are directly supported in IPython, both for single
3607 module are directly supported in IPython, both for single
3604 expressions (@prun) and for full programs (@run -p).
3608 expressions (@prun) and for full programs (@run -p).
3605
3609
3606 2002-05-09 Fernando Perez <fperez@colorado.edu>
3610 2002-05-09 Fernando Perez <fperez@colorado.edu>
3607
3611
3608 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3612 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3609 magic properly formatted for screen.
3613 magic properly formatted for screen.
3610
3614
3611 * setup.py (make_shortcut): Changed things to put pdf version in
3615 * setup.py (make_shortcut): Changed things to put pdf version in
3612 doc/ instead of doc/manual (had to change lyxport a bit).
3616 doc/ instead of doc/manual (had to change lyxport a bit).
3613
3617
3614 * IPython/Magic.py (Profile.string_stats): made profile runs go
3618 * IPython/Magic.py (Profile.string_stats): made profile runs go
3615 through pager (they are long and a pager allows searching, saving,
3619 through pager (they are long and a pager allows searching, saving,
3616 etc.)
3620 etc.)
3617
3621
3618 2002-05-08 Fernando Perez <fperez@colorado.edu>
3622 2002-05-08 Fernando Perez <fperez@colorado.edu>
3619
3623
3620 * Released 0.2.12
3624 * Released 0.2.12
3621
3625
3622 2002-05-06 Fernando Perez <fperez@colorado.edu>
3626 2002-05-06 Fernando Perez <fperez@colorado.edu>
3623
3627
3624 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3628 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3625 introduced); 'hist n1 n2' was broken.
3629 introduced); 'hist n1 n2' was broken.
3626 (Magic.magic_pdb): added optional on/off arguments to @pdb
3630 (Magic.magic_pdb): added optional on/off arguments to @pdb
3627 (Magic.magic_run): added option -i to @run, which executes code in
3631 (Magic.magic_run): added option -i to @run, which executes code in
3628 the IPython namespace instead of a clean one. Also added @irun as
3632 the IPython namespace instead of a clean one. Also added @irun as
3629 an alias to @run -i.
3633 an alias to @run -i.
3630
3634
3631 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3635 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3632 fixed (it didn't really do anything, the namespaces were wrong).
3636 fixed (it didn't really do anything, the namespaces were wrong).
3633
3637
3634 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3638 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3635
3639
3636 * IPython/__init__.py (__all__): Fixed package namespace, now
3640 * IPython/__init__.py (__all__): Fixed package namespace, now
3637 'import IPython' does give access to IPython.<all> as
3641 'import IPython' does give access to IPython.<all> as
3638 expected. Also renamed __release__ to Release.
3642 expected. Also renamed __release__ to Release.
3639
3643
3640 * IPython/Debugger.py (__license__): created new Pdb class which
3644 * IPython/Debugger.py (__license__): created new Pdb class which
3641 functions like a drop-in for the normal pdb.Pdb but does NOT
3645 functions like a drop-in for the normal pdb.Pdb but does NOT
3642 import readline by default. This way it doesn't muck up IPython's
3646 import readline by default. This way it doesn't muck up IPython's
3643 readline handling, and now tab-completion finally works in the
3647 readline handling, and now tab-completion finally works in the
3644 debugger -- sort of. It completes things globally visible, but the
3648 debugger -- sort of. It completes things globally visible, but the
3645 completer doesn't track the stack as pdb walks it. That's a bit
3649 completer doesn't track the stack as pdb walks it. That's a bit
3646 tricky, and I'll have to implement it later.
3650 tricky, and I'll have to implement it later.
3647
3651
3648 2002-05-05 Fernando Perez <fperez@colorado.edu>
3652 2002-05-05 Fernando Perez <fperez@colorado.edu>
3649
3653
3650 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3654 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3651 magic docstrings when printed via ? (explicit \'s were being
3655 magic docstrings when printed via ? (explicit \'s were being
3652 printed).
3656 printed).
3653
3657
3654 * IPython/ipmaker.py (make_IPython): fixed namespace
3658 * IPython/ipmaker.py (make_IPython): fixed namespace
3655 identification bug. Now variables loaded via logs or command-line
3659 identification bug. Now variables loaded via logs or command-line
3656 files are recognized in the interactive namespace by @who.
3660 files are recognized in the interactive namespace by @who.
3657
3661
3658 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3662 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3659 log replay system stemming from the string form of Structs.
3663 log replay system stemming from the string form of Structs.
3660
3664
3661 * IPython/Magic.py (Macro.__init__): improved macros to properly
3665 * IPython/Magic.py (Macro.__init__): improved macros to properly
3662 handle magic commands in them.
3666 handle magic commands in them.
3663 (Magic.magic_logstart): usernames are now expanded so 'logstart
3667 (Magic.magic_logstart): usernames are now expanded so 'logstart
3664 ~/mylog' now works.
3668 ~/mylog' now works.
3665
3669
3666 * IPython/iplib.py (complete): fixed bug where paths starting with
3670 * IPython/iplib.py (complete): fixed bug where paths starting with
3667 '/' would be completed as magic names.
3671 '/' would be completed as magic names.
3668
3672
3669 2002-05-04 Fernando Perez <fperez@colorado.edu>
3673 2002-05-04 Fernando Perez <fperez@colorado.edu>
3670
3674
3671 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3675 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3672 allow running full programs under the profiler's control.
3676 allow running full programs under the profiler's control.
3673
3677
3674 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3678 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3675 mode to report exceptions verbosely but without formatting
3679 mode to report exceptions verbosely but without formatting
3676 variables. This addresses the issue of ipython 'freezing' (it's
3680 variables. This addresses the issue of ipython 'freezing' (it's
3677 not frozen, but caught in an expensive formatting loop) when huge
3681 not frozen, but caught in an expensive formatting loop) when huge
3678 variables are in the context of an exception.
3682 variables are in the context of an exception.
3679 (VerboseTB.text): Added '--->' markers at line where exception was
3683 (VerboseTB.text): Added '--->' markers at line where exception was
3680 triggered. Much clearer to read, especially in NoColor modes.
3684 triggered. Much clearer to read, especially in NoColor modes.
3681
3685
3682 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3686 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3683 implemented in reverse when changing to the new parse_options().
3687 implemented in reverse when changing to the new parse_options().
3684
3688
3685 2002-05-03 Fernando Perez <fperez@colorado.edu>
3689 2002-05-03 Fernando Perez <fperez@colorado.edu>
3686
3690
3687 * IPython/Magic.py (Magic.parse_options): new function so that
3691 * IPython/Magic.py (Magic.parse_options): new function so that
3688 magics can parse options easier.
3692 magics can parse options easier.
3689 (Magic.magic_prun): new function similar to profile.run(),
3693 (Magic.magic_prun): new function similar to profile.run(),
3690 suggested by Chris Hart.
3694 suggested by Chris Hart.
3691 (Magic.magic_cd): fixed behavior so that it only changes if
3695 (Magic.magic_cd): fixed behavior so that it only changes if
3692 directory actually is in history.
3696 directory actually is in history.
3693
3697
3694 * IPython/usage.py (__doc__): added information about potential
3698 * IPython/usage.py (__doc__): added information about potential
3695 slowness of Verbose exception mode when there are huge data
3699 slowness of Verbose exception mode when there are huge data
3696 structures to be formatted (thanks to Archie Paulson).
3700 structures to be formatted (thanks to Archie Paulson).
3697
3701
3698 * IPython/ipmaker.py (make_IPython): Changed default logging
3702 * IPython/ipmaker.py (make_IPython): Changed default logging
3699 (when simply called with -log) to use curr_dir/ipython.log in
3703 (when simply called with -log) to use curr_dir/ipython.log in
3700 rotate mode. Fixed crash which was occuring with -log before
3704 rotate mode. Fixed crash which was occuring with -log before
3701 (thanks to Jim Boyle).
3705 (thanks to Jim Boyle).
3702
3706
3703 2002-05-01 Fernando Perez <fperez@colorado.edu>
3707 2002-05-01 Fernando Perez <fperez@colorado.edu>
3704
3708
3705 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3709 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3706 was nasty -- though somewhat of a corner case).
3710 was nasty -- though somewhat of a corner case).
3707
3711
3708 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3712 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3709 text (was a bug).
3713 text (was a bug).
3710
3714
3711 2002-04-30 Fernando Perez <fperez@colorado.edu>
3715 2002-04-30 Fernando Perez <fperez@colorado.edu>
3712
3716
3713 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3717 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3714 a print after ^D or ^C from the user so that the In[] prompt
3718 a print after ^D or ^C from the user so that the In[] prompt
3715 doesn't over-run the gnuplot one.
3719 doesn't over-run the gnuplot one.
3716
3720
3717 2002-04-29 Fernando Perez <fperez@colorado.edu>
3721 2002-04-29 Fernando Perez <fperez@colorado.edu>
3718
3722
3719 * Released 0.2.10
3723 * Released 0.2.10
3720
3724
3721 * IPython/__release__.py (version): get date dynamically.
3725 * IPython/__release__.py (version): get date dynamically.
3722
3726
3723 * Misc. documentation updates thanks to Arnd's comments. Also ran
3727 * Misc. documentation updates thanks to Arnd's comments. Also ran
3724 a full spellcheck on the manual (hadn't been done in a while).
3728 a full spellcheck on the manual (hadn't been done in a while).
3725
3729
3726 2002-04-27 Fernando Perez <fperez@colorado.edu>
3730 2002-04-27 Fernando Perez <fperez@colorado.edu>
3727
3731
3728 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3732 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3729 starting a log in mid-session would reset the input history list.
3733 starting a log in mid-session would reset the input history list.
3730
3734
3731 2002-04-26 Fernando Perez <fperez@colorado.edu>
3735 2002-04-26 Fernando Perez <fperez@colorado.edu>
3732
3736
3733 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3737 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3734 all files were being included in an update. Now anything in
3738 all files were being included in an update. Now anything in
3735 UserConfig that matches [A-Za-z]*.py will go (this excludes
3739 UserConfig that matches [A-Za-z]*.py will go (this excludes
3736 __init__.py)
3740 __init__.py)
3737
3741
3738 2002-04-25 Fernando Perez <fperez@colorado.edu>
3742 2002-04-25 Fernando Perez <fperez@colorado.edu>
3739
3743
3740 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3744 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3741 to __builtins__ so that any form of embedded or imported code can
3745 to __builtins__ so that any form of embedded or imported code can
3742 test for being inside IPython.
3746 test for being inside IPython.
3743
3747
3744 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3748 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3745 changed to GnuplotMagic because it's now an importable module,
3749 changed to GnuplotMagic because it's now an importable module,
3746 this makes the name follow that of the standard Gnuplot module.
3750 this makes the name follow that of the standard Gnuplot module.
3747 GnuplotMagic can now be loaded at any time in mid-session.
3751 GnuplotMagic can now be loaded at any time in mid-session.
3748
3752
3749 2002-04-24 Fernando Perez <fperez@colorado.edu>
3753 2002-04-24 Fernando Perez <fperez@colorado.edu>
3750
3754
3751 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3755 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3752 the globals (IPython has its own namespace) and the
3756 the globals (IPython has its own namespace) and the
3753 PhysicalQuantity stuff is much better anyway.
3757 PhysicalQuantity stuff is much better anyway.
3754
3758
3755 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3759 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3756 embedding example to standard user directory for
3760 embedding example to standard user directory for
3757 distribution. Also put it in the manual.
3761 distribution. Also put it in the manual.
3758
3762
3759 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3763 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3760 instance as first argument (so it doesn't rely on some obscure
3764 instance as first argument (so it doesn't rely on some obscure
3761 hidden global).
3765 hidden global).
3762
3766
3763 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3767 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3764 delimiters. While it prevents ().TAB from working, it allows
3768 delimiters. While it prevents ().TAB from working, it allows
3765 completions in open (... expressions. This is by far a more common
3769 completions in open (... expressions. This is by far a more common
3766 case.
3770 case.
3767
3771
3768 2002-04-23 Fernando Perez <fperez@colorado.edu>
3772 2002-04-23 Fernando Perez <fperez@colorado.edu>
3769
3773
3770 * IPython/Extensions/InterpreterPasteInput.py: new
3774 * IPython/Extensions/InterpreterPasteInput.py: new
3771 syntax-processing module for pasting lines with >>> or ... at the
3775 syntax-processing module for pasting lines with >>> or ... at the
3772 start.
3776 start.
3773
3777
3774 * IPython/Extensions/PhysicalQ_Interactive.py
3778 * IPython/Extensions/PhysicalQ_Interactive.py
3775 (PhysicalQuantityInteractive.__int__): fixed to work with either
3779 (PhysicalQuantityInteractive.__int__): fixed to work with either
3776 Numeric or math.
3780 Numeric or math.
3777
3781
3778 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3782 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3779 provided profiles. Now we have:
3783 provided profiles. Now we have:
3780 -math -> math module as * and cmath with its own namespace.
3784 -math -> math module as * and cmath with its own namespace.
3781 -numeric -> Numeric as *, plus gnuplot & grace
3785 -numeric -> Numeric as *, plus gnuplot & grace
3782 -physics -> same as before
3786 -physics -> same as before
3783
3787
3784 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3788 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3785 user-defined magics wouldn't be found by @magic if they were
3789 user-defined magics wouldn't be found by @magic if they were
3786 defined as class methods. Also cleaned up the namespace search
3790 defined as class methods. Also cleaned up the namespace search
3787 logic and the string building (to use %s instead of many repeated
3791 logic and the string building (to use %s instead of many repeated
3788 string adds).
3792 string adds).
3789
3793
3790 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3794 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3791 of user-defined magics to operate with class methods (cleaner, in
3795 of user-defined magics to operate with class methods (cleaner, in
3792 line with the gnuplot code).
3796 line with the gnuplot code).
3793
3797
3794 2002-04-22 Fernando Perez <fperez@colorado.edu>
3798 2002-04-22 Fernando Perez <fperez@colorado.edu>
3795
3799
3796 * setup.py: updated dependency list so that manual is updated when
3800 * setup.py: updated dependency list so that manual is updated when
3797 all included files change.
3801 all included files change.
3798
3802
3799 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3803 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3800 the delimiter removal option (the fix is ugly right now).
3804 the delimiter removal option (the fix is ugly right now).
3801
3805
3802 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3806 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3803 all of the math profile (quicker loading, no conflict between
3807 all of the math profile (quicker loading, no conflict between
3804 g-9.8 and g-gnuplot).
3808 g-9.8 and g-gnuplot).
3805
3809
3806 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3810 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3807 name of post-mortem files to IPython_crash_report.txt.
3811 name of post-mortem files to IPython_crash_report.txt.
3808
3812
3809 * Cleanup/update of the docs. Added all the new readline info and
3813 * Cleanup/update of the docs. Added all the new readline info and
3810 formatted all lists as 'real lists'.
3814 formatted all lists as 'real lists'.
3811
3815
3812 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3816 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3813 tab-completion options, since the full readline parse_and_bind is
3817 tab-completion options, since the full readline parse_and_bind is
3814 now accessible.
3818 now accessible.
3815
3819
3816 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3820 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3817 handling of readline options. Now users can specify any string to
3821 handling of readline options. Now users can specify any string to
3818 be passed to parse_and_bind(), as well as the delimiters to be
3822 be passed to parse_and_bind(), as well as the delimiters to be
3819 removed.
3823 removed.
3820 (InteractiveShell.__init__): Added __name__ to the global
3824 (InteractiveShell.__init__): Added __name__ to the global
3821 namespace so that things like Itpl which rely on its existence
3825 namespace so that things like Itpl which rely on its existence
3822 don't crash.
3826 don't crash.
3823 (InteractiveShell._prefilter): Defined the default with a _ so
3827 (InteractiveShell._prefilter): Defined the default with a _ so
3824 that prefilter() is easier to override, while the default one
3828 that prefilter() is easier to override, while the default one
3825 remains available.
3829 remains available.
3826
3830
3827 2002-04-18 Fernando Perez <fperez@colorado.edu>
3831 2002-04-18 Fernando Perez <fperez@colorado.edu>
3828
3832
3829 * Added information about pdb in the docs.
3833 * Added information about pdb in the docs.
3830
3834
3831 2002-04-17 Fernando Perez <fperez@colorado.edu>
3835 2002-04-17 Fernando Perez <fperez@colorado.edu>
3832
3836
3833 * IPython/ipmaker.py (make_IPython): added rc_override option to
3837 * IPython/ipmaker.py (make_IPython): added rc_override option to
3834 allow passing config options at creation time which may override
3838 allow passing config options at creation time which may override
3835 anything set in the config files or command line. This is
3839 anything set in the config files or command line. This is
3836 particularly useful for configuring embedded instances.
3840 particularly useful for configuring embedded instances.
3837
3841
3838 2002-04-15 Fernando Perez <fperez@colorado.edu>
3842 2002-04-15 Fernando Perez <fperez@colorado.edu>
3839
3843
3840 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3844 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3841 crash embedded instances because of the input cache falling out of
3845 crash embedded instances because of the input cache falling out of
3842 sync with the output counter.
3846 sync with the output counter.
3843
3847
3844 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3848 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3845 mode which calls pdb after an uncaught exception in IPython itself.
3849 mode which calls pdb after an uncaught exception in IPython itself.
3846
3850
3847 2002-04-14 Fernando Perez <fperez@colorado.edu>
3851 2002-04-14 Fernando Perez <fperez@colorado.edu>
3848
3852
3849 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3853 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3850 readline, fix it back after each call.
3854 readline, fix it back after each call.
3851
3855
3852 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3856 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3853 method to force all access via __call__(), which guarantees that
3857 method to force all access via __call__(), which guarantees that
3854 traceback references are properly deleted.
3858 traceback references are properly deleted.
3855
3859
3856 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3860 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3857 improve printing when pprint is in use.
3861 improve printing when pprint is in use.
3858
3862
3859 2002-04-13 Fernando Perez <fperez@colorado.edu>
3863 2002-04-13 Fernando Perez <fperez@colorado.edu>
3860
3864
3861 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3865 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3862 exceptions aren't caught anymore. If the user triggers one, he
3866 exceptions aren't caught anymore. If the user triggers one, he
3863 should know why he's doing it and it should go all the way up,
3867 should know why he's doing it and it should go all the way up,
3864 just like any other exception. So now @abort will fully kill the
3868 just like any other exception. So now @abort will fully kill the
3865 embedded interpreter and the embedding code (unless that happens
3869 embedded interpreter and the embedding code (unless that happens
3866 to catch SystemExit).
3870 to catch SystemExit).
3867
3871
3868 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3872 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3869 and a debugger() method to invoke the interactive pdb debugger
3873 and a debugger() method to invoke the interactive pdb debugger
3870 after printing exception information. Also added the corresponding
3874 after printing exception information. Also added the corresponding
3871 -pdb option and @pdb magic to control this feature, and updated
3875 -pdb option and @pdb magic to control this feature, and updated
3872 the docs. After a suggestion from Christopher Hart
3876 the docs. After a suggestion from Christopher Hart
3873 (hart-AT-caltech.edu).
3877 (hart-AT-caltech.edu).
3874
3878
3875 2002-04-12 Fernando Perez <fperez@colorado.edu>
3879 2002-04-12 Fernando Perez <fperez@colorado.edu>
3876
3880
3877 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3881 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3878 the exception handlers defined by the user (not the CrashHandler)
3882 the exception handlers defined by the user (not the CrashHandler)
3879 so that user exceptions don't trigger an ipython bug report.
3883 so that user exceptions don't trigger an ipython bug report.
3880
3884
3881 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3885 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3882 configurable (it should have always been so).
3886 configurable (it should have always been so).
3883
3887
3884 2002-03-26 Fernando Perez <fperez@colorado.edu>
3888 2002-03-26 Fernando Perez <fperez@colorado.edu>
3885
3889
3886 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3890 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3887 and there to fix embedding namespace issues. This should all be
3891 and there to fix embedding namespace issues. This should all be
3888 done in a more elegant way.
3892 done in a more elegant way.
3889
3893
3890 2002-03-25 Fernando Perez <fperez@colorado.edu>
3894 2002-03-25 Fernando Perez <fperez@colorado.edu>
3891
3895
3892 * IPython/genutils.py (get_home_dir): Try to make it work under
3896 * IPython/genutils.py (get_home_dir): Try to make it work under
3893 win9x also.
3897 win9x also.
3894
3898
3895 2002-03-20 Fernando Perez <fperez@colorado.edu>
3899 2002-03-20 Fernando Perez <fperez@colorado.edu>
3896
3900
3897 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3901 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3898 sys.displayhook untouched upon __init__.
3902 sys.displayhook untouched upon __init__.
3899
3903
3900 2002-03-19 Fernando Perez <fperez@colorado.edu>
3904 2002-03-19 Fernando Perez <fperez@colorado.edu>
3901
3905
3902 * Released 0.2.9 (for embedding bug, basically).
3906 * Released 0.2.9 (for embedding bug, basically).
3903
3907
3904 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3908 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3905 exceptions so that enclosing shell's state can be restored.
3909 exceptions so that enclosing shell's state can be restored.
3906
3910
3907 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3911 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3908 naming conventions in the .ipython/ dir.
3912 naming conventions in the .ipython/ dir.
3909
3913
3910 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3914 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3911 from delimiters list so filenames with - in them get expanded.
3915 from delimiters list so filenames with - in them get expanded.
3912
3916
3913 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3917 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3914 sys.displayhook not being properly restored after an embedded call.
3918 sys.displayhook not being properly restored after an embedded call.
3915
3919
3916 2002-03-18 Fernando Perez <fperez@colorado.edu>
3920 2002-03-18 Fernando Perez <fperez@colorado.edu>
3917
3921
3918 * Released 0.2.8
3922 * Released 0.2.8
3919
3923
3920 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3924 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3921 some files weren't being included in a -upgrade.
3925 some files weren't being included in a -upgrade.
3922 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3926 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3923 on' so that the first tab completes.
3927 on' so that the first tab completes.
3924 (InteractiveShell.handle_magic): fixed bug with spaces around
3928 (InteractiveShell.handle_magic): fixed bug with spaces around
3925 quotes breaking many magic commands.
3929 quotes breaking many magic commands.
3926
3930
3927 * setup.py: added note about ignoring the syntax error messages at
3931 * setup.py: added note about ignoring the syntax error messages at
3928 installation.
3932 installation.
3929
3933
3930 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3934 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3931 streamlining the gnuplot interface, now there's only one magic @gp.
3935 streamlining the gnuplot interface, now there's only one magic @gp.
3932
3936
3933 2002-03-17 Fernando Perez <fperez@colorado.edu>
3937 2002-03-17 Fernando Perez <fperez@colorado.edu>
3934
3938
3935 * IPython/UserConfig/magic_gnuplot.py: new name for the
3939 * IPython/UserConfig/magic_gnuplot.py: new name for the
3936 example-magic_pm.py file. Much enhanced system, now with a shell
3940 example-magic_pm.py file. Much enhanced system, now with a shell
3937 for communicating directly with gnuplot, one command at a time.
3941 for communicating directly with gnuplot, one command at a time.
3938
3942
3939 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3943 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3940 setting __name__=='__main__'.
3944 setting __name__=='__main__'.
3941
3945
3942 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3946 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3943 mini-shell for accessing gnuplot from inside ipython. Should
3947 mini-shell for accessing gnuplot from inside ipython. Should
3944 extend it later for grace access too. Inspired by Arnd's
3948 extend it later for grace access too. Inspired by Arnd's
3945 suggestion.
3949 suggestion.
3946
3950
3947 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3951 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3948 calling magic functions with () in their arguments. Thanks to Arnd
3952 calling magic functions with () in their arguments. Thanks to Arnd
3949 Baecker for pointing this to me.
3953 Baecker for pointing this to me.
3950
3954
3951 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3955 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3952 infinitely for integer or complex arrays (only worked with floats).
3956 infinitely for integer or complex arrays (only worked with floats).
3953
3957
3954 2002-03-16 Fernando Perez <fperez@colorado.edu>
3958 2002-03-16 Fernando Perez <fperez@colorado.edu>
3955
3959
3956 * setup.py: Merged setup and setup_windows into a single script
3960 * setup.py: Merged setup and setup_windows into a single script
3957 which properly handles things for windows users.
3961 which properly handles things for windows users.
3958
3962
3959 2002-03-15 Fernando Perez <fperez@colorado.edu>
3963 2002-03-15 Fernando Perez <fperez@colorado.edu>
3960
3964
3961 * Big change to the manual: now the magics are all automatically
3965 * Big change to the manual: now the magics are all automatically
3962 documented. This information is generated from their docstrings
3966 documented. This information is generated from their docstrings
3963 and put in a latex file included by the manual lyx file. This way
3967 and put in a latex file included by the manual lyx file. This way
3964 we get always up to date information for the magics. The manual
3968 we get always up to date information for the magics. The manual
3965 now also has proper version information, also auto-synced.
3969 now also has proper version information, also auto-synced.
3966
3970
3967 For this to work, an undocumented --magic_docstrings option was added.
3971 For this to work, an undocumented --magic_docstrings option was added.
3968
3972
3969 2002-03-13 Fernando Perez <fperez@colorado.edu>
3973 2002-03-13 Fernando Perez <fperez@colorado.edu>
3970
3974
3971 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3975 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3972 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3976 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3973
3977
3974 2002-03-12 Fernando Perez <fperez@colorado.edu>
3978 2002-03-12 Fernando Perez <fperez@colorado.edu>
3975
3979
3976 * IPython/ultraTB.py (TermColors): changed color escapes again to
3980 * IPython/ultraTB.py (TermColors): changed color escapes again to
3977 fix the (old, reintroduced) line-wrapping bug. Basically, if
3981 fix the (old, reintroduced) line-wrapping bug. Basically, if
3978 \001..\002 aren't given in the color escapes, lines get wrapped
3982 \001..\002 aren't given in the color escapes, lines get wrapped
3979 weirdly. But giving those screws up old xterms and emacs terms. So
3983 weirdly. But giving those screws up old xterms and emacs terms. So
3980 I added some logic for emacs terms to be ok, but I can't identify old
3984 I added some logic for emacs terms to be ok, but I can't identify old
3981 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3985 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3982
3986
3983 2002-03-10 Fernando Perez <fperez@colorado.edu>
3987 2002-03-10 Fernando Perez <fperez@colorado.edu>
3984
3988
3985 * IPython/usage.py (__doc__): Various documentation cleanups and
3989 * IPython/usage.py (__doc__): Various documentation cleanups and
3986 updates, both in usage docstrings and in the manual.
3990 updates, both in usage docstrings and in the manual.
3987
3991
3988 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3992 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3989 handling of caching. Set minimum acceptabe value for having a
3993 handling of caching. Set minimum acceptabe value for having a
3990 cache at 20 values.
3994 cache at 20 values.
3991
3995
3992 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3996 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3993 install_first_time function to a method, renamed it and added an
3997 install_first_time function to a method, renamed it and added an
3994 'upgrade' mode. Now people can update their config directory with
3998 'upgrade' mode. Now people can update their config directory with
3995 a simple command line switch (-upgrade, also new).
3999 a simple command line switch (-upgrade, also new).
3996
4000
3997 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4001 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3998 @file (convenient for automagic users under Python >= 2.2).
4002 @file (convenient for automagic users under Python >= 2.2).
3999 Removed @files (it seemed more like a plural than an abbrev. of
4003 Removed @files (it seemed more like a plural than an abbrev. of
4000 'file show').
4004 'file show').
4001
4005
4002 * IPython/iplib.py (install_first_time): Fixed crash if there were
4006 * IPython/iplib.py (install_first_time): Fixed crash if there were
4003 backup files ('~') in .ipython/ install directory.
4007 backup files ('~') in .ipython/ install directory.
4004
4008
4005 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4009 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4006 system. Things look fine, but these changes are fairly
4010 system. Things look fine, but these changes are fairly
4007 intrusive. Test them for a few days.
4011 intrusive. Test them for a few days.
4008
4012
4009 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4013 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4010 the prompts system. Now all in/out prompt strings are user
4014 the prompts system. Now all in/out prompt strings are user
4011 controllable. This is particularly useful for embedding, as one
4015 controllable. This is particularly useful for embedding, as one
4012 can tag embedded instances with particular prompts.
4016 can tag embedded instances with particular prompts.
4013
4017
4014 Also removed global use of sys.ps1/2, which now allows nested
4018 Also removed global use of sys.ps1/2, which now allows nested
4015 embeddings without any problems. Added command-line options for
4019 embeddings without any problems. Added command-line options for
4016 the prompt strings.
4020 the prompt strings.
4017
4021
4018 2002-03-08 Fernando Perez <fperez@colorado.edu>
4022 2002-03-08 Fernando Perez <fperez@colorado.edu>
4019
4023
4020 * IPython/UserConfig/example-embed-short.py (ipshell): added
4024 * IPython/UserConfig/example-embed-short.py (ipshell): added
4021 example file with the bare minimum code for embedding.
4025 example file with the bare minimum code for embedding.
4022
4026
4023 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4027 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4024 functionality for the embeddable shell to be activated/deactivated
4028 functionality for the embeddable shell to be activated/deactivated
4025 either globally or at each call.
4029 either globally or at each call.
4026
4030
4027 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4031 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4028 rewriting the prompt with '--->' for auto-inputs with proper
4032 rewriting the prompt with '--->' for auto-inputs with proper
4029 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4033 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4030 this is handled by the prompts class itself, as it should.
4034 this is handled by the prompts class itself, as it should.
4031
4035
4032 2002-03-05 Fernando Perez <fperez@colorado.edu>
4036 2002-03-05 Fernando Perez <fperez@colorado.edu>
4033
4037
4034 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4038 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4035 @logstart to avoid name clashes with the math log function.
4039 @logstart to avoid name clashes with the math log function.
4036
4040
4037 * Big updates to X/Emacs section of the manual.
4041 * Big updates to X/Emacs section of the manual.
4038
4042
4039 * Removed ipython_emacs. Milan explained to me how to pass
4043 * Removed ipython_emacs. Milan explained to me how to pass
4040 arguments to ipython through Emacs. Some day I'm going to end up
4044 arguments to ipython through Emacs. Some day I'm going to end up
4041 learning some lisp...
4045 learning some lisp...
4042
4046
4043 2002-03-04 Fernando Perez <fperez@colorado.edu>
4047 2002-03-04 Fernando Perez <fperez@colorado.edu>
4044
4048
4045 * IPython/ipython_emacs: Created script to be used as the
4049 * IPython/ipython_emacs: Created script to be used as the
4046 py-python-command Emacs variable so we can pass IPython
4050 py-python-command Emacs variable so we can pass IPython
4047 parameters. I can't figure out how to tell Emacs directly to pass
4051 parameters. I can't figure out how to tell Emacs directly to pass
4048 parameters to IPython, so a dummy shell script will do it.
4052 parameters to IPython, so a dummy shell script will do it.
4049
4053
4050 Other enhancements made for things to work better under Emacs'
4054 Other enhancements made for things to work better under Emacs'
4051 various types of terminals. Many thanks to Milan Zamazal
4055 various types of terminals. Many thanks to Milan Zamazal
4052 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4056 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4053
4057
4054 2002-03-01 Fernando Perez <fperez@colorado.edu>
4058 2002-03-01 Fernando Perez <fperez@colorado.edu>
4055
4059
4056 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4060 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4057 that loading of readline is now optional. This gives better
4061 that loading of readline is now optional. This gives better
4058 control to emacs users.
4062 control to emacs users.
4059
4063
4060 * IPython/ultraTB.py (__date__): Modified color escape sequences
4064 * IPython/ultraTB.py (__date__): Modified color escape sequences
4061 and now things work fine under xterm and in Emacs' term buffers
4065 and now things work fine under xterm and in Emacs' term buffers
4062 (though not shell ones). Well, in emacs you get colors, but all
4066 (though not shell ones). Well, in emacs you get colors, but all
4063 seem to be 'light' colors (no difference between dark and light
4067 seem to be 'light' colors (no difference between dark and light
4064 ones). But the garbage chars are gone, and also in xterms. It
4068 ones). But the garbage chars are gone, and also in xterms. It
4065 seems that now I'm using 'cleaner' ansi sequences.
4069 seems that now I'm using 'cleaner' ansi sequences.
4066
4070
4067 2002-02-21 Fernando Perez <fperez@colorado.edu>
4071 2002-02-21 Fernando Perez <fperez@colorado.edu>
4068
4072
4069 * Released 0.2.7 (mainly to publish the scoping fix).
4073 * Released 0.2.7 (mainly to publish the scoping fix).
4070
4074
4071 * IPython/Logger.py (Logger.logstate): added. A corresponding
4075 * IPython/Logger.py (Logger.logstate): added. A corresponding
4072 @logstate magic was created.
4076 @logstate magic was created.
4073
4077
4074 * IPython/Magic.py: fixed nested scoping problem under Python
4078 * IPython/Magic.py: fixed nested scoping problem under Python
4075 2.1.x (automagic wasn't working).
4079 2.1.x (automagic wasn't working).
4076
4080
4077 2002-02-20 Fernando Perez <fperez@colorado.edu>
4081 2002-02-20 Fernando Perez <fperez@colorado.edu>
4078
4082
4079 * Released 0.2.6.
4083 * Released 0.2.6.
4080
4084
4081 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4085 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4082 option so that logs can come out without any headers at all.
4086 option so that logs can come out without any headers at all.
4083
4087
4084 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4088 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4085 SciPy.
4089 SciPy.
4086
4090
4087 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4091 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4088 that embedded IPython calls don't require vars() to be explicitly
4092 that embedded IPython calls don't require vars() to be explicitly
4089 passed. Now they are extracted from the caller's frame (code
4093 passed. Now they are extracted from the caller's frame (code
4090 snatched from Eric Jones' weave). Added better documentation to
4094 snatched from Eric Jones' weave). Added better documentation to
4091 the section on embedding and the example file.
4095 the section on embedding and the example file.
4092
4096
4093 * IPython/genutils.py (page): Changed so that under emacs, it just
4097 * IPython/genutils.py (page): Changed so that under emacs, it just
4094 prints the string. You can then page up and down in the emacs
4098 prints the string. You can then page up and down in the emacs
4095 buffer itself. This is how the builtin help() works.
4099 buffer itself. This is how the builtin help() works.
4096
4100
4097 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4101 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4098 macro scoping: macros need to be executed in the user's namespace
4102 macro scoping: macros need to be executed in the user's namespace
4099 to work as if they had been typed by the user.
4103 to work as if they had been typed by the user.
4100
4104
4101 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4105 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4102 execute automatically (no need to type 'exec...'). They then
4106 execute automatically (no need to type 'exec...'). They then
4103 behave like 'true macros'. The printing system was also modified
4107 behave like 'true macros'. The printing system was also modified
4104 for this to work.
4108 for this to work.
4105
4109
4106 2002-02-19 Fernando Perez <fperez@colorado.edu>
4110 2002-02-19 Fernando Perez <fperez@colorado.edu>
4107
4111
4108 * IPython/genutils.py (page_file): new function for paging files
4112 * IPython/genutils.py (page_file): new function for paging files
4109 in an OS-independent way. Also necessary for file viewing to work
4113 in an OS-independent way. Also necessary for file viewing to work
4110 well inside Emacs buffers.
4114 well inside Emacs buffers.
4111 (page): Added checks for being in an emacs buffer.
4115 (page): Added checks for being in an emacs buffer.
4112 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4116 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4113 same bug in iplib.
4117 same bug in iplib.
4114
4118
4115 2002-02-18 Fernando Perez <fperez@colorado.edu>
4119 2002-02-18 Fernando Perez <fperez@colorado.edu>
4116
4120
4117 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4121 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4118 of readline so that IPython can work inside an Emacs buffer.
4122 of readline so that IPython can work inside an Emacs buffer.
4119
4123
4120 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4124 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4121 method signatures (they weren't really bugs, but it looks cleaner
4125 method signatures (they weren't really bugs, but it looks cleaner
4122 and keeps PyChecker happy).
4126 and keeps PyChecker happy).
4123
4127
4124 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4128 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4125 for implementing various user-defined hooks. Currently only
4129 for implementing various user-defined hooks. Currently only
4126 display is done.
4130 display is done.
4127
4131
4128 * IPython/Prompts.py (CachedOutput._display): changed display
4132 * IPython/Prompts.py (CachedOutput._display): changed display
4129 functions so that they can be dynamically changed by users easily.
4133 functions so that they can be dynamically changed by users easily.
4130
4134
4131 * IPython/Extensions/numeric_formats.py (num_display): added an
4135 * IPython/Extensions/numeric_formats.py (num_display): added an
4132 extension for printing NumPy arrays in flexible manners. It
4136 extension for printing NumPy arrays in flexible manners. It
4133 doesn't do anything yet, but all the structure is in
4137 doesn't do anything yet, but all the structure is in
4134 place. Ultimately the plan is to implement output format control
4138 place. Ultimately the plan is to implement output format control
4135 like in Octave.
4139 like in Octave.
4136
4140
4137 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4141 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4138 methods are found at run-time by all the automatic machinery.
4142 methods are found at run-time by all the automatic machinery.
4139
4143
4140 2002-02-17 Fernando Perez <fperez@colorado.edu>
4144 2002-02-17 Fernando Perez <fperez@colorado.edu>
4141
4145
4142 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4146 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4143 whole file a little.
4147 whole file a little.
4144
4148
4145 * ToDo: closed this document. Now there's a new_design.lyx
4149 * ToDo: closed this document. Now there's a new_design.lyx
4146 document for all new ideas. Added making a pdf of it for the
4150 document for all new ideas. Added making a pdf of it for the
4147 end-user distro.
4151 end-user distro.
4148
4152
4149 * IPython/Logger.py (Logger.switch_log): Created this to replace
4153 * IPython/Logger.py (Logger.switch_log): Created this to replace
4150 logon() and logoff(). It also fixes a nasty crash reported by
4154 logon() and logoff(). It also fixes a nasty crash reported by
4151 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4155 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4152
4156
4153 * IPython/iplib.py (complete): got auto-completion to work with
4157 * IPython/iplib.py (complete): got auto-completion to work with
4154 automagic (I had wanted this for a long time).
4158 automagic (I had wanted this for a long time).
4155
4159
4156 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4160 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4157 to @file, since file() is now a builtin and clashes with automagic
4161 to @file, since file() is now a builtin and clashes with automagic
4158 for @file.
4162 for @file.
4159
4163
4160 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4164 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4161 of this was previously in iplib, which had grown to more than 2000
4165 of this was previously in iplib, which had grown to more than 2000
4162 lines, way too long. No new functionality, but it makes managing
4166 lines, way too long. No new functionality, but it makes managing
4163 the code a bit easier.
4167 the code a bit easier.
4164
4168
4165 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4169 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4166 information to crash reports.
4170 information to crash reports.
4167
4171
4168 2002-02-12 Fernando Perez <fperez@colorado.edu>
4172 2002-02-12 Fernando Perez <fperez@colorado.edu>
4169
4173
4170 * Released 0.2.5.
4174 * Released 0.2.5.
4171
4175
4172 2002-02-11 Fernando Perez <fperez@colorado.edu>
4176 2002-02-11 Fernando Perez <fperez@colorado.edu>
4173
4177
4174 * Wrote a relatively complete Windows installer. It puts
4178 * Wrote a relatively complete Windows installer. It puts
4175 everything in place, creates Start Menu entries and fixes the
4179 everything in place, creates Start Menu entries and fixes the
4176 color issues. Nothing fancy, but it works.
4180 color issues. Nothing fancy, but it works.
4177
4181
4178 2002-02-10 Fernando Perez <fperez@colorado.edu>
4182 2002-02-10 Fernando Perez <fperez@colorado.edu>
4179
4183
4180 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4184 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4181 os.path.expanduser() call so that we can type @run ~/myfile.py and
4185 os.path.expanduser() call so that we can type @run ~/myfile.py and
4182 have thigs work as expected.
4186 have thigs work as expected.
4183
4187
4184 * IPython/genutils.py (page): fixed exception handling so things
4188 * IPython/genutils.py (page): fixed exception handling so things
4185 work both in Unix and Windows correctly. Quitting a pager triggers
4189 work both in Unix and Windows correctly. Quitting a pager triggers
4186 an IOError/broken pipe in Unix, and in windows not finding a pager
4190 an IOError/broken pipe in Unix, and in windows not finding a pager
4187 is also an IOError, so I had to actually look at the return value
4191 is also an IOError, so I had to actually look at the return value
4188 of the exception, not just the exception itself. Should be ok now.
4192 of the exception, not just the exception itself. Should be ok now.
4189
4193
4190 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4194 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4191 modified to allow case-insensitive color scheme changes.
4195 modified to allow case-insensitive color scheme changes.
4192
4196
4193 2002-02-09 Fernando Perez <fperez@colorado.edu>
4197 2002-02-09 Fernando Perez <fperez@colorado.edu>
4194
4198
4195 * IPython/genutils.py (native_line_ends): new function to leave
4199 * IPython/genutils.py (native_line_ends): new function to leave
4196 user config files with os-native line-endings.
4200 user config files with os-native line-endings.
4197
4201
4198 * README and manual updates.
4202 * README and manual updates.
4199
4203
4200 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4204 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4201 instead of StringType to catch Unicode strings.
4205 instead of StringType to catch Unicode strings.
4202
4206
4203 * IPython/genutils.py (filefind): fixed bug for paths with
4207 * IPython/genutils.py (filefind): fixed bug for paths with
4204 embedded spaces (very common in Windows).
4208 embedded spaces (very common in Windows).
4205
4209
4206 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4210 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4207 files under Windows, so that they get automatically associated
4211 files under Windows, so that they get automatically associated
4208 with a text editor. Windows makes it a pain to handle
4212 with a text editor. Windows makes it a pain to handle
4209 extension-less files.
4213 extension-less files.
4210
4214
4211 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4215 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4212 warning about readline only occur for Posix. In Windows there's no
4216 warning about readline only occur for Posix. In Windows there's no
4213 way to get readline, so why bother with the warning.
4217 way to get readline, so why bother with the warning.
4214
4218
4215 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4219 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4216 for __str__ instead of dir(self), since dir() changed in 2.2.
4220 for __str__ instead of dir(self), since dir() changed in 2.2.
4217
4221
4218 * Ported to Windows! Tested on XP, I suspect it should work fine
4222 * Ported to Windows! Tested on XP, I suspect it should work fine
4219 on NT/2000, but I don't think it will work on 98 et al. That
4223 on NT/2000, but I don't think it will work on 98 et al. That
4220 series of Windows is such a piece of junk anyway that I won't try
4224 series of Windows is such a piece of junk anyway that I won't try
4221 porting it there. The XP port was straightforward, showed a few
4225 porting it there. The XP port was straightforward, showed a few
4222 bugs here and there (fixed all), in particular some string
4226 bugs here and there (fixed all), in particular some string
4223 handling stuff which required considering Unicode strings (which
4227 handling stuff which required considering Unicode strings (which
4224 Windows uses). This is good, but hasn't been too tested :) No
4228 Windows uses). This is good, but hasn't been too tested :) No
4225 fancy installer yet, I'll put a note in the manual so people at
4229 fancy installer yet, I'll put a note in the manual so people at
4226 least make manually a shortcut.
4230 least make manually a shortcut.
4227
4231
4228 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4232 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4229 into a single one, "colors". This now controls both prompt and
4233 into a single one, "colors". This now controls both prompt and
4230 exception color schemes, and can be changed both at startup
4234 exception color schemes, and can be changed both at startup
4231 (either via command-line switches or via ipythonrc files) and at
4235 (either via command-line switches or via ipythonrc files) and at
4232 runtime, with @colors.
4236 runtime, with @colors.
4233 (Magic.magic_run): renamed @prun to @run and removed the old
4237 (Magic.magic_run): renamed @prun to @run and removed the old
4234 @run. The two were too similar to warrant keeping both.
4238 @run. The two were too similar to warrant keeping both.
4235
4239
4236 2002-02-03 Fernando Perez <fperez@colorado.edu>
4240 2002-02-03 Fernando Perez <fperez@colorado.edu>
4237
4241
4238 * IPython/iplib.py (install_first_time): Added comment on how to
4242 * IPython/iplib.py (install_first_time): Added comment on how to
4239 configure the color options for first-time users. Put a <return>
4243 configure the color options for first-time users. Put a <return>
4240 request at the end so that small-terminal users get a chance to
4244 request at the end so that small-terminal users get a chance to
4241 read the startup info.
4245 read the startup info.
4242
4246
4243 2002-01-23 Fernando Perez <fperez@colorado.edu>
4247 2002-01-23 Fernando Perez <fperez@colorado.edu>
4244
4248
4245 * IPython/iplib.py (CachedOutput.update): Changed output memory
4249 * IPython/iplib.py (CachedOutput.update): Changed output memory
4246 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4250 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4247 input history we still use _i. Did this b/c these variable are
4251 input history we still use _i. Did this b/c these variable are
4248 very commonly used in interactive work, so the less we need to
4252 very commonly used in interactive work, so the less we need to
4249 type the better off we are.
4253 type the better off we are.
4250 (Magic.magic_prun): updated @prun to better handle the namespaces
4254 (Magic.magic_prun): updated @prun to better handle the namespaces
4251 the file will run in, including a fix for __name__ not being set
4255 the file will run in, including a fix for __name__ not being set
4252 before.
4256 before.
4253
4257
4254 2002-01-20 Fernando Perez <fperez@colorado.edu>
4258 2002-01-20 Fernando Perez <fperez@colorado.edu>
4255
4259
4256 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4260 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4257 extra garbage for Python 2.2. Need to look more carefully into
4261 extra garbage for Python 2.2. Need to look more carefully into
4258 this later.
4262 this later.
4259
4263
4260 2002-01-19 Fernando Perez <fperez@colorado.edu>
4264 2002-01-19 Fernando Perez <fperez@colorado.edu>
4261
4265
4262 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4266 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4263 display SyntaxError exceptions properly formatted when they occur
4267 display SyntaxError exceptions properly formatted when they occur
4264 (they can be triggered by imported code).
4268 (they can be triggered by imported code).
4265
4269
4266 2002-01-18 Fernando Perez <fperez@colorado.edu>
4270 2002-01-18 Fernando Perez <fperez@colorado.edu>
4267
4271
4268 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4272 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4269 SyntaxError exceptions are reported nicely formatted, instead of
4273 SyntaxError exceptions are reported nicely formatted, instead of
4270 spitting out only offset information as before.
4274 spitting out only offset information as before.
4271 (Magic.magic_prun): Added the @prun function for executing
4275 (Magic.magic_prun): Added the @prun function for executing
4272 programs with command line args inside IPython.
4276 programs with command line args inside IPython.
4273
4277
4274 2002-01-16 Fernando Perez <fperez@colorado.edu>
4278 2002-01-16 Fernando Perez <fperez@colorado.edu>
4275
4279
4276 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4280 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4277 to *not* include the last item given in a range. This brings their
4281 to *not* include the last item given in a range. This brings their
4278 behavior in line with Python's slicing:
4282 behavior in line with Python's slicing:
4279 a[n1:n2] -> a[n1]...a[n2-1]
4283 a[n1:n2] -> a[n1]...a[n2-1]
4280 It may be a bit less convenient, but I prefer to stick to Python's
4284 It may be a bit less convenient, but I prefer to stick to Python's
4281 conventions *everywhere*, so users never have to wonder.
4285 conventions *everywhere*, so users never have to wonder.
4282 (Magic.magic_macro): Added @macro function to ease the creation of
4286 (Magic.magic_macro): Added @macro function to ease the creation of
4283 macros.
4287 macros.
4284
4288
4285 2002-01-05 Fernando Perez <fperez@colorado.edu>
4289 2002-01-05 Fernando Perez <fperez@colorado.edu>
4286
4290
4287 * Released 0.2.4.
4291 * Released 0.2.4.
4288
4292
4289 * IPython/iplib.py (Magic.magic_pdef):
4293 * IPython/iplib.py (Magic.magic_pdef):
4290 (InteractiveShell.safe_execfile): report magic lines and error
4294 (InteractiveShell.safe_execfile): report magic lines and error
4291 lines without line numbers so one can easily copy/paste them for
4295 lines without line numbers so one can easily copy/paste them for
4292 re-execution.
4296 re-execution.
4293
4297
4294 * Updated manual with recent changes.
4298 * Updated manual with recent changes.
4295
4299
4296 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4300 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4297 docstring printing when class? is called. Very handy for knowing
4301 docstring printing when class? is called. Very handy for knowing
4298 how to create class instances (as long as __init__ is well
4302 how to create class instances (as long as __init__ is well
4299 documented, of course :)
4303 documented, of course :)
4300 (Magic.magic_doc): print both class and constructor docstrings.
4304 (Magic.magic_doc): print both class and constructor docstrings.
4301 (Magic.magic_pdef): give constructor info if passed a class and
4305 (Magic.magic_pdef): give constructor info if passed a class and
4302 __call__ info for callable object instances.
4306 __call__ info for callable object instances.
4303
4307
4304 2002-01-04 Fernando Perez <fperez@colorado.edu>
4308 2002-01-04 Fernando Perez <fperez@colorado.edu>
4305
4309
4306 * Made deep_reload() off by default. It doesn't always work
4310 * Made deep_reload() off by default. It doesn't always work
4307 exactly as intended, so it's probably safer to have it off. It's
4311 exactly as intended, so it's probably safer to have it off. It's
4308 still available as dreload() anyway, so nothing is lost.
4312 still available as dreload() anyway, so nothing is lost.
4309
4313
4310 2002-01-02 Fernando Perez <fperez@colorado.edu>
4314 2002-01-02 Fernando Perez <fperez@colorado.edu>
4311
4315
4312 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4316 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4313 so I wanted an updated release).
4317 so I wanted an updated release).
4314
4318
4315 2001-12-27 Fernando Perez <fperez@colorado.edu>
4319 2001-12-27 Fernando Perez <fperez@colorado.edu>
4316
4320
4317 * IPython/iplib.py (InteractiveShell.interact): Added the original
4321 * IPython/iplib.py (InteractiveShell.interact): Added the original
4318 code from 'code.py' for this module in order to change the
4322 code from 'code.py' for this module in order to change the
4319 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4323 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4320 the history cache would break when the user hit Ctrl-C, and
4324 the history cache would break when the user hit Ctrl-C, and
4321 interact() offers no way to add any hooks to it.
4325 interact() offers no way to add any hooks to it.
4322
4326
4323 2001-12-23 Fernando Perez <fperez@colorado.edu>
4327 2001-12-23 Fernando Perez <fperez@colorado.edu>
4324
4328
4325 * setup.py: added check for 'MANIFEST' before trying to remove
4329 * setup.py: added check for 'MANIFEST' before trying to remove
4326 it. Thanks to Sean Reifschneider.
4330 it. Thanks to Sean Reifschneider.
4327
4331
4328 2001-12-22 Fernando Perez <fperez@colorado.edu>
4332 2001-12-22 Fernando Perez <fperez@colorado.edu>
4329
4333
4330 * Released 0.2.2.
4334 * Released 0.2.2.
4331
4335
4332 * Finished (reasonably) writing the manual. Later will add the
4336 * Finished (reasonably) writing the manual. Later will add the
4333 python-standard navigation stylesheets, but for the time being
4337 python-standard navigation stylesheets, but for the time being
4334 it's fairly complete. Distribution will include html and pdf
4338 it's fairly complete. Distribution will include html and pdf
4335 versions.
4339 versions.
4336
4340
4337 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4341 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4338 (MayaVi author).
4342 (MayaVi author).
4339
4343
4340 2001-12-21 Fernando Perez <fperez@colorado.edu>
4344 2001-12-21 Fernando Perez <fperez@colorado.edu>
4341
4345
4342 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4346 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4343 good public release, I think (with the manual and the distutils
4347 good public release, I think (with the manual and the distutils
4344 installer). The manual can use some work, but that can go
4348 installer). The manual can use some work, but that can go
4345 slowly. Otherwise I think it's quite nice for end users. Next
4349 slowly. Otherwise I think it's quite nice for end users. Next
4346 summer, rewrite the guts of it...
4350 summer, rewrite the guts of it...
4347
4351
4348 * Changed format of ipythonrc files to use whitespace as the
4352 * Changed format of ipythonrc files to use whitespace as the
4349 separator instead of an explicit '='. Cleaner.
4353 separator instead of an explicit '='. Cleaner.
4350
4354
4351 2001-12-20 Fernando Perez <fperez@colorado.edu>
4355 2001-12-20 Fernando Perez <fperez@colorado.edu>
4352
4356
4353 * Started a manual in LyX. For now it's just a quick merge of the
4357 * Started a manual in LyX. For now it's just a quick merge of the
4354 various internal docstrings and READMEs. Later it may grow into a
4358 various internal docstrings and READMEs. Later it may grow into a
4355 nice, full-blown manual.
4359 nice, full-blown manual.
4356
4360
4357 * Set up a distutils based installer. Installation should now be
4361 * Set up a distutils based installer. Installation should now be
4358 trivially simple for end-users.
4362 trivially simple for end-users.
4359
4363
4360 2001-12-11 Fernando Perez <fperez@colorado.edu>
4364 2001-12-11 Fernando Perez <fperez@colorado.edu>
4361
4365
4362 * Released 0.2.0. First public release, announced it at
4366 * Released 0.2.0. First public release, announced it at
4363 comp.lang.python. From now on, just bugfixes...
4367 comp.lang.python. From now on, just bugfixes...
4364
4368
4365 * Went through all the files, set copyright/license notices and
4369 * Went through all the files, set copyright/license notices and
4366 cleaned up things. Ready for release.
4370 cleaned up things. Ready for release.
4367
4371
4368 2001-12-10 Fernando Perez <fperez@colorado.edu>
4372 2001-12-10 Fernando Perez <fperez@colorado.edu>
4369
4373
4370 * Changed the first-time installer not to use tarfiles. It's more
4374 * Changed the first-time installer not to use tarfiles. It's more
4371 robust now and less unix-dependent. Also makes it easier for
4375 robust now and less unix-dependent. Also makes it easier for
4372 people to later upgrade versions.
4376 people to later upgrade versions.
4373
4377
4374 * Changed @exit to @abort to reflect the fact that it's pretty
4378 * Changed @exit to @abort to reflect the fact that it's pretty
4375 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4379 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4376 becomes significant only when IPyhton is embedded: in that case,
4380 becomes significant only when IPyhton is embedded: in that case,
4377 C-D closes IPython only, but @abort kills the enclosing program
4381 C-D closes IPython only, but @abort kills the enclosing program
4378 too (unless it had called IPython inside a try catching
4382 too (unless it had called IPython inside a try catching
4379 SystemExit).
4383 SystemExit).
4380
4384
4381 * Created Shell module which exposes the actuall IPython Shell
4385 * Created Shell module which exposes the actuall IPython Shell
4382 classes, currently the normal and the embeddable one. This at
4386 classes, currently the normal and the embeddable one. This at
4383 least offers a stable interface we won't need to change when
4387 least offers a stable interface we won't need to change when
4384 (later) the internals are rewritten. That rewrite will be confined
4388 (later) the internals are rewritten. That rewrite will be confined
4385 to iplib and ipmaker, but the Shell interface should remain as is.
4389 to iplib and ipmaker, but the Shell interface should remain as is.
4386
4390
4387 * Added embed module which offers an embeddable IPShell object,
4391 * Added embed module which offers an embeddable IPShell object,
4388 useful to fire up IPython *inside* a running program. Great for
4392 useful to fire up IPython *inside* a running program. Great for
4389 debugging or dynamical data analysis.
4393 debugging or dynamical data analysis.
4390
4394
4391 2001-12-08 Fernando Perez <fperez@colorado.edu>
4395 2001-12-08 Fernando Perez <fperez@colorado.edu>
4392
4396
4393 * Fixed small bug preventing seeing info from methods of defined
4397 * Fixed small bug preventing seeing info from methods of defined
4394 objects (incorrect namespace in _ofind()).
4398 objects (incorrect namespace in _ofind()).
4395
4399
4396 * Documentation cleanup. Moved the main usage docstrings to a
4400 * Documentation cleanup. Moved the main usage docstrings to a
4397 separate file, usage.py (cleaner to maintain, and hopefully in the
4401 separate file, usage.py (cleaner to maintain, and hopefully in the
4398 future some perlpod-like way of producing interactive, man and
4402 future some perlpod-like way of producing interactive, man and
4399 html docs out of it will be found).
4403 html docs out of it will be found).
4400
4404
4401 * Added @profile to see your profile at any time.
4405 * Added @profile to see your profile at any time.
4402
4406
4403 * Added @p as an alias for 'print'. It's especially convenient if
4407 * Added @p as an alias for 'print'. It's especially convenient if
4404 using automagic ('p x' prints x).
4408 using automagic ('p x' prints x).
4405
4409
4406 * Small cleanups and fixes after a pychecker run.
4410 * Small cleanups and fixes after a pychecker run.
4407
4411
4408 * Changed the @cd command to handle @cd - and @cd -<n> for
4412 * Changed the @cd command to handle @cd - and @cd -<n> for
4409 visiting any directory in _dh.
4413 visiting any directory in _dh.
4410
4414
4411 * Introduced _dh, a history of visited directories. @dhist prints
4415 * Introduced _dh, a history of visited directories. @dhist prints
4412 it out with numbers.
4416 it out with numbers.
4413
4417
4414 2001-12-07 Fernando Perez <fperez@colorado.edu>
4418 2001-12-07 Fernando Perez <fperez@colorado.edu>
4415
4419
4416 * Released 0.1.22
4420 * Released 0.1.22
4417
4421
4418 * Made initialization a bit more robust against invalid color
4422 * Made initialization a bit more robust against invalid color
4419 options in user input (exit, not traceback-crash).
4423 options in user input (exit, not traceback-crash).
4420
4424
4421 * Changed the bug crash reporter to write the report only in the
4425 * Changed the bug crash reporter to write the report only in the
4422 user's .ipython directory. That way IPython won't litter people's
4426 user's .ipython directory. That way IPython won't litter people's
4423 hard disks with crash files all over the place. Also print on
4427 hard disks with crash files all over the place. Also print on
4424 screen the necessary mail command.
4428 screen the necessary mail command.
4425
4429
4426 * With the new ultraTB, implemented LightBG color scheme for light
4430 * With the new ultraTB, implemented LightBG color scheme for light
4427 background terminals. A lot of people like white backgrounds, so I
4431 background terminals. A lot of people like white backgrounds, so I
4428 guess we should at least give them something readable.
4432 guess we should at least give them something readable.
4429
4433
4430 2001-12-06 Fernando Perez <fperez@colorado.edu>
4434 2001-12-06 Fernando Perez <fperez@colorado.edu>
4431
4435
4432 * Modified the structure of ultraTB. Now there's a proper class
4436 * Modified the structure of ultraTB. Now there's a proper class
4433 for tables of color schemes which allow adding schemes easily and
4437 for tables of color schemes which allow adding schemes easily and
4434 switching the active scheme without creating a new instance every
4438 switching the active scheme without creating a new instance every
4435 time (which was ridiculous). The syntax for creating new schemes
4439 time (which was ridiculous). The syntax for creating new schemes
4436 is also cleaner. I think ultraTB is finally done, with a clean
4440 is also cleaner. I think ultraTB is finally done, with a clean
4437 class structure. Names are also much cleaner (now there's proper
4441 class structure. Names are also much cleaner (now there's proper
4438 color tables, no need for every variable to also have 'color' in
4442 color tables, no need for every variable to also have 'color' in
4439 its name).
4443 its name).
4440
4444
4441 * Broke down genutils into separate files. Now genutils only
4445 * Broke down genutils into separate files. Now genutils only
4442 contains utility functions, and classes have been moved to their
4446 contains utility functions, and classes have been moved to their
4443 own files (they had enough independent functionality to warrant
4447 own files (they had enough independent functionality to warrant
4444 it): ConfigLoader, OutputTrap, Struct.
4448 it): ConfigLoader, OutputTrap, Struct.
4445
4449
4446 2001-12-05 Fernando Perez <fperez@colorado.edu>
4450 2001-12-05 Fernando Perez <fperez@colorado.edu>
4447
4451
4448 * IPython turns 21! Released version 0.1.21, as a candidate for
4452 * IPython turns 21! Released version 0.1.21, as a candidate for
4449 public consumption. If all goes well, release in a few days.
4453 public consumption. If all goes well, release in a few days.
4450
4454
4451 * Fixed path bug (files in Extensions/ directory wouldn't be found
4455 * Fixed path bug (files in Extensions/ directory wouldn't be found
4452 unless IPython/ was explicitly in sys.path).
4456 unless IPython/ was explicitly in sys.path).
4453
4457
4454 * Extended the FlexCompleter class as MagicCompleter to allow
4458 * Extended the FlexCompleter class as MagicCompleter to allow
4455 completion of @-starting lines.
4459 completion of @-starting lines.
4456
4460
4457 * Created __release__.py file as a central repository for release
4461 * Created __release__.py file as a central repository for release
4458 info that other files can read from.
4462 info that other files can read from.
4459
4463
4460 * Fixed small bug in logging: when logging was turned on in
4464 * Fixed small bug in logging: when logging was turned on in
4461 mid-session, old lines with special meanings (!@?) were being
4465 mid-session, old lines with special meanings (!@?) were being
4462 logged without the prepended comment, which is necessary since
4466 logged without the prepended comment, which is necessary since
4463 they are not truly valid python syntax. This should make session
4467 they are not truly valid python syntax. This should make session
4464 restores produce less errors.
4468 restores produce less errors.
4465
4469
4466 * The namespace cleanup forced me to make a FlexCompleter class
4470 * The namespace cleanup forced me to make a FlexCompleter class
4467 which is nothing but a ripoff of rlcompleter, but with selectable
4471 which is nothing but a ripoff of rlcompleter, but with selectable
4468 namespace (rlcompleter only works in __main__.__dict__). I'll try
4472 namespace (rlcompleter only works in __main__.__dict__). I'll try
4469 to submit a note to the authors to see if this change can be
4473 to submit a note to the authors to see if this change can be
4470 incorporated in future rlcompleter releases (Dec.6: done)
4474 incorporated in future rlcompleter releases (Dec.6: done)
4471
4475
4472 * More fixes to namespace handling. It was a mess! Now all
4476 * More fixes to namespace handling. It was a mess! Now all
4473 explicit references to __main__.__dict__ are gone (except when
4477 explicit references to __main__.__dict__ are gone (except when
4474 really needed) and everything is handled through the namespace
4478 really needed) and everything is handled through the namespace
4475 dicts in the IPython instance. We seem to be getting somewhere
4479 dicts in the IPython instance. We seem to be getting somewhere
4476 with this, finally...
4480 with this, finally...
4477
4481
4478 * Small documentation updates.
4482 * Small documentation updates.
4479
4483
4480 * Created the Extensions directory under IPython (with an
4484 * Created the Extensions directory under IPython (with an
4481 __init__.py). Put the PhysicalQ stuff there. This directory should
4485 __init__.py). Put the PhysicalQ stuff there. This directory should
4482 be used for all special-purpose extensions.
4486 be used for all special-purpose extensions.
4483
4487
4484 * File renaming:
4488 * File renaming:
4485 ipythonlib --> ipmaker
4489 ipythonlib --> ipmaker
4486 ipplib --> iplib
4490 ipplib --> iplib
4487 This makes a bit more sense in terms of what these files actually do.
4491 This makes a bit more sense in terms of what these files actually do.
4488
4492
4489 * Moved all the classes and functions in ipythonlib to ipplib, so
4493 * Moved all the classes and functions in ipythonlib to ipplib, so
4490 now ipythonlib only has make_IPython(). This will ease up its
4494 now ipythonlib only has make_IPython(). This will ease up its
4491 splitting in smaller functional chunks later.
4495 splitting in smaller functional chunks later.
4492
4496
4493 * Cleaned up (done, I think) output of @whos. Better column
4497 * Cleaned up (done, I think) output of @whos. Better column
4494 formatting, and now shows str(var) for as much as it can, which is
4498 formatting, and now shows str(var) for as much as it can, which is
4495 typically what one gets with a 'print var'.
4499 typically what one gets with a 'print var'.
4496
4500
4497 2001-12-04 Fernando Perez <fperez@colorado.edu>
4501 2001-12-04 Fernando Perez <fperez@colorado.edu>
4498
4502
4499 * Fixed namespace problems. Now builtin/IPyhton/user names get
4503 * Fixed namespace problems. Now builtin/IPyhton/user names get
4500 properly reported in their namespace. Internal namespace handling
4504 properly reported in their namespace. Internal namespace handling
4501 is finally getting decent (not perfect yet, but much better than
4505 is finally getting decent (not perfect yet, but much better than
4502 the ad-hoc mess we had).
4506 the ad-hoc mess we had).
4503
4507
4504 * Removed -exit option. If people just want to run a python
4508 * Removed -exit option. If people just want to run a python
4505 script, that's what the normal interpreter is for. Less
4509 script, that's what the normal interpreter is for. Less
4506 unnecessary options, less chances for bugs.
4510 unnecessary options, less chances for bugs.
4507
4511
4508 * Added a crash handler which generates a complete post-mortem if
4512 * Added a crash handler which generates a complete post-mortem if
4509 IPython crashes. This will help a lot in tracking bugs down the
4513 IPython crashes. This will help a lot in tracking bugs down the
4510 road.
4514 road.
4511
4515
4512 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4516 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4513 which were boud to functions being reassigned would bypass the
4517 which were boud to functions being reassigned would bypass the
4514 logger, breaking the sync of _il with the prompt counter. This
4518 logger, breaking the sync of _il with the prompt counter. This
4515 would then crash IPython later when a new line was logged.
4519 would then crash IPython later when a new line was logged.
4516
4520
4517 2001-12-02 Fernando Perez <fperez@colorado.edu>
4521 2001-12-02 Fernando Perez <fperez@colorado.edu>
4518
4522
4519 * Made IPython a package. This means people don't have to clutter
4523 * Made IPython a package. This means people don't have to clutter
4520 their sys.path with yet another directory. Changed the INSTALL
4524 their sys.path with yet another directory. Changed the INSTALL
4521 file accordingly.
4525 file accordingly.
4522
4526
4523 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4527 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4524 sorts its output (so @who shows it sorted) and @whos formats the
4528 sorts its output (so @who shows it sorted) and @whos formats the
4525 table according to the width of the first column. Nicer, easier to
4529 table according to the width of the first column. Nicer, easier to
4526 read. Todo: write a generic table_format() which takes a list of
4530 read. Todo: write a generic table_format() which takes a list of
4527 lists and prints it nicely formatted, with optional row/column
4531 lists and prints it nicely formatted, with optional row/column
4528 separators and proper padding and justification.
4532 separators and proper padding and justification.
4529
4533
4530 * Released 0.1.20
4534 * Released 0.1.20
4531
4535
4532 * Fixed bug in @log which would reverse the inputcache list (a
4536 * Fixed bug in @log which would reverse the inputcache list (a
4533 copy operation was missing).
4537 copy operation was missing).
4534
4538
4535 * Code cleanup. @config was changed to use page(). Better, since
4539 * Code cleanup. @config was changed to use page(). Better, since
4536 its output is always quite long.
4540 its output is always quite long.
4537
4541
4538 * Itpl is back as a dependency. I was having too many problems
4542 * Itpl is back as a dependency. I was having too many problems
4539 getting the parametric aliases to work reliably, and it's just
4543 getting the parametric aliases to work reliably, and it's just
4540 easier to code weird string operations with it than playing %()s
4544 easier to code weird string operations with it than playing %()s
4541 games. It's only ~6k, so I don't think it's too big a deal.
4545 games. It's only ~6k, so I don't think it's too big a deal.
4542
4546
4543 * Found (and fixed) a very nasty bug with history. !lines weren't
4547 * Found (and fixed) a very nasty bug with history. !lines weren't
4544 getting cached, and the out of sync caches would crash
4548 getting cached, and the out of sync caches would crash
4545 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4549 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4546 division of labor a bit better. Bug fixed, cleaner structure.
4550 division of labor a bit better. Bug fixed, cleaner structure.
4547
4551
4548 2001-12-01 Fernando Perez <fperez@colorado.edu>
4552 2001-12-01 Fernando Perez <fperez@colorado.edu>
4549
4553
4550 * Released 0.1.19
4554 * Released 0.1.19
4551
4555
4552 * Added option -n to @hist to prevent line number printing. Much
4556 * Added option -n to @hist to prevent line number printing. Much
4553 easier to copy/paste code this way.
4557 easier to copy/paste code this way.
4554
4558
4555 * Created global _il to hold the input list. Allows easy
4559 * Created global _il to hold the input list. Allows easy
4556 re-execution of blocks of code by slicing it (inspired by Janko's
4560 re-execution of blocks of code by slicing it (inspired by Janko's
4557 comment on 'macros').
4561 comment on 'macros').
4558
4562
4559 * Small fixes and doc updates.
4563 * Small fixes and doc updates.
4560
4564
4561 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4565 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4562 much too fragile with automagic. Handles properly multi-line
4566 much too fragile with automagic. Handles properly multi-line
4563 statements and takes parameters.
4567 statements and takes parameters.
4564
4568
4565 2001-11-30 Fernando Perez <fperez@colorado.edu>
4569 2001-11-30 Fernando Perez <fperez@colorado.edu>
4566
4570
4567 * Version 0.1.18 released.
4571 * Version 0.1.18 released.
4568
4572
4569 * Fixed nasty namespace bug in initial module imports.
4573 * Fixed nasty namespace bug in initial module imports.
4570
4574
4571 * Added copyright/license notes to all code files (except
4575 * Added copyright/license notes to all code files (except
4572 DPyGetOpt). For the time being, LGPL. That could change.
4576 DPyGetOpt). For the time being, LGPL. That could change.
4573
4577
4574 * Rewrote a much nicer README, updated INSTALL, cleaned up
4578 * Rewrote a much nicer README, updated INSTALL, cleaned up
4575 ipythonrc-* samples.
4579 ipythonrc-* samples.
4576
4580
4577 * Overall code/documentation cleanup. Basically ready for
4581 * Overall code/documentation cleanup. Basically ready for
4578 release. Only remaining thing: licence decision (LGPL?).
4582 release. Only remaining thing: licence decision (LGPL?).
4579
4583
4580 * Converted load_config to a class, ConfigLoader. Now recursion
4584 * Converted load_config to a class, ConfigLoader. Now recursion
4581 control is better organized. Doesn't include the same file twice.
4585 control is better organized. Doesn't include the same file twice.
4582
4586
4583 2001-11-29 Fernando Perez <fperez@colorado.edu>
4587 2001-11-29 Fernando Perez <fperez@colorado.edu>
4584
4588
4585 * Got input history working. Changed output history variables from
4589 * Got input history working. Changed output history variables from
4586 _p to _o so that _i is for input and _o for output. Just cleaner
4590 _p to _o so that _i is for input and _o for output. Just cleaner
4587 convention.
4591 convention.
4588
4592
4589 * Implemented parametric aliases. This pretty much allows the
4593 * Implemented parametric aliases. This pretty much allows the
4590 alias system to offer full-blown shell convenience, I think.
4594 alias system to offer full-blown shell convenience, I think.
4591
4595
4592 * Version 0.1.17 released, 0.1.18 opened.
4596 * Version 0.1.17 released, 0.1.18 opened.
4593
4597
4594 * dot_ipython/ipythonrc (alias): added documentation.
4598 * dot_ipython/ipythonrc (alias): added documentation.
4595 (xcolor): Fixed small bug (xcolors -> xcolor)
4599 (xcolor): Fixed small bug (xcolors -> xcolor)
4596
4600
4597 * Changed the alias system. Now alias is a magic command to define
4601 * Changed the alias system. Now alias is a magic command to define
4598 aliases just like the shell. Rationale: the builtin magics should
4602 aliases just like the shell. Rationale: the builtin magics should
4599 be there for things deeply connected to IPython's
4603 be there for things deeply connected to IPython's
4600 architecture. And this is a much lighter system for what I think
4604 architecture. And this is a much lighter system for what I think
4601 is the really important feature: allowing users to define quickly
4605 is the really important feature: allowing users to define quickly
4602 magics that will do shell things for them, so they can customize
4606 magics that will do shell things for them, so they can customize
4603 IPython easily to match their work habits. If someone is really
4607 IPython easily to match their work habits. If someone is really
4604 desperate to have another name for a builtin alias, they can
4608 desperate to have another name for a builtin alias, they can
4605 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4609 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4606 works.
4610 works.
4607
4611
4608 2001-11-28 Fernando Perez <fperez@colorado.edu>
4612 2001-11-28 Fernando Perez <fperez@colorado.edu>
4609
4613
4610 * Changed @file so that it opens the source file at the proper
4614 * Changed @file so that it opens the source file at the proper
4611 line. Since it uses less, if your EDITOR environment is
4615 line. Since it uses less, if your EDITOR environment is
4612 configured, typing v will immediately open your editor of choice
4616 configured, typing v will immediately open your editor of choice
4613 right at the line where the object is defined. Not as quick as
4617 right at the line where the object is defined. Not as quick as
4614 having a direct @edit command, but for all intents and purposes it
4618 having a direct @edit command, but for all intents and purposes it
4615 works. And I don't have to worry about writing @edit to deal with
4619 works. And I don't have to worry about writing @edit to deal with
4616 all the editors, less does that.
4620 all the editors, less does that.
4617
4621
4618 * Version 0.1.16 released, 0.1.17 opened.
4622 * Version 0.1.16 released, 0.1.17 opened.
4619
4623
4620 * Fixed some nasty bugs in the page/page_dumb combo that could
4624 * Fixed some nasty bugs in the page/page_dumb combo that could
4621 crash IPython.
4625 crash IPython.
4622
4626
4623 2001-11-27 Fernando Perez <fperez@colorado.edu>
4627 2001-11-27 Fernando Perez <fperez@colorado.edu>
4624
4628
4625 * Version 0.1.15 released, 0.1.16 opened.
4629 * Version 0.1.15 released, 0.1.16 opened.
4626
4630
4627 * Finally got ? and ?? to work for undefined things: now it's
4631 * Finally got ? and ?? to work for undefined things: now it's
4628 possible to type {}.get? and get information about the get method
4632 possible to type {}.get? and get information about the get method
4629 of dicts, or os.path? even if only os is defined (so technically
4633 of dicts, or os.path? even if only os is defined (so technically
4630 os.path isn't). Works at any level. For example, after import os,
4634 os.path isn't). Works at any level. For example, after import os,
4631 os?, os.path?, os.path.abspath? all work. This is great, took some
4635 os?, os.path?, os.path.abspath? all work. This is great, took some
4632 work in _ofind.
4636 work in _ofind.
4633
4637
4634 * Fixed more bugs with logging. The sanest way to do it was to add
4638 * Fixed more bugs with logging. The sanest way to do it was to add
4635 to @log a 'mode' parameter. Killed two in one shot (this mode
4639 to @log a 'mode' parameter. Killed two in one shot (this mode
4636 option was a request of Janko's). I think it's finally clean
4640 option was a request of Janko's). I think it's finally clean
4637 (famous last words).
4641 (famous last words).
4638
4642
4639 * Added a page_dumb() pager which does a decent job of paging on
4643 * Added a page_dumb() pager which does a decent job of paging on
4640 screen, if better things (like less) aren't available. One less
4644 screen, if better things (like less) aren't available. One less
4641 unix dependency (someday maybe somebody will port this to
4645 unix dependency (someday maybe somebody will port this to
4642 windows).
4646 windows).
4643
4647
4644 * Fixed problem in magic_log: would lock of logging out if log
4648 * Fixed problem in magic_log: would lock of logging out if log
4645 creation failed (because it would still think it had succeeded).
4649 creation failed (because it would still think it had succeeded).
4646
4650
4647 * Improved the page() function using curses to auto-detect screen
4651 * Improved the page() function using curses to auto-detect screen
4648 size. Now it can make a much better decision on whether to print
4652 size. Now it can make a much better decision on whether to print
4649 or page a string. Option screen_length was modified: a value 0
4653 or page a string. Option screen_length was modified: a value 0
4650 means auto-detect, and that's the default now.
4654 means auto-detect, and that's the default now.
4651
4655
4652 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4656 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4653 go out. I'll test it for a few days, then talk to Janko about
4657 go out. I'll test it for a few days, then talk to Janko about
4654 licences and announce it.
4658 licences and announce it.
4655
4659
4656 * Fixed the length of the auto-generated ---> prompt which appears
4660 * Fixed the length of the auto-generated ---> prompt which appears
4657 for auto-parens and auto-quotes. Getting this right isn't trivial,
4661 for auto-parens and auto-quotes. Getting this right isn't trivial,
4658 with all the color escapes, different prompt types and optional
4662 with all the color escapes, different prompt types and optional
4659 separators. But it seems to be working in all the combinations.
4663 separators. But it seems to be working in all the combinations.
4660
4664
4661 2001-11-26 Fernando Perez <fperez@colorado.edu>
4665 2001-11-26 Fernando Perez <fperez@colorado.edu>
4662
4666
4663 * Wrote a regexp filter to get option types from the option names
4667 * Wrote a regexp filter to get option types from the option names
4664 string. This eliminates the need to manually keep two duplicate
4668 string. This eliminates the need to manually keep two duplicate
4665 lists.
4669 lists.
4666
4670
4667 * Removed the unneeded check_option_names. Now options are handled
4671 * Removed the unneeded check_option_names. Now options are handled
4668 in a much saner manner and it's easy to visually check that things
4672 in a much saner manner and it's easy to visually check that things
4669 are ok.
4673 are ok.
4670
4674
4671 * Updated version numbers on all files I modified to carry a
4675 * Updated version numbers on all files I modified to carry a
4672 notice so Janko and Nathan have clear version markers.
4676 notice so Janko and Nathan have clear version markers.
4673
4677
4674 * Updated docstring for ultraTB with my changes. I should send
4678 * Updated docstring for ultraTB with my changes. I should send
4675 this to Nathan.
4679 this to Nathan.
4676
4680
4677 * Lots of small fixes. Ran everything through pychecker again.
4681 * Lots of small fixes. Ran everything through pychecker again.
4678
4682
4679 * Made loading of deep_reload an cmd line option. If it's not too
4683 * Made loading of deep_reload an cmd line option. If it's not too
4680 kosher, now people can just disable it. With -nodeep_reload it's
4684 kosher, now people can just disable it. With -nodeep_reload it's
4681 still available as dreload(), it just won't overwrite reload().
4685 still available as dreload(), it just won't overwrite reload().
4682
4686
4683 * Moved many options to the no| form (-opt and -noopt
4687 * Moved many options to the no| form (-opt and -noopt
4684 accepted). Cleaner.
4688 accepted). Cleaner.
4685
4689
4686 * Changed magic_log so that if called with no parameters, it uses
4690 * Changed magic_log so that if called with no parameters, it uses
4687 'rotate' mode. That way auto-generated logs aren't automatically
4691 'rotate' mode. That way auto-generated logs aren't automatically
4688 over-written. For normal logs, now a backup is made if it exists
4692 over-written. For normal logs, now a backup is made if it exists
4689 (only 1 level of backups). A new 'backup' mode was added to the
4693 (only 1 level of backups). A new 'backup' mode was added to the
4690 Logger class to support this. This was a request by Janko.
4694 Logger class to support this. This was a request by Janko.
4691
4695
4692 * Added @logoff/@logon to stop/restart an active log.
4696 * Added @logoff/@logon to stop/restart an active log.
4693
4697
4694 * Fixed a lot of bugs in log saving/replay. It was pretty
4698 * Fixed a lot of bugs in log saving/replay. It was pretty
4695 broken. Now special lines (!@,/) appear properly in the command
4699 broken. Now special lines (!@,/) appear properly in the command
4696 history after a log replay.
4700 history after a log replay.
4697
4701
4698 * Tried and failed to implement full session saving via pickle. My
4702 * Tried and failed to implement full session saving via pickle. My
4699 idea was to pickle __main__.__dict__, but modules can't be
4703 idea was to pickle __main__.__dict__, but modules can't be
4700 pickled. This would be a better alternative to replaying logs, but
4704 pickled. This would be a better alternative to replaying logs, but
4701 seems quite tricky to get to work. Changed -session to be called
4705 seems quite tricky to get to work. Changed -session to be called
4702 -logplay, which more accurately reflects what it does. And if we
4706 -logplay, which more accurately reflects what it does. And if we
4703 ever get real session saving working, -session is now available.
4707 ever get real session saving working, -session is now available.
4704
4708
4705 * Implemented color schemes for prompts also. As for tracebacks,
4709 * Implemented color schemes for prompts also. As for tracebacks,
4706 currently only NoColor and Linux are supported. But now the
4710 currently only NoColor and Linux are supported. But now the
4707 infrastructure is in place, based on a generic ColorScheme
4711 infrastructure is in place, based on a generic ColorScheme
4708 class. So writing and activating new schemes both for the prompts
4712 class. So writing and activating new schemes both for the prompts
4709 and the tracebacks should be straightforward.
4713 and the tracebacks should be straightforward.
4710
4714
4711 * Version 0.1.13 released, 0.1.14 opened.
4715 * Version 0.1.13 released, 0.1.14 opened.
4712
4716
4713 * Changed handling of options for output cache. Now counter is
4717 * Changed handling of options for output cache. Now counter is
4714 hardwired starting at 1 and one specifies the maximum number of
4718 hardwired starting at 1 and one specifies the maximum number of
4715 entries *in the outcache* (not the max prompt counter). This is
4719 entries *in the outcache* (not the max prompt counter). This is
4716 much better, since many statements won't increase the cache
4720 much better, since many statements won't increase the cache
4717 count. It also eliminated some confusing options, now there's only
4721 count. It also eliminated some confusing options, now there's only
4718 one: cache_size.
4722 one: cache_size.
4719
4723
4720 * Added 'alias' magic function and magic_alias option in the
4724 * Added 'alias' magic function and magic_alias option in the
4721 ipythonrc file. Now the user can easily define whatever names he
4725 ipythonrc file. Now the user can easily define whatever names he
4722 wants for the magic functions without having to play weird
4726 wants for the magic functions without having to play weird
4723 namespace games. This gives IPython a real shell-like feel.
4727 namespace games. This gives IPython a real shell-like feel.
4724
4728
4725 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4729 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4726 @ or not).
4730 @ or not).
4727
4731
4728 This was one of the last remaining 'visible' bugs (that I know
4732 This was one of the last remaining 'visible' bugs (that I know
4729 of). I think if I can clean up the session loading so it works
4733 of). I think if I can clean up the session loading so it works
4730 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4734 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4731 about licensing).
4735 about licensing).
4732
4736
4733 2001-11-25 Fernando Perez <fperez@colorado.edu>
4737 2001-11-25 Fernando Perez <fperez@colorado.edu>
4734
4738
4735 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4739 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4736 there's a cleaner distinction between what ? and ?? show.
4740 there's a cleaner distinction between what ? and ?? show.
4737
4741
4738 * Added screen_length option. Now the user can define his own
4742 * Added screen_length option. Now the user can define his own
4739 screen size for page() operations.
4743 screen size for page() operations.
4740
4744
4741 * Implemented magic shell-like functions with automatic code
4745 * Implemented magic shell-like functions with automatic code
4742 generation. Now adding another function is just a matter of adding
4746 generation. Now adding another function is just a matter of adding
4743 an entry to a dict, and the function is dynamically generated at
4747 an entry to a dict, and the function is dynamically generated at
4744 run-time. Python has some really cool features!
4748 run-time. Python has some really cool features!
4745
4749
4746 * Renamed many options to cleanup conventions a little. Now all
4750 * Renamed many options to cleanup conventions a little. Now all
4747 are lowercase, and only underscores where needed. Also in the code
4751 are lowercase, and only underscores where needed. Also in the code
4748 option name tables are clearer.
4752 option name tables are clearer.
4749
4753
4750 * Changed prompts a little. Now input is 'In [n]:' instead of
4754 * Changed prompts a little. Now input is 'In [n]:' instead of
4751 'In[n]:='. This allows it the numbers to be aligned with the
4755 'In[n]:='. This allows it the numbers to be aligned with the
4752 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4756 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4753 Python (it was a Mathematica thing). The '...' continuation prompt
4757 Python (it was a Mathematica thing). The '...' continuation prompt
4754 was also changed a little to align better.
4758 was also changed a little to align better.
4755
4759
4756 * Fixed bug when flushing output cache. Not all _p<n> variables
4760 * Fixed bug when flushing output cache. Not all _p<n> variables
4757 exist, so their deletion needs to be wrapped in a try:
4761 exist, so their deletion needs to be wrapped in a try:
4758
4762
4759 * Figured out how to properly use inspect.formatargspec() (it
4763 * Figured out how to properly use inspect.formatargspec() (it
4760 requires the args preceded by *). So I removed all the code from
4764 requires the args preceded by *). So I removed all the code from
4761 _get_pdef in Magic, which was just replicating that.
4765 _get_pdef in Magic, which was just replicating that.
4762
4766
4763 * Added test to prefilter to allow redefining magic function names
4767 * Added test to prefilter to allow redefining magic function names
4764 as variables. This is ok, since the @ form is always available,
4768 as variables. This is ok, since the @ form is always available,
4765 but whe should allow the user to define a variable called 'ls' if
4769 but whe should allow the user to define a variable called 'ls' if
4766 he needs it.
4770 he needs it.
4767
4771
4768 * Moved the ToDo information from README into a separate ToDo.
4772 * Moved the ToDo information from README into a separate ToDo.
4769
4773
4770 * General code cleanup and small bugfixes. I think it's close to a
4774 * General code cleanup and small bugfixes. I think it's close to a
4771 state where it can be released, obviously with a big 'beta'
4775 state where it can be released, obviously with a big 'beta'
4772 warning on it.
4776 warning on it.
4773
4777
4774 * Got the magic function split to work. Now all magics are defined
4778 * Got the magic function split to work. Now all magics are defined
4775 in a separate class. It just organizes things a bit, and now
4779 in a separate class. It just organizes things a bit, and now
4776 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4780 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4777 was too long).
4781 was too long).
4778
4782
4779 * Changed @clear to @reset to avoid potential confusions with
4783 * Changed @clear to @reset to avoid potential confusions with
4780 the shell command clear. Also renamed @cl to @clear, which does
4784 the shell command clear. Also renamed @cl to @clear, which does
4781 exactly what people expect it to from their shell experience.
4785 exactly what people expect it to from their shell experience.
4782
4786
4783 Added a check to the @reset command (since it's so
4787 Added a check to the @reset command (since it's so
4784 destructive, it's probably a good idea to ask for confirmation).
4788 destructive, it's probably a good idea to ask for confirmation).
4785 But now reset only works for full namespace resetting. Since the
4789 But now reset only works for full namespace resetting. Since the
4786 del keyword is already there for deleting a few specific
4790 del keyword is already there for deleting a few specific
4787 variables, I don't see the point of having a redundant magic
4791 variables, I don't see the point of having a redundant magic
4788 function for the same task.
4792 function for the same task.
4789
4793
4790 2001-11-24 Fernando Perez <fperez@colorado.edu>
4794 2001-11-24 Fernando Perez <fperez@colorado.edu>
4791
4795
4792 * Updated the builtin docs (esp. the ? ones).
4796 * Updated the builtin docs (esp. the ? ones).
4793
4797
4794 * Ran all the code through pychecker. Not terribly impressed with
4798 * Ran all the code through pychecker. Not terribly impressed with
4795 it: lots of spurious warnings and didn't really find anything of
4799 it: lots of spurious warnings and didn't really find anything of
4796 substance (just a few modules being imported and not used).
4800 substance (just a few modules being imported and not used).
4797
4801
4798 * Implemented the new ultraTB functionality into IPython. New
4802 * Implemented the new ultraTB functionality into IPython. New
4799 option: xcolors. This chooses color scheme. xmode now only selects
4803 option: xcolors. This chooses color scheme. xmode now only selects
4800 between Plain and Verbose. Better orthogonality.
4804 between Plain and Verbose. Better orthogonality.
4801
4805
4802 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4806 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4803 mode and color scheme for the exception handlers. Now it's
4807 mode and color scheme for the exception handlers. Now it's
4804 possible to have the verbose traceback with no coloring.
4808 possible to have the verbose traceback with no coloring.
4805
4809
4806 2001-11-23 Fernando Perez <fperez@colorado.edu>
4810 2001-11-23 Fernando Perez <fperez@colorado.edu>
4807
4811
4808 * Version 0.1.12 released, 0.1.13 opened.
4812 * Version 0.1.12 released, 0.1.13 opened.
4809
4813
4810 * Removed option to set auto-quote and auto-paren escapes by
4814 * Removed option to set auto-quote and auto-paren escapes by
4811 user. The chances of breaking valid syntax are just too high. If
4815 user. The chances of breaking valid syntax are just too high. If
4812 someone *really* wants, they can always dig into the code.
4816 someone *really* wants, they can always dig into the code.
4813
4817
4814 * Made prompt separators configurable.
4818 * Made prompt separators configurable.
4815
4819
4816 2001-11-22 Fernando Perez <fperez@colorado.edu>
4820 2001-11-22 Fernando Perez <fperez@colorado.edu>
4817
4821
4818 * Small bugfixes in many places.
4822 * Small bugfixes in many places.
4819
4823
4820 * Removed the MyCompleter class from ipplib. It seemed redundant
4824 * Removed the MyCompleter class from ipplib. It seemed redundant
4821 with the C-p,C-n history search functionality. Less code to
4825 with the C-p,C-n history search functionality. Less code to
4822 maintain.
4826 maintain.
4823
4827
4824 * Moved all the original ipython.py code into ipythonlib.py. Right
4828 * Moved all the original ipython.py code into ipythonlib.py. Right
4825 now it's just one big dump into a function called make_IPython, so
4829 now it's just one big dump into a function called make_IPython, so
4826 no real modularity has been gained. But at least it makes the
4830 no real modularity has been gained. But at least it makes the
4827 wrapper script tiny, and since ipythonlib is a module, it gets
4831 wrapper script tiny, and since ipythonlib is a module, it gets
4828 compiled and startup is much faster.
4832 compiled and startup is much faster.
4829
4833
4830 This is a reasobably 'deep' change, so we should test it for a
4834 This is a reasobably 'deep' change, so we should test it for a
4831 while without messing too much more with the code.
4835 while without messing too much more with the code.
4832
4836
4833 2001-11-21 Fernando Perez <fperez@colorado.edu>
4837 2001-11-21 Fernando Perez <fperez@colorado.edu>
4834
4838
4835 * Version 0.1.11 released, 0.1.12 opened for further work.
4839 * Version 0.1.11 released, 0.1.12 opened for further work.
4836
4840
4837 * Removed dependency on Itpl. It was only needed in one place. It
4841 * Removed dependency on Itpl. It was only needed in one place. It
4838 would be nice if this became part of python, though. It makes life
4842 would be nice if this became part of python, though. It makes life
4839 *a lot* easier in some cases.
4843 *a lot* easier in some cases.
4840
4844
4841 * Simplified the prefilter code a bit. Now all handlers are
4845 * Simplified the prefilter code a bit. Now all handlers are
4842 expected to explicitly return a value (at least a blank string).
4846 expected to explicitly return a value (at least a blank string).
4843
4847
4844 * Heavy edits in ipplib. Removed the help system altogether. Now
4848 * Heavy edits in ipplib. Removed the help system altogether. Now
4845 obj?/?? is used for inspecting objects, a magic @doc prints
4849 obj?/?? is used for inspecting objects, a magic @doc prints
4846 docstrings, and full-blown Python help is accessed via the 'help'
4850 docstrings, and full-blown Python help is accessed via the 'help'
4847 keyword. This cleans up a lot of code (less to maintain) and does
4851 keyword. This cleans up a lot of code (less to maintain) and does
4848 the job. Since 'help' is now a standard Python component, might as
4852 the job. Since 'help' is now a standard Python component, might as
4849 well use it and remove duplicate functionality.
4853 well use it and remove duplicate functionality.
4850
4854
4851 Also removed the option to use ipplib as a standalone program. By
4855 Also removed the option to use ipplib as a standalone program. By
4852 now it's too dependent on other parts of IPython to function alone.
4856 now it's too dependent on other parts of IPython to function alone.
4853
4857
4854 * Fixed bug in genutils.pager. It would crash if the pager was
4858 * Fixed bug in genutils.pager. It would crash if the pager was
4855 exited immediately after opening (broken pipe).
4859 exited immediately after opening (broken pipe).
4856
4860
4857 * Trimmed down the VerboseTB reporting a little. The header is
4861 * Trimmed down the VerboseTB reporting a little. The header is
4858 much shorter now and the repeated exception arguments at the end
4862 much shorter now and the repeated exception arguments at the end
4859 have been removed. For interactive use the old header seemed a bit
4863 have been removed. For interactive use the old header seemed a bit
4860 excessive.
4864 excessive.
4861
4865
4862 * Fixed small bug in output of @whos for variables with multi-word
4866 * Fixed small bug in output of @whos for variables with multi-word
4863 types (only first word was displayed).
4867 types (only first word was displayed).
4864
4868
4865 2001-11-17 Fernando Perez <fperez@colorado.edu>
4869 2001-11-17 Fernando Perez <fperez@colorado.edu>
4866
4870
4867 * Version 0.1.10 released, 0.1.11 opened for further work.
4871 * Version 0.1.10 released, 0.1.11 opened for further work.
4868
4872
4869 * Modified dirs and friends. dirs now *returns* the stack (not
4873 * Modified dirs and friends. dirs now *returns* the stack (not
4870 prints), so one can manipulate it as a variable. Convenient to
4874 prints), so one can manipulate it as a variable. Convenient to
4871 travel along many directories.
4875 travel along many directories.
4872
4876
4873 * Fixed bug in magic_pdef: would only work with functions with
4877 * Fixed bug in magic_pdef: would only work with functions with
4874 arguments with default values.
4878 arguments with default values.
4875
4879
4876 2001-11-14 Fernando Perez <fperez@colorado.edu>
4880 2001-11-14 Fernando Perez <fperez@colorado.edu>
4877
4881
4878 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4882 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4879 example with IPython. Various other minor fixes and cleanups.
4883 example with IPython. Various other minor fixes and cleanups.
4880
4884
4881 * Version 0.1.9 released, 0.1.10 opened for further work.
4885 * Version 0.1.9 released, 0.1.10 opened for further work.
4882
4886
4883 * Added sys.path to the list of directories searched in the
4887 * Added sys.path to the list of directories searched in the
4884 execfile= option. It used to be the current directory and the
4888 execfile= option. It used to be the current directory and the
4885 user's IPYTHONDIR only.
4889 user's IPYTHONDIR only.
4886
4890
4887 2001-11-13 Fernando Perez <fperez@colorado.edu>
4891 2001-11-13 Fernando Perez <fperez@colorado.edu>
4888
4892
4889 * Reinstated the raw_input/prefilter separation that Janko had
4893 * Reinstated the raw_input/prefilter separation that Janko had
4890 initially. This gives a more convenient setup for extending the
4894 initially. This gives a more convenient setup for extending the
4891 pre-processor from the outside: raw_input always gets a string,
4895 pre-processor from the outside: raw_input always gets a string,
4892 and prefilter has to process it. We can then redefine prefilter
4896 and prefilter has to process it. We can then redefine prefilter
4893 from the outside and implement extensions for special
4897 from the outside and implement extensions for special
4894 purposes.
4898 purposes.
4895
4899
4896 Today I got one for inputting PhysicalQuantity objects
4900 Today I got one for inputting PhysicalQuantity objects
4897 (from Scientific) without needing any function calls at
4901 (from Scientific) without needing any function calls at
4898 all. Extremely convenient, and it's all done as a user-level
4902 all. Extremely convenient, and it's all done as a user-level
4899 extension (no IPython code was touched). Now instead of:
4903 extension (no IPython code was touched). Now instead of:
4900 a = PhysicalQuantity(4.2,'m/s**2')
4904 a = PhysicalQuantity(4.2,'m/s**2')
4901 one can simply say
4905 one can simply say
4902 a = 4.2 m/s**2
4906 a = 4.2 m/s**2
4903 or even
4907 or even
4904 a = 4.2 m/s^2
4908 a = 4.2 m/s^2
4905
4909
4906 I use this, but it's also a proof of concept: IPython really is
4910 I use this, but it's also a proof of concept: IPython really is
4907 fully user-extensible, even at the level of the parsing of the
4911 fully user-extensible, even at the level of the parsing of the
4908 command line. It's not trivial, but it's perfectly doable.
4912 command line. It's not trivial, but it's perfectly doable.
4909
4913
4910 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4914 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4911 the problem of modules being loaded in the inverse order in which
4915 the problem of modules being loaded in the inverse order in which
4912 they were defined in
4916 they were defined in
4913
4917
4914 * Version 0.1.8 released, 0.1.9 opened for further work.
4918 * Version 0.1.8 released, 0.1.9 opened for further work.
4915
4919
4916 * Added magics pdef, source and file. They respectively show the
4920 * Added magics pdef, source and file. They respectively show the
4917 definition line ('prototype' in C), source code and full python
4921 definition line ('prototype' in C), source code and full python
4918 file for any callable object. The object inspector oinfo uses
4922 file for any callable object. The object inspector oinfo uses
4919 these to show the same information.
4923 these to show the same information.
4920
4924
4921 * Version 0.1.7 released, 0.1.8 opened for further work.
4925 * Version 0.1.7 released, 0.1.8 opened for further work.
4922
4926
4923 * Separated all the magic functions into a class called Magic. The
4927 * Separated all the magic functions into a class called Magic. The
4924 InteractiveShell class was becoming too big for Xemacs to handle
4928 InteractiveShell class was becoming too big for Xemacs to handle
4925 (de-indenting a line would lock it up for 10 seconds while it
4929 (de-indenting a line would lock it up for 10 seconds while it
4926 backtracked on the whole class!)
4930 backtracked on the whole class!)
4927
4931
4928 FIXME: didn't work. It can be done, but right now namespaces are
4932 FIXME: didn't work. It can be done, but right now namespaces are
4929 all messed up. Do it later (reverted it for now, so at least
4933 all messed up. Do it later (reverted it for now, so at least
4930 everything works as before).
4934 everything works as before).
4931
4935
4932 * Got the object introspection system (magic_oinfo) working! I
4936 * Got the object introspection system (magic_oinfo) working! I
4933 think this is pretty much ready for release to Janko, so he can
4937 think this is pretty much ready for release to Janko, so he can
4934 test it for a while and then announce it. Pretty much 100% of what
4938 test it for a while and then announce it. Pretty much 100% of what
4935 I wanted for the 'phase 1' release is ready. Happy, tired.
4939 I wanted for the 'phase 1' release is ready. Happy, tired.
4936
4940
4937 2001-11-12 Fernando Perez <fperez@colorado.edu>
4941 2001-11-12 Fernando Perez <fperez@colorado.edu>
4938
4942
4939 * Version 0.1.6 released, 0.1.7 opened for further work.
4943 * Version 0.1.6 released, 0.1.7 opened for further work.
4940
4944
4941 * Fixed bug in printing: it used to test for truth before
4945 * Fixed bug in printing: it used to test for truth before
4942 printing, so 0 wouldn't print. Now checks for None.
4946 printing, so 0 wouldn't print. Now checks for None.
4943
4947
4944 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4948 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4945 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4949 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4946 reaches by hand into the outputcache. Think of a better way to do
4950 reaches by hand into the outputcache. Think of a better way to do
4947 this later.
4951 this later.
4948
4952
4949 * Various small fixes thanks to Nathan's comments.
4953 * Various small fixes thanks to Nathan's comments.
4950
4954
4951 * Changed magic_pprint to magic_Pprint. This way it doesn't
4955 * Changed magic_pprint to magic_Pprint. This way it doesn't
4952 collide with pprint() and the name is consistent with the command
4956 collide with pprint() and the name is consistent with the command
4953 line option.
4957 line option.
4954
4958
4955 * Changed prompt counter behavior to be fully like
4959 * Changed prompt counter behavior to be fully like
4956 Mathematica's. That is, even input that doesn't return a result
4960 Mathematica's. That is, even input that doesn't return a result
4957 raises the prompt counter. The old behavior was kind of confusing
4961 raises the prompt counter. The old behavior was kind of confusing
4958 (getting the same prompt number several times if the operation
4962 (getting the same prompt number several times if the operation
4959 didn't return a result).
4963 didn't return a result).
4960
4964
4961 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4965 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4962
4966
4963 * Fixed -Classic mode (wasn't working anymore).
4967 * Fixed -Classic mode (wasn't working anymore).
4964
4968
4965 * Added colored prompts using Nathan's new code. Colors are
4969 * Added colored prompts using Nathan's new code. Colors are
4966 currently hardwired, they can be user-configurable. For
4970 currently hardwired, they can be user-configurable. For
4967 developers, they can be chosen in file ipythonlib.py, at the
4971 developers, they can be chosen in file ipythonlib.py, at the
4968 beginning of the CachedOutput class def.
4972 beginning of the CachedOutput class def.
4969
4973
4970 2001-11-11 Fernando Perez <fperez@colorado.edu>
4974 2001-11-11 Fernando Perez <fperez@colorado.edu>
4971
4975
4972 * Version 0.1.5 released, 0.1.6 opened for further work.
4976 * Version 0.1.5 released, 0.1.6 opened for further work.
4973
4977
4974 * Changed magic_env to *return* the environment as a dict (not to
4978 * Changed magic_env to *return* the environment as a dict (not to
4975 print it). This way it prints, but it can also be processed.
4979 print it). This way it prints, but it can also be processed.
4976
4980
4977 * Added Verbose exception reporting to interactive
4981 * Added Verbose exception reporting to interactive
4978 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4982 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4979 traceback. Had to make some changes to the ultraTB file. This is
4983 traceback. Had to make some changes to the ultraTB file. This is
4980 probably the last 'big' thing in my mental todo list. This ties
4984 probably the last 'big' thing in my mental todo list. This ties
4981 in with the next entry:
4985 in with the next entry:
4982
4986
4983 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4987 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4984 has to specify is Plain, Color or Verbose for all exception
4988 has to specify is Plain, Color or Verbose for all exception
4985 handling.
4989 handling.
4986
4990
4987 * Removed ShellServices option. All this can really be done via
4991 * Removed ShellServices option. All this can really be done via
4988 the magic system. It's easier to extend, cleaner and has automatic
4992 the magic system. It's easier to extend, cleaner and has automatic
4989 namespace protection and documentation.
4993 namespace protection and documentation.
4990
4994
4991 2001-11-09 Fernando Perez <fperez@colorado.edu>
4995 2001-11-09 Fernando Perez <fperez@colorado.edu>
4992
4996
4993 * Fixed bug in output cache flushing (missing parameter to
4997 * Fixed bug in output cache flushing (missing parameter to
4994 __init__). Other small bugs fixed (found using pychecker).
4998 __init__). Other small bugs fixed (found using pychecker).
4995
4999
4996 * Version 0.1.4 opened for bugfixing.
5000 * Version 0.1.4 opened for bugfixing.
4997
5001
4998 2001-11-07 Fernando Perez <fperez@colorado.edu>
5002 2001-11-07 Fernando Perez <fperez@colorado.edu>
4999
5003
5000 * Version 0.1.3 released, mainly because of the raw_input bug.
5004 * Version 0.1.3 released, mainly because of the raw_input bug.
5001
5005
5002 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5006 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5003 and when testing for whether things were callable, a call could
5007 and when testing for whether things were callable, a call could
5004 actually be made to certain functions. They would get called again
5008 actually be made to certain functions. They would get called again
5005 once 'really' executed, with a resulting double call. A disaster
5009 once 'really' executed, with a resulting double call. A disaster
5006 in many cases (list.reverse() would never work!).
5010 in many cases (list.reverse() would never work!).
5007
5011
5008 * Removed prefilter() function, moved its code to raw_input (which
5012 * Removed prefilter() function, moved its code to raw_input (which
5009 after all was just a near-empty caller for prefilter). This saves
5013 after all was just a near-empty caller for prefilter). This saves
5010 a function call on every prompt, and simplifies the class a tiny bit.
5014 a function call on every prompt, and simplifies the class a tiny bit.
5011
5015
5012 * Fix _ip to __ip name in magic example file.
5016 * Fix _ip to __ip name in magic example file.
5013
5017
5014 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5018 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5015 work with non-gnu versions of tar.
5019 work with non-gnu versions of tar.
5016
5020
5017 2001-11-06 Fernando Perez <fperez@colorado.edu>
5021 2001-11-06 Fernando Perez <fperez@colorado.edu>
5018
5022
5019 * Version 0.1.2. Just to keep track of the recent changes.
5023 * Version 0.1.2. Just to keep track of the recent changes.
5020
5024
5021 * Fixed nasty bug in output prompt routine. It used to check 'if
5025 * Fixed nasty bug in output prompt routine. It used to check 'if
5022 arg != None...'. Problem is, this fails if arg implements a
5026 arg != None...'. Problem is, this fails if arg implements a
5023 special comparison (__cmp__) which disallows comparing to
5027 special comparison (__cmp__) which disallows comparing to
5024 None. Found it when trying to use the PhysicalQuantity module from
5028 None. Found it when trying to use the PhysicalQuantity module from
5025 ScientificPython.
5029 ScientificPython.
5026
5030
5027 2001-11-05 Fernando Perez <fperez@colorado.edu>
5031 2001-11-05 Fernando Perez <fperez@colorado.edu>
5028
5032
5029 * Also added dirs. Now the pushd/popd/dirs family functions
5033 * Also added dirs. Now the pushd/popd/dirs family functions
5030 basically like the shell, with the added convenience of going home
5034 basically like the shell, with the added convenience of going home
5031 when called with no args.
5035 when called with no args.
5032
5036
5033 * pushd/popd slightly modified to mimic shell behavior more
5037 * pushd/popd slightly modified to mimic shell behavior more
5034 closely.
5038 closely.
5035
5039
5036 * Added env,pushd,popd from ShellServices as magic functions. I
5040 * Added env,pushd,popd from ShellServices as magic functions. I
5037 think the cleanest will be to port all desired functions from
5041 think the cleanest will be to port all desired functions from
5038 ShellServices as magics and remove ShellServices altogether. This
5042 ShellServices as magics and remove ShellServices altogether. This
5039 will provide a single, clean way of adding functionality
5043 will provide a single, clean way of adding functionality
5040 (shell-type or otherwise) to IP.
5044 (shell-type or otherwise) to IP.
5041
5045
5042 2001-11-04 Fernando Perez <fperez@colorado.edu>
5046 2001-11-04 Fernando Perez <fperez@colorado.edu>
5043
5047
5044 * Added .ipython/ directory to sys.path. This way users can keep
5048 * Added .ipython/ directory to sys.path. This way users can keep
5045 customizations there and access them via import.
5049 customizations there and access them via import.
5046
5050
5047 2001-11-03 Fernando Perez <fperez@colorado.edu>
5051 2001-11-03 Fernando Perez <fperez@colorado.edu>
5048
5052
5049 * Opened version 0.1.1 for new changes.
5053 * Opened version 0.1.1 for new changes.
5050
5054
5051 * Changed version number to 0.1.0: first 'public' release, sent to
5055 * Changed version number to 0.1.0: first 'public' release, sent to
5052 Nathan and Janko.
5056 Nathan and Janko.
5053
5057
5054 * Lots of small fixes and tweaks.
5058 * Lots of small fixes and tweaks.
5055
5059
5056 * Minor changes to whos format. Now strings are shown, snipped if
5060 * Minor changes to whos format. Now strings are shown, snipped if
5057 too long.
5061 too long.
5058
5062
5059 * Changed ShellServices to work on __main__ so they show up in @who
5063 * Changed ShellServices to work on __main__ so they show up in @who
5060
5064
5061 * Help also works with ? at the end of a line:
5065 * Help also works with ? at the end of a line:
5062 ?sin and sin?
5066 ?sin and sin?
5063 both produce the same effect. This is nice, as often I use the
5067 both produce the same effect. This is nice, as often I use the
5064 tab-complete to find the name of a method, but I used to then have
5068 tab-complete to find the name of a method, but I used to then have
5065 to go to the beginning of the line to put a ? if I wanted more
5069 to go to the beginning of the line to put a ? if I wanted more
5066 info. Now I can just add the ? and hit return. Convenient.
5070 info. Now I can just add the ? and hit return. Convenient.
5067
5071
5068 2001-11-02 Fernando Perez <fperez@colorado.edu>
5072 2001-11-02 Fernando Perez <fperez@colorado.edu>
5069
5073
5070 * Python version check (>=2.1) added.
5074 * Python version check (>=2.1) added.
5071
5075
5072 * Added LazyPython documentation. At this point the docs are quite
5076 * Added LazyPython documentation. At this point the docs are quite
5073 a mess. A cleanup is in order.
5077 a mess. A cleanup is in order.
5074
5078
5075 * Auto-installer created. For some bizarre reason, the zipfiles
5079 * Auto-installer created. For some bizarre reason, the zipfiles
5076 module isn't working on my system. So I made a tar version
5080 module isn't working on my system. So I made a tar version
5077 (hopefully the command line options in various systems won't kill
5081 (hopefully the command line options in various systems won't kill
5078 me).
5082 me).
5079
5083
5080 * Fixes to Struct in genutils. Now all dictionary-like methods are
5084 * Fixes to Struct in genutils. Now all dictionary-like methods are
5081 protected (reasonably).
5085 protected (reasonably).
5082
5086
5083 * Added pager function to genutils and changed ? to print usage
5087 * Added pager function to genutils and changed ? to print usage
5084 note through it (it was too long).
5088 note through it (it was too long).
5085
5089
5086 * Added the LazyPython functionality. Works great! I changed the
5090 * Added the LazyPython functionality. Works great! I changed the
5087 auto-quote escape to ';', it's on home row and next to '. But
5091 auto-quote escape to ';', it's on home row and next to '. But
5088 both auto-quote and auto-paren (still /) escapes are command-line
5092 both auto-quote and auto-paren (still /) escapes are command-line
5089 parameters.
5093 parameters.
5090
5094
5091
5095
5092 2001-11-01 Fernando Perez <fperez@colorado.edu>
5096 2001-11-01 Fernando Perez <fperez@colorado.edu>
5093
5097
5094 * Version changed to 0.0.7. Fairly large change: configuration now
5098 * Version changed to 0.0.7. Fairly large change: configuration now
5095 is all stored in a directory, by default .ipython. There, all
5099 is all stored in a directory, by default .ipython. There, all
5096 config files have normal looking names (not .names)
5100 config files have normal looking names (not .names)
5097
5101
5098 * Version 0.0.6 Released first to Lucas and Archie as a test
5102 * Version 0.0.6 Released first to Lucas and Archie as a test
5099 run. Since it's the first 'semi-public' release, change version to
5103 run. Since it's the first 'semi-public' release, change version to
5100 > 0.0.6 for any changes now.
5104 > 0.0.6 for any changes now.
5101
5105
5102 * Stuff I had put in the ipplib.py changelog:
5106 * Stuff I had put in the ipplib.py changelog:
5103
5107
5104 Changes to InteractiveShell:
5108 Changes to InteractiveShell:
5105
5109
5106 - Made the usage message a parameter.
5110 - Made the usage message a parameter.
5107
5111
5108 - Require the name of the shell variable to be given. It's a bit
5112 - Require the name of the shell variable to be given. It's a bit
5109 of a hack, but allows the name 'shell' not to be hardwire in the
5113 of a hack, but allows the name 'shell' not to be hardwire in the
5110 magic (@) handler, which is problematic b/c it requires
5114 magic (@) handler, which is problematic b/c it requires
5111 polluting the global namespace with 'shell'. This in turn is
5115 polluting the global namespace with 'shell'. This in turn is
5112 fragile: if a user redefines a variable called shell, things
5116 fragile: if a user redefines a variable called shell, things
5113 break.
5117 break.
5114
5118
5115 - magic @: all functions available through @ need to be defined
5119 - magic @: all functions available through @ need to be defined
5116 as magic_<name>, even though they can be called simply as
5120 as magic_<name>, even though they can be called simply as
5117 @<name>. This allows the special command @magic to gather
5121 @<name>. This allows the special command @magic to gather
5118 information automatically about all existing magic functions,
5122 information automatically about all existing magic functions,
5119 even if they are run-time user extensions, by parsing the shell
5123 even if they are run-time user extensions, by parsing the shell
5120 instance __dict__ looking for special magic_ names.
5124 instance __dict__ looking for special magic_ names.
5121
5125
5122 - mainloop: added *two* local namespace parameters. This allows
5126 - mainloop: added *two* local namespace parameters. This allows
5123 the class to differentiate between parameters which were there
5127 the class to differentiate between parameters which were there
5124 before and after command line initialization was processed. This
5128 before and after command line initialization was processed. This
5125 way, later @who can show things loaded at startup by the
5129 way, later @who can show things loaded at startup by the
5126 user. This trick was necessary to make session saving/reloading
5130 user. This trick was necessary to make session saving/reloading
5127 really work: ideally after saving/exiting/reloading a session,
5131 really work: ideally after saving/exiting/reloading a session,
5128 *everythin* should look the same, including the output of @who. I
5132 *everythin* should look the same, including the output of @who. I
5129 was only able to make this work with this double namespace
5133 was only able to make this work with this double namespace
5130 trick.
5134 trick.
5131
5135
5132 - added a header to the logfile which allows (almost) full
5136 - added a header to the logfile which allows (almost) full
5133 session restoring.
5137 session restoring.
5134
5138
5135 - prepend lines beginning with @ or !, with a and log
5139 - prepend lines beginning with @ or !, with a and log
5136 them. Why? !lines: may be useful to know what you did @lines:
5140 them. Why? !lines: may be useful to know what you did @lines:
5137 they may affect session state. So when restoring a session, at
5141 they may affect session state. So when restoring a session, at
5138 least inform the user of their presence. I couldn't quite get
5142 least inform the user of their presence. I couldn't quite get
5139 them to properly re-execute, but at least the user is warned.
5143 them to properly re-execute, but at least the user is warned.
5140
5144
5141 * Started ChangeLog.
5145 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now