##// END OF EJS Templates
Added %paste magic
vivainio -
Show More
@@ -1,2762 +1,2804 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3
3
4 $Id: Magic.py 1034 2006-01-20 12:59:31Z vivainio $"""
4 $Id: Magic.py 1068 2006-01-23 20:31:43Z vivainio $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import sys
29 import sys
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 import cPickle as pickle
34 import textwrap
34 import textwrap
35 from cStringIO import StringIO
35 from cStringIO import StringIO
36 from getopt import getopt
36 from getopt import getopt
37 from pprint import pprint, pformat
37 from pprint import pprint, pformat
38
38
39 # profile isn't bundled by default in Debian for license reasons
39 # profile isn't bundled by default in Debian for license reasons
40 try:
40 try:
41 import profile,pstats
41 import profile,pstats
42 except ImportError:
42 except ImportError:
43 profile = pstats = None
43 profile = pstats = None
44
44
45 # Homebrewed
45 # Homebrewed
46 from IPython import Debugger, OInspect, wildcard
46 from IPython import Debugger, OInspect, wildcard
47 from IPython.FakeModule import FakeModule
47 from IPython.FakeModule import FakeModule
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
49 from IPython.PyColorize import Parser
49 from IPython.PyColorize import Parser
50 from IPython.ipstruct import Struct
50 from IPython.ipstruct import Struct
51 from IPython.macro import Macro
51 from IPython.macro import Macro
52 from IPython.genutils import *
52 from IPython.genutils import *
53 from IPython import platutils
53 from IPython import platutils
54
54 #***************************************************************************
55 #***************************************************************************
55 # Utility functions
56 # Utility functions
56 def on_off(tag):
57 def on_off(tag):
57 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
58 return ['OFF','ON'][tag]
59 return ['OFF','ON'][tag]
59
60
60 class Bunch: pass
61 class Bunch: pass
61
62
62 #***************************************************************************
63 #***************************************************************************
63 # Main class implementing Magic functionality
64 # Main class implementing Magic functionality
64 class Magic:
65 class Magic:
65 """Magic functions for InteractiveShell.
66 """Magic functions for InteractiveShell.
66
67
67 Shell functions which can be reached as %function_name. All magic
68 Shell functions which can be reached as %function_name. All magic
68 functions should accept a string, which they can parse for their own
69 functions should accept a string, which they can parse for their own
69 needs. This can make some functions easier to type, eg `%cd ../`
70 needs. This can make some functions easier to type, eg `%cd ../`
70 vs. `%cd("../")`
71 vs. `%cd("../")`
71
72
72 ALL definitions MUST begin with the prefix magic_. The user won't need it
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
73 at the command line, but it is is needed in the definition. """
74 at the command line, but it is is needed in the definition. """
74
75
75 # class globals
76 # class globals
76 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
77 'Automagic is ON, % prefix NOT needed for magic functions.']
78 'Automagic is ON, % prefix NOT needed for magic functions.']
78
79
79 #......................................................................
80 #......................................................................
80 # some utility functions
81 # some utility functions
81
82
82 def __init__(self,shell):
83 def __init__(self,shell):
83
84
84 self.options_table = {}
85 self.options_table = {}
85 if profile is None:
86 if profile is None:
86 self.magic_prun = self.profile_missing_notice
87 self.magic_prun = self.profile_missing_notice
87 self.shell = shell
88 self.shell = shell
88
89
89 # namespace for holding state we may need
90 # namespace for holding state we may need
90 self._magic_state = Bunch()
91 self._magic_state = Bunch()
91
92
92 def profile_missing_notice(self, *args, **kwargs):
93 def profile_missing_notice(self, *args, **kwargs):
93 error("""\
94 error("""\
94 The profile module could not be found. If you are a Debian user,
95 The profile module could not be found. If you are a Debian user,
95 it has been removed from the standard Debian package because of its non-free
96 it has been removed from the standard Debian package because of its non-free
96 license. To use profiling, please install"python2.3-profiler" from non-free.""")
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
97
98
98 def default_option(self,fn,optstr):
99 def default_option(self,fn,optstr):
99 """Make an entry in the options_table for fn, with value optstr"""
100 """Make an entry in the options_table for fn, with value optstr"""
100
101
101 if fn not in self.lsmagic():
102 if fn not in self.lsmagic():
102 error("%s is not a magic function" % fn)
103 error("%s is not a magic function" % fn)
103 self.options_table[fn] = optstr
104 self.options_table[fn] = optstr
104
105
105 def lsmagic(self):
106 def lsmagic(self):
106 """Return a list of currently available magic functions.
107 """Return a list of currently available magic functions.
107
108
108 Gives a list of the bare names after mangling (['ls','cd', ...], not
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
109 ['magic_ls','magic_cd',...]"""
110 ['magic_ls','magic_cd',...]"""
110
111
111 # FIXME. This needs a cleanup, in the way the magics list is built.
112 # FIXME. This needs a cleanup, in the way the magics list is built.
112
113
113 # magics in class definition
114 # magics in class definition
114 class_magic = lambda fn: fn.startswith('magic_') and \
115 class_magic = lambda fn: fn.startswith('magic_') and \
115 callable(Magic.__dict__[fn])
116 callable(Magic.__dict__[fn])
116 # in instance namespace (run-time user additions)
117 # in instance namespace (run-time user additions)
117 inst_magic = lambda fn: fn.startswith('magic_') and \
118 inst_magic = lambda fn: fn.startswith('magic_') and \
118 callable(self.__dict__[fn])
119 callable(self.__dict__[fn])
119 # and bound magics by user (so they can access self):
120 # and bound magics by user (so they can access self):
120 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
121 callable(self.__class__.__dict__[fn])
122 callable(self.__class__.__dict__[fn])
122 magics = filter(class_magic,Magic.__dict__.keys()) + \
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
123 filter(inst_magic,self.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
124 filter(inst_bound_magic,self.__class__.__dict__.keys())
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
125 out = []
126 out = []
126 for fn in magics:
127 for fn in magics:
127 out.append(fn.replace('magic_','',1))
128 out.append(fn.replace('magic_','',1))
128 out.sort()
129 out.sort()
129 return out
130 return out
130
131
131 def extract_input_slices(self,slices):
132 def extract_input_slices(self,slices):
132 """Return as a string a set of input history slices.
133 """Return as a string a set of input history slices.
133
134
134 The set of slices is given as a list of strings (like ['1','4:8','9'],
135 The set of slices is given as a list of strings (like ['1','4:8','9'],
135 since this function is for use by magic functions which get their
136 since this function is for use by magic functions which get their
136 arguments as strings.
137 arguments as strings.
137
138
138 Note that slices can be called with two notations:
139 Note that slices can be called with two notations:
139
140
140 N:M -> standard python form, means including items N...(M-1).
141 N:M -> standard python form, means including items N...(M-1).
141
142
142 N-M -> include items N..M (closed endpoint)."""
143 N-M -> include items N..M (closed endpoint)."""
143
144
144 cmds = []
145 cmds = []
145 for chunk in slices:
146 for chunk in slices:
146 if ':' in chunk:
147 if ':' in chunk:
147 ini,fin = map(int,chunk.split(':'))
148 ini,fin = map(int,chunk.split(':'))
148 elif '-' in chunk:
149 elif '-' in chunk:
149 ini,fin = map(int,chunk.split('-'))
150 ini,fin = map(int,chunk.split('-'))
150 fin += 1
151 fin += 1
151 else:
152 else:
152 ini = int(chunk)
153 ini = int(chunk)
153 fin = ini+1
154 fin = ini+1
154 cmds.append(self.shell.input_hist[ini:fin])
155 cmds.append(self.shell.input_hist[ini:fin])
155 return cmds
156 return cmds
156
157
157 def _ofind(self,oname):
158 def _ofind(self,oname):
158 """Find an object in the available namespaces.
159 """Find an object in the available namespaces.
159
160
160 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
161 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
161
162
162 Has special code to detect magic functions.
163 Has special code to detect magic functions.
163 """
164 """
164
165
165 oname = oname.strip()
166 oname = oname.strip()
166
167
167 # Namespaces to search in:
168 # Namespaces to search in:
168 user_ns = self.shell.user_ns
169 user_ns = self.shell.user_ns
169 internal_ns = self.shell.internal_ns
170 internal_ns = self.shell.internal_ns
170 builtin_ns = __builtin__.__dict__
171 builtin_ns = __builtin__.__dict__
171 alias_ns = self.shell.alias_table
172 alias_ns = self.shell.alias_table
172
173
173 # Put them in a list. The order is important so that we find things in
174 # Put them in a list. The order is important so that we find things in
174 # the same order that Python finds them.
175 # the same order that Python finds them.
175 namespaces = [ ('Interactive',user_ns),
176 namespaces = [ ('Interactive',user_ns),
176 ('IPython internal',internal_ns),
177 ('IPython internal',internal_ns),
177 ('Python builtin',builtin_ns),
178 ('Python builtin',builtin_ns),
178 ('Alias',alias_ns),
179 ('Alias',alias_ns),
179 ]
180 ]
180
181
181 # initialize results to 'null'
182 # initialize results to 'null'
182 found = 0; obj = None; ospace = None; ds = None;
183 found = 0; obj = None; ospace = None; ds = None;
183 ismagic = 0; isalias = 0
184 ismagic = 0; isalias = 0
184
185
185 # Look for the given name by splitting it in parts. If the head is
186 # Look for the given name by splitting it in parts. If the head is
186 # found, then we look for all the remaining parts as members, and only
187 # found, then we look for all the remaining parts as members, and only
187 # declare success if we can find them all.
188 # declare success if we can find them all.
188 oname_parts = oname.split('.')
189 oname_parts = oname.split('.')
189 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
190 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
190 for nsname,ns in namespaces:
191 for nsname,ns in namespaces:
191 try:
192 try:
192 obj = ns[oname_head]
193 obj = ns[oname_head]
193 except KeyError:
194 except KeyError:
194 continue
195 continue
195 else:
196 else:
196 for part in oname_rest:
197 for part in oname_rest:
197 try:
198 try:
198 obj = getattr(obj,part)
199 obj = getattr(obj,part)
199 except:
200 except:
200 # Blanket except b/c some badly implemented objects
201 # Blanket except b/c some badly implemented objects
201 # allow __getattr__ to raise exceptions other than
202 # allow __getattr__ to raise exceptions other than
202 # AttributeError, which then crashes IPython.
203 # AttributeError, which then crashes IPython.
203 break
204 break
204 else:
205 else:
205 # If we finish the for loop (no break), we got all members
206 # If we finish the for loop (no break), we got all members
206 found = 1
207 found = 1
207 ospace = nsname
208 ospace = nsname
208 if ns == alias_ns:
209 if ns == alias_ns:
209 isalias = 1
210 isalias = 1
210 break # namespace loop
211 break # namespace loop
211
212
212 # Try to see if it's magic
213 # Try to see if it's magic
213 if not found:
214 if not found:
214 if oname.startswith(self.shell.ESC_MAGIC):
215 if oname.startswith(self.shell.ESC_MAGIC):
215 oname = oname[1:]
216 oname = oname[1:]
216 obj = getattr(self,'magic_'+oname,None)
217 obj = getattr(self,'magic_'+oname,None)
217 if obj is not None:
218 if obj is not None:
218 found = 1
219 found = 1
219 ospace = 'IPython internal'
220 ospace = 'IPython internal'
220 ismagic = 1
221 ismagic = 1
221
222
222 # Last try: special-case some literals like '', [], {}, etc:
223 # Last try: special-case some literals like '', [], {}, etc:
223 if not found and oname_head in ["''",'""','[]','{}','()']:
224 if not found and oname_head in ["''",'""','[]','{}','()']:
224 obj = eval(oname_head)
225 obj = eval(oname_head)
225 found = 1
226 found = 1
226 ospace = 'Interactive'
227 ospace = 'Interactive'
227
228
228 return {'found':found, 'obj':obj, 'namespace':ospace,
229 return {'found':found, 'obj':obj, 'namespace':ospace,
229 'ismagic':ismagic, 'isalias':isalias}
230 'ismagic':ismagic, 'isalias':isalias}
230
231
231 def arg_err(self,func):
232 def arg_err(self,func):
232 """Print docstring if incorrect arguments were passed"""
233 """Print docstring if incorrect arguments were passed"""
233 print 'Error in arguments:'
234 print 'Error in arguments:'
234 print OInspect.getdoc(func)
235 print OInspect.getdoc(func)
235
236
236 def format_latex(self,strng):
237 def format_latex(self,strng):
237 """Format a string for latex inclusion."""
238 """Format a string for latex inclusion."""
238
239
239 # Characters that need to be escaped for latex:
240 # Characters that need to be escaped for latex:
240 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
241 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
241 # Magic command names as headers:
242 # Magic command names as headers:
242 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
243 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
243 re.MULTILINE)
244 re.MULTILINE)
244 # Magic commands
245 # Magic commands
245 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
246 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
246 re.MULTILINE)
247 re.MULTILINE)
247 # Paragraph continue
248 # Paragraph continue
248 par_re = re.compile(r'\\$',re.MULTILINE)
249 par_re = re.compile(r'\\$',re.MULTILINE)
249
250
250 # The "\n" symbol
251 # The "\n" symbol
251 newline_re = re.compile(r'\\n')
252 newline_re = re.compile(r'\\n')
252
253
253 # Now build the string for output:
254 # Now build the string for output:
254 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
255 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
255 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
256 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
256 strng)
257 strng)
257 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
258 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
258 strng = par_re.sub(r'\\\\',strng)
259 strng = par_re.sub(r'\\\\',strng)
259 strng = escape_re.sub(r'\\\1',strng)
260 strng = escape_re.sub(r'\\\1',strng)
260 strng = newline_re.sub(r'\\textbackslash{}n',strng)
261 strng = newline_re.sub(r'\\textbackslash{}n',strng)
261 return strng
262 return strng
262
263
263 def format_screen(self,strng):
264 def format_screen(self,strng):
264 """Format a string for screen printing.
265 """Format a string for screen printing.
265
266
266 This removes some latex-type format codes."""
267 This removes some latex-type format codes."""
267 # Paragraph continue
268 # Paragraph continue
268 par_re = re.compile(r'\\$',re.MULTILINE)
269 par_re = re.compile(r'\\$',re.MULTILINE)
269 strng = par_re.sub('',strng)
270 strng = par_re.sub('',strng)
270 return strng
271 return strng
271
272
272 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
273 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
273 """Parse options passed to an argument string.
274 """Parse options passed to an argument string.
274
275
275 The interface is similar to that of getopt(), but it returns back a
276 The interface is similar to that of getopt(), but it returns back a
276 Struct with the options as keys and the stripped argument string still
277 Struct with the options as keys and the stripped argument string still
277 as a string.
278 as a string.
278
279
279 arg_str is quoted as a true sys.argv vector by using shlex.split.
280 arg_str is quoted as a true sys.argv vector by using shlex.split.
280 This allows us to easily expand variables, glob files, quote
281 This allows us to easily expand variables, glob files, quote
281 arguments, etc.
282 arguments, etc.
282
283
283 Options:
284 Options:
284 -mode: default 'string'. If given as 'list', the argument string is
285 -mode: default 'string'. If given as 'list', the argument string is
285 returned as a list (split on whitespace) instead of a string.
286 returned as a list (split on whitespace) instead of a string.
286
287
287 -list_all: put all option values in lists. Normally only options
288 -list_all: put all option values in lists. Normally only options
288 appearing more than once are put in a list."""
289 appearing more than once are put in a list."""
289
290
290 # inject default options at the beginning of the input line
291 # inject default options at the beginning of the input line
291 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
292 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
292 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
293 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
293
294
294 mode = kw.get('mode','string')
295 mode = kw.get('mode','string')
295 if mode not in ['string','list']:
296 if mode not in ['string','list']:
296 raise ValueError,'incorrect mode given: %s' % mode
297 raise ValueError,'incorrect mode given: %s' % mode
297 # Get options
298 # Get options
298 list_all = kw.get('list_all',0)
299 list_all = kw.get('list_all',0)
299
300
300 # Check if we have more than one argument to warrant extra processing:
301 # Check if we have more than one argument to warrant extra processing:
301 odict = {} # Dictionary with options
302 odict = {} # Dictionary with options
302 args = arg_str.split()
303 args = arg_str.split()
303 if len(args) >= 1:
304 if len(args) >= 1:
304 # If the list of inputs only has 0 or 1 thing in it, there's no
305 # If the list of inputs only has 0 or 1 thing in it, there's no
305 # need to look for options
306 # need to look for options
306 argv = shlex_split(arg_str)
307 argv = shlex_split(arg_str)
307 # Do regular option processing
308 # Do regular option processing
308 opts,args = getopt(argv,opt_str,*long_opts)
309 opts,args = getopt(argv,opt_str,*long_opts)
309 for o,a in opts:
310 for o,a in opts:
310 if o.startswith('--'):
311 if o.startswith('--'):
311 o = o[2:]
312 o = o[2:]
312 else:
313 else:
313 o = o[1:]
314 o = o[1:]
314 try:
315 try:
315 odict[o].append(a)
316 odict[o].append(a)
316 except AttributeError:
317 except AttributeError:
317 odict[o] = [odict[o],a]
318 odict[o] = [odict[o],a]
318 except KeyError:
319 except KeyError:
319 if list_all:
320 if list_all:
320 odict[o] = [a]
321 odict[o] = [a]
321 else:
322 else:
322 odict[o] = a
323 odict[o] = a
323
324
324 # Prepare opts,args for return
325 # Prepare opts,args for return
325 opts = Struct(odict)
326 opts = Struct(odict)
326 if mode == 'string':
327 if mode == 'string':
327 args = ' '.join(args)
328 args = ' '.join(args)
328
329
329 return opts,args
330 return opts,args
330
331
331 #......................................................................
332 #......................................................................
332 # And now the actual magic functions
333 # And now the actual magic functions
333
334
334 # Functions for IPython shell work (vars,funcs, config, etc)
335 # Functions for IPython shell work (vars,funcs, config, etc)
335 def magic_lsmagic(self, parameter_s = ''):
336 def magic_lsmagic(self, parameter_s = ''):
336 """List currently available magic functions."""
337 """List currently available magic functions."""
337 mesc = self.shell.ESC_MAGIC
338 mesc = self.shell.ESC_MAGIC
338 print 'Available magic functions:\n'+mesc+\
339 print 'Available magic functions:\n'+mesc+\
339 (' '+mesc).join(self.lsmagic())
340 (' '+mesc).join(self.lsmagic())
340 print '\n' + Magic.auto_status[self.shell.rc.automagic]
341 print '\n' + Magic.auto_status[self.shell.rc.automagic]
341 return None
342 return None
342
343
343 def magic_magic(self, parameter_s = ''):
344 def magic_magic(self, parameter_s = ''):
344 """Print information about the magic function system."""
345 """Print information about the magic function system."""
345
346
346 mode = ''
347 mode = ''
347 try:
348 try:
348 if parameter_s.split()[0] == '-latex':
349 if parameter_s.split()[0] == '-latex':
349 mode = 'latex'
350 mode = 'latex'
350 except:
351 except:
351 pass
352 pass
352
353
353 magic_docs = []
354 magic_docs = []
354 for fname in self.lsmagic():
355 for fname in self.lsmagic():
355 mname = 'magic_' + fname
356 mname = 'magic_' + fname
356 for space in (Magic,self,self.__class__):
357 for space in (Magic,self,self.__class__):
357 try:
358 try:
358 fn = space.__dict__[mname]
359 fn = space.__dict__[mname]
359 except KeyError:
360 except KeyError:
360 pass
361 pass
361 else:
362 else:
362 break
363 break
363 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
364 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
364 fname,fn.__doc__))
365 fname,fn.__doc__))
365 magic_docs = ''.join(magic_docs)
366 magic_docs = ''.join(magic_docs)
366
367
367 if mode == 'latex':
368 if mode == 'latex':
368 print self.format_latex(magic_docs)
369 print self.format_latex(magic_docs)
369 return
370 return
370 else:
371 else:
371 magic_docs = self.format_screen(magic_docs)
372 magic_docs = self.format_screen(magic_docs)
372
373
373 outmsg = """
374 outmsg = """
374 IPython's 'magic' functions
375 IPython's 'magic' functions
375 ===========================
376 ===========================
376
377
377 The magic function system provides a series of functions which allow you to
378 The magic function system provides a series of functions which allow you to
378 control the behavior of IPython itself, plus a lot of system-type
379 control the behavior of IPython itself, plus a lot of system-type
379 features. All these functions are prefixed with a % character, but parameters
380 features. All these functions are prefixed with a % character, but parameters
380 are given without parentheses or quotes.
381 are given without parentheses or quotes.
381
382
382 NOTE: If you have 'automagic' enabled (via the command line option or with the
383 NOTE: If you have 'automagic' enabled (via the command line option or with the
383 %automagic function), you don't need to type in the % explicitly. By default,
384 %automagic function), you don't need to type in the % explicitly. By default,
384 IPython ships with automagic on, so you should only rarely need the % escape.
385 IPython ships with automagic on, so you should only rarely need the % escape.
385
386
386 Example: typing '%cd mydir' (without the quotes) changes you working directory
387 Example: typing '%cd mydir' (without the quotes) changes you working directory
387 to 'mydir', if it exists.
388 to 'mydir', if it exists.
388
389
389 You can define your own magic functions to extend the system. See the supplied
390 You can define your own magic functions to extend the system. See the supplied
390 ipythonrc and example-magic.py files for details (in your ipython
391 ipythonrc and example-magic.py files for details (in your ipython
391 configuration directory, typically $HOME/.ipython/).
392 configuration directory, typically $HOME/.ipython/).
392
393
393 You can also define your own aliased names for magic functions. In your
394 You can also define your own aliased names for magic functions. In your
394 ipythonrc file, placing a line like:
395 ipythonrc file, placing a line like:
395
396
396 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
397 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
397
398
398 will define %pf as a new name for %profile.
399 will define %pf as a new name for %profile.
399
400
400 You can also call magics in code using the ipmagic() function, which IPython
401 You can also call magics in code using the ipmagic() function, which IPython
401 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
402 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
402
403
403 For a list of the available magic functions, use %lsmagic. For a description
404 For a list of the available magic functions, use %lsmagic. For a description
404 of any of them, type %magic_name?, e.g. '%cd?'.
405 of any of them, type %magic_name?, e.g. '%cd?'.
405
406
406 Currently the magic system has the following functions:\n"""
407 Currently the magic system has the following functions:\n"""
407
408
408 mesc = self.shell.ESC_MAGIC
409 mesc = self.shell.ESC_MAGIC
409 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
410 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
410 "\n\n%s%s\n\n%s" % (outmsg,
411 "\n\n%s%s\n\n%s" % (outmsg,
411 magic_docs,mesc,mesc,
412 magic_docs,mesc,mesc,
412 (' '+mesc).join(self.lsmagic()),
413 (' '+mesc).join(self.lsmagic()),
413 Magic.auto_status[self.shell.rc.automagic] ) )
414 Magic.auto_status[self.shell.rc.automagic] ) )
414
415
415 page(outmsg,screen_lines=self.shell.rc.screen_length)
416 page(outmsg,screen_lines=self.shell.rc.screen_length)
416
417
417 def magic_automagic(self, parameter_s = ''):
418 def magic_automagic(self, parameter_s = ''):
418 """Make magic functions callable without having to type the initial %.
419 """Make magic functions callable without having to type the initial %.
419
420
420 Toggles on/off (when off, you must call it as %automagic, of
421 Toggles on/off (when off, you must call it as %automagic, of
421 course). Note that magic functions have lowest priority, so if there's
422 course). Note that magic functions have lowest priority, so if there's
422 a variable whose name collides with that of a magic fn, automagic
423 a variable whose name collides with that of a magic fn, automagic
423 won't work for that function (you get the variable instead). However,
424 won't work for that function (you get the variable instead). However,
424 if you delete the variable (del var), the previously shadowed magic
425 if you delete the variable (del var), the previously shadowed magic
425 function becomes visible to automagic again."""
426 function becomes visible to automagic again."""
426
427
427 rc = self.shell.rc
428 rc = self.shell.rc
428 rc.automagic = not rc.automagic
429 rc.automagic = not rc.automagic
429 print '\n' + Magic.auto_status[rc.automagic]
430 print '\n' + Magic.auto_status[rc.automagic]
430
431
431 def magic_autocall(self, parameter_s = ''):
432 def magic_autocall(self, parameter_s = ''):
432 """Make functions callable without having to type parentheses.
433 """Make functions callable without having to type parentheses.
433
434
434 Usage:
435 Usage:
435
436
436 %autocall [mode]
437 %autocall [mode]
437
438
438 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
439 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
439 value is toggled on and off (remembering the previous state)."""
440 value is toggled on and off (remembering the previous state)."""
440
441
441 rc = self.shell.rc
442 rc = self.shell.rc
442
443
443 if parameter_s:
444 if parameter_s:
444 arg = int(parameter_s)
445 arg = int(parameter_s)
445 else:
446 else:
446 arg = 'toggle'
447 arg = 'toggle'
447
448
448 if not arg in (0,1,2,'toggle'):
449 if not arg in (0,1,2,'toggle'):
449 error('Valid modes: (0->Off, 1->Smart, 2->Full')
450 error('Valid modes: (0->Off, 1->Smart, 2->Full')
450 return
451 return
451
452
452 if arg in (0,1,2):
453 if arg in (0,1,2):
453 rc.autocall = arg
454 rc.autocall = arg
454 else: # toggle
455 else: # toggle
455 if rc.autocall:
456 if rc.autocall:
456 self._magic_state.autocall_save = rc.autocall
457 self._magic_state.autocall_save = rc.autocall
457 rc.autocall = 0
458 rc.autocall = 0
458 else:
459 else:
459 try:
460 try:
460 rc.autocall = self._magic_state.autocall_save
461 rc.autocall = self._magic_state.autocall_save
461 except AttributeError:
462 except AttributeError:
462 rc.autocall = self._magic_state.autocall_save = 1
463 rc.autocall = self._magic_state.autocall_save = 1
463
464
464 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
465 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
465
466
466 def magic_autoindent(self, parameter_s = ''):
467 def magic_autoindent(self, parameter_s = ''):
467 """Toggle autoindent on/off (if available)."""
468 """Toggle autoindent on/off (if available)."""
468
469
469 self.shell.set_autoindent()
470 self.shell.set_autoindent()
470 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
471 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
471
472
472 def magic_system_verbose(self, parameter_s = ''):
473 def magic_system_verbose(self, parameter_s = ''):
473 """Toggle verbose printing of system calls on/off."""
474 """Toggle verbose printing of system calls on/off."""
474
475
475 self.shell.rc_set_toggle('system_verbose')
476 self.shell.rc_set_toggle('system_verbose')
476 print "System verbose printing is:",\
477 print "System verbose printing is:",\
477 ['OFF','ON'][self.shell.rc.system_verbose]
478 ['OFF','ON'][self.shell.rc.system_verbose]
478
479
479 def magic_history(self, parameter_s = ''):
480 def magic_history(self, parameter_s = ''):
480 """Print input history (_i<n> variables), with most recent last.
481 """Print input history (_i<n> variables), with most recent last.
481
482
482 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
483 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
483 %history [-n] n -> print at most n inputs\\
484 %history [-n] n -> print at most n inputs\\
484 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
485 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
485
486
486 Each input's number <n> is shown, and is accessible as the
487 Each input's number <n> is shown, and is accessible as the
487 automatically generated variable _i<n>. Multi-line statements are
488 automatically generated variable _i<n>. Multi-line statements are
488 printed starting at a new line for easy copy/paste.
489 printed starting at a new line for easy copy/paste.
489
490
490 If option -n is used, input numbers are not printed. This is useful if
491 If option -n is used, input numbers are not printed. This is useful if
491 you want to get a printout of many lines which can be directly pasted
492 you want to get a printout of many lines which can be directly pasted
492 into a text editor.
493 into a text editor.
493
494
494 This feature is only available if numbered prompts are in use."""
495 This feature is only available if numbered prompts are in use."""
495
496
496 shell = self.shell
497 shell = self.shell
497 if not shell.outputcache.do_full_cache:
498 if not shell.outputcache.do_full_cache:
498 print 'This feature is only available if numbered prompts are in use.'
499 print 'This feature is only available if numbered prompts are in use.'
499 return
500 return
500 opts,args = self.parse_options(parameter_s,'n',mode='list')
501 opts,args = self.parse_options(parameter_s,'n',mode='list')
501
502
502 input_hist = shell.input_hist
503 input_hist = shell.input_hist
503 default_length = 40
504 default_length = 40
504 if len(args) == 0:
505 if len(args) == 0:
505 final = len(input_hist)
506 final = len(input_hist)
506 init = max(1,final-default_length)
507 init = max(1,final-default_length)
507 elif len(args) == 1:
508 elif len(args) == 1:
508 final = len(input_hist)
509 final = len(input_hist)
509 init = max(1,final-int(args[0]))
510 init = max(1,final-int(args[0]))
510 elif len(args) == 2:
511 elif len(args) == 2:
511 init,final = map(int,args)
512 init,final = map(int,args)
512 else:
513 else:
513 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
514 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
514 print self.magic_hist.__doc__
515 print self.magic_hist.__doc__
515 return
516 return
516 width = len(str(final))
517 width = len(str(final))
517 line_sep = ['','\n']
518 line_sep = ['','\n']
518 print_nums = not opts.has_key('n')
519 print_nums = not opts.has_key('n')
519 for in_num in range(init,final):
520 for in_num in range(init,final):
520 inline = input_hist[in_num]
521 inline = input_hist[in_num]
521 multiline = int(inline.count('\n') > 1)
522 multiline = int(inline.count('\n') > 1)
522 if print_nums:
523 if print_nums:
523 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
524 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
524 print inline,
525 print inline,
525
526
526 def magic_hist(self, parameter_s=''):
527 def magic_hist(self, parameter_s=''):
527 """Alternate name for %history."""
528 """Alternate name for %history."""
528 return self.magic_history(parameter_s)
529 return self.magic_history(parameter_s)
529
530
530 def magic_p(self, parameter_s=''):
531 def magic_p(self, parameter_s=''):
531 """Just a short alias for Python's 'print'."""
532 """Just a short alias for Python's 'print'."""
532 exec 'print ' + parameter_s in self.shell.user_ns
533 exec 'print ' + parameter_s in self.shell.user_ns
533
534
534 def magic_r(self, parameter_s=''):
535 def magic_r(self, parameter_s=''):
535 """Repeat previous input.
536 """Repeat previous input.
536
537
537 If given an argument, repeats the previous command which starts with
538 If given an argument, repeats the previous command which starts with
538 the same string, otherwise it just repeats the previous input.
539 the same string, otherwise it just repeats the previous input.
539
540
540 Shell escaped commands (with ! as first character) are not recognized
541 Shell escaped commands (with ! as first character) are not recognized
541 by this system, only pure python code and magic commands.
542 by this system, only pure python code and magic commands.
542 """
543 """
543
544
544 start = parameter_s.strip()
545 start = parameter_s.strip()
545 esc_magic = self.shell.ESC_MAGIC
546 esc_magic = self.shell.ESC_MAGIC
546 # Identify magic commands even if automagic is on (which means
547 # Identify magic commands even if automagic is on (which means
547 # the in-memory version is different from that typed by the user).
548 # the in-memory version is different from that typed by the user).
548 if self.shell.rc.automagic:
549 if self.shell.rc.automagic:
549 start_magic = esc_magic+start
550 start_magic = esc_magic+start
550 else:
551 else:
551 start_magic = start
552 start_magic = start
552 # Look through the input history in reverse
553 # Look through the input history in reverse
553 for n in range(len(self.shell.input_hist)-2,0,-1):
554 for n in range(len(self.shell.input_hist)-2,0,-1):
554 input = self.shell.input_hist[n]
555 input = self.shell.input_hist[n]
555 # skip plain 'r' lines so we don't recurse to infinity
556 # skip plain 'r' lines so we don't recurse to infinity
556 if input != 'ipmagic("r")\n' and \
557 if input != 'ipmagic("r")\n' and \
557 (input.startswith(start) or input.startswith(start_magic)):
558 (input.startswith(start) or input.startswith(start_magic)):
558 #print 'match',`input` # dbg
559 #print 'match',`input` # dbg
559 print 'Executing:',input,
560 print 'Executing:',input,
560 self.shell.runlines(input)
561 self.shell.runlines(input)
561 return
562 return
562 print 'No previous input matching `%s` found.' % start
563 print 'No previous input matching `%s` found.' % start
563
564
564 def magic_page(self, parameter_s=''):
565 def magic_page(self, parameter_s=''):
565 """Pretty print the object and display it through a pager.
566 """Pretty print the object and display it through a pager.
566
567
567 If no parameter is given, use _ (last output)."""
568 If no parameter is given, use _ (last output)."""
568 # After a function contributed by Olivier Aubert, slightly modified.
569 # After a function contributed by Olivier Aubert, slightly modified.
569
570
570 oname = parameter_s and parameter_s or '_'
571 oname = parameter_s and parameter_s or '_'
571 info = self._ofind(oname)
572 info = self._ofind(oname)
572 if info['found']:
573 if info['found']:
573 page(pformat(info['obj']))
574 page(pformat(info['obj']))
574 else:
575 else:
575 print 'Object `%s` not found' % oname
576 print 'Object `%s` not found' % oname
576
577
577 def magic_profile(self, parameter_s=''):
578 def magic_profile(self, parameter_s=''):
578 """Print your currently active IPyhton profile."""
579 """Print your currently active IPyhton profile."""
579 if self.shell.rc.profile:
580 if self.shell.rc.profile:
580 printpl('Current IPython profile: $self.shell.rc.profile.')
581 printpl('Current IPython profile: $self.shell.rc.profile.')
581 else:
582 else:
582 print 'No profile active.'
583 print 'No profile active.'
583
584
584 def _inspect(self,meth,oname,**kw):
585 def _inspect(self,meth,oname,**kw):
585 """Generic interface to the inspector system.
586 """Generic interface to the inspector system.
586
587
587 This function is meant to be called by pdef, pdoc & friends."""
588 This function is meant to be called by pdef, pdoc & friends."""
588
589
589 oname = oname.strip()
590 oname = oname.strip()
590 info = Struct(self._ofind(oname))
591 info = Struct(self._ofind(oname))
591 if info.found:
592 if info.found:
592 pmethod = getattr(self.shell.inspector,meth)
593 pmethod = getattr(self.shell.inspector,meth)
593 formatter = info.ismagic and self.format_screen or None
594 formatter = info.ismagic and self.format_screen or None
594 if meth == 'pdoc':
595 if meth == 'pdoc':
595 pmethod(info.obj,oname,formatter)
596 pmethod(info.obj,oname,formatter)
596 elif meth == 'pinfo':
597 elif meth == 'pinfo':
597 pmethod(info.obj,oname,formatter,info,**kw)
598 pmethod(info.obj,oname,formatter,info,**kw)
598 else:
599 else:
599 pmethod(info.obj,oname)
600 pmethod(info.obj,oname)
600 else:
601 else:
601 print 'Object `%s` not found.' % oname
602 print 'Object `%s` not found.' % oname
602 return 'not found' # so callers can take other action
603 return 'not found' # so callers can take other action
603
604
604 def magic_pdef(self, parameter_s=''):
605 def magic_pdef(self, parameter_s=''):
605 """Print the definition header for any callable object.
606 """Print the definition header for any callable object.
606
607
607 If the object is a class, print the constructor information."""
608 If the object is a class, print the constructor information."""
608 self._inspect('pdef',parameter_s)
609 self._inspect('pdef',parameter_s)
609
610
610 def magic_pdoc(self, parameter_s=''):
611 def magic_pdoc(self, parameter_s=''):
611 """Print the docstring for an object.
612 """Print the docstring for an object.
612
613
613 If the given object is a class, it will print both the class and the
614 If the given object is a class, it will print both the class and the
614 constructor docstrings."""
615 constructor docstrings."""
615 self._inspect('pdoc',parameter_s)
616 self._inspect('pdoc',parameter_s)
616
617
617 def magic_psource(self, parameter_s=''):
618 def magic_psource(self, parameter_s=''):
618 """Print (or run through pager) the source code for an object."""
619 """Print (or run through pager) the source code for an object."""
619 self._inspect('psource',parameter_s)
620 self._inspect('psource',parameter_s)
620
621
621 def magic_pfile(self, parameter_s=''):
622 def magic_pfile(self, parameter_s=''):
622 """Print (or run through pager) the file where an object is defined.
623 """Print (or run through pager) the file where an object is defined.
623
624
624 The file opens at the line where the object definition begins. IPython
625 The file opens at the line where the object definition begins. IPython
625 will honor the environment variable PAGER if set, and otherwise will
626 will honor the environment variable PAGER if set, and otherwise will
626 do its best to print the file in a convenient form.
627 do its best to print the file in a convenient form.
627
628
628 If the given argument is not an object currently defined, IPython will
629 If the given argument is not an object currently defined, IPython will
629 try to interpret it as a filename (automatically adding a .py extension
630 try to interpret it as a filename (automatically adding a .py extension
630 if needed). You can thus use %pfile as a syntax highlighting code
631 if needed). You can thus use %pfile as a syntax highlighting code
631 viewer."""
632 viewer."""
632
633
633 # first interpret argument as an object name
634 # first interpret argument as an object name
634 out = self._inspect('pfile',parameter_s)
635 out = self._inspect('pfile',parameter_s)
635 # if not, try the input as a filename
636 # if not, try the input as a filename
636 if out == 'not found':
637 if out == 'not found':
637 try:
638 try:
638 filename = get_py_filename(parameter_s)
639 filename = get_py_filename(parameter_s)
639 except IOError,msg:
640 except IOError,msg:
640 print msg
641 print msg
641 return
642 return
642 page(self.shell.inspector.format(file(filename).read()))
643 page(self.shell.inspector.format(file(filename).read()))
643
644
644 def magic_pinfo(self, parameter_s=''):
645 def magic_pinfo(self, parameter_s=''):
645 """Provide detailed information about an object.
646 """Provide detailed information about an object.
646
647
647 '%pinfo object' is just a synonym for object? or ?object."""
648 '%pinfo object' is just a synonym for object? or ?object."""
648
649
649 #print 'pinfo par: <%s>' % parameter_s # dbg
650 #print 'pinfo par: <%s>' % parameter_s # dbg
650
651
651 # detail_level: 0 -> obj? , 1 -> obj??
652 # detail_level: 0 -> obj? , 1 -> obj??
652 detail_level = 0
653 detail_level = 0
653 # We need to detect if we got called as 'pinfo pinfo foo', which can
654 # We need to detect if we got called as 'pinfo pinfo foo', which can
654 # happen if the user types 'pinfo foo?' at the cmd line.
655 # happen if the user types 'pinfo foo?' at the cmd line.
655 pinfo,qmark1,oname,qmark2 = \
656 pinfo,qmark1,oname,qmark2 = \
656 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
657 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
657 if pinfo or qmark1 or qmark2:
658 if pinfo or qmark1 or qmark2:
658 detail_level = 1
659 detail_level = 1
659 if "*" in oname:
660 if "*" in oname:
660 self.magic_psearch(oname)
661 self.magic_psearch(oname)
661 else:
662 else:
662 self._inspect('pinfo',oname,detail_level=detail_level)
663 self._inspect('pinfo',oname,detail_level=detail_level)
663
664
664 def magic_psearch(self, parameter_s=''):
665 def magic_psearch(self, parameter_s=''):
665 """Search for object in namespaces by wildcard.
666 """Search for object in namespaces by wildcard.
666
667
667 %psearch [options] PATTERN [OBJECT TYPE]
668 %psearch [options] PATTERN [OBJECT TYPE]
668
669
669 Note: ? can be used as a synonym for %psearch, at the beginning or at
670 Note: ? can be used as a synonym for %psearch, at the beginning or at
670 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
671 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
671 rest of the command line must be unchanged (options come first), so
672 rest of the command line must be unchanged (options come first), so
672 for example the following forms are equivalent
673 for example the following forms are equivalent
673
674
674 %psearch -i a* function
675 %psearch -i a* function
675 -i a* function?
676 -i a* function?
676 ?-i a* function
677 ?-i a* function
677
678
678 Arguments:
679 Arguments:
679
680
680 PATTERN
681 PATTERN
681
682
682 where PATTERN is a string containing * as a wildcard similar to its
683 where PATTERN is a string containing * as a wildcard similar to its
683 use in a shell. The pattern is matched in all namespaces on the
684 use in a shell. The pattern is matched in all namespaces on the
684 search path. By default objects starting with a single _ are not
685 search path. By default objects starting with a single _ are not
685 matched, many IPython generated objects have a single
686 matched, many IPython generated objects have a single
686 underscore. The default is case insensitive matching. Matching is
687 underscore. The default is case insensitive matching. Matching is
687 also done on the attributes of objects and not only on the objects
688 also done on the attributes of objects and not only on the objects
688 in a module.
689 in a module.
689
690
690 [OBJECT TYPE]
691 [OBJECT TYPE]
691
692
692 Is the name of a python type from the types module. The name is
693 Is the name of a python type from the types module. The name is
693 given in lowercase without the ending type, ex. StringType is
694 given in lowercase without the ending type, ex. StringType is
694 written string. By adding a type here only objects matching the
695 written string. By adding a type here only objects matching the
695 given type are matched. Using all here makes the pattern match all
696 given type are matched. Using all here makes the pattern match all
696 types (this is the default).
697 types (this is the default).
697
698
698 Options:
699 Options:
699
700
700 -a: makes the pattern match even objects whose names start with a
701 -a: makes the pattern match even objects whose names start with a
701 single underscore. These names are normally ommitted from the
702 single underscore. These names are normally ommitted from the
702 search.
703 search.
703
704
704 -i/-c: make the pattern case insensitive/sensitive. If neither of
705 -i/-c: make the pattern case insensitive/sensitive. If neither of
705 these options is given, the default is read from your ipythonrc
706 these options is given, the default is read from your ipythonrc
706 file. The option name which sets this value is
707 file. The option name which sets this value is
707 'wildcards_case_sensitive'. If this option is not specified in your
708 'wildcards_case_sensitive'. If this option is not specified in your
708 ipythonrc file, IPython's internal default is to do a case sensitive
709 ipythonrc file, IPython's internal default is to do a case sensitive
709 search.
710 search.
710
711
711 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
712 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
712 specifiy can be searched in any of the following namespaces:
713 specifiy can be searched in any of the following namespaces:
713 'builtin', 'user', 'user_global','internal', 'alias', where
714 'builtin', 'user', 'user_global','internal', 'alias', where
714 'builtin' and 'user' are the search defaults. Note that you should
715 'builtin' and 'user' are the search defaults. Note that you should
715 not use quotes when specifying namespaces.
716 not use quotes when specifying namespaces.
716
717
717 'Builtin' contains the python module builtin, 'user' contains all
718 'Builtin' contains the python module builtin, 'user' contains all
718 user data, 'alias' only contain the shell aliases and no python
719 user data, 'alias' only contain the shell aliases and no python
719 objects, 'internal' contains objects used by IPython. The
720 objects, 'internal' contains objects used by IPython. The
720 'user_global' namespace is only used by embedded IPython instances,
721 'user_global' namespace is only used by embedded IPython instances,
721 and it contains module-level globals. You can add namespaces to the
722 and it contains module-level globals. You can add namespaces to the
722 search with -s or exclude them with -e (these options can be given
723 search with -s or exclude them with -e (these options can be given
723 more than once).
724 more than once).
724
725
725 Examples:
726 Examples:
726
727
727 %psearch a* -> objects beginning with an a
728 %psearch a* -> objects beginning with an a
728 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
729 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
729 %psearch a* function -> all functions beginning with an a
730 %psearch a* function -> all functions beginning with an a
730 %psearch re.e* -> objects beginning with an e in module re
731 %psearch re.e* -> objects beginning with an e in module re
731 %psearch r*.e* -> objects that start with e in modules starting in r
732 %psearch r*.e* -> objects that start with e in modules starting in r
732 %psearch r*.* string -> all strings in modules beginning with r
733 %psearch r*.* string -> all strings in modules beginning with r
733
734
734 Case sensitve search:
735 Case sensitve search:
735
736
736 %psearch -c a* list all object beginning with lower case a
737 %psearch -c a* list all object beginning with lower case a
737
738
738 Show objects beginning with a single _:
739 Show objects beginning with a single _:
739
740
740 %psearch -a _* list objects beginning with a single underscore"""
741 %psearch -a _* list objects beginning with a single underscore"""
741
742
742 # default namespaces to be searched
743 # default namespaces to be searched
743 def_search = ['user','builtin']
744 def_search = ['user','builtin']
744
745
745 # Process options/args
746 # Process options/args
746 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
747 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
747 opt = opts.get
748 opt = opts.get
748 shell = self.shell
749 shell = self.shell
749 psearch = shell.inspector.psearch
750 psearch = shell.inspector.psearch
750
751
751 # select case options
752 # select case options
752 if opts.has_key('i'):
753 if opts.has_key('i'):
753 ignore_case = True
754 ignore_case = True
754 elif opts.has_key('c'):
755 elif opts.has_key('c'):
755 ignore_case = False
756 ignore_case = False
756 else:
757 else:
757 ignore_case = not shell.rc.wildcards_case_sensitive
758 ignore_case = not shell.rc.wildcards_case_sensitive
758
759
759 # Build list of namespaces to search from user options
760 # Build list of namespaces to search from user options
760 def_search.extend(opt('s',[]))
761 def_search.extend(opt('s',[]))
761 ns_exclude = ns_exclude=opt('e',[])
762 ns_exclude = ns_exclude=opt('e',[])
762 ns_search = [nm for nm in def_search if nm not in ns_exclude]
763 ns_search = [nm for nm in def_search if nm not in ns_exclude]
763
764
764 # Call the actual search
765 # Call the actual search
765 try:
766 try:
766 psearch(args,shell.ns_table,ns_search,
767 psearch(args,shell.ns_table,ns_search,
767 show_all=opt('a'),ignore_case=ignore_case)
768 show_all=opt('a'),ignore_case=ignore_case)
768 except:
769 except:
769 shell.showtraceback()
770 shell.showtraceback()
770
771
771 def magic_who_ls(self, parameter_s=''):
772 def magic_who_ls(self, parameter_s=''):
772 """Return a sorted list of all interactive variables.
773 """Return a sorted list of all interactive variables.
773
774
774 If arguments are given, only variables of types matching these
775 If arguments are given, only variables of types matching these
775 arguments are returned."""
776 arguments are returned."""
776
777
777 user_ns = self.shell.user_ns
778 user_ns = self.shell.user_ns
778 internal_ns = self.shell.internal_ns
779 internal_ns = self.shell.internal_ns
779 user_config_ns = self.shell.user_config_ns
780 user_config_ns = self.shell.user_config_ns
780 out = []
781 out = []
781 typelist = parameter_s.split()
782 typelist = parameter_s.split()
782
783
783 for i in user_ns:
784 for i in user_ns:
784 if not (i.startswith('_') or i.startswith('_i')) \
785 if not (i.startswith('_') or i.startswith('_i')) \
785 and not (i in internal_ns or i in user_config_ns):
786 and not (i in internal_ns or i in user_config_ns):
786 if typelist:
787 if typelist:
787 if type(user_ns[i]).__name__ in typelist:
788 if type(user_ns[i]).__name__ in typelist:
788 out.append(i)
789 out.append(i)
789 else:
790 else:
790 out.append(i)
791 out.append(i)
791 out.sort()
792 out.sort()
792 return out
793 return out
793
794
794 def magic_who(self, parameter_s=''):
795 def magic_who(self, parameter_s=''):
795 """Print all interactive variables, with some minimal formatting.
796 """Print all interactive variables, with some minimal formatting.
796
797
797 If any arguments are given, only variables whose type matches one of
798 If any arguments are given, only variables whose type matches one of
798 these are printed. For example:
799 these are printed. For example:
799
800
800 %who function str
801 %who function str
801
802
802 will only list functions and strings, excluding all other types of
803 will only list functions and strings, excluding all other types of
803 variables. To find the proper type names, simply use type(var) at a
804 variables. To find the proper type names, simply use type(var) at a
804 command line to see how python prints type names. For example:
805 command line to see how python prints type names. For example:
805
806
806 In [1]: type('hello')\\
807 In [1]: type('hello')\\
807 Out[1]: <type 'str'>
808 Out[1]: <type 'str'>
808
809
809 indicates that the type name for strings is 'str'.
810 indicates that the type name for strings is 'str'.
810
811
811 %who always excludes executed names loaded through your configuration
812 %who always excludes executed names loaded through your configuration
812 file and things which are internal to IPython.
813 file and things which are internal to IPython.
813
814
814 This is deliberate, as typically you may load many modules and the
815 This is deliberate, as typically you may load many modules and the
815 purpose of %who is to show you only what you've manually defined."""
816 purpose of %who is to show you only what you've manually defined."""
816
817
817 varlist = self.magic_who_ls(parameter_s)
818 varlist = self.magic_who_ls(parameter_s)
818 if not varlist:
819 if not varlist:
819 print 'Interactive namespace is empty.'
820 print 'Interactive namespace is empty.'
820 return
821 return
821
822
822 # if we have variables, move on...
823 # if we have variables, move on...
823
824
824 # stupid flushing problem: when prompts have no separators, stdout is
825 # stupid flushing problem: when prompts have no separators, stdout is
825 # getting lost. I'm starting to think this is a python bug. I'm having
826 # getting lost. I'm starting to think this is a python bug. I'm having
826 # to force a flush with a print because even a sys.stdout.flush
827 # to force a flush with a print because even a sys.stdout.flush
827 # doesn't seem to do anything!
828 # doesn't seem to do anything!
828
829
829 count = 0
830 count = 0
830 for i in varlist:
831 for i in varlist:
831 print i+'\t',
832 print i+'\t',
832 count += 1
833 count += 1
833 if count > 8:
834 if count > 8:
834 count = 0
835 count = 0
835 print
836 print
836 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
837 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
837
838
838 print # well, this does force a flush at the expense of an extra \n
839 print # well, this does force a flush at the expense of an extra \n
839
840
840 def magic_whos(self, parameter_s=''):
841 def magic_whos(self, parameter_s=''):
841 """Like %who, but gives some extra information about each variable.
842 """Like %who, but gives some extra information about each variable.
842
843
843 The same type filtering of %who can be applied here.
844 The same type filtering of %who can be applied here.
844
845
845 For all variables, the type is printed. Additionally it prints:
846 For all variables, the type is printed. Additionally it prints:
846
847
847 - For {},[],(): their length.
848 - For {},[],(): their length.
848
849
849 - For Numeric arrays, a summary with shape, number of elements,
850 - For Numeric arrays, a summary with shape, number of elements,
850 typecode and size in memory.
851 typecode and size in memory.
851
852
852 - Everything else: a string representation, snipping their middle if
853 - Everything else: a string representation, snipping their middle if
853 too long."""
854 too long."""
854
855
855 varnames = self.magic_who_ls(parameter_s)
856 varnames = self.magic_who_ls(parameter_s)
856 if not varnames:
857 if not varnames:
857 print 'Interactive namespace is empty.'
858 print 'Interactive namespace is empty.'
858 return
859 return
859
860
860 # if we have variables, move on...
861 # if we have variables, move on...
861
862
862 # for these types, show len() instead of data:
863 # for these types, show len() instead of data:
863 seq_types = [types.DictType,types.ListType,types.TupleType]
864 seq_types = [types.DictType,types.ListType,types.TupleType]
864
865
865 # for Numeric arrays, display summary info
866 # for Numeric arrays, display summary info
866 try:
867 try:
867 import Numeric
868 import Numeric
868 except ImportError:
869 except ImportError:
869 array_type = None
870 array_type = None
870 else:
871 else:
871 array_type = Numeric.ArrayType.__name__
872 array_type = Numeric.ArrayType.__name__
872
873
873 # Find all variable names and types so we can figure out column sizes
874 # Find all variable names and types so we can figure out column sizes
874 get_vars = lambda i: self.shell.user_ns[i]
875 get_vars = lambda i: self.shell.user_ns[i]
875 type_name = lambda v: type(v).__name__
876 type_name = lambda v: type(v).__name__
876 varlist = map(get_vars,varnames)
877 varlist = map(get_vars,varnames)
877
878
878 typelist = []
879 typelist = []
879 for vv in varlist:
880 for vv in varlist:
880 tt = type_name(vv)
881 tt = type_name(vv)
881 if tt=='instance':
882 if tt=='instance':
882 typelist.append(str(vv.__class__))
883 typelist.append(str(vv.__class__))
883 else:
884 else:
884 typelist.append(tt)
885 typelist.append(tt)
885
886
886 # column labels and # of spaces as separator
887 # column labels and # of spaces as separator
887 varlabel = 'Variable'
888 varlabel = 'Variable'
888 typelabel = 'Type'
889 typelabel = 'Type'
889 datalabel = 'Data/Info'
890 datalabel = 'Data/Info'
890 colsep = 3
891 colsep = 3
891 # variable format strings
892 # variable format strings
892 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
893 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
893 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
894 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
894 aformat = "%s: %s elems, type `%s`, %s bytes"
895 aformat = "%s: %s elems, type `%s`, %s bytes"
895 # find the size of the columns to format the output nicely
896 # find the size of the columns to format the output nicely
896 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
897 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
897 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
898 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
898 # table header
899 # table header
899 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
900 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
900 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
901 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
901 # and the table itself
902 # and the table itself
902 kb = 1024
903 kb = 1024
903 Mb = 1048576 # kb**2
904 Mb = 1048576 # kb**2
904 for vname,var,vtype in zip(varnames,varlist,typelist):
905 for vname,var,vtype in zip(varnames,varlist,typelist):
905 print itpl(vformat),
906 print itpl(vformat),
906 if vtype in seq_types:
907 if vtype in seq_types:
907 print len(var)
908 print len(var)
908 elif vtype==array_type:
909 elif vtype==array_type:
909 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
910 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
910 vsize = Numeric.size(var)
911 vsize = Numeric.size(var)
911 vbytes = vsize*var.itemsize()
912 vbytes = vsize*var.itemsize()
912 if vbytes < 100000:
913 if vbytes < 100000:
913 print aformat % (vshape,vsize,var.typecode(),vbytes)
914 print aformat % (vshape,vsize,var.typecode(),vbytes)
914 else:
915 else:
915 print aformat % (vshape,vsize,var.typecode(),vbytes),
916 print aformat % (vshape,vsize,var.typecode(),vbytes),
916 if vbytes < Mb:
917 if vbytes < Mb:
917 print '(%s kb)' % (vbytes/kb,)
918 print '(%s kb)' % (vbytes/kb,)
918 else:
919 else:
919 print '(%s Mb)' % (vbytes/Mb,)
920 print '(%s Mb)' % (vbytes/Mb,)
920 else:
921 else:
921 vstr = str(var).replace('\n','\\n')
922 vstr = str(var).replace('\n','\\n')
922 if len(vstr) < 50:
923 if len(vstr) < 50:
923 print vstr
924 print vstr
924 else:
925 else:
925 printpl(vfmt_short)
926 printpl(vfmt_short)
926
927
927 def magic_reset(self, parameter_s=''):
928 def magic_reset(self, parameter_s=''):
928 """Resets the namespace by removing all names defined by the user.
929 """Resets the namespace by removing all names defined by the user.
929
930
930 Input/Output history are left around in case you need them."""
931 Input/Output history are left around in case you need them."""
931
932
932 ans = raw_input(
933 ans = raw_input(
933 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
934 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
934 if not ans.lower() == 'y':
935 if not ans.lower() == 'y':
935 print 'Nothing done.'
936 print 'Nothing done.'
936 return
937 return
937 user_ns = self.shell.user_ns
938 user_ns = self.shell.user_ns
938 for i in self.magic_who_ls():
939 for i in self.magic_who_ls():
939 del(user_ns[i])
940 del(user_ns[i])
940
941
941 def magic_config(self,parameter_s=''):
942 def magic_config(self,parameter_s=''):
942 """Show IPython's internal configuration."""
943 """Show IPython's internal configuration."""
943
944
944 page('Current configuration structure:\n'+
945 page('Current configuration structure:\n'+
945 pformat(self.shell.rc.dict()))
946 pformat(self.shell.rc.dict()))
946
947
947 def magic_logstart(self,parameter_s=''):
948 def magic_logstart(self,parameter_s=''):
948 """Start logging anywhere in a session.
949 """Start logging anywhere in a session.
949
950
950 %logstart [-o|-t] [log_name [log_mode]]
951 %logstart [-o|-t] [log_name [log_mode]]
951
952
952 If no name is given, it defaults to a file named 'ipython_log.py' in your
953 If no name is given, it defaults to a file named 'ipython_log.py' in your
953 current directory, in 'rotate' mode (see below).
954 current directory, in 'rotate' mode (see below).
954
955
955 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
956 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
956 history up to that point and then continues logging.
957 history up to that point and then continues logging.
957
958
958 %logstart takes a second optional parameter: logging mode. This can be one
959 %logstart takes a second optional parameter: logging mode. This can be one
959 of (note that the modes are given unquoted):\\
960 of (note that the modes are given unquoted):\\
960 append: well, that says it.\\
961 append: well, that says it.\\
961 backup: rename (if exists) to name~ and start name.\\
962 backup: rename (if exists) to name~ and start name.\\
962 global: single logfile in your home dir, appended to.\\
963 global: single logfile in your home dir, appended to.\\
963 over : overwrite existing log.\\
964 over : overwrite existing log.\\
964 rotate: create rotating logs name.1~, name.2~, etc.
965 rotate: create rotating logs name.1~, name.2~, etc.
965
966
966 Options:
967 Options:
967
968
968 -o: log also IPython's output. In this mode, all commands which
969 -o: log also IPython's output. In this mode, all commands which
969 generate an Out[NN] prompt are recorded to the logfile, right after
970 generate an Out[NN] prompt are recorded to the logfile, right after
970 their corresponding input line. The output lines are always
971 their corresponding input line. The output lines are always
971 prepended with a '#[Out]# ' marker, so that the log remains valid
972 prepended with a '#[Out]# ' marker, so that the log remains valid
972 Python code.
973 Python code.
973
974
974 Since this marker is always the same, filtering only the output from
975 Since this marker is always the same, filtering only the output from
975 a log is very easy, using for example a simple awk call:
976 a log is very easy, using for example a simple awk call:
976
977
977 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
978 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
978
979
979 -t: put timestamps before each input line logged (these are put in
980 -t: put timestamps before each input line logged (these are put in
980 comments)."""
981 comments)."""
981
982
982 opts,par = self.parse_options(parameter_s,'ot')
983 opts,par = self.parse_options(parameter_s,'ot')
983 log_output = 'o' in opts
984 log_output = 'o' in opts
984 timestamp = 't' in opts
985 timestamp = 't' in opts
985
986
986 rc = self.shell.rc
987 rc = self.shell.rc
987 logger = self.shell.logger
988 logger = self.shell.logger
988
989
989 # if no args are given, the defaults set in the logger constructor by
990 # if no args are given, the defaults set in the logger constructor by
990 # ipytohn remain valid
991 # ipytohn remain valid
991 if par:
992 if par:
992 try:
993 try:
993 logfname,logmode = par.split()
994 logfname,logmode = par.split()
994 except:
995 except:
995 logfname = par
996 logfname = par
996 logmode = 'backup'
997 logmode = 'backup'
997 else:
998 else:
998 logfname = logger.logfname
999 logfname = logger.logfname
999 logmode = logger.logmode
1000 logmode = logger.logmode
1000 # put logfname into rc struct as if it had been called on the command
1001 # put logfname into rc struct as if it had been called on the command
1001 # line, so it ends up saved in the log header Save it in case we need
1002 # line, so it ends up saved in the log header Save it in case we need
1002 # to restore it...
1003 # to restore it...
1003 old_logfile = rc.opts.get('logfile','')
1004 old_logfile = rc.opts.get('logfile','')
1004 if logfname:
1005 if logfname:
1005 logfname = os.path.expanduser(logfname)
1006 logfname = os.path.expanduser(logfname)
1006 rc.opts.logfile = logfname
1007 rc.opts.logfile = logfname
1007 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1008 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1008 try:
1009 try:
1009 started = logger.logstart(logfname,loghead,logmode,
1010 started = logger.logstart(logfname,loghead,logmode,
1010 log_output,timestamp)
1011 log_output,timestamp)
1011 except:
1012 except:
1012 rc.opts.logfile = old_logfile
1013 rc.opts.logfile = old_logfile
1013 warn("Couldn't start log: %s" % sys.exc_info()[1])
1014 warn("Couldn't start log: %s" % sys.exc_info()[1])
1014 else:
1015 else:
1015 # log input history up to this point, optionally interleaving
1016 # log input history up to this point, optionally interleaving
1016 # output if requested
1017 # output if requested
1017
1018
1018 if timestamp:
1019 if timestamp:
1019 # disable timestamping for the previous history, since we've
1020 # disable timestamping for the previous history, since we've
1020 # lost those already (no time machine here).
1021 # lost those already (no time machine here).
1021 logger.timestamp = False
1022 logger.timestamp = False
1022 if log_output:
1023 if log_output:
1023 log_write = logger.log_write
1024 log_write = logger.log_write
1024 input_hist = self.shell.input_hist
1025 input_hist = self.shell.input_hist
1025 output_hist = self.shell.output_hist
1026 output_hist = self.shell.output_hist
1026 for n in range(1,len(input_hist)-1):
1027 for n in range(1,len(input_hist)-1):
1027 log_write(input_hist[n].rstrip())
1028 log_write(input_hist[n].rstrip())
1028 if n in output_hist:
1029 if n in output_hist:
1029 log_write(repr(output_hist[n]),'output')
1030 log_write(repr(output_hist[n]),'output')
1030 else:
1031 else:
1031 logger.log_write(self.shell.input_hist[1:])
1032 logger.log_write(self.shell.input_hist[1:])
1032 if timestamp:
1033 if timestamp:
1033 # re-enable timestamping
1034 # re-enable timestamping
1034 logger.timestamp = True
1035 logger.timestamp = True
1035
1036
1036 print ('Activating auto-logging. '
1037 print ('Activating auto-logging. '
1037 'Current session state plus future input saved.')
1038 'Current session state plus future input saved.')
1038 logger.logstate()
1039 logger.logstate()
1039
1040
1040 def magic_logoff(self,parameter_s=''):
1041 def magic_logoff(self,parameter_s=''):
1041 """Temporarily stop logging.
1042 """Temporarily stop logging.
1042
1043
1043 You must have previously started logging."""
1044 You must have previously started logging."""
1044 self.shell.logger.switch_log(0)
1045 self.shell.logger.switch_log(0)
1045
1046
1046 def magic_logon(self,parameter_s=''):
1047 def magic_logon(self,parameter_s=''):
1047 """Restart logging.
1048 """Restart logging.
1048
1049
1049 This function is for restarting logging which you've temporarily
1050 This function is for restarting logging which you've temporarily
1050 stopped with %logoff. For starting logging for the first time, you
1051 stopped with %logoff. For starting logging for the first time, you
1051 must use the %logstart function, which allows you to specify an
1052 must use the %logstart function, which allows you to specify an
1052 optional log filename."""
1053 optional log filename."""
1053
1054
1054 self.shell.logger.switch_log(1)
1055 self.shell.logger.switch_log(1)
1055
1056
1056 def magic_logstate(self,parameter_s=''):
1057 def magic_logstate(self,parameter_s=''):
1057 """Print the status of the logging system."""
1058 """Print the status of the logging system."""
1058
1059
1059 self.shell.logger.logstate()
1060 self.shell.logger.logstate()
1060
1061
1061 def magic_pdb(self, parameter_s=''):
1062 def magic_pdb(self, parameter_s=''):
1062 """Control the calling of the pdb interactive debugger.
1063 """Control the calling of the pdb interactive debugger.
1063
1064
1064 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1065 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1065 argument it works as a toggle.
1066 argument it works as a toggle.
1066
1067
1067 When an exception is triggered, IPython can optionally call the
1068 When an exception is triggered, IPython can optionally call the
1068 interactive pdb debugger after the traceback printout. %pdb toggles
1069 interactive pdb debugger after the traceback printout. %pdb toggles
1069 this feature on and off."""
1070 this feature on and off."""
1070
1071
1071 par = parameter_s.strip().lower()
1072 par = parameter_s.strip().lower()
1072
1073
1073 if par:
1074 if par:
1074 try:
1075 try:
1075 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1076 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1076 except KeyError:
1077 except KeyError:
1077 print ('Incorrect argument. Use on/1, off/0, '
1078 print ('Incorrect argument. Use on/1, off/0, '
1078 'or nothing for a toggle.')
1079 'or nothing for a toggle.')
1079 return
1080 return
1080 else:
1081 else:
1081 # toggle
1082 # toggle
1082 new_pdb = not self.shell.InteractiveTB.call_pdb
1083 new_pdb = not self.shell.InteractiveTB.call_pdb
1083
1084
1084 # set on the shell
1085 # set on the shell
1085 self.shell.call_pdb = new_pdb
1086 self.shell.call_pdb = new_pdb
1086 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1087 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1087
1088
1088 def magic_prun(self, parameter_s ='',user_mode=1,
1089 def magic_prun(self, parameter_s ='',user_mode=1,
1089 opts=None,arg_lst=None,prog_ns=None):
1090 opts=None,arg_lst=None,prog_ns=None):
1090
1091
1091 """Run a statement through the python code profiler.
1092 """Run a statement through the python code profiler.
1092
1093
1093 Usage:\\
1094 Usage:\\
1094 %prun [options] statement
1095 %prun [options] statement
1095
1096
1096 The given statement (which doesn't require quote marks) is run via the
1097 The given statement (which doesn't require quote marks) is run via the
1097 python profiler in a manner similar to the profile.run() function.
1098 python profiler in a manner similar to the profile.run() function.
1098 Namespaces are internally managed to work correctly; profile.run
1099 Namespaces are internally managed to work correctly; profile.run
1099 cannot be used in IPython because it makes certain assumptions about
1100 cannot be used in IPython because it makes certain assumptions about
1100 namespaces which do not hold under IPython.
1101 namespaces which do not hold under IPython.
1101
1102
1102 Options:
1103 Options:
1103
1104
1104 -l <limit>: you can place restrictions on what or how much of the
1105 -l <limit>: you can place restrictions on what or how much of the
1105 profile gets printed. The limit value can be:
1106 profile gets printed. The limit value can be:
1106
1107
1107 * A string: only information for function names containing this string
1108 * A string: only information for function names containing this string
1108 is printed.
1109 is printed.
1109
1110
1110 * An integer: only these many lines are printed.
1111 * An integer: only these many lines are printed.
1111
1112
1112 * A float (between 0 and 1): this fraction of the report is printed
1113 * A float (between 0 and 1): this fraction of the report is printed
1113 (for example, use a limit of 0.4 to see the topmost 40% only).
1114 (for example, use a limit of 0.4 to see the topmost 40% only).
1114
1115
1115 You can combine several limits with repeated use of the option. For
1116 You can combine several limits with repeated use of the option. For
1116 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1117 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1117 information about class constructors.
1118 information about class constructors.
1118
1119
1119 -r: return the pstats.Stats object generated by the profiling. This
1120 -r: return the pstats.Stats object generated by the profiling. This
1120 object has all the information about the profile in it, and you can
1121 object has all the information about the profile in it, and you can
1121 later use it for further analysis or in other functions.
1122 later use it for further analysis or in other functions.
1122
1123
1123 Since magic functions have a particular form of calling which prevents
1124 Since magic functions have a particular form of calling which prevents
1124 you from writing something like:\\
1125 you from writing something like:\\
1125 In [1]: p = %prun -r print 4 # invalid!\\
1126 In [1]: p = %prun -r print 4 # invalid!\\
1126 you must instead use IPython's automatic variables to assign this:\\
1127 you must instead use IPython's automatic variables to assign this:\\
1127 In [1]: %prun -r print 4 \\
1128 In [1]: %prun -r print 4 \\
1128 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1129 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1129 In [2]: stats = _
1130 In [2]: stats = _
1130
1131
1131 If you really need to assign this value via an explicit function call,
1132 If you really need to assign this value via an explicit function call,
1132 you can always tap directly into the true name of the magic function
1133 you can always tap directly into the true name of the magic function
1133 by using the ipmagic function (which IPython automatically adds to the
1134 by using the ipmagic function (which IPython automatically adds to the
1134 builtins):\\
1135 builtins):\\
1135 In [3]: stats = ipmagic('prun','-r print 4')
1136 In [3]: stats = ipmagic('prun','-r print 4')
1136
1137
1137 You can type ipmagic? for more details on ipmagic.
1138 You can type ipmagic? for more details on ipmagic.
1138
1139
1139 -s <key>: sort profile by given key. You can provide more than one key
1140 -s <key>: sort profile by given key. You can provide more than one key
1140 by using the option several times: '-s key1 -s key2 -s key3...'. The
1141 by using the option several times: '-s key1 -s key2 -s key3...'. The
1141 default sorting key is 'time'.
1142 default sorting key is 'time'.
1142
1143
1143 The following is copied verbatim from the profile documentation
1144 The following is copied verbatim from the profile documentation
1144 referenced below:
1145 referenced below:
1145
1146
1146 When more than one key is provided, additional keys are used as
1147 When more than one key is provided, additional keys are used as
1147 secondary criteria when the there is equality in all keys selected
1148 secondary criteria when the there is equality in all keys selected
1148 before them.
1149 before them.
1149
1150
1150 Abbreviations can be used for any key names, as long as the
1151 Abbreviations can be used for any key names, as long as the
1151 abbreviation is unambiguous. The following are the keys currently
1152 abbreviation is unambiguous. The following are the keys currently
1152 defined:
1153 defined:
1153
1154
1154 Valid Arg Meaning\\
1155 Valid Arg Meaning\\
1155 "calls" call count\\
1156 "calls" call count\\
1156 "cumulative" cumulative time\\
1157 "cumulative" cumulative time\\
1157 "file" file name\\
1158 "file" file name\\
1158 "module" file name\\
1159 "module" file name\\
1159 "pcalls" primitive call count\\
1160 "pcalls" primitive call count\\
1160 "line" line number\\
1161 "line" line number\\
1161 "name" function name\\
1162 "name" function name\\
1162 "nfl" name/file/line\\
1163 "nfl" name/file/line\\
1163 "stdname" standard name\\
1164 "stdname" standard name\\
1164 "time" internal time
1165 "time" internal time
1165
1166
1166 Note that all sorts on statistics are in descending order (placing
1167 Note that all sorts on statistics are in descending order (placing
1167 most time consuming items first), where as name, file, and line number
1168 most time consuming items first), where as name, file, and line number
1168 searches are in ascending order (i.e., alphabetical). The subtle
1169 searches are in ascending order (i.e., alphabetical). The subtle
1169 distinction between "nfl" and "stdname" is that the standard name is a
1170 distinction between "nfl" and "stdname" is that the standard name is a
1170 sort of the name as printed, which means that the embedded line
1171 sort of the name as printed, which means that the embedded line
1171 numbers get compared in an odd way. For example, lines 3, 20, and 40
1172 numbers get compared in an odd way. For example, lines 3, 20, and 40
1172 would (if the file names were the same) appear in the string order
1173 would (if the file names were the same) appear in the string order
1173 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1174 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1174 line numbers. In fact, sort_stats("nfl") is the same as
1175 line numbers. In fact, sort_stats("nfl") is the same as
1175 sort_stats("name", "file", "line").
1176 sort_stats("name", "file", "line").
1176
1177
1177 -T <filename>: save profile results as shown on screen to a text
1178 -T <filename>: save profile results as shown on screen to a text
1178 file. The profile is still shown on screen.
1179 file. The profile is still shown on screen.
1179
1180
1180 -D <filename>: save (via dump_stats) profile statistics to given
1181 -D <filename>: save (via dump_stats) profile statistics to given
1181 filename. This data is in a format understod by the pstats module, and
1182 filename. This data is in a format understod by the pstats module, and
1182 is generated by a call to the dump_stats() method of profile
1183 is generated by a call to the dump_stats() method of profile
1183 objects. The profile is still shown on screen.
1184 objects. The profile is still shown on screen.
1184
1185
1185 If you want to run complete programs under the profiler's control, use
1186 If you want to run complete programs under the profiler's control, use
1186 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1187 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1187 contains profiler specific options as described here.
1188 contains profiler specific options as described here.
1188
1189
1189 You can read the complete documentation for the profile module with:\\
1190 You can read the complete documentation for the profile module with:\\
1190 In [1]: import profile; profile.help() """
1191 In [1]: import profile; profile.help() """
1191
1192
1192 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1193 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1193 # protect user quote marks
1194 # protect user quote marks
1194 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1195 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1195
1196
1196 if user_mode: # regular user call
1197 if user_mode: # regular user call
1197 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1198 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1198 list_all=1)
1199 list_all=1)
1199 namespace = self.shell.user_ns
1200 namespace = self.shell.user_ns
1200 else: # called to run a program by %run -p
1201 else: # called to run a program by %run -p
1201 try:
1202 try:
1202 filename = get_py_filename(arg_lst[0])
1203 filename = get_py_filename(arg_lst[0])
1203 except IOError,msg:
1204 except IOError,msg:
1204 error(msg)
1205 error(msg)
1205 return
1206 return
1206
1207
1207 arg_str = 'execfile(filename,prog_ns)'
1208 arg_str = 'execfile(filename,prog_ns)'
1208 namespace = locals()
1209 namespace = locals()
1209
1210
1210 opts.merge(opts_def)
1211 opts.merge(opts_def)
1211
1212
1212 prof = profile.Profile()
1213 prof = profile.Profile()
1213 try:
1214 try:
1214 prof = prof.runctx(arg_str,namespace,namespace)
1215 prof = prof.runctx(arg_str,namespace,namespace)
1215 sys_exit = ''
1216 sys_exit = ''
1216 except SystemExit:
1217 except SystemExit:
1217 sys_exit = """*** SystemExit exception caught in code being profiled."""
1218 sys_exit = """*** SystemExit exception caught in code being profiled."""
1218
1219
1219 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1220 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1220
1221
1221 lims = opts.l
1222 lims = opts.l
1222 if lims:
1223 if lims:
1223 lims = [] # rebuild lims with ints/floats/strings
1224 lims = [] # rebuild lims with ints/floats/strings
1224 for lim in opts.l:
1225 for lim in opts.l:
1225 try:
1226 try:
1226 lims.append(int(lim))
1227 lims.append(int(lim))
1227 except ValueError:
1228 except ValueError:
1228 try:
1229 try:
1229 lims.append(float(lim))
1230 lims.append(float(lim))
1230 except ValueError:
1231 except ValueError:
1231 lims.append(lim)
1232 lims.append(lim)
1232
1233
1233 # trap output
1234 # trap output
1234 sys_stdout = sys.stdout
1235 sys_stdout = sys.stdout
1235 stdout_trap = StringIO()
1236 stdout_trap = StringIO()
1236 try:
1237 try:
1237 sys.stdout = stdout_trap
1238 sys.stdout = stdout_trap
1238 stats.print_stats(*lims)
1239 stats.print_stats(*lims)
1239 finally:
1240 finally:
1240 sys.stdout = sys_stdout
1241 sys.stdout = sys_stdout
1241 output = stdout_trap.getvalue()
1242 output = stdout_trap.getvalue()
1242 output = output.rstrip()
1243 output = output.rstrip()
1243
1244
1244 page(output,screen_lines=self.shell.rc.screen_length)
1245 page(output,screen_lines=self.shell.rc.screen_length)
1245 print sys_exit,
1246 print sys_exit,
1246
1247
1247 dump_file = opts.D[0]
1248 dump_file = opts.D[0]
1248 text_file = opts.T[0]
1249 text_file = opts.T[0]
1249 if dump_file:
1250 if dump_file:
1250 prof.dump_stats(dump_file)
1251 prof.dump_stats(dump_file)
1251 print '\n*** Profile stats marshalled to file',\
1252 print '\n*** Profile stats marshalled to file',\
1252 `dump_file`+'.',sys_exit
1253 `dump_file`+'.',sys_exit
1253 if text_file:
1254 if text_file:
1254 file(text_file,'w').write(output)
1255 file(text_file,'w').write(output)
1255 print '\n*** Profile printout saved to text file',\
1256 print '\n*** Profile printout saved to text file',\
1256 `text_file`+'.',sys_exit
1257 `text_file`+'.',sys_exit
1257
1258
1258 if opts.has_key('r'):
1259 if opts.has_key('r'):
1259 return stats
1260 return stats
1260 else:
1261 else:
1261 return None
1262 return None
1262
1263
1263 def magic_run(self, parameter_s ='',runner=None):
1264 def magic_run(self, parameter_s ='',runner=None):
1264 """Run the named file inside IPython as a program.
1265 """Run the named file inside IPython as a program.
1265
1266
1266 Usage:\\
1267 Usage:\\
1267 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1268 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1268
1269
1269 Parameters after the filename are passed as command-line arguments to
1270 Parameters after the filename are passed as command-line arguments to
1270 the program (put in sys.argv). Then, control returns to IPython's
1271 the program (put in sys.argv). Then, control returns to IPython's
1271 prompt.
1272 prompt.
1272
1273
1273 This is similar to running at a system prompt:\\
1274 This is similar to running at a system prompt:\\
1274 $ python file args\\
1275 $ python file args\\
1275 but with the advantage of giving you IPython's tracebacks, and of
1276 but with the advantage of giving you IPython's tracebacks, and of
1276 loading all variables into your interactive namespace for further use
1277 loading all variables into your interactive namespace for further use
1277 (unless -p is used, see below).
1278 (unless -p is used, see below).
1278
1279
1279 The file is executed in a namespace initially consisting only of
1280 The file is executed in a namespace initially consisting only of
1280 __name__=='__main__' and sys.argv constructed as indicated. It thus
1281 __name__=='__main__' and sys.argv constructed as indicated. It thus
1281 sees its environment as if it were being run as a stand-alone
1282 sees its environment as if it were being run as a stand-alone
1282 program. But after execution, the IPython interactive namespace gets
1283 program. But after execution, the IPython interactive namespace gets
1283 updated with all variables defined in the program (except for __name__
1284 updated with all variables defined in the program (except for __name__
1284 and sys.argv). This allows for very convenient loading of code for
1285 and sys.argv). This allows for very convenient loading of code for
1285 interactive work, while giving each program a 'clean sheet' to run in.
1286 interactive work, while giving each program a 'clean sheet' to run in.
1286
1287
1287 Options:
1288 Options:
1288
1289
1289 -n: __name__ is NOT set to '__main__', but to the running file's name
1290 -n: __name__ is NOT set to '__main__', but to the running file's name
1290 without extension (as python does under import). This allows running
1291 without extension (as python does under import). This allows running
1291 scripts and reloading the definitions in them without calling code
1292 scripts and reloading the definitions in them without calling code
1292 protected by an ' if __name__ == "__main__" ' clause.
1293 protected by an ' if __name__ == "__main__" ' clause.
1293
1294
1294 -i: run the file in IPython's namespace instead of an empty one. This
1295 -i: run the file in IPython's namespace instead of an empty one. This
1295 is useful if you are experimenting with code written in a text editor
1296 is useful if you are experimenting with code written in a text editor
1296 which depends on variables defined interactively.
1297 which depends on variables defined interactively.
1297
1298
1298 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1299 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1299 being run. This is particularly useful if IPython is being used to
1300 being run. This is particularly useful if IPython is being used to
1300 run unittests, which always exit with a sys.exit() call. In such
1301 run unittests, which always exit with a sys.exit() call. In such
1301 cases you are interested in the output of the test results, not in
1302 cases you are interested in the output of the test results, not in
1302 seeing a traceback of the unittest module.
1303 seeing a traceback of the unittest module.
1303
1304
1304 -t: print timing information at the end of the run. IPython will give
1305 -t: print timing information at the end of the run. IPython will give
1305 you an estimated CPU time consumption for your script, which under
1306 you an estimated CPU time consumption for your script, which under
1306 Unix uses the resource module to avoid the wraparound problems of
1307 Unix uses the resource module to avoid the wraparound problems of
1307 time.clock(). Under Unix, an estimate of time spent on system tasks
1308 time.clock(). Under Unix, an estimate of time spent on system tasks
1308 is also given (for Windows platforms this is reported as 0.0).
1309 is also given (for Windows platforms this is reported as 0.0).
1309
1310
1310 If -t is given, an additional -N<N> option can be given, where <N>
1311 If -t is given, an additional -N<N> option can be given, where <N>
1311 must be an integer indicating how many times you want the script to
1312 must be an integer indicating how many times you want the script to
1312 run. The final timing report will include total and per run results.
1313 run. The final timing report will include total and per run results.
1313
1314
1314 For example (testing the script uniq_stable.py):
1315 For example (testing the script uniq_stable.py):
1315
1316
1316 In [1]: run -t uniq_stable
1317 In [1]: run -t uniq_stable
1317
1318
1318 IPython CPU timings (estimated):\\
1319 IPython CPU timings (estimated):\\
1319 User : 0.19597 s.\\
1320 User : 0.19597 s.\\
1320 System: 0.0 s.\\
1321 System: 0.0 s.\\
1321
1322
1322 In [2]: run -t -N5 uniq_stable
1323 In [2]: run -t -N5 uniq_stable
1323
1324
1324 IPython CPU timings (estimated):\\
1325 IPython CPU timings (estimated):\\
1325 Total runs performed: 5\\
1326 Total runs performed: 5\\
1326 Times : Total Per run\\
1327 Times : Total Per run\\
1327 User : 0.910862 s, 0.1821724 s.\\
1328 User : 0.910862 s, 0.1821724 s.\\
1328 System: 0.0 s, 0.0 s.
1329 System: 0.0 s, 0.0 s.
1329
1330
1330 -d: run your program under the control of pdb, the Python debugger.
1331 -d: run your program under the control of pdb, the Python debugger.
1331 This allows you to execute your program step by step, watch variables,
1332 This allows you to execute your program step by step, watch variables,
1332 etc. Internally, what IPython does is similar to calling:
1333 etc. Internally, what IPython does is similar to calling:
1333
1334
1334 pdb.run('execfile("YOURFILENAME")')
1335 pdb.run('execfile("YOURFILENAME")')
1335
1336
1336 with a breakpoint set on line 1 of your file. You can change the line
1337 with a breakpoint set on line 1 of your file. You can change the line
1337 number for this automatic breakpoint to be <N> by using the -bN option
1338 number for this automatic breakpoint to be <N> by using the -bN option
1338 (where N must be an integer). For example:
1339 (where N must be an integer). For example:
1339
1340
1340 %run -d -b40 myscript
1341 %run -d -b40 myscript
1341
1342
1342 will set the first breakpoint at line 40 in myscript.py. Note that
1343 will set the first breakpoint at line 40 in myscript.py. Note that
1343 the first breakpoint must be set on a line which actually does
1344 the first breakpoint must be set on a line which actually does
1344 something (not a comment or docstring) for it to stop execution.
1345 something (not a comment or docstring) for it to stop execution.
1345
1346
1346 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1347 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1347 first enter 'c' (without qoutes) to start execution up to the first
1348 first enter 'c' (without qoutes) to start execution up to the first
1348 breakpoint.
1349 breakpoint.
1349
1350
1350 Entering 'help' gives information about the use of the debugger. You
1351 Entering 'help' gives information about the use of the debugger. You
1351 can easily see pdb's full documentation with "import pdb;pdb.help()"
1352 can easily see pdb's full documentation with "import pdb;pdb.help()"
1352 at a prompt.
1353 at a prompt.
1353
1354
1354 -p: run program under the control of the Python profiler module (which
1355 -p: run program under the control of the Python profiler module (which
1355 prints a detailed report of execution times, function calls, etc).
1356 prints a detailed report of execution times, function calls, etc).
1356
1357
1357 You can pass other options after -p which affect the behavior of the
1358 You can pass other options after -p which affect the behavior of the
1358 profiler itself. See the docs for %prun for details.
1359 profiler itself. See the docs for %prun for details.
1359
1360
1360 In this mode, the program's variables do NOT propagate back to the
1361 In this mode, the program's variables do NOT propagate back to the
1361 IPython interactive namespace (because they remain in the namespace
1362 IPython interactive namespace (because they remain in the namespace
1362 where the profiler executes them).
1363 where the profiler executes them).
1363
1364
1364 Internally this triggers a call to %prun, see its documentation for
1365 Internally this triggers a call to %prun, see its documentation for
1365 details on the options available specifically for profiling."""
1366 details on the options available specifically for profiling."""
1366
1367
1367 # get arguments and set sys.argv for program to be run.
1368 # get arguments and set sys.argv for program to be run.
1368 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1369 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1369 mode='list',list_all=1)
1370 mode='list',list_all=1)
1370
1371
1371 try:
1372 try:
1372 filename = get_py_filename(arg_lst[0])
1373 filename = get_py_filename(arg_lst[0])
1373 except IndexError:
1374 except IndexError:
1374 warn('you must provide at least a filename.')
1375 warn('you must provide at least a filename.')
1375 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1376 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1376 return
1377 return
1377 except IOError,msg:
1378 except IOError,msg:
1378 error(msg)
1379 error(msg)
1379 return
1380 return
1380
1381
1381 # Control the response to exit() calls made by the script being run
1382 # Control the response to exit() calls made by the script being run
1382 exit_ignore = opts.has_key('e')
1383 exit_ignore = opts.has_key('e')
1383
1384
1384 # Make sure that the running script gets a proper sys.argv as if it
1385 # Make sure that the running script gets a proper sys.argv as if it
1385 # were run from a system shell.
1386 # were run from a system shell.
1386 save_argv = sys.argv # save it for later restoring
1387 save_argv = sys.argv # save it for later restoring
1387 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1388 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1388
1389
1389 if opts.has_key('i'):
1390 if opts.has_key('i'):
1390 prog_ns = self.shell.user_ns
1391 prog_ns = self.shell.user_ns
1391 __name__save = self.shell.user_ns['__name__']
1392 __name__save = self.shell.user_ns['__name__']
1392 prog_ns['__name__'] = '__main__'
1393 prog_ns['__name__'] = '__main__'
1393 else:
1394 else:
1394 if opts.has_key('n'):
1395 if opts.has_key('n'):
1395 name = os.path.splitext(os.path.basename(filename))[0]
1396 name = os.path.splitext(os.path.basename(filename))[0]
1396 else:
1397 else:
1397 name = '__main__'
1398 name = '__main__'
1398 prog_ns = {'__name__':name}
1399 prog_ns = {'__name__':name}
1399
1400
1400 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1401 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1401 # set the __file__ global in the script's namespace
1402 # set the __file__ global in the script's namespace
1402 prog_ns['__file__'] = filename
1403 prog_ns['__file__'] = filename
1403
1404
1404 # pickle fix. See iplib for an explanation. But we need to make sure
1405 # pickle fix. See iplib for an explanation. But we need to make sure
1405 # that, if we overwrite __main__, we replace it at the end
1406 # that, if we overwrite __main__, we replace it at the end
1406 if prog_ns['__name__'] == '__main__':
1407 if prog_ns['__name__'] == '__main__':
1407 restore_main = sys.modules['__main__']
1408 restore_main = sys.modules['__main__']
1408 else:
1409 else:
1409 restore_main = False
1410 restore_main = False
1410
1411
1411 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1412 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1412
1413
1413 stats = None
1414 stats = None
1414 try:
1415 try:
1415 if opts.has_key('p'):
1416 if opts.has_key('p'):
1416 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1417 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1417 else:
1418 else:
1418 if opts.has_key('d'):
1419 if opts.has_key('d'):
1419 deb = Debugger.Pdb(self.shell.rc.colors)
1420 deb = Debugger.Pdb(self.shell.rc.colors)
1420 # reset Breakpoint state, which is moronically kept
1421 # reset Breakpoint state, which is moronically kept
1421 # in a class
1422 # in a class
1422 bdb.Breakpoint.next = 1
1423 bdb.Breakpoint.next = 1
1423 bdb.Breakpoint.bplist = {}
1424 bdb.Breakpoint.bplist = {}
1424 bdb.Breakpoint.bpbynumber = [None]
1425 bdb.Breakpoint.bpbynumber = [None]
1425 # Set an initial breakpoint to stop execution
1426 # Set an initial breakpoint to stop execution
1426 maxtries = 10
1427 maxtries = 10
1427 bp = int(opts.get('b',[1])[0])
1428 bp = int(opts.get('b',[1])[0])
1428 checkline = deb.checkline(filename,bp)
1429 checkline = deb.checkline(filename,bp)
1429 if not checkline:
1430 if not checkline:
1430 for bp in range(bp+1,bp+maxtries+1):
1431 for bp in range(bp+1,bp+maxtries+1):
1431 if deb.checkline(filename,bp):
1432 if deb.checkline(filename,bp):
1432 break
1433 break
1433 else:
1434 else:
1434 msg = ("\nI failed to find a valid line to set "
1435 msg = ("\nI failed to find a valid line to set "
1435 "a breakpoint\n"
1436 "a breakpoint\n"
1436 "after trying up to line: %s.\n"
1437 "after trying up to line: %s.\n"
1437 "Please set a valid breakpoint manually "
1438 "Please set a valid breakpoint manually "
1438 "with the -b option." % bp)
1439 "with the -b option." % bp)
1439 error(msg)
1440 error(msg)
1440 return
1441 return
1441 # if we find a good linenumber, set the breakpoint
1442 # if we find a good linenumber, set the breakpoint
1442 deb.do_break('%s:%s' % (filename,bp))
1443 deb.do_break('%s:%s' % (filename,bp))
1443 # Start file run
1444 # Start file run
1444 print "NOTE: Enter 'c' at the",
1445 print "NOTE: Enter 'c' at the",
1445 print "ipdb> prompt to start your script."
1446 print "ipdb> prompt to start your script."
1446 try:
1447 try:
1447 deb.run('execfile("%s")' % filename,prog_ns)
1448 deb.run('execfile("%s")' % filename,prog_ns)
1448 except:
1449 except:
1449 etype, value, tb = sys.exc_info()
1450 etype, value, tb = sys.exc_info()
1450 # Skip three frames in the traceback: the %run one,
1451 # Skip three frames in the traceback: the %run one,
1451 # one inside bdb.py, and the command-line typed by the
1452 # one inside bdb.py, and the command-line typed by the
1452 # user (run by exec in pdb itself).
1453 # user (run by exec in pdb itself).
1453 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1454 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1454 else:
1455 else:
1455 if runner is None:
1456 if runner is None:
1456 runner = self.shell.safe_execfile
1457 runner = self.shell.safe_execfile
1457 if opts.has_key('t'):
1458 if opts.has_key('t'):
1458 try:
1459 try:
1459 nruns = int(opts['N'][0])
1460 nruns = int(opts['N'][0])
1460 if nruns < 1:
1461 if nruns < 1:
1461 error('Number of runs must be >=1')
1462 error('Number of runs must be >=1')
1462 return
1463 return
1463 except (KeyError):
1464 except (KeyError):
1464 nruns = 1
1465 nruns = 1
1465 if nruns == 1:
1466 if nruns == 1:
1466 t0 = clock2()
1467 t0 = clock2()
1467 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1468 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1468 t1 = clock2()
1469 t1 = clock2()
1469 t_usr = t1[0]-t0[0]
1470 t_usr = t1[0]-t0[0]
1470 t_sys = t1[1]-t1[1]
1471 t_sys = t1[1]-t1[1]
1471 print "\nIPython CPU timings (estimated):"
1472 print "\nIPython CPU timings (estimated):"
1472 print " User : %10s s." % t_usr
1473 print " User : %10s s." % t_usr
1473 print " System: %10s s." % t_sys
1474 print " System: %10s s." % t_sys
1474 else:
1475 else:
1475 runs = range(nruns)
1476 runs = range(nruns)
1476 t0 = clock2()
1477 t0 = clock2()
1477 for nr in runs:
1478 for nr in runs:
1478 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1479 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1479 t1 = clock2()
1480 t1 = clock2()
1480 t_usr = t1[0]-t0[0]
1481 t_usr = t1[0]-t0[0]
1481 t_sys = t1[1]-t1[1]
1482 t_sys = t1[1]-t1[1]
1482 print "\nIPython CPU timings (estimated):"
1483 print "\nIPython CPU timings (estimated):"
1483 print "Total runs performed:",nruns
1484 print "Total runs performed:",nruns
1484 print " Times : %10s %10s" % ('Total','Per run')
1485 print " Times : %10s %10s" % ('Total','Per run')
1485 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1486 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1486 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1487 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1487
1488
1488 else:
1489 else:
1489 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1490 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1490 if opts.has_key('i'):
1491 if opts.has_key('i'):
1491 self.shell.user_ns['__name__'] = __name__save
1492 self.shell.user_ns['__name__'] = __name__save
1492 else:
1493 else:
1493 # update IPython interactive namespace
1494 # update IPython interactive namespace
1494 del prog_ns['__name__']
1495 del prog_ns['__name__']
1495 self.shell.user_ns.update(prog_ns)
1496 self.shell.user_ns.update(prog_ns)
1496 finally:
1497 finally:
1497 sys.argv = save_argv
1498 sys.argv = save_argv
1498 if restore_main:
1499 if restore_main:
1499 sys.modules['__main__'] = restore_main
1500 sys.modules['__main__'] = restore_main
1500 return stats
1501 return stats
1501
1502
1502 def magic_runlog(self, parameter_s =''):
1503 def magic_runlog(self, parameter_s =''):
1503 """Run files as logs.
1504 """Run files as logs.
1504
1505
1505 Usage:\\
1506 Usage:\\
1506 %runlog file1 file2 ...
1507 %runlog file1 file2 ...
1507
1508
1508 Run the named files (treating them as log files) in sequence inside
1509 Run the named files (treating them as log files) in sequence inside
1509 the interpreter, and return to the prompt. This is much slower than
1510 the interpreter, and return to the prompt. This is much slower than
1510 %run because each line is executed in a try/except block, but it
1511 %run because each line is executed in a try/except block, but it
1511 allows running files with syntax errors in them.
1512 allows running files with syntax errors in them.
1512
1513
1513 Normally IPython will guess when a file is one of its own logfiles, so
1514 Normally IPython will guess when a file is one of its own logfiles, so
1514 you can typically use %run even for logs. This shorthand allows you to
1515 you can typically use %run even for logs. This shorthand allows you to
1515 force any file to be treated as a log file."""
1516 force any file to be treated as a log file."""
1516
1517
1517 for f in parameter_s.split():
1518 for f in parameter_s.split():
1518 self.shell.safe_execfile(f,self.shell.user_ns,
1519 self.shell.safe_execfile(f,self.shell.user_ns,
1519 self.shell.user_ns,islog=1)
1520 self.shell.user_ns,islog=1)
1520
1521
1521 def magic_time(self,parameter_s = ''):
1522 def magic_time(self,parameter_s = ''):
1522 """Time execution of a Python statement or expression.
1523 """Time execution of a Python statement or expression.
1523
1524
1524 The CPU and wall clock times are printed, and the value of the
1525 The CPU and wall clock times are printed, and the value of the
1525 expression (if any) is returned. Note that under Win32, system time
1526 expression (if any) is returned. Note that under Win32, system time
1526 is always reported as 0, since it can not be measured.
1527 is always reported as 0, since it can not be measured.
1527
1528
1528 This function provides very basic timing functionality. In Python
1529 This function provides very basic timing functionality. In Python
1529 2.3, the timeit module offers more control and sophistication, but for
1530 2.3, the timeit module offers more control and sophistication, but for
1530 now IPython supports Python 2.2, so we can not rely on timeit being
1531 now IPython supports Python 2.2, so we can not rely on timeit being
1531 present.
1532 present.
1532
1533
1533 Some examples:
1534 Some examples:
1534
1535
1535 In [1]: time 2**128
1536 In [1]: time 2**128
1536 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1537 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1537 Wall time: 0.00
1538 Wall time: 0.00
1538 Out[1]: 340282366920938463463374607431768211456L
1539 Out[1]: 340282366920938463463374607431768211456L
1539
1540
1540 In [2]: n = 1000000
1541 In [2]: n = 1000000
1541
1542
1542 In [3]: time sum(range(n))
1543 In [3]: time sum(range(n))
1543 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1544 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1544 Wall time: 1.37
1545 Wall time: 1.37
1545 Out[3]: 499999500000L
1546 Out[3]: 499999500000L
1546
1547
1547 In [4]: time print 'hello world'
1548 In [4]: time print 'hello world'
1548 hello world
1549 hello world
1549 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1550 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1550 Wall time: 0.00
1551 Wall time: 0.00
1551 """
1552 """
1552
1553
1553 # fail immediately if the given expression can't be compiled
1554 # fail immediately if the given expression can't be compiled
1554 try:
1555 try:
1555 mode = 'eval'
1556 mode = 'eval'
1556 code = compile(parameter_s,'<timed eval>',mode)
1557 code = compile(parameter_s,'<timed eval>',mode)
1557 except SyntaxError:
1558 except SyntaxError:
1558 mode = 'exec'
1559 mode = 'exec'
1559 code = compile(parameter_s,'<timed exec>',mode)
1560 code = compile(parameter_s,'<timed exec>',mode)
1560 # skew measurement as little as possible
1561 # skew measurement as little as possible
1561 glob = self.shell.user_ns
1562 glob = self.shell.user_ns
1562 clk = clock2
1563 clk = clock2
1563 wtime = time.time
1564 wtime = time.time
1564 # time execution
1565 # time execution
1565 wall_st = wtime()
1566 wall_st = wtime()
1566 if mode=='eval':
1567 if mode=='eval':
1567 st = clk()
1568 st = clk()
1568 out = eval(code,glob)
1569 out = eval(code,glob)
1569 end = clk()
1570 end = clk()
1570 else:
1571 else:
1571 st = clk()
1572 st = clk()
1572 exec code in glob
1573 exec code in glob
1573 end = clk()
1574 end = clk()
1574 out = None
1575 out = None
1575 wall_end = wtime()
1576 wall_end = wtime()
1576 # Compute actual times and report
1577 # Compute actual times and report
1577 wall_time = wall_end-wall_st
1578 wall_time = wall_end-wall_st
1578 cpu_user = end[0]-st[0]
1579 cpu_user = end[0]-st[0]
1579 cpu_sys = end[1]-st[1]
1580 cpu_sys = end[1]-st[1]
1580 cpu_tot = cpu_user+cpu_sys
1581 cpu_tot = cpu_user+cpu_sys
1581 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1582 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1582 (cpu_user,cpu_sys,cpu_tot)
1583 (cpu_user,cpu_sys,cpu_tot)
1583 print "Wall time: %.2f" % wall_time
1584 print "Wall time: %.2f" % wall_time
1584 return out
1585 return out
1585
1586
1586 def magic_macro(self,parameter_s = ''):
1587 def magic_macro(self,parameter_s = ''):
1587 """Define a set of input lines as a macro for future re-execution.
1588 """Define a set of input lines as a macro for future re-execution.
1588
1589
1589 Usage:\\
1590 Usage:\\
1590 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1591 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1591
1592
1592 This will define a global variable called `name` which is a string
1593 This will define a global variable called `name` which is a string
1593 made of joining the slices and lines you specify (n1,n2,... numbers
1594 made of joining the slices and lines you specify (n1,n2,... numbers
1594 above) from your input history into a single string. This variable
1595 above) from your input history into a single string. This variable
1595 acts like an automatic function which re-executes those lines as if
1596 acts like an automatic function which re-executes those lines as if
1596 you had typed them. You just type 'name' at the prompt and the code
1597 you had typed them. You just type 'name' at the prompt and the code
1597 executes.
1598 executes.
1598
1599
1599 The notation for indicating number ranges is: n1-n2 means 'use line
1600 The notation for indicating number ranges is: n1-n2 means 'use line
1600 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1601 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1601 using the lines numbered 5,6 and 7.
1602 using the lines numbered 5,6 and 7.
1602
1603
1603 Note: as a 'hidden' feature, you can also use traditional python slice
1604 Note: as a 'hidden' feature, you can also use traditional python slice
1604 notation, where N:M means numbers N through M-1.
1605 notation, where N:M means numbers N through M-1.
1605
1606
1606 For example, if your history contains (%hist prints it):
1607 For example, if your history contains (%hist prints it):
1607
1608
1608 44: x=1\\
1609 44: x=1\\
1609 45: y=3\\
1610 45: y=3\\
1610 46: z=x+y\\
1611 46: z=x+y\\
1611 47: print x\\
1612 47: print x\\
1612 48: a=5\\
1613 48: a=5\\
1613 49: print 'x',x,'y',y\\
1614 49: print 'x',x,'y',y\\
1614
1615
1615 you can create a macro with lines 44 through 47 (included) and line 49
1616 you can create a macro with lines 44 through 47 (included) and line 49
1616 called my_macro with:
1617 called my_macro with:
1617
1618
1618 In [51]: %macro my_macro 44-47 49
1619 In [51]: %macro my_macro 44-47 49
1619
1620
1620 Now, typing `my_macro` (without quotes) will re-execute all this code
1621 Now, typing `my_macro` (without quotes) will re-execute all this code
1621 in one pass.
1622 in one pass.
1622
1623
1623 You don't need to give the line-numbers in order, and any given line
1624 You don't need to give the line-numbers in order, and any given line
1624 number can appear multiple times. You can assemble macros with any
1625 number can appear multiple times. You can assemble macros with any
1625 lines from your input history in any order.
1626 lines from your input history in any order.
1626
1627
1627 The macro is a simple object which holds its value in an attribute,
1628 The macro is a simple object which holds its value in an attribute,
1628 but IPython's display system checks for macros and executes them as
1629 but IPython's display system checks for macros and executes them as
1629 code instead of printing them when you type their name.
1630 code instead of printing them when you type their name.
1630
1631
1631 You can view a macro's contents by explicitly printing it with:
1632 You can view a macro's contents by explicitly printing it with:
1632
1633
1633 'print macro_name'.
1634 'print macro_name'.
1634
1635
1635 For one-off cases which DON'T contain magic function calls in them you
1636 For one-off cases which DON'T contain magic function calls in them you
1636 can obtain similar results by explicitly executing slices from your
1637 can obtain similar results by explicitly executing slices from your
1637 input history with:
1638 input history with:
1638
1639
1639 In [60]: exec In[44:48]+In[49]"""
1640 In [60]: exec In[44:48]+In[49]"""
1640
1641
1641 args = parameter_s.split()
1642 args = parameter_s.split()
1642 name,ranges = args[0], args[1:]
1643 name,ranges = args[0], args[1:]
1643 #print 'rng',ranges # dbg
1644 #print 'rng',ranges # dbg
1644 lines = self.extract_input_slices(ranges)
1645 lines = self.extract_input_slices(ranges)
1645 macro = Macro(lines)
1646 macro = Macro(lines)
1646 self.shell.user_ns.update({name:macro})
1647 self.shell.user_ns.update({name:macro})
1647 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1648 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1648 print 'Macro contents:'
1649 print 'Macro contents:'
1649 print macro,
1650 print macro,
1650
1651
1651 def magic_save(self,parameter_s = ''):
1652 def magic_save(self,parameter_s = ''):
1652 """Save a set of lines to a given filename.
1653 """Save a set of lines to a given filename.
1653
1654
1654 Usage:\\
1655 Usage:\\
1655 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1656 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1656
1657
1657 This function uses the same syntax as %macro for line extraction, but
1658 This function uses the same syntax as %macro for line extraction, but
1658 instead of creating a macro it saves the resulting string to the
1659 instead of creating a macro it saves the resulting string to the
1659 filename you specify.
1660 filename you specify.
1660
1661
1661 It adds a '.py' extension to the file if you don't do so yourself, and
1662 It adds a '.py' extension to the file if you don't do so yourself, and
1662 it asks for confirmation before overwriting existing files."""
1663 it asks for confirmation before overwriting existing files."""
1663
1664
1664 args = parameter_s.split()
1665 args = parameter_s.split()
1665 fname,ranges = args[0], args[1:]
1666 fname,ranges = args[0], args[1:]
1666 if not fname.endswith('.py'):
1667 if not fname.endswith('.py'):
1667 fname += '.py'
1668 fname += '.py'
1668 if os.path.isfile(fname):
1669 if os.path.isfile(fname):
1669 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1670 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1670 if ans.lower() not in ['y','yes']:
1671 if ans.lower() not in ['y','yes']:
1671 print 'Operation cancelled.'
1672 print 'Operation cancelled.'
1672 return
1673 return
1673 cmds = ''.join(self.extract_input_slices(ranges))
1674 cmds = ''.join(self.extract_input_slices(ranges))
1674 f = file(fname,'w')
1675 f = file(fname,'w')
1675 f.write(cmds)
1676 f.write(cmds)
1676 f.close()
1677 f.close()
1677 print 'The following commands were written to file `%s`:' % fname
1678 print 'The following commands were written to file `%s`:' % fname
1678 print cmds
1679 print cmds
1679
1680
1680 def _edit_macro(self,mname,macro):
1681 def _edit_macro(self,mname,macro):
1681 """open an editor with the macro data in a file"""
1682 """open an editor with the macro data in a file"""
1682 filename = self.shell.mktempfile(macro.value)
1683 filename = self.shell.mktempfile(macro.value)
1683 self.shell.hooks.editor(filename)
1684 self.shell.hooks.editor(filename)
1684
1685
1685 # and make a new macro object, to replace the old one
1686 # and make a new macro object, to replace the old one
1686 mfile = open(filename)
1687 mfile = open(filename)
1687 mvalue = mfile.read()
1688 mvalue = mfile.read()
1688 mfile.close()
1689 mfile.close()
1689 self.shell.user_ns[mname] = Macro(mvalue)
1690 self.shell.user_ns[mname] = Macro(mvalue)
1690
1691
1691 def magic_ed(self,parameter_s=''):
1692 def magic_ed(self,parameter_s=''):
1692 """Alias to %edit."""
1693 """Alias to %edit."""
1693 return self.magic_edit(parameter_s)
1694 return self.magic_edit(parameter_s)
1694
1695
1695 def magic_edit(self,parameter_s='',last_call=['','']):
1696 def magic_edit(self,parameter_s='',last_call=['','']):
1696 """Bring up an editor and execute the resulting code.
1697 """Bring up an editor and execute the resulting code.
1697
1698
1698 Usage:
1699 Usage:
1699 %edit [options] [args]
1700 %edit [options] [args]
1700
1701
1701 %edit runs IPython's editor hook. The default version of this hook is
1702 %edit runs IPython's editor hook. The default version of this hook is
1702 set to call the __IPYTHON__.rc.editor command. This is read from your
1703 set to call the __IPYTHON__.rc.editor command. This is read from your
1703 environment variable $EDITOR. If this isn't found, it will default to
1704 environment variable $EDITOR. If this isn't found, it will default to
1704 vi under Linux/Unix and to notepad under Windows. See the end of this
1705 vi under Linux/Unix and to notepad under Windows. See the end of this
1705 docstring for how to change the editor hook.
1706 docstring for how to change the editor hook.
1706
1707
1707 You can also set the value of this editor via the command line option
1708 You can also set the value of this editor via the command line option
1708 '-editor' or in your ipythonrc file. This is useful if you wish to use
1709 '-editor' or in your ipythonrc file. This is useful if you wish to use
1709 specifically for IPython an editor different from your typical default
1710 specifically for IPython an editor different from your typical default
1710 (and for Windows users who typically don't set environment variables).
1711 (and for Windows users who typically don't set environment variables).
1711
1712
1712 This command allows you to conveniently edit multi-line code right in
1713 This command allows you to conveniently edit multi-line code right in
1713 your IPython session.
1714 your IPython session.
1714
1715
1715 If called without arguments, %edit opens up an empty editor with a
1716 If called without arguments, %edit opens up an empty editor with a
1716 temporary file and will execute the contents of this file when you
1717 temporary file and will execute the contents of this file when you
1717 close it (don't forget to save it!).
1718 close it (don't forget to save it!).
1718
1719
1719
1720
1720 Options:
1721 Options:
1721
1722
1722 -p: this will call the editor with the same data as the previous time
1723 -p: this will call the editor with the same data as the previous time
1723 it was used, regardless of how long ago (in your current session) it
1724 it was used, regardless of how long ago (in your current session) it
1724 was.
1725 was.
1725
1726
1726 -x: do not execute the edited code immediately upon exit. This is
1727 -x: do not execute the edited code immediately upon exit. This is
1727 mainly useful if you are editing programs which need to be called with
1728 mainly useful if you are editing programs which need to be called with
1728 command line arguments, which you can then do using %run.
1729 command line arguments, which you can then do using %run.
1729
1730
1730
1731
1731 Arguments:
1732 Arguments:
1732
1733
1733 If arguments are given, the following possibilites exist:
1734 If arguments are given, the following possibilites exist:
1734
1735
1735 - The arguments are numbers or pairs of colon-separated numbers (like
1736 - The arguments are numbers or pairs of colon-separated numbers (like
1736 1 4:8 9). These are interpreted as lines of previous input to be
1737 1 4:8 9). These are interpreted as lines of previous input to be
1737 loaded into the editor. The syntax is the same of the %macro command.
1738 loaded into the editor. The syntax is the same of the %macro command.
1738
1739
1739 - If the argument doesn't start with a number, it is evaluated as a
1740 - If the argument doesn't start with a number, it is evaluated as a
1740 variable and its contents loaded into the editor. You can thus edit
1741 variable and its contents loaded into the editor. You can thus edit
1741 any string which contains python code (including the result of
1742 any string which contains python code (including the result of
1742 previous edits).
1743 previous edits).
1743
1744
1744 - If the argument is the name of an object (other than a string),
1745 - If the argument is the name of an object (other than a string),
1745 IPython will try to locate the file where it was defined and open the
1746 IPython will try to locate the file where it was defined and open the
1746 editor at the point where it is defined. You can use `%edit function`
1747 editor at the point where it is defined. You can use `%edit function`
1747 to load an editor exactly at the point where 'function' is defined,
1748 to load an editor exactly at the point where 'function' is defined,
1748 edit it and have the file be executed automatically.
1749 edit it and have the file be executed automatically.
1749
1750
1750 If the object is a macro (see %macro for details), this opens up your
1751 If the object is a macro (see %macro for details), this opens up your
1751 specified editor with a temporary file containing the macro's data.
1752 specified editor with a temporary file containing the macro's data.
1752 Upon exit, the macro is reloaded with the contents of the file.
1753 Upon exit, the macro is reloaded with the contents of the file.
1753
1754
1754 Note: opening at an exact line is only supported under Unix, and some
1755 Note: opening at an exact line is only supported under Unix, and some
1755 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1756 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1756 '+NUMBER' parameter necessary for this feature. Good editors like
1757 '+NUMBER' parameter necessary for this feature. Good editors like
1757 (X)Emacs, vi, jed, pico and joe all do.
1758 (X)Emacs, vi, jed, pico and joe all do.
1758
1759
1759 - If the argument is not found as a variable, IPython will look for a
1760 - If the argument is not found as a variable, IPython will look for a
1760 file with that name (adding .py if necessary) and load it into the
1761 file with that name (adding .py if necessary) and load it into the
1761 editor. It will execute its contents with execfile() when you exit,
1762 editor. It will execute its contents with execfile() when you exit,
1762 loading any code in the file into your interactive namespace.
1763 loading any code in the file into your interactive namespace.
1763
1764
1764 After executing your code, %edit will return as output the code you
1765 After executing your code, %edit will return as output the code you
1765 typed in the editor (except when it was an existing file). This way
1766 typed in the editor (except when it was an existing file). This way
1766 you can reload the code in further invocations of %edit as a variable,
1767 you can reload the code in further invocations of %edit as a variable,
1767 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1768 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1768 the output.
1769 the output.
1769
1770
1770 Note that %edit is also available through the alias %ed.
1771 Note that %edit is also available through the alias %ed.
1771
1772
1772 This is an example of creating a simple function inside the editor and
1773 This is an example of creating a simple function inside the editor and
1773 then modifying it. First, start up the editor:
1774 then modifying it. First, start up the editor:
1774
1775
1775 In [1]: ed\\
1776 In [1]: ed\\
1776 Editing... done. Executing edited code...\\
1777 Editing... done. Executing edited code...\\
1777 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1778 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1778
1779
1779 We can then call the function foo():
1780 We can then call the function foo():
1780
1781
1781 In [2]: foo()\\
1782 In [2]: foo()\\
1782 foo() was defined in an editing session
1783 foo() was defined in an editing session
1783
1784
1784 Now we edit foo. IPython automatically loads the editor with the
1785 Now we edit foo. IPython automatically loads the editor with the
1785 (temporary) file where foo() was previously defined:
1786 (temporary) file where foo() was previously defined:
1786
1787
1787 In [3]: ed foo\\
1788 In [3]: ed foo\\
1788 Editing... done. Executing edited code...
1789 Editing... done. Executing edited code...
1789
1790
1790 And if we call foo() again we get the modified version:
1791 And if we call foo() again we get the modified version:
1791
1792
1792 In [4]: foo()\\
1793 In [4]: foo()\\
1793 foo() has now been changed!
1794 foo() has now been changed!
1794
1795
1795 Here is an example of how to edit a code snippet successive
1796 Here is an example of how to edit a code snippet successive
1796 times. First we call the editor:
1797 times. First we call the editor:
1797
1798
1798 In [8]: ed\\
1799 In [8]: ed\\
1799 Editing... done. Executing edited code...\\
1800 Editing... done. Executing edited code...\\
1800 hello\\
1801 hello\\
1801 Out[8]: "print 'hello'\\n"
1802 Out[8]: "print 'hello'\\n"
1802
1803
1803 Now we call it again with the previous output (stored in _):
1804 Now we call it again with the previous output (stored in _):
1804
1805
1805 In [9]: ed _\\
1806 In [9]: ed _\\
1806 Editing... done. Executing edited code...\\
1807 Editing... done. Executing edited code...\\
1807 hello world\\
1808 hello world\\
1808 Out[9]: "print 'hello world'\\n"
1809 Out[9]: "print 'hello world'\\n"
1809
1810
1810 Now we call it with the output #8 (stored in _8, also as Out[8]):
1811 Now we call it with the output #8 (stored in _8, also as Out[8]):
1811
1812
1812 In [10]: ed _8\\
1813 In [10]: ed _8\\
1813 Editing... done. Executing edited code...\\
1814 Editing... done. Executing edited code...\\
1814 hello again\\
1815 hello again\\
1815 Out[10]: "print 'hello again'\\n"
1816 Out[10]: "print 'hello again'\\n"
1816
1817
1817
1818
1818 Changing the default editor hook:
1819 Changing the default editor hook:
1819
1820
1820 If you wish to write your own editor hook, you can put it in a
1821 If you wish to write your own editor hook, you can put it in a
1821 configuration file which you load at startup time. The default hook
1822 configuration file which you load at startup time. The default hook
1822 is defined in the IPython.hooks module, and you can use that as a
1823 is defined in the IPython.hooks module, and you can use that as a
1823 starting example for further modifications. That file also has
1824 starting example for further modifications. That file also has
1824 general instructions on how to set a new hook for use once you've
1825 general instructions on how to set a new hook for use once you've
1825 defined it."""
1826 defined it."""
1826
1827
1827 # FIXME: This function has become a convoluted mess. It needs a
1828 # FIXME: This function has become a convoluted mess. It needs a
1828 # ground-up rewrite with clean, simple logic.
1829 # ground-up rewrite with clean, simple logic.
1829
1830
1830 def make_filename(arg):
1831 def make_filename(arg):
1831 "Make a filename from the given args"
1832 "Make a filename from the given args"
1832 try:
1833 try:
1833 filename = get_py_filename(arg)
1834 filename = get_py_filename(arg)
1834 except IOError:
1835 except IOError:
1835 if args.endswith('.py'):
1836 if args.endswith('.py'):
1836 filename = arg
1837 filename = arg
1837 else:
1838 else:
1838 filename = None
1839 filename = None
1839 return filename
1840 return filename
1840
1841
1841 # custom exceptions
1842 # custom exceptions
1842 class DataIsObject(Exception): pass
1843 class DataIsObject(Exception): pass
1843
1844
1844 opts,args = self.parse_options(parameter_s,'px')
1845 opts,args = self.parse_options(parameter_s,'px')
1845
1846
1846 # Default line number value
1847 # Default line number value
1847 lineno = None
1848 lineno = None
1848 if opts.has_key('p'):
1849 if opts.has_key('p'):
1849 args = '_%s' % last_call[0]
1850 args = '_%s' % last_call[0]
1850 if not self.shell.user_ns.has_key(args):
1851 if not self.shell.user_ns.has_key(args):
1851 args = last_call[1]
1852 args = last_call[1]
1852
1853
1853 # use last_call to remember the state of the previous call, but don't
1854 # use last_call to remember the state of the previous call, but don't
1854 # let it be clobbered by successive '-p' calls.
1855 # let it be clobbered by successive '-p' calls.
1855 try:
1856 try:
1856 last_call[0] = self.shell.outputcache.prompt_count
1857 last_call[0] = self.shell.outputcache.prompt_count
1857 if not opts.has_key('p'):
1858 if not opts.has_key('p'):
1858 last_call[1] = parameter_s
1859 last_call[1] = parameter_s
1859 except:
1860 except:
1860 pass
1861 pass
1861
1862
1862 # by default this is done with temp files, except when the given
1863 # by default this is done with temp files, except when the given
1863 # arg is a filename
1864 # arg is a filename
1864 use_temp = 1
1865 use_temp = 1
1865
1866
1866 if re.match(r'\d',args):
1867 if re.match(r'\d',args):
1867 # Mode where user specifies ranges of lines, like in %macro.
1868 # Mode where user specifies ranges of lines, like in %macro.
1868 # This means that you can't edit files whose names begin with
1869 # This means that you can't edit files whose names begin with
1869 # numbers this way. Tough.
1870 # numbers this way. Tough.
1870 ranges = args.split()
1871 ranges = args.split()
1871 data = ''.join(self.extract_input_slices(ranges))
1872 data = ''.join(self.extract_input_slices(ranges))
1872 elif args.endswith('.py'):
1873 elif args.endswith('.py'):
1873 filename = make_filename(args)
1874 filename = make_filename(args)
1874 data = ''
1875 data = ''
1875 use_temp = 0
1876 use_temp = 0
1876 elif args:
1877 elif args:
1877 try:
1878 try:
1878 # Load the parameter given as a variable. If not a string,
1879 # Load the parameter given as a variable. If not a string,
1879 # process it as an object instead (below)
1880 # process it as an object instead (below)
1880
1881
1881 #print '*** args',args,'type',type(args) # dbg
1882 #print '*** args',args,'type',type(args) # dbg
1882 data = eval(args,self.shell.user_ns)
1883 data = eval(args,self.shell.user_ns)
1883 if not type(data) in StringTypes:
1884 if not type(data) in StringTypes:
1884 raise DataIsObject
1885 raise DataIsObject
1885
1886
1886 except (NameError,SyntaxError):
1887 except (NameError,SyntaxError):
1887 # given argument is not a variable, try as a filename
1888 # given argument is not a variable, try as a filename
1888 filename = make_filename(args)
1889 filename = make_filename(args)
1889 if filename is None:
1890 if filename is None:
1890 warn("Argument given (%s) can't be found as a variable "
1891 warn("Argument given (%s) can't be found as a variable "
1891 "or as a filename." % args)
1892 "or as a filename." % args)
1892 return
1893 return
1893
1894
1894 data = ''
1895 data = ''
1895 use_temp = 0
1896 use_temp = 0
1896 except DataIsObject:
1897 except DataIsObject:
1897
1898
1898 # macros have a special edit function
1899 # macros have a special edit function
1899 if isinstance(data,Macro):
1900 if isinstance(data,Macro):
1900 self._edit_macro(args,data)
1901 self._edit_macro(args,data)
1901 return
1902 return
1902
1903
1903 # For objects, try to edit the file where they are defined
1904 # For objects, try to edit the file where they are defined
1904 try:
1905 try:
1905 filename = inspect.getabsfile(data)
1906 filename = inspect.getabsfile(data)
1906 datafile = 1
1907 datafile = 1
1907 except TypeError:
1908 except TypeError:
1908 filename = make_filename(args)
1909 filename = make_filename(args)
1909 datafile = 1
1910 datafile = 1
1910 warn('Could not find file where `%s` is defined.\n'
1911 warn('Could not find file where `%s` is defined.\n'
1911 'Opening a file named `%s`' % (args,filename))
1912 'Opening a file named `%s`' % (args,filename))
1912 # Now, make sure we can actually read the source (if it was in
1913 # Now, make sure we can actually read the source (if it was in
1913 # a temp file it's gone by now).
1914 # a temp file it's gone by now).
1914 if datafile:
1915 if datafile:
1915 try:
1916 try:
1916 lineno = inspect.getsourcelines(data)[1]
1917 lineno = inspect.getsourcelines(data)[1]
1917 except IOError:
1918 except IOError:
1918 filename = make_filename(args)
1919 filename = make_filename(args)
1919 if filename is None:
1920 if filename is None:
1920 warn('The file `%s` where `%s` was defined cannot '
1921 warn('The file `%s` where `%s` was defined cannot '
1921 'be read.' % (filename,data))
1922 'be read.' % (filename,data))
1922 return
1923 return
1923 use_temp = 0
1924 use_temp = 0
1924 else:
1925 else:
1925 data = ''
1926 data = ''
1926
1927
1927 if use_temp:
1928 if use_temp:
1928 filename = self.shell.mktempfile(data)
1929 filename = self.shell.mktempfile(data)
1929 print 'IPython will make a temporary file named:',filename
1930 print 'IPython will make a temporary file named:',filename
1930
1931
1931 # do actual editing here
1932 # do actual editing here
1932 print 'Editing...',
1933 print 'Editing...',
1933 sys.stdout.flush()
1934 sys.stdout.flush()
1934 self.shell.hooks.editor(filename,lineno)
1935 self.shell.hooks.editor(filename,lineno)
1935 if opts.has_key('x'): # -x prevents actual execution
1936 if opts.has_key('x'): # -x prevents actual execution
1936 print
1937 print
1937 else:
1938 else:
1938 print 'done. Executing edited code...'
1939 print 'done. Executing edited code...'
1939 self.shell.safe_execfile(filename,self.shell.user_ns)
1940 self.shell.safe_execfile(filename,self.shell.user_ns)
1940 if use_temp:
1941 if use_temp:
1941 try:
1942 try:
1942 return open(filename).read()
1943 return open(filename).read()
1943 except IOError,msg:
1944 except IOError,msg:
1944 if msg.filename == filename:
1945 if msg.filename == filename:
1945 warn('File not found. Did you forget to save?')
1946 warn('File not found. Did you forget to save?')
1946 return
1947 return
1947 else:
1948 else:
1948 self.shell.showtraceback()
1949 self.shell.showtraceback()
1949
1950
1950 def magic_xmode(self,parameter_s = ''):
1951 def magic_xmode(self,parameter_s = ''):
1951 """Switch modes for the exception handlers.
1952 """Switch modes for the exception handlers.
1952
1953
1953 Valid modes: Plain, Context and Verbose.
1954 Valid modes: Plain, Context and Verbose.
1954
1955
1955 If called without arguments, acts as a toggle."""
1956 If called without arguments, acts as a toggle."""
1956
1957
1957 def xmode_switch_err(name):
1958 def xmode_switch_err(name):
1958 warn('Error changing %s exception modes.\n%s' %
1959 warn('Error changing %s exception modes.\n%s' %
1959 (name,sys.exc_info()[1]))
1960 (name,sys.exc_info()[1]))
1960
1961
1961 shell = self.shell
1962 shell = self.shell
1962 new_mode = parameter_s.strip().capitalize()
1963 new_mode = parameter_s.strip().capitalize()
1963 try:
1964 try:
1964 shell.InteractiveTB.set_mode(mode=new_mode)
1965 shell.InteractiveTB.set_mode(mode=new_mode)
1965 print 'Exception reporting mode:',shell.InteractiveTB.mode
1966 print 'Exception reporting mode:',shell.InteractiveTB.mode
1966 except:
1967 except:
1967 xmode_switch_err('user')
1968 xmode_switch_err('user')
1968
1969
1969 # threaded shells use a special handler in sys.excepthook
1970 # threaded shells use a special handler in sys.excepthook
1970 if shell.isthreaded:
1971 if shell.isthreaded:
1971 try:
1972 try:
1972 shell.sys_excepthook.set_mode(mode=new_mode)
1973 shell.sys_excepthook.set_mode(mode=new_mode)
1973 except:
1974 except:
1974 xmode_switch_err('threaded')
1975 xmode_switch_err('threaded')
1975
1976
1976 def magic_colors(self,parameter_s = ''):
1977 def magic_colors(self,parameter_s = ''):
1977 """Switch color scheme for prompts, info system and exception handlers.
1978 """Switch color scheme for prompts, info system and exception handlers.
1978
1979
1979 Currently implemented schemes: NoColor, Linux, LightBG.
1980 Currently implemented schemes: NoColor, Linux, LightBG.
1980
1981
1981 Color scheme names are not case-sensitive."""
1982 Color scheme names are not case-sensitive."""
1982
1983
1983 def color_switch_err(name):
1984 def color_switch_err(name):
1984 warn('Error changing %s color schemes.\n%s' %
1985 warn('Error changing %s color schemes.\n%s' %
1985 (name,sys.exc_info()[1]))
1986 (name,sys.exc_info()[1]))
1986
1987
1987
1988
1988 new_scheme = parameter_s.strip()
1989 new_scheme = parameter_s.strip()
1989 if not new_scheme:
1990 if not new_scheme:
1990 print 'You must specify a color scheme.'
1991 print 'You must specify a color scheme.'
1991 return
1992 return
1992 # Under Windows, check for Gary Bishop's readline, which is necessary
1993 # Under Windows, check for Gary Bishop's readline, which is necessary
1993 # for ANSI coloring
1994 # for ANSI coloring
1994 if os.name in ['nt','dos']:
1995 if os.name in ['nt','dos']:
1995 try:
1996 try:
1996 import readline
1997 import readline
1997 except ImportError:
1998 except ImportError:
1998 has_readline = 0
1999 has_readline = 0
1999 else:
2000 else:
2000 try:
2001 try:
2001 readline.GetOutputFile()
2002 readline.GetOutputFile()
2002 except AttributeError:
2003 except AttributeError:
2003 has_readline = 0
2004 has_readline = 0
2004 else:
2005 else:
2005 has_readline = 1
2006 has_readline = 1
2006 if not has_readline:
2007 if not has_readline:
2007 msg = """\
2008 msg = """\
2008 Proper color support under MS Windows requires Gary Bishop's readline library.
2009 Proper color support under MS Windows requires Gary Bishop's readline library.
2009 You can find it at:
2010 You can find it at:
2010 http://sourceforge.net/projects/uncpythontools
2011 http://sourceforge.net/projects/uncpythontools
2011 Gary's readline needs the ctypes module, from:
2012 Gary's readline needs the ctypes module, from:
2012 http://starship.python.net/crew/theller/ctypes
2013 http://starship.python.net/crew/theller/ctypes
2013
2014
2014 Defaulting color scheme to 'NoColor'"""
2015 Defaulting color scheme to 'NoColor'"""
2015 new_scheme = 'NoColor'
2016 new_scheme = 'NoColor'
2016 warn(msg)
2017 warn(msg)
2017 # local shortcut
2018 # local shortcut
2018 shell = self.shell
2019 shell = self.shell
2019
2020
2020 # Set prompt colors
2021 # Set prompt colors
2021 try:
2022 try:
2022 shell.outputcache.set_colors(new_scheme)
2023 shell.outputcache.set_colors(new_scheme)
2023 except:
2024 except:
2024 color_switch_err('prompt')
2025 color_switch_err('prompt')
2025 else:
2026 else:
2026 shell.rc.colors = \
2027 shell.rc.colors = \
2027 shell.outputcache.color_table.active_scheme_name
2028 shell.outputcache.color_table.active_scheme_name
2028 # Set exception colors
2029 # Set exception colors
2029 try:
2030 try:
2030 shell.InteractiveTB.set_colors(scheme = new_scheme)
2031 shell.InteractiveTB.set_colors(scheme = new_scheme)
2031 shell.SyntaxTB.set_colors(scheme = new_scheme)
2032 shell.SyntaxTB.set_colors(scheme = new_scheme)
2032 except:
2033 except:
2033 color_switch_err('exception')
2034 color_switch_err('exception')
2034
2035
2035 # threaded shells use a verbose traceback in sys.excepthook
2036 # threaded shells use a verbose traceback in sys.excepthook
2036 if shell.isthreaded:
2037 if shell.isthreaded:
2037 try:
2038 try:
2038 shell.sys_excepthook.set_colors(scheme=new_scheme)
2039 shell.sys_excepthook.set_colors(scheme=new_scheme)
2039 except:
2040 except:
2040 color_switch_err('system exception handler')
2041 color_switch_err('system exception handler')
2041
2042
2042 # Set info (for 'object?') colors
2043 # Set info (for 'object?') colors
2043 if shell.rc.color_info:
2044 if shell.rc.color_info:
2044 try:
2045 try:
2045 shell.inspector.set_active_scheme(new_scheme)
2046 shell.inspector.set_active_scheme(new_scheme)
2046 except:
2047 except:
2047 color_switch_err('object inspector')
2048 color_switch_err('object inspector')
2048 else:
2049 else:
2049 shell.inspector.set_active_scheme('NoColor')
2050 shell.inspector.set_active_scheme('NoColor')
2050
2051
2051 def magic_color_info(self,parameter_s = ''):
2052 def magic_color_info(self,parameter_s = ''):
2052 """Toggle color_info.
2053 """Toggle color_info.
2053
2054
2054 The color_info configuration parameter controls whether colors are
2055 The color_info configuration parameter controls whether colors are
2055 used for displaying object details (by things like %psource, %pfile or
2056 used for displaying object details (by things like %psource, %pfile or
2056 the '?' system). This function toggles this value with each call.
2057 the '?' system). This function toggles this value with each call.
2057
2058
2058 Note that unless you have a fairly recent pager (less works better
2059 Note that unless you have a fairly recent pager (less works better
2059 than more) in your system, using colored object information displays
2060 than more) in your system, using colored object information displays
2060 will not work properly. Test it and see."""
2061 will not work properly. Test it and see."""
2061
2062
2062 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2063 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2063 self.magic_colors(self.shell.rc.colors)
2064 self.magic_colors(self.shell.rc.colors)
2064 print 'Object introspection functions have now coloring:',
2065 print 'Object introspection functions have now coloring:',
2065 print ['OFF','ON'][self.shell.rc.color_info]
2066 print ['OFF','ON'][self.shell.rc.color_info]
2066
2067
2067 def magic_Pprint(self, parameter_s=''):
2068 def magic_Pprint(self, parameter_s=''):
2068 """Toggle pretty printing on/off."""
2069 """Toggle pretty printing on/off."""
2069
2070
2070 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2071 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2071 print 'Pretty printing has been turned', \
2072 print 'Pretty printing has been turned', \
2072 ['OFF','ON'][self.shell.outputcache.Pprint]
2073 ['OFF','ON'][self.shell.outputcache.Pprint]
2073
2074
2074 def magic_exit(self, parameter_s=''):
2075 def magic_exit(self, parameter_s=''):
2075 """Exit IPython, confirming if configured to do so.
2076 """Exit IPython, confirming if configured to do so.
2076
2077
2077 You can configure whether IPython asks for confirmation upon exit by
2078 You can configure whether IPython asks for confirmation upon exit by
2078 setting the confirm_exit flag in the ipythonrc file."""
2079 setting the confirm_exit flag in the ipythonrc file."""
2079
2080
2080 self.shell.exit()
2081 self.shell.exit()
2081
2082
2082 def magic_quit(self, parameter_s=''):
2083 def magic_quit(self, parameter_s=''):
2083 """Exit IPython, confirming if configured to do so (like %exit)"""
2084 """Exit IPython, confirming if configured to do so (like %exit)"""
2084
2085
2085 self.shell.exit()
2086 self.shell.exit()
2086
2087
2087 def magic_Exit(self, parameter_s=''):
2088 def magic_Exit(self, parameter_s=''):
2088 """Exit IPython without confirmation."""
2089 """Exit IPython without confirmation."""
2089
2090
2090 self.shell.exit_now = True
2091 self.shell.exit_now = True
2091
2092
2092 def magic_Quit(self, parameter_s=''):
2093 def magic_Quit(self, parameter_s=''):
2093 """Exit IPython without confirmation (like %Exit)."""
2094 """Exit IPython without confirmation (like %Exit)."""
2094
2095
2095 self.shell.exit_now = True
2096 self.shell.exit_now = True
2096
2097
2097 #......................................................................
2098 #......................................................................
2098 # Functions to implement unix shell-type things
2099 # Functions to implement unix shell-type things
2099
2100
2100 def magic_alias(self, parameter_s = ''):
2101 def magic_alias(self, parameter_s = ''):
2101 """Define an alias for a system command.
2102 """Define an alias for a system command.
2102
2103
2103 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2104 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2104
2105
2105 Then, typing 'alias_name params' will execute the system command 'cmd
2106 Then, typing 'alias_name params' will execute the system command 'cmd
2106 params' (from your underlying operating system).
2107 params' (from your underlying operating system).
2107
2108
2108 Aliases have lower precedence than magic functions and Python normal
2109 Aliases have lower precedence than magic functions and Python normal
2109 variables, so if 'foo' is both a Python variable and an alias, the
2110 variables, so if 'foo' is both a Python variable and an alias, the
2110 alias can not be executed until 'del foo' removes the Python variable.
2111 alias can not be executed until 'del foo' removes the Python variable.
2111
2112
2112 You can use the %l specifier in an alias definition to represent the
2113 You can use the %l specifier in an alias definition to represent the
2113 whole line when the alias is called. For example:
2114 whole line when the alias is called. For example:
2114
2115
2115 In [2]: alias all echo "Input in brackets: <%l>"\\
2116 In [2]: alias all echo "Input in brackets: <%l>"\\
2116 In [3]: all hello world\\
2117 In [3]: all hello world\\
2117 Input in brackets: <hello world>
2118 Input in brackets: <hello world>
2118
2119
2119 You can also define aliases with parameters using %s specifiers (one
2120 You can also define aliases with parameters using %s specifiers (one
2120 per parameter):
2121 per parameter):
2121
2122
2122 In [1]: alias parts echo first %s second %s\\
2123 In [1]: alias parts echo first %s second %s\\
2123 In [2]: %parts A B\\
2124 In [2]: %parts A B\\
2124 first A second B\\
2125 first A second B\\
2125 In [3]: %parts A\\
2126 In [3]: %parts A\\
2126 Incorrect number of arguments: 2 expected.\\
2127 Incorrect number of arguments: 2 expected.\\
2127 parts is an alias to: 'echo first %s second %s'
2128 parts is an alias to: 'echo first %s second %s'
2128
2129
2129 Note that %l and %s are mutually exclusive. You can only use one or
2130 Note that %l and %s are mutually exclusive. You can only use one or
2130 the other in your aliases.
2131 the other in your aliases.
2131
2132
2132 Aliases expand Python variables just like system calls using ! or !!
2133 Aliases expand Python variables just like system calls using ! or !!
2133 do: all expressions prefixed with '$' get expanded. For details of
2134 do: all expressions prefixed with '$' get expanded. For details of
2134 the semantic rules, see PEP-215:
2135 the semantic rules, see PEP-215:
2135 http://www.python.org/peps/pep-0215.html. This is the library used by
2136 http://www.python.org/peps/pep-0215.html. This is the library used by
2136 IPython for variable expansion. If you want to access a true shell
2137 IPython for variable expansion. If you want to access a true shell
2137 variable, an extra $ is necessary to prevent its expansion by IPython:
2138 variable, an extra $ is necessary to prevent its expansion by IPython:
2138
2139
2139 In [6]: alias show echo\\
2140 In [6]: alias show echo\\
2140 In [7]: PATH='A Python string'\\
2141 In [7]: PATH='A Python string'\\
2141 In [8]: show $PATH\\
2142 In [8]: show $PATH\\
2142 A Python string\\
2143 A Python string\\
2143 In [9]: show $$PATH\\
2144 In [9]: show $$PATH\\
2144 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2145 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2145
2146
2146 You can use the alias facility to acess all of $PATH. See the %rehash
2147 You can use the alias facility to acess all of $PATH. See the %rehash
2147 and %rehashx functions, which automatically create aliases for the
2148 and %rehashx functions, which automatically create aliases for the
2148 contents of your $PATH.
2149 contents of your $PATH.
2149
2150
2150 If called with no parameters, %alias prints the current alias table."""
2151 If called with no parameters, %alias prints the current alias table."""
2151
2152
2152 par = parameter_s.strip()
2153 par = parameter_s.strip()
2153 if not par:
2154 if not par:
2154 if self.shell.rc.automagic:
2155 if self.shell.rc.automagic:
2155 prechar = ''
2156 prechar = ''
2156 else:
2157 else:
2157 prechar = self.shell.ESC_MAGIC
2158 prechar = self.shell.ESC_MAGIC
2158 print 'Alias\t\tSystem Command\n'+'-'*30
2159 print 'Alias\t\tSystem Command\n'+'-'*30
2159 atab = self.shell.alias_table
2160 atab = self.shell.alias_table
2160 aliases = atab.keys()
2161 aliases = atab.keys()
2161 aliases.sort()
2162 aliases.sort()
2162 for alias in aliases:
2163 for alias in aliases:
2163 print prechar+alias+'\t\t'+atab[alias][1]
2164 print prechar+alias+'\t\t'+atab[alias][1]
2164 print '-'*30+'\nTotal number of aliases:',len(aliases)
2165 print '-'*30+'\nTotal number of aliases:',len(aliases)
2165 return
2166 return
2166 try:
2167 try:
2167 alias,cmd = par.split(None,1)
2168 alias,cmd = par.split(None,1)
2168 except:
2169 except:
2169 print OInspect.getdoc(self.magic_alias)
2170 print OInspect.getdoc(self.magic_alias)
2170 else:
2171 else:
2171 nargs = cmd.count('%s')
2172 nargs = cmd.count('%s')
2172 if nargs>0 and cmd.find('%l')>=0:
2173 if nargs>0 and cmd.find('%l')>=0:
2173 error('The %s and %l specifiers are mutually exclusive '
2174 error('The %s and %l specifiers are mutually exclusive '
2174 'in alias definitions.')
2175 'in alias definitions.')
2175 else: # all looks OK
2176 else: # all looks OK
2176 self.shell.alias_table[alias] = (nargs,cmd)
2177 self.shell.alias_table[alias] = (nargs,cmd)
2177 self.shell.alias_table_validate(verbose=1)
2178 self.shell.alias_table_validate(verbose=1)
2178 # end magic_alias
2179 # end magic_alias
2179
2180
2180 def magic_unalias(self, parameter_s = ''):
2181 def magic_unalias(self, parameter_s = ''):
2181 """Remove an alias"""
2182 """Remove an alias"""
2182
2183
2183 aname = parameter_s.strip()
2184 aname = parameter_s.strip()
2184 if aname in self.shell.alias_table:
2185 if aname in self.shell.alias_table:
2185 del self.shell.alias_table[aname]
2186 del self.shell.alias_table[aname]
2186
2187
2187 def magic_rehash(self, parameter_s = ''):
2188 def magic_rehash(self, parameter_s = ''):
2188 """Update the alias table with all entries in $PATH.
2189 """Update the alias table with all entries in $PATH.
2189
2190
2190 This version does no checks on execute permissions or whether the
2191 This version does no checks on execute permissions or whether the
2191 contents of $PATH are truly files (instead of directories or something
2192 contents of $PATH are truly files (instead of directories or something
2192 else). For such a safer (but slower) version, use %rehashx."""
2193 else). For such a safer (but slower) version, use %rehashx."""
2193
2194
2194 # This function (and rehashx) manipulate the alias_table directly
2195 # This function (and rehashx) manipulate the alias_table directly
2195 # rather than calling magic_alias, for speed reasons. A rehash on a
2196 # rather than calling magic_alias, for speed reasons. A rehash on a
2196 # typical Linux box involves several thousand entries, so efficiency
2197 # typical Linux box involves several thousand entries, so efficiency
2197 # here is a top concern.
2198 # here is a top concern.
2198
2199
2199 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2200 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2200 alias_table = self.shell.alias_table
2201 alias_table = self.shell.alias_table
2201 for pdir in path:
2202 for pdir in path:
2202 for ff in os.listdir(pdir):
2203 for ff in os.listdir(pdir):
2203 # each entry in the alias table must be (N,name), where
2204 # each entry in the alias table must be (N,name), where
2204 # N is the number of positional arguments of the alias.
2205 # N is the number of positional arguments of the alias.
2205 alias_table[ff] = (0,ff)
2206 alias_table[ff] = (0,ff)
2206 # Make sure the alias table doesn't contain keywords or builtins
2207 # Make sure the alias table doesn't contain keywords or builtins
2207 self.shell.alias_table_validate()
2208 self.shell.alias_table_validate()
2208 # Call again init_auto_alias() so we get 'rm -i' and other modified
2209 # Call again init_auto_alias() so we get 'rm -i' and other modified
2209 # aliases since %rehash will probably clobber them
2210 # aliases since %rehash will probably clobber them
2210 self.shell.init_auto_alias()
2211 self.shell.init_auto_alias()
2211
2212
2212 def magic_rehashx(self, parameter_s = ''):
2213 def magic_rehashx(self, parameter_s = ''):
2213 """Update the alias table with all executable files in $PATH.
2214 """Update the alias table with all executable files in $PATH.
2214
2215
2215 This version explicitly checks that every entry in $PATH is a file
2216 This version explicitly checks that every entry in $PATH is a file
2216 with execute access (os.X_OK), so it is much slower than %rehash.
2217 with execute access (os.X_OK), so it is much slower than %rehash.
2217
2218
2218 Under Windows, it checks executability as a match agains a
2219 Under Windows, it checks executability as a match agains a
2219 '|'-separated string of extensions, stored in the IPython config
2220 '|'-separated string of extensions, stored in the IPython config
2220 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2221 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2221
2222
2222 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2223 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2223 alias_table = self.shell.alias_table
2224 alias_table = self.shell.alias_table
2224
2225
2225 if os.name == 'posix':
2226 if os.name == 'posix':
2226 isexec = lambda fname:os.path.isfile(fname) and \
2227 isexec = lambda fname:os.path.isfile(fname) and \
2227 os.access(fname,os.X_OK)
2228 os.access(fname,os.X_OK)
2228 else:
2229 else:
2229
2230
2230 try:
2231 try:
2231 winext = os.environ['pathext'].replace(';','|').replace('.','')
2232 winext = os.environ['pathext'].replace(';','|').replace('.','')
2232 except KeyError:
2233 except KeyError:
2233 winext = 'exe|com|bat'
2234 winext = 'exe|com|bat'
2234
2235
2235 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2236 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2236 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2237 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2237 savedir = os.getcwd()
2238 savedir = os.getcwd()
2238 try:
2239 try:
2239 # write the whole loop for posix/Windows so we don't have an if in
2240 # write the whole loop for posix/Windows so we don't have an if in
2240 # the innermost part
2241 # the innermost part
2241 if os.name == 'posix':
2242 if os.name == 'posix':
2242 for pdir in path:
2243 for pdir in path:
2243 os.chdir(pdir)
2244 os.chdir(pdir)
2244 for ff in os.listdir(pdir):
2245 for ff in os.listdir(pdir):
2245 if isexec(ff):
2246 if isexec(ff):
2246 # each entry in the alias table must be (N,name),
2247 # each entry in the alias table must be (N,name),
2247 # where N is the number of positional arguments of the
2248 # where N is the number of positional arguments of the
2248 # alias.
2249 # alias.
2249 alias_table[ff] = (0,ff)
2250 alias_table[ff] = (0,ff)
2250 else:
2251 else:
2251 for pdir in path:
2252 for pdir in path:
2252 os.chdir(pdir)
2253 os.chdir(pdir)
2253 for ff in os.listdir(pdir):
2254 for ff in os.listdir(pdir):
2254 if isexec(ff):
2255 if isexec(ff):
2255 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2256 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2256 # Make sure the alias table doesn't contain keywords or builtins
2257 # Make sure the alias table doesn't contain keywords or builtins
2257 self.shell.alias_table_validate()
2258 self.shell.alias_table_validate()
2258 # Call again init_auto_alias() so we get 'rm -i' and other
2259 # Call again init_auto_alias() so we get 'rm -i' and other
2259 # modified aliases since %rehashx will probably clobber them
2260 # modified aliases since %rehashx will probably clobber them
2260 self.shell.init_auto_alias()
2261 self.shell.init_auto_alias()
2261 finally:
2262 finally:
2262 os.chdir(savedir)
2263 os.chdir(savedir)
2263
2264
2264 def magic_pwd(self, parameter_s = ''):
2265 def magic_pwd(self, parameter_s = ''):
2265 """Return the current working directory path."""
2266 """Return the current working directory path."""
2266 return os.getcwd()
2267 return os.getcwd()
2267
2268
2268 def magic_cd(self, parameter_s=''):
2269 def magic_cd(self, parameter_s=''):
2269 """Change the current working directory.
2270 """Change the current working directory.
2270
2271
2271 This command automatically maintains an internal list of directories
2272 This command automatically maintains an internal list of directories
2272 you visit during your IPython session, in the variable _dh. The
2273 you visit during your IPython session, in the variable _dh. The
2273 command %dhist shows this history nicely formatted.
2274 command %dhist shows this history nicely formatted.
2274
2275
2275 Usage:
2276 Usage:
2276
2277
2277 cd 'dir': changes to directory 'dir'.
2278 cd 'dir': changes to directory 'dir'.
2278
2279
2279 cd -: changes to the last visited directory.
2280 cd -: changes to the last visited directory.
2280
2281
2281 cd -<n>: changes to the n-th directory in the directory history.
2282 cd -<n>: changes to the n-th directory in the directory history.
2282
2283
2283 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2284 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2284 (note: cd <bookmark_name> is enough if there is no
2285 (note: cd <bookmark_name> is enough if there is no
2285 directory <bookmark_name>, but a bookmark with the name exists.)
2286 directory <bookmark_name>, but a bookmark with the name exists.)
2286
2287
2287 Options:
2288 Options:
2288
2289
2289 -q: quiet. Do not print the working directory after the cd command is
2290 -q: quiet. Do not print the working directory after the cd command is
2290 executed. By default IPython's cd command does print this directory,
2291 executed. By default IPython's cd command does print this directory,
2291 since the default prompts do not display path information.
2292 since the default prompts do not display path information.
2292
2293
2293 Note that !cd doesn't work for this purpose because the shell where
2294 Note that !cd doesn't work for this purpose because the shell where
2294 !command runs is immediately discarded after executing 'command'."""
2295 !command runs is immediately discarded after executing 'command'."""
2295
2296
2296 parameter_s = parameter_s.strip()
2297 parameter_s = parameter_s.strip()
2297 bkms = self.shell.persist.get("bookmarks",{})
2298 bkms = self.shell.persist.get("bookmarks",{})
2298
2299
2299 numcd = re.match(r'(-)(\d+)$',parameter_s)
2300 numcd = re.match(r'(-)(\d+)$',parameter_s)
2300 # jump in directory history by number
2301 # jump in directory history by number
2301 if numcd:
2302 if numcd:
2302 nn = int(numcd.group(2))
2303 nn = int(numcd.group(2))
2303 try:
2304 try:
2304 ps = self.shell.user_ns['_dh'][nn]
2305 ps = self.shell.user_ns['_dh'][nn]
2305 except IndexError:
2306 except IndexError:
2306 print 'The requested directory does not exist in history.'
2307 print 'The requested directory does not exist in history.'
2307 return
2308 return
2308 else:
2309 else:
2309 opts = {}
2310 opts = {}
2310 else:
2311 else:
2311 #turn all non-space-escaping backslashes to slashes,
2312 #turn all non-space-escaping backslashes to slashes,
2312 # for c:\windows\directory\names\
2313 # for c:\windows\directory\names\
2313 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2314 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2314 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2315 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2315 # jump to previous
2316 # jump to previous
2316 if ps == '-':
2317 if ps == '-':
2317 try:
2318 try:
2318 ps = self.shell.user_ns['_dh'][-2]
2319 ps = self.shell.user_ns['_dh'][-2]
2319 except IndexError:
2320 except IndexError:
2320 print 'No previous directory to change to.'
2321 print 'No previous directory to change to.'
2321 return
2322 return
2322 # jump to bookmark
2323 # jump to bookmark
2323 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2324 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2324 if bkms.has_key(ps):
2325 if bkms.has_key(ps):
2325 target = bkms[ps]
2326 target = bkms[ps]
2326 print '(bookmark:%s) -> %s' % (ps,target)
2327 print '(bookmark:%s) -> %s' % (ps,target)
2327 ps = target
2328 ps = target
2328 else:
2329 else:
2329 if bkms:
2330 if bkms:
2330 error("Bookmark '%s' not found. "
2331 error("Bookmark '%s' not found. "
2331 "Use '%%bookmark -l' to see your bookmarks." % ps)
2332 "Use '%%bookmark -l' to see your bookmarks." % ps)
2332 else:
2333 else:
2333 print "Bookmarks not set - use %bookmark <bookmarkname>"
2334 print "Bookmarks not set - use %bookmark <bookmarkname>"
2334 return
2335 return
2335
2336
2336 # at this point ps should point to the target dir
2337 # at this point ps should point to the target dir
2337 if ps:
2338 if ps:
2338 try:
2339 try:
2339 os.chdir(os.path.expanduser(ps))
2340 os.chdir(os.path.expanduser(ps))
2340 ttitle = ("IPy:" + (
2341 ttitle = ("IPy:" + (
2341 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2342 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2342 platutils.set_term_title(ttitle)
2343 platutils.set_term_title(ttitle)
2343 except OSError:
2344 except OSError:
2344 print sys.exc_info()[1]
2345 print sys.exc_info()[1]
2345 else:
2346 else:
2346 self.shell.user_ns['_dh'].append(os.getcwd())
2347 self.shell.user_ns['_dh'].append(os.getcwd())
2347 else:
2348 else:
2348 os.chdir(self.shell.home_dir)
2349 os.chdir(self.shell.home_dir)
2349 platutils.set_term_title("IPy:~")
2350 platutils.set_term_title("IPy:~")
2350 self.shell.user_ns['_dh'].append(os.getcwd())
2351 self.shell.user_ns['_dh'].append(os.getcwd())
2351 if not 'q' in opts:
2352 if not 'q' in opts:
2352 print self.shell.user_ns['_dh'][-1]
2353 print self.shell.user_ns['_dh'][-1]
2353
2354
2354 def magic_dhist(self, parameter_s=''):
2355 def magic_dhist(self, parameter_s=''):
2355 """Print your history of visited directories.
2356 """Print your history of visited directories.
2356
2357
2357 %dhist -> print full history\\
2358 %dhist -> print full history\\
2358 %dhist n -> print last n entries only\\
2359 %dhist n -> print last n entries only\\
2359 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2360 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2360
2361
2361 This history is automatically maintained by the %cd command, and
2362 This history is automatically maintained by the %cd command, and
2362 always available as the global list variable _dh. You can use %cd -<n>
2363 always available as the global list variable _dh. You can use %cd -<n>
2363 to go to directory number <n>."""
2364 to go to directory number <n>."""
2364
2365
2365 dh = self.shell.user_ns['_dh']
2366 dh = self.shell.user_ns['_dh']
2366 if parameter_s:
2367 if parameter_s:
2367 try:
2368 try:
2368 args = map(int,parameter_s.split())
2369 args = map(int,parameter_s.split())
2369 except:
2370 except:
2370 self.arg_err(Magic.magic_dhist)
2371 self.arg_err(Magic.magic_dhist)
2371 return
2372 return
2372 if len(args) == 1:
2373 if len(args) == 1:
2373 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2374 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2374 elif len(args) == 2:
2375 elif len(args) == 2:
2375 ini,fin = args
2376 ini,fin = args
2376 else:
2377 else:
2377 self.arg_err(Magic.magic_dhist)
2378 self.arg_err(Magic.magic_dhist)
2378 return
2379 return
2379 else:
2380 else:
2380 ini,fin = 0,len(dh)
2381 ini,fin = 0,len(dh)
2381 nlprint(dh,
2382 nlprint(dh,
2382 header = 'Directory history (kept in _dh)',
2383 header = 'Directory history (kept in _dh)',
2383 start=ini,stop=fin)
2384 start=ini,stop=fin)
2384
2385
2385 def magic_env(self, parameter_s=''):
2386 def magic_env(self, parameter_s=''):
2386 """List environment variables."""
2387 """List environment variables."""
2387
2388
2388 return os.environ.data
2389 return os.environ.data
2389
2390
2390 def magic_pushd(self, parameter_s=''):
2391 def magic_pushd(self, parameter_s=''):
2391 """Place the current dir on stack and change directory.
2392 """Place the current dir on stack and change directory.
2392
2393
2393 Usage:\\
2394 Usage:\\
2394 %pushd ['dirname']
2395 %pushd ['dirname']
2395
2396
2396 %pushd with no arguments does a %pushd to your home directory.
2397 %pushd with no arguments does a %pushd to your home directory.
2397 """
2398 """
2398 if parameter_s == '': parameter_s = '~'
2399 if parameter_s == '': parameter_s = '~'
2399 dir_s = self.shell.dir_stack
2400 dir_s = self.shell.dir_stack
2400 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2401 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2401 os.path.expanduser(self.shell.dir_stack[0]):
2402 os.path.expanduser(self.shell.dir_stack[0]):
2402 try:
2403 try:
2403 self.magic_cd(parameter_s)
2404 self.magic_cd(parameter_s)
2404 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2405 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2405 self.magic_dirs()
2406 self.magic_dirs()
2406 except:
2407 except:
2407 print 'Invalid directory'
2408 print 'Invalid directory'
2408 else:
2409 else:
2409 print 'You are already there!'
2410 print 'You are already there!'
2410
2411
2411 def magic_popd(self, parameter_s=''):
2412 def magic_popd(self, parameter_s=''):
2412 """Change to directory popped off the top of the stack.
2413 """Change to directory popped off the top of the stack.
2413 """
2414 """
2414 if len (self.shell.dir_stack) > 1:
2415 if len (self.shell.dir_stack) > 1:
2415 self.shell.dir_stack.pop(0)
2416 self.shell.dir_stack.pop(0)
2416 self.magic_cd(self.shell.dir_stack[0])
2417 self.magic_cd(self.shell.dir_stack[0])
2417 print self.shell.dir_stack[0]
2418 print self.shell.dir_stack[0]
2418 else:
2419 else:
2419 print "You can't remove the starting directory from the stack:",\
2420 print "You can't remove the starting directory from the stack:",\
2420 self.shell.dir_stack
2421 self.shell.dir_stack
2421
2422
2422 def magic_dirs(self, parameter_s=''):
2423 def magic_dirs(self, parameter_s=''):
2423 """Return the current directory stack."""
2424 """Return the current directory stack."""
2424
2425
2425 return self.shell.dir_stack[:]
2426 return self.shell.dir_stack[:]
2426
2427
2427 def magic_sc(self, parameter_s=''):
2428 def magic_sc(self, parameter_s=''):
2428 """Shell capture - execute a shell command and capture its output.
2429 """Shell capture - execute a shell command and capture its output.
2429
2430
2430 %sc [options] varname=command
2431 %sc [options] varname=command
2431
2432
2432 IPython will run the given command using commands.getoutput(), and
2433 IPython will run the given command using commands.getoutput(), and
2433 will then update the user's interactive namespace with a variable
2434 will then update the user's interactive namespace with a variable
2434 called varname, containing the value of the call. Your command can
2435 called varname, containing the value of the call. Your command can
2435 contain shell wildcards, pipes, etc.
2436 contain shell wildcards, pipes, etc.
2436
2437
2437 The '=' sign in the syntax is mandatory, and the variable name you
2438 The '=' sign in the syntax is mandatory, and the variable name you
2438 supply must follow Python's standard conventions for valid names.
2439 supply must follow Python's standard conventions for valid names.
2439
2440
2440 Options:
2441 Options:
2441
2442
2442 -l: list output. Split the output on newlines into a list before
2443 -l: list output. Split the output on newlines into a list before
2443 assigning it to the given variable. By default the output is stored
2444 assigning it to the given variable. By default the output is stored
2444 as a single string.
2445 as a single string.
2445
2446
2446 -v: verbose. Print the contents of the variable.
2447 -v: verbose. Print the contents of the variable.
2447
2448
2448 In most cases you should not need to split as a list, because the
2449 In most cases you should not need to split as a list, because the
2449 returned value is a special type of string which can automatically
2450 returned value is a special type of string which can automatically
2450 provide its contents either as a list (split on newlines) or as a
2451 provide its contents either as a list (split on newlines) or as a
2451 space-separated string. These are convenient, respectively, either
2452 space-separated string. These are convenient, respectively, either
2452 for sequential processing or to be passed to a shell command.
2453 for sequential processing or to be passed to a shell command.
2453
2454
2454 For example:
2455 For example:
2455
2456
2456 # Capture into variable a
2457 # Capture into variable a
2457 In [9]: sc a=ls *py
2458 In [9]: sc a=ls *py
2458
2459
2459 # a is a string with embedded newlines
2460 # a is a string with embedded newlines
2460 In [10]: a
2461 In [10]: a
2461 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2462 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2462
2463
2463 # which can be seen as a list:
2464 # which can be seen as a list:
2464 In [11]: a.l
2465 In [11]: a.l
2465 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2466 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2466
2467
2467 # or as a whitespace-separated string:
2468 # or as a whitespace-separated string:
2468 In [12]: a.s
2469 In [12]: a.s
2469 Out[12]: 'setup.py win32_manual_post_install.py'
2470 Out[12]: 'setup.py win32_manual_post_install.py'
2470
2471
2471 # a.s is useful to pass as a single command line:
2472 # a.s is useful to pass as a single command line:
2472 In [13]: !wc -l $a.s
2473 In [13]: !wc -l $a.s
2473 146 setup.py
2474 146 setup.py
2474 130 win32_manual_post_install.py
2475 130 win32_manual_post_install.py
2475 276 total
2476 276 total
2476
2477
2477 # while the list form is useful to loop over:
2478 # while the list form is useful to loop over:
2478 In [14]: for f in a.l:
2479 In [14]: for f in a.l:
2479 ....: !wc -l $f
2480 ....: !wc -l $f
2480 ....:
2481 ....:
2481 146 setup.py
2482 146 setup.py
2482 130 win32_manual_post_install.py
2483 130 win32_manual_post_install.py
2483
2484
2484 Similiarly, the lists returned by the -l option are also special, in
2485 Similiarly, the lists returned by the -l option are also special, in
2485 the sense that you can equally invoke the .s attribute on them to
2486 the sense that you can equally invoke the .s attribute on them to
2486 automatically get a whitespace-separated string from their contents:
2487 automatically get a whitespace-separated string from their contents:
2487
2488
2488 In [1]: sc -l b=ls *py
2489 In [1]: sc -l b=ls *py
2489
2490
2490 In [2]: b
2491 In [2]: b
2491 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2492 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2492
2493
2493 In [3]: b.s
2494 In [3]: b.s
2494 Out[3]: 'setup.py win32_manual_post_install.py'
2495 Out[3]: 'setup.py win32_manual_post_install.py'
2495
2496
2496 In summary, both the lists and strings used for ouptut capture have
2497 In summary, both the lists and strings used for ouptut capture have
2497 the following special attributes:
2498 the following special attributes:
2498
2499
2499 .l (or .list) : value as list.
2500 .l (or .list) : value as list.
2500 .n (or .nlstr): value as newline-separated string.
2501 .n (or .nlstr): value as newline-separated string.
2501 .s (or .spstr): value as space-separated string.
2502 .s (or .spstr): value as space-separated string.
2502 """
2503 """
2503
2504
2504 opts,args = self.parse_options(parameter_s,'lv')
2505 opts,args = self.parse_options(parameter_s,'lv')
2505 # Try to get a variable name and command to run
2506 # Try to get a variable name and command to run
2506 try:
2507 try:
2507 # the variable name must be obtained from the parse_options
2508 # the variable name must be obtained from the parse_options
2508 # output, which uses shlex.split to strip options out.
2509 # output, which uses shlex.split to strip options out.
2509 var,_ = args.split('=',1)
2510 var,_ = args.split('=',1)
2510 var = var.strip()
2511 var = var.strip()
2511 # But the the command has to be extracted from the original input
2512 # But the the command has to be extracted from the original input
2512 # parameter_s, not on what parse_options returns, to avoid the
2513 # parameter_s, not on what parse_options returns, to avoid the
2513 # quote stripping which shlex.split performs on it.
2514 # quote stripping which shlex.split performs on it.
2514 _,cmd = parameter_s.split('=',1)
2515 _,cmd = parameter_s.split('=',1)
2515 except ValueError:
2516 except ValueError:
2516 var,cmd = '',''
2517 var,cmd = '',''
2517 if not var:
2518 if not var:
2518 error('you must specify a variable to assign the command to.')
2519 error('you must specify a variable to assign the command to.')
2519 return
2520 return
2520 # If all looks ok, proceed
2521 # If all looks ok, proceed
2521 out,err = self.shell.getoutputerror(cmd)
2522 out,err = self.shell.getoutputerror(cmd)
2522 if err:
2523 if err:
2523 print >> Term.cerr,err
2524 print >> Term.cerr,err
2524 if opts.has_key('l'):
2525 if opts.has_key('l'):
2525 out = SList(out.split('\n'))
2526 out = SList(out.split('\n'))
2526 else:
2527 else:
2527 out = LSString(out)
2528 out = LSString(out)
2528 if opts.has_key('v'):
2529 if opts.has_key('v'):
2529 print '%s ==\n%s' % (var,pformat(out))
2530 print '%s ==\n%s' % (var,pformat(out))
2530 self.shell.user_ns.update({var:out})
2531 self.shell.user_ns.update({var:out})
2531
2532
2532 def magic_sx(self, parameter_s=''):
2533 def magic_sx(self, parameter_s=''):
2533 """Shell execute - run a shell command and capture its output.
2534 """Shell execute - run a shell command and capture its output.
2534
2535
2535 %sx command
2536 %sx command
2536
2537
2537 IPython will run the given command using commands.getoutput(), and
2538 IPython will run the given command using commands.getoutput(), and
2538 return the result formatted as a list (split on '\\n'). Since the
2539 return the result formatted as a list (split on '\\n'). Since the
2539 output is _returned_, it will be stored in ipython's regular output
2540 output is _returned_, it will be stored in ipython's regular output
2540 cache Out[N] and in the '_N' automatic variables.
2541 cache Out[N] and in the '_N' automatic variables.
2541
2542
2542 Notes:
2543 Notes:
2543
2544
2544 1) If an input line begins with '!!', then %sx is automatically
2545 1) If an input line begins with '!!', then %sx is automatically
2545 invoked. That is, while:
2546 invoked. That is, while:
2546 !ls
2547 !ls
2547 causes ipython to simply issue system('ls'), typing
2548 causes ipython to simply issue system('ls'), typing
2548 !!ls
2549 !!ls
2549 is a shorthand equivalent to:
2550 is a shorthand equivalent to:
2550 %sx ls
2551 %sx ls
2551
2552
2552 2) %sx differs from %sc in that %sx automatically splits into a list,
2553 2) %sx differs from %sc in that %sx automatically splits into a list,
2553 like '%sc -l'. The reason for this is to make it as easy as possible
2554 like '%sc -l'. The reason for this is to make it as easy as possible
2554 to process line-oriented shell output via further python commands.
2555 to process line-oriented shell output via further python commands.
2555 %sc is meant to provide much finer control, but requires more
2556 %sc is meant to provide much finer control, but requires more
2556 typing.
2557 typing.
2557
2558
2558 3) Just like %sc -l, this is a list with special attributes:
2559 3) Just like %sc -l, this is a list with special attributes:
2559
2560
2560 .l (or .list) : value as list.
2561 .l (or .list) : value as list.
2561 .n (or .nlstr): value as newline-separated string.
2562 .n (or .nlstr): value as newline-separated string.
2562 .s (or .spstr): value as whitespace-separated string.
2563 .s (or .spstr): value as whitespace-separated string.
2563
2564
2564 This is very useful when trying to use such lists as arguments to
2565 This is very useful when trying to use such lists as arguments to
2565 system commands."""
2566 system commands."""
2566
2567
2567 if parameter_s:
2568 if parameter_s:
2568 out,err = self.shell.getoutputerror(parameter_s)
2569 out,err = self.shell.getoutputerror(parameter_s)
2569 if err:
2570 if err:
2570 print >> Term.cerr,err
2571 print >> Term.cerr,err
2571 return SList(out.split('\n'))
2572 return SList(out.split('\n'))
2572
2573
2573 def magic_bg(self, parameter_s=''):
2574 def magic_bg(self, parameter_s=''):
2574 """Run a job in the background, in a separate thread.
2575 """Run a job in the background, in a separate thread.
2575
2576
2576 For example,
2577 For example,
2577
2578
2578 %bg myfunc(x,y,z=1)
2579 %bg myfunc(x,y,z=1)
2579
2580
2580 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2581 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2581 execution starts, a message will be printed indicating the job
2582 execution starts, a message will be printed indicating the job
2582 number. If your job number is 5, you can use
2583 number. If your job number is 5, you can use
2583
2584
2584 myvar = jobs.result(5) or myvar = jobs[5].result
2585 myvar = jobs.result(5) or myvar = jobs[5].result
2585
2586
2586 to assign this result to variable 'myvar'.
2587 to assign this result to variable 'myvar'.
2587
2588
2588 IPython has a job manager, accessible via the 'jobs' object. You can
2589 IPython has a job manager, accessible via the 'jobs' object. You can
2589 type jobs? to get more information about it, and use jobs.<TAB> to see
2590 type jobs? to get more information about it, and use jobs.<TAB> to see
2590 its attributes. All attributes not starting with an underscore are
2591 its attributes. All attributes not starting with an underscore are
2591 meant for public use.
2592 meant for public use.
2592
2593
2593 In particular, look at the jobs.new() method, which is used to create
2594 In particular, look at the jobs.new() method, which is used to create
2594 new jobs. This magic %bg function is just a convenience wrapper
2595 new jobs. This magic %bg function is just a convenience wrapper
2595 around jobs.new(), for expression-based jobs. If you want to create a
2596 around jobs.new(), for expression-based jobs. If you want to create a
2596 new job with an explicit function object and arguments, you must call
2597 new job with an explicit function object and arguments, you must call
2597 jobs.new() directly.
2598 jobs.new() directly.
2598
2599
2599 The jobs.new docstring also describes in detail several important
2600 The jobs.new docstring also describes in detail several important
2600 caveats associated with a thread-based model for background job
2601 caveats associated with a thread-based model for background job
2601 execution. Type jobs.new? for details.
2602 execution. Type jobs.new? for details.
2602
2603
2603 You can check the status of all jobs with jobs.status().
2604 You can check the status of all jobs with jobs.status().
2604
2605
2605 The jobs variable is set by IPython into the Python builtin namespace.
2606 The jobs variable is set by IPython into the Python builtin namespace.
2606 If you ever declare a variable named 'jobs', you will shadow this
2607 If you ever declare a variable named 'jobs', you will shadow this
2607 name. You can either delete your global jobs variable to regain
2608 name. You can either delete your global jobs variable to regain
2608 access to the job manager, or make a new name and assign it manually
2609 access to the job manager, or make a new name and assign it manually
2609 to the manager (stored in IPython's namespace). For example, to
2610 to the manager (stored in IPython's namespace). For example, to
2610 assign the job manager to the Jobs name, use:
2611 assign the job manager to the Jobs name, use:
2611
2612
2612 Jobs = __builtins__.jobs"""
2613 Jobs = __builtins__.jobs"""
2613
2614
2614 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2615 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2615
2616
2616 def magic_store(self, parameter_s=''):
2617 def magic_store(self, parameter_s=''):
2617 """Lightweight persistence for python variables.
2618 """Lightweight persistence for python variables.
2618
2619
2619 Example:
2620 Example:
2620
2621
2621 ville@badger[~]|1> A = ['hello',10,'world']\\
2622 ville@badger[~]|1> A = ['hello',10,'world']\\
2622 ville@badger[~]|2> %store A\\
2623 ville@badger[~]|2> %store A\\
2623 ville@badger[~]|3> Exit
2624 ville@badger[~]|3> Exit
2624
2625
2625 (IPython session is closed and started again...)
2626 (IPython session is closed and started again...)
2626
2627
2627 ville@badger:~$ ipython -p pysh\\
2628 ville@badger:~$ ipython -p pysh\\
2628 ville@badger[~]|1> print A
2629 ville@badger[~]|1> print A
2629
2630
2630 ['hello', 10, 'world']
2631 ['hello', 10, 'world']
2631
2632
2632 Usage:
2633 Usage:
2633
2634
2634 %store - Show list of all variables and their current values\\
2635 %store - Show list of all variables and their current values\\
2635 %store <var> - Store the *current* value of the variable to disk\\
2636 %store <var> - Store the *current* value of the variable to disk\\
2636 %store -d <var> - Remove the variable and its value from storage\\
2637 %store -d <var> - Remove the variable and its value from storage\\
2637 %store -r - Remove all variables from storage
2638 %store -r - Remove all variables from storage
2638
2639
2639 It should be noted that if you change the value of a variable, you
2640 It should be noted that if you change the value of a variable, you
2640 need to %store it again if you want to persist the new value.
2641 need to %store it again if you want to persist the new value.
2641
2642
2642 Note also that the variables will need to be pickleable; most basic
2643 Note also that the variables will need to be pickleable; most basic
2643 python types can be safely %stored.
2644 python types can be safely %stored.
2644 """
2645 """
2645
2646
2646 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2647 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2647 # delete
2648 # delete
2648 if opts.has_key('d'):
2649 if opts.has_key('d'):
2649 try:
2650 try:
2650 todel = args[0]
2651 todel = args[0]
2651 except IndexError:
2652 except IndexError:
2652 error('You must provide the variable to forget')
2653 error('You must provide the variable to forget')
2653 else:
2654 else:
2654 try:
2655 try:
2655 del self.shell.persist['S:' + todel]
2656 del self.shell.persist['S:' + todel]
2656 except:
2657 except:
2657 error("Can't delete variable '%s'" % todel)
2658 error("Can't delete variable '%s'" % todel)
2658 # reset
2659 # reset
2659 elif opts.has_key('r'):
2660 elif opts.has_key('r'):
2660 for k in self.shell.persist.keys():
2661 for k in self.shell.persist.keys():
2661 if k.startswith('S:'):
2662 if k.startswith('S:'):
2662 del self.shell.persist[k]
2663 del self.shell.persist[k]
2663
2664
2664 # run without arguments -> list variables & values
2665 # run without arguments -> list variables & values
2665 elif not args:
2666 elif not args:
2666 vars = [v[2:] for v in self.shell.persist.keys()
2667 vars = [v[2:] for v in self.shell.persist.keys()
2667 if v.startswith('S:')]
2668 if v.startswith('S:')]
2668 vars.sort()
2669 vars.sort()
2669 if vars:
2670 if vars:
2670 size = max(map(len,vars))
2671 size = max(map(len,vars))
2671 else:
2672 else:
2672 size = 0
2673 size = 0
2673
2674
2674 print 'Stored variables and their in-memory values:'
2675 print 'Stored variables and their in-memory values:'
2675 fmt = '%-'+str(size)+'s -> %s'
2676 fmt = '%-'+str(size)+'s -> %s'
2676 get = self.shell.user_ns.get
2677 get = self.shell.user_ns.get
2677 for var in vars:
2678 for var in vars:
2678 # print 30 first characters from every var
2679 # print 30 first characters from every var
2679 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2680 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2680
2681
2681 # default action - store the variable
2682 # default action - store the variable
2682 else:
2683 else:
2683 obj = self.shell.user_ns[args[0] ]
2684 obj = self.shell.user_ns[args[0] ]
2684 if isinstance(inspect.getmodule(obj), FakeModule):
2685 if isinstance(inspect.getmodule(obj), FakeModule):
2685 print textwrap.dedent("""\
2686 print textwrap.dedent("""\
2686 Warning:%s is %s
2687 Warning:%s is %s
2687 Proper storage of interactively declared classes (or instances
2688 Proper storage of interactively declared classes (or instances
2688 of those classes) is not possible! Only instances
2689 of those classes) is not possible! Only instances
2689 of classes in real modules on file system can be %%store'd.
2690 of classes in real modules on file system can be %%store'd.
2690 """ % (args[0], obj) )
2691 """ % (args[0], obj) )
2691 return
2692 return
2692 pickled = pickle.dumps(obj)
2693 pickled = pickle.dumps(obj)
2693 self.shell.persist[ 'S:' + args[0] ] = pickled
2694 self.shell.persist[ 'S:' + args[0] ] = pickled
2694 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2695 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2695
2696
2696 def magic_bookmark(self, parameter_s=''):
2697 def magic_bookmark(self, parameter_s=''):
2697 """Manage IPython's bookmark system.
2698 """Manage IPython's bookmark system.
2698
2699
2699 %bookmark <name> - set bookmark to current dir
2700 %bookmark <name> - set bookmark to current dir
2700 %bookmark <name> <dir> - set bookmark to <dir>
2701 %bookmark <name> <dir> - set bookmark to <dir>
2701 %bookmark -l - list all bookmarks
2702 %bookmark -l - list all bookmarks
2702 %bookmark -d <name> - remove bookmark
2703 %bookmark -d <name> - remove bookmark
2703 %bookmark -r - remove all bookmarks
2704 %bookmark -r - remove all bookmarks
2704
2705
2705 You can later on access a bookmarked folder with:
2706 You can later on access a bookmarked folder with:
2706 %cd -b <name>
2707 %cd -b <name>
2707 or simply '%cd <name>' if there is no directory called <name> AND
2708 or simply '%cd <name>' if there is no directory called <name> AND
2708 there is such a bookmark defined.
2709 there is such a bookmark defined.
2709
2710
2710 Your bookmarks persist through IPython sessions, but they are
2711 Your bookmarks persist through IPython sessions, but they are
2711 associated with each profile."""
2712 associated with each profile."""
2712
2713
2713 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2714 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2714 if len(args) > 2:
2715 if len(args) > 2:
2715 error('You can only give at most two arguments')
2716 error('You can only give at most two arguments')
2716 return
2717 return
2717
2718
2718 bkms = self.shell.persist.get('bookmarks',{})
2719 bkms = self.shell.persist.get('bookmarks',{})
2719
2720
2720 if opts.has_key('d'):
2721 if opts.has_key('d'):
2721 try:
2722 try:
2722 todel = args[0]
2723 todel = args[0]
2723 except IndexError:
2724 except IndexError:
2724 error('You must provide a bookmark to delete')
2725 error('You must provide a bookmark to delete')
2725 else:
2726 else:
2726 try:
2727 try:
2727 del bkms[todel]
2728 del bkms[todel]
2728 except:
2729 except:
2729 error("Can't delete bookmark '%s'" % todel)
2730 error("Can't delete bookmark '%s'" % todel)
2730 elif opts.has_key('r'):
2731 elif opts.has_key('r'):
2731 bkms = {}
2732 bkms = {}
2732 elif opts.has_key('l'):
2733 elif opts.has_key('l'):
2733 bks = bkms.keys()
2734 bks = bkms.keys()
2734 bks.sort()
2735 bks.sort()
2735 if bks:
2736 if bks:
2736 size = max(map(len,bks))
2737 size = max(map(len,bks))
2737 else:
2738 else:
2738 size = 0
2739 size = 0
2739 fmt = '%-'+str(size)+'s -> %s'
2740 fmt = '%-'+str(size)+'s -> %s'
2740 print 'Current bookmarks:'
2741 print 'Current bookmarks:'
2741 for bk in bks:
2742 for bk in bks:
2742 print fmt % (bk,bkms[bk])
2743 print fmt % (bk,bkms[bk])
2743 else:
2744 else:
2744 if not args:
2745 if not args:
2745 error("You must specify the bookmark name")
2746 error("You must specify the bookmark name")
2746 elif len(args)==1:
2747 elif len(args)==1:
2747 bkms[args[0]] = os.getcwd()
2748 bkms[args[0]] = os.getcwd()
2748 elif len(args)==2:
2749 elif len(args)==2:
2749 bkms[args[0]] = args[1]
2750 bkms[args[0]] = args[1]
2750 self.shell.persist['bookmarks'] = bkms
2751 self.shell.persist['bookmarks'] = bkms
2751
2752
2752 def magic_pycat(self, parameter_s=''):
2753 def magic_pycat(self, parameter_s=''):
2753 """Show a syntax-highlighted file through a pager.
2754 """Show a syntax-highlighted file through a pager.
2754
2755
2755 This magic is similar to the cat utility, but it will assume the file
2756 This magic is similar to the cat utility, but it will assume the file
2756 to be Python source and will show it with syntax highlighting. """
2757 to be Python source and will show it with syntax highlighting. """
2757
2758
2758 filename = get_py_filename(parameter_s)
2759 filename = get_py_filename(parameter_s)
2759 page(self.shell.pycolorize(file_read(filename)),
2760 page(self.shell.pycolorize(file_read(filename)),
2760 screen_lines=self.shell.rc.screen_length)
2761 screen_lines=self.shell.rc.screen_length)
2761
2762
2763 def magic_paste(self, parameter_s=''):
2764 """Allows you to paste & execute a pre-formatted code block from
2765 clipboard.
2766
2767 You must terminate the block with '--' (two minus-signs) alone on the
2768 line.
2769
2770 The block is dedented prior to execution to enable execution of
2771 method definitions. The executed block is also assigned to variable
2772 named 'pasted_block' for later editing with %edit.
2773
2774 You can also pass a variable name as an argument, e.g. '%paste foo'.
2775 This assigns the pasted block to variable 'foo' as string, without
2776 dedenting or executing it.
2777
2778 Do not be alarmed by garbled output on Windows (it's a readline bug).
2779 Just press enter and type -- (and press enter again) and the block
2780 will be what was just pasted.
2781
2782 IPython statements (magics, shell escapes) are not supported (yet).
2783 """
2784 par = parameter_s.strip()
2785 from IPython import iplib
2786 lines = []
2787 while 1:
2788 l = iplib.raw_input_original(':')
2789 if l =='--':
2790 break
2791 lines.append(l)
2792 block = "\n".join(lines)
2793 #print "block:\n",block
2794 if not par:
2795 b = textwrap.dedent(block)
2796 self.runsource(b)
2797 self.user_ns['pasted_block'] = b
2798 else:
2799 self.user_ns[par] = block
2800 print "Block assigned to '%s'" % par
2801
2802
2803
2762 # end Magic
2804 # end Magic
@@ -1,5028 +1,5032 b''
1 2006-01-23 Ville Vainio <vivainio@gmail.com>
2
3 * Added %paste magic for pasting python code
4
1 2006-01-22 Ville Vainio <vivainio@gmail.com>
5 2006-01-22 Ville Vainio <vivainio@gmail.com>
2
6
3 * Merge from branches/0.7.1 into trunk, revs 1052-1057
7 * Merge from branches/0.7.1 into trunk, revs 1052-1057
4
8
5 * Versionstring = 0.7.2.svn
9 * Versionstring = 0.7.2.svn
6
10
7 * eggsetup.py: A separate script for constructing eggs, creates
11 * eggsetup.py: A separate script for constructing eggs, creates
8 proper launch scripts even on Windows (an .exe file in
12 proper launch scripts even on Windows (an .exe file in
9 \python24\scripts).
13 \python24\scripts).
10
14
11 * ipapi.py: launch_new_instance, launch entry point needed for the
15 * ipapi.py: launch_new_instance, launch entry point needed for the
12 egg.
16 egg.
13
17
14 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
18 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
15
19
16 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
20 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
17 %pfile foo would print the file for foo even if it was a binary.
21 %pfile foo would print the file for foo even if it was a binary.
18 Now, extensions '.so' and '.dll' are skipped.
22 Now, extensions '.so' and '.dll' are skipped.
19
23
20 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
24 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
21 bug, where macros would fail in all threaded modes. I'm not 100%
25 bug, where macros would fail in all threaded modes. I'm not 100%
22 sure, so I'm going to put out an rc instead of making a release
26 sure, so I'm going to put out an rc instead of making a release
23 today, and wait for feedback for at least a few days.
27 today, and wait for feedback for at least a few days.
24
28
25 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
29 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
26 it...) the handling of pasting external code with autoindent on.
30 it...) the handling of pasting external code with autoindent on.
27 To get out of a multiline input, the rule will appear for most
31 To get out of a multiline input, the rule will appear for most
28 users unchanged: two blank lines or change the indent level
32 users unchanged: two blank lines or change the indent level
29 proposed by IPython. But there is a twist now: you can
33 proposed by IPython. But there is a twist now: you can
30 add/subtract only *one or two spaces*. If you add/subtract three
34 add/subtract only *one or two spaces*. If you add/subtract three
31 or more (unless you completely delete the line), IPython will
35 or more (unless you completely delete the line), IPython will
32 accept that line, and you'll need to enter a second one of pure
36 accept that line, and you'll need to enter a second one of pure
33 whitespace. I know it sounds complicated, but I can't find a
37 whitespace. I know it sounds complicated, but I can't find a
34 different solution that covers all the cases, with the right
38 different solution that covers all the cases, with the right
35 heuristics. Hopefully in actual use, nobody will really notice
39 heuristics. Hopefully in actual use, nobody will really notice
36 all these strange rules and things will 'just work'.
40 all these strange rules and things will 'just work'.
37
41
38 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
42 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
39
43
40 * IPython/iplib.py (interact): catch exceptions which can be
44 * IPython/iplib.py (interact): catch exceptions which can be
41 triggered asynchronously by signal handlers. Thanks to an
45 triggered asynchronously by signal handlers. Thanks to an
42 automatic crash report, submitted by Colin Kingsley
46 automatic crash report, submitted by Colin Kingsley
43 <tercel-AT-gentoo.org>.
47 <tercel-AT-gentoo.org>.
44
48
45 2006-01-20 Ville Vainio <vivainio@gmail.com>
49 2006-01-20 Ville Vainio <vivainio@gmail.com>
46
50
47 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
51 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
48 (%rehashdir, very useful, try it out) of how to extend ipython
52 (%rehashdir, very useful, try it out) of how to extend ipython
49 with new magics. Also added Extensions dir to pythonpath to make
53 with new magics. Also added Extensions dir to pythonpath to make
50 importing extensions easy.
54 importing extensions easy.
51
55
52 * %store now complains when trying to store interactively declared
56 * %store now complains when trying to store interactively declared
53 classes / instances of those classes.
57 classes / instances of those classes.
54
58
55 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
59 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
56 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
60 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
57 if they exist, and ipy_user_conf.py with some defaults is created for
61 if they exist, and ipy_user_conf.py with some defaults is created for
58 the user.
62 the user.
59
63
60 * Startup rehashing done by the config file, not InterpreterExec.
64 * Startup rehashing done by the config file, not InterpreterExec.
61 This means system commands are available even without selecting the
65 This means system commands are available even without selecting the
62 pysh profile. It's the sensible default after all.
66 pysh profile. It's the sensible default after all.
63
67
64 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
68 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
65
69
66 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
70 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
67 multiline code with autoindent on working. But I am really not
71 multiline code with autoindent on working. But I am really not
68 sure, so this needs more testing. Will commit a debug-enabled
72 sure, so this needs more testing. Will commit a debug-enabled
69 version for now, while I test it some more, so that Ville and
73 version for now, while I test it some more, so that Ville and
70 others may also catch any problems. Also made
74 others may also catch any problems. Also made
71 self.indent_current_str() a method, to ensure that there's no
75 self.indent_current_str() a method, to ensure that there's no
72 chance of the indent space count and the corresponding string
76 chance of the indent space count and the corresponding string
73 falling out of sync. All code needing the string should just call
77 falling out of sync. All code needing the string should just call
74 the method.
78 the method.
75
79
76 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
80 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
77
81
78 * IPython/Magic.py (magic_edit): fix check for when users don't
82 * IPython/Magic.py (magic_edit): fix check for when users don't
79 save their output files, the try/except was in the wrong section.
83 save their output files, the try/except was in the wrong section.
80
84
81 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
85 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
82
86
83 * IPython/Magic.py (magic_run): fix __file__ global missing from
87 * IPython/Magic.py (magic_run): fix __file__ global missing from
84 script's namespace when executed via %run. After a report by
88 script's namespace when executed via %run. After a report by
85 Vivian.
89 Vivian.
86
90
87 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
91 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
88 when using python 2.4. The parent constructor changed in 2.4, and
92 when using python 2.4. The parent constructor changed in 2.4, and
89 we need to track it directly (we can't call it, as it messes up
93 we need to track it directly (we can't call it, as it messes up
90 readline and tab-completion inside our pdb would stop working).
94 readline and tab-completion inside our pdb would stop working).
91 After a bug report by R. Bernstein <rocky-AT-panix.com>.
95 After a bug report by R. Bernstein <rocky-AT-panix.com>.
92
96
93 2006-01-16 Ville Vainio <vivainio@gmail.com>
97 2006-01-16 Ville Vainio <vivainio@gmail.com>
94
98
95 * Ipython/magic.py:Reverted back to old %edit functionality
99 * Ipython/magic.py:Reverted back to old %edit functionality
96 that returns file contents on exit.
100 that returns file contents on exit.
97
101
98 * IPython/path.py: Added Jason Orendorff's "path" module to
102 * IPython/path.py: Added Jason Orendorff's "path" module to
99 IPython tree, http://www.jorendorff.com/articles/python/path/.
103 IPython tree, http://www.jorendorff.com/articles/python/path/.
100 You can get path objects conveniently through %sc, and !!, e.g.:
104 You can get path objects conveniently through %sc, and !!, e.g.:
101 sc files=ls
105 sc files=ls
102 for p in files.paths: # or files.p
106 for p in files.paths: # or files.p
103 print p,p.mtime
107 print p,p.mtime
104
108
105 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
109 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
106 now work again without considering the exclusion regexp -
110 now work again without considering the exclusion regexp -
107 hence, things like ',foo my/path' turn to 'foo("my/path")'
111 hence, things like ',foo my/path' turn to 'foo("my/path")'
108 instead of syntax error.
112 instead of syntax error.
109
113
110
114
111 2006-01-14 Ville Vainio <vivainio@gmail.com>
115 2006-01-14 Ville Vainio <vivainio@gmail.com>
112
116
113 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
117 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
114 ipapi decorators for python 2.4 users, options() provides access to rc
118 ipapi decorators for python 2.4 users, options() provides access to rc
115 data.
119 data.
116
120
117 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
121 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
118 as path separators (even on Linux ;-). Space character after
122 as path separators (even on Linux ;-). Space character after
119 backslash (as yielded by tab completer) is still space;
123 backslash (as yielded by tab completer) is still space;
120 "%cd long\ name" works as expected.
124 "%cd long\ name" works as expected.
121
125
122 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
126 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
123 as "chain of command", with priority. API stays the same,
127 as "chain of command", with priority. API stays the same,
124 TryNext exception raised by a hook function signals that
128 TryNext exception raised by a hook function signals that
125 current hook failed and next hook should try handling it, as
129 current hook failed and next hook should try handling it, as
126 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
130 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
127 requested configurable display hook, which is now implemented.
131 requested configurable display hook, which is now implemented.
128
132
129 2006-01-13 Ville Vainio <vivainio@gmail.com>
133 2006-01-13 Ville Vainio <vivainio@gmail.com>
130
134
131 * IPython/platutils*.py: platform specific utility functions,
135 * IPython/platutils*.py: platform specific utility functions,
132 so far only set_term_title is implemented (change terminal
136 so far only set_term_title is implemented (change terminal
133 label in windowing systems). %cd now changes the title to
137 label in windowing systems). %cd now changes the title to
134 current dir.
138 current dir.
135
139
136 * IPython/Release.py: Added myself to "authors" list,
140 * IPython/Release.py: Added myself to "authors" list,
137 had to create new files.
141 had to create new files.
138
142
139 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
143 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
140 shell escape; not a known bug but had potential to be one in the
144 shell escape; not a known bug but had potential to be one in the
141 future.
145 future.
142
146
143 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
147 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
144 extension API for IPython! See the module for usage example. Fix
148 extension API for IPython! See the module for usage example. Fix
145 OInspect for docstring-less magic functions.
149 OInspect for docstring-less magic functions.
146
150
147
151
148 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
152 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
149
153
150 * IPython/iplib.py (raw_input): temporarily deactivate all
154 * IPython/iplib.py (raw_input): temporarily deactivate all
151 attempts at allowing pasting of code with autoindent on. It
155 attempts at allowing pasting of code with autoindent on. It
152 introduced bugs (reported by Prabhu) and I can't seem to find a
156 introduced bugs (reported by Prabhu) and I can't seem to find a
153 robust combination which works in all cases. Will have to revisit
157 robust combination which works in all cases. Will have to revisit
154 later.
158 later.
155
159
156 * IPython/genutils.py: remove isspace() function. We've dropped
160 * IPython/genutils.py: remove isspace() function. We've dropped
157 2.2 compatibility, so it's OK to use the string method.
161 2.2 compatibility, so it's OK to use the string method.
158
162
159 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
163 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
160
164
161 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
165 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
162 matching what NOT to autocall on, to include all python binary
166 matching what NOT to autocall on, to include all python binary
163 operators (including things like 'and', 'or', 'is' and 'in').
167 operators (including things like 'and', 'or', 'is' and 'in').
164 Prompted by a bug report on 'foo & bar', but I realized we had
168 Prompted by a bug report on 'foo & bar', but I realized we had
165 many more potential bug cases with other operators. The regexp is
169 many more potential bug cases with other operators. The regexp is
166 self.re_exclude_auto, it's fairly commented.
170 self.re_exclude_auto, it's fairly commented.
167
171
168 2006-01-12 Ville Vainio <vivainio@gmail.com>
172 2006-01-12 Ville Vainio <vivainio@gmail.com>
169
173
170 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
174 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
171 Prettified and hardened string/backslash quoting with ipsystem(),
175 Prettified and hardened string/backslash quoting with ipsystem(),
172 ipalias() and ipmagic(). Now even \ characters are passed to
176 ipalias() and ipmagic(). Now even \ characters are passed to
173 %magics, !shell escapes and aliases exactly as they are in the
177 %magics, !shell escapes and aliases exactly as they are in the
174 ipython command line. Should improve backslash experience,
178 ipython command line. Should improve backslash experience,
175 particularly in Windows (path delimiter for some commands that
179 particularly in Windows (path delimiter for some commands that
176 won't understand '/'), but Unix benefits as well (regexps). %cd
180 won't understand '/'), but Unix benefits as well (regexps). %cd
177 magic still doesn't support backslash path delimiters, though. Also
181 magic still doesn't support backslash path delimiters, though. Also
178 deleted all pretense of supporting multiline command strings in
182 deleted all pretense of supporting multiline command strings in
179 !system or %magic commands. Thanks to Jerry McRae for suggestions.
183 !system or %magic commands. Thanks to Jerry McRae for suggestions.
180
184
181 * doc/build_doc_instructions.txt added. Documentation on how to
185 * doc/build_doc_instructions.txt added. Documentation on how to
182 use doc/update_manual.py, added yesterday. Both files contributed
186 use doc/update_manual.py, added yesterday. Both files contributed
183 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
187 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
184 doc/*.sh for deprecation at a later date.
188 doc/*.sh for deprecation at a later date.
185
189
186 * /ipython.py Added ipython.py to root directory for
190 * /ipython.py Added ipython.py to root directory for
187 zero-installation (tar xzvf ipython.tgz; cd ipython; python
191 zero-installation (tar xzvf ipython.tgz; cd ipython; python
188 ipython.py) and development convenience (no need to kee doing
192 ipython.py) and development convenience (no need to kee doing
189 "setup.py install" between changes).
193 "setup.py install" between changes).
190
194
191 * Made ! and !! shell escapes work (again) in multiline expressions:
195 * Made ! and !! shell escapes work (again) in multiline expressions:
192 if 1:
196 if 1:
193 !ls
197 !ls
194 !!ls
198 !!ls
195
199
196 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
200 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
197
201
198 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
202 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
199 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
203 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
200 module in case-insensitive installation. Was causing crashes
204 module in case-insensitive installation. Was causing crashes
201 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
205 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
202
206
203 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
207 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
204 <marienz-AT-gentoo.org>, closes
208 <marienz-AT-gentoo.org>, closes
205 http://www.scipy.net/roundup/ipython/issue51.
209 http://www.scipy.net/roundup/ipython/issue51.
206
210
207 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
211 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
208
212
209 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
213 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
210 problem of excessive CPU usage under *nix and keyboard lag under
214 problem of excessive CPU usage under *nix and keyboard lag under
211 win32.
215 win32.
212
216
213 2006-01-10 *** Released version 0.7.0
217 2006-01-10 *** Released version 0.7.0
214
218
215 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
219 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
216
220
217 * IPython/Release.py (revision): tag version number to 0.7.0,
221 * IPython/Release.py (revision): tag version number to 0.7.0,
218 ready for release.
222 ready for release.
219
223
220 * IPython/Magic.py (magic_edit): Add print statement to %edit so
224 * IPython/Magic.py (magic_edit): Add print statement to %edit so
221 it informs the user of the name of the temp. file used. This can
225 it informs the user of the name of the temp. file used. This can
222 help if you decide later to reuse that same file, so you know
226 help if you decide later to reuse that same file, so you know
223 where to copy the info from.
227 where to copy the info from.
224
228
225 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
229 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
226
230
227 * setup_bdist_egg.py: little script to build an egg. Added
231 * setup_bdist_egg.py: little script to build an egg. Added
228 support in the release tools as well.
232 support in the release tools as well.
229
233
230 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
234 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
231
235
232 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
236 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
233 version selection (new -wxversion command line and ipythonrc
237 version selection (new -wxversion command line and ipythonrc
234 parameter). Patch contributed by Arnd Baecker
238 parameter). Patch contributed by Arnd Baecker
235 <arnd.baecker-AT-web.de>.
239 <arnd.baecker-AT-web.de>.
236
240
237 * IPython/iplib.py (embed_mainloop): fix tab-completion in
241 * IPython/iplib.py (embed_mainloop): fix tab-completion in
238 embedded instances, for variables defined at the interactive
242 embedded instances, for variables defined at the interactive
239 prompt of the embedded ipython. Reported by Arnd.
243 prompt of the embedded ipython. Reported by Arnd.
240
244
241 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
245 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
242 it can be used as a (stateful) toggle, or with a direct parameter.
246 it can be used as a (stateful) toggle, or with a direct parameter.
243
247
244 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
248 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
245 could be triggered in certain cases and cause the traceback
249 could be triggered in certain cases and cause the traceback
246 printer not to work.
250 printer not to work.
247
251
248 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
252 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
249
253
250 * IPython/iplib.py (_should_recompile): Small fix, closes
254 * IPython/iplib.py (_should_recompile): Small fix, closes
251 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
255 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
252
256
253 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
257 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
254
258
255 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
259 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
256 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
260 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
257 Moad for help with tracking it down.
261 Moad for help with tracking it down.
258
262
259 * IPython/iplib.py (handle_auto): fix autocall handling for
263 * IPython/iplib.py (handle_auto): fix autocall handling for
260 objects which support BOTH __getitem__ and __call__ (so that f [x]
264 objects which support BOTH __getitem__ and __call__ (so that f [x]
261 is left alone, instead of becoming f([x]) automatically).
265 is left alone, instead of becoming f([x]) automatically).
262
266
263 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
267 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
264 Ville's patch.
268 Ville's patch.
265
269
266 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
270 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
267
271
268 * IPython/iplib.py (handle_auto): changed autocall semantics to
272 * IPython/iplib.py (handle_auto): changed autocall semantics to
269 include 'smart' mode, where the autocall transformation is NOT
273 include 'smart' mode, where the autocall transformation is NOT
270 applied if there are no arguments on the line. This allows you to
274 applied if there are no arguments on the line. This allows you to
271 just type 'foo' if foo is a callable to see its internal form,
275 just type 'foo' if foo is a callable to see its internal form,
272 instead of having it called with no arguments (typically a
276 instead of having it called with no arguments (typically a
273 mistake). The old 'full' autocall still exists: for that, you
277 mistake). The old 'full' autocall still exists: for that, you
274 need to set the 'autocall' parameter to 2 in your ipythonrc file.
278 need to set the 'autocall' parameter to 2 in your ipythonrc file.
275
279
276 * IPython/completer.py (Completer.attr_matches): add
280 * IPython/completer.py (Completer.attr_matches): add
277 tab-completion support for Enthoughts' traits. After a report by
281 tab-completion support for Enthoughts' traits. After a report by
278 Arnd and a patch by Prabhu.
282 Arnd and a patch by Prabhu.
279
283
280 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
284 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
281
285
282 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
286 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
283 Schmolck's patch to fix inspect.getinnerframes().
287 Schmolck's patch to fix inspect.getinnerframes().
284
288
285 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
289 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
286 for embedded instances, regarding handling of namespaces and items
290 for embedded instances, regarding handling of namespaces and items
287 added to the __builtin__ one. Multiple embedded instances and
291 added to the __builtin__ one. Multiple embedded instances and
288 recursive embeddings should work better now (though I'm not sure
292 recursive embeddings should work better now (though I'm not sure
289 I've got all the corner cases fixed, that code is a bit of a brain
293 I've got all the corner cases fixed, that code is a bit of a brain
290 twister).
294 twister).
291
295
292 * IPython/Magic.py (magic_edit): added support to edit in-memory
296 * IPython/Magic.py (magic_edit): added support to edit in-memory
293 macros (automatically creates the necessary temp files). %edit
297 macros (automatically creates the necessary temp files). %edit
294 also doesn't return the file contents anymore, it's just noise.
298 also doesn't return the file contents anymore, it's just noise.
295
299
296 * IPython/completer.py (Completer.attr_matches): revert change to
300 * IPython/completer.py (Completer.attr_matches): revert change to
297 complete only on attributes listed in __all__. I realized it
301 complete only on attributes listed in __all__. I realized it
298 cripples the tab-completion system as a tool for exploring the
302 cripples the tab-completion system as a tool for exploring the
299 internals of unknown libraries (it renders any non-__all__
303 internals of unknown libraries (it renders any non-__all__
300 attribute off-limits). I got bit by this when trying to see
304 attribute off-limits). I got bit by this when trying to see
301 something inside the dis module.
305 something inside the dis module.
302
306
303 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
307 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
304
308
305 * IPython/iplib.py (InteractiveShell.__init__): add .meta
309 * IPython/iplib.py (InteractiveShell.__init__): add .meta
306 namespace for users and extension writers to hold data in. This
310 namespace for users and extension writers to hold data in. This
307 follows the discussion in
311 follows the discussion in
308 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
312 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
309
313
310 * IPython/completer.py (IPCompleter.complete): small patch to help
314 * IPython/completer.py (IPCompleter.complete): small patch to help
311 tab-completion under Emacs, after a suggestion by John Barnard
315 tab-completion under Emacs, after a suggestion by John Barnard
312 <barnarj-AT-ccf.org>.
316 <barnarj-AT-ccf.org>.
313
317
314 * IPython/Magic.py (Magic.extract_input_slices): added support for
318 * IPython/Magic.py (Magic.extract_input_slices): added support for
315 the slice notation in magics to use N-M to represent numbers N...M
319 the slice notation in magics to use N-M to represent numbers N...M
316 (closed endpoints). This is used by %macro and %save.
320 (closed endpoints). This is used by %macro and %save.
317
321
318 * IPython/completer.py (Completer.attr_matches): for modules which
322 * IPython/completer.py (Completer.attr_matches): for modules which
319 define __all__, complete only on those. After a patch by Jeffrey
323 define __all__, complete only on those. After a patch by Jeffrey
320 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
324 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
321 speed up this routine.
325 speed up this routine.
322
326
323 * IPython/Logger.py (Logger.log): fix a history handling bug. I
327 * IPython/Logger.py (Logger.log): fix a history handling bug. I
324 don't know if this is the end of it, but the behavior now is
328 don't know if this is the end of it, but the behavior now is
325 certainly much more correct. Note that coupled with macros,
329 certainly much more correct. Note that coupled with macros,
326 slightly surprising (at first) behavior may occur: a macro will in
330 slightly surprising (at first) behavior may occur: a macro will in
327 general expand to multiple lines of input, so upon exiting, the
331 general expand to multiple lines of input, so upon exiting, the
328 in/out counters will both be bumped by the corresponding amount
332 in/out counters will both be bumped by the corresponding amount
329 (as if the macro's contents had been typed interactively). Typing
333 (as if the macro's contents had been typed interactively). Typing
330 %hist will reveal the intermediate (silently processed) lines.
334 %hist will reveal the intermediate (silently processed) lines.
331
335
332 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
336 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
333 pickle to fail (%run was overwriting __main__ and not restoring
337 pickle to fail (%run was overwriting __main__ and not restoring
334 it, but pickle relies on __main__ to operate).
338 it, but pickle relies on __main__ to operate).
335
339
336 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
340 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
337 using properties, but forgot to make the main InteractiveShell
341 using properties, but forgot to make the main InteractiveShell
338 class a new-style class. Properties fail silently, and
342 class a new-style class. Properties fail silently, and
339 misteriously, with old-style class (getters work, but
343 misteriously, with old-style class (getters work, but
340 setters don't do anything).
344 setters don't do anything).
341
345
342 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
346 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
343
347
344 * IPython/Magic.py (magic_history): fix history reporting bug (I
348 * IPython/Magic.py (magic_history): fix history reporting bug (I
345 know some nasties are still there, I just can't seem to find a
349 know some nasties are still there, I just can't seem to find a
346 reproducible test case to track them down; the input history is
350 reproducible test case to track them down; the input history is
347 falling out of sync...)
351 falling out of sync...)
348
352
349 * IPython/iplib.py (handle_shell_escape): fix bug where both
353 * IPython/iplib.py (handle_shell_escape): fix bug where both
350 aliases and system accesses where broken for indented code (such
354 aliases and system accesses where broken for indented code (such
351 as loops).
355 as loops).
352
356
353 * IPython/genutils.py (shell): fix small but critical bug for
357 * IPython/genutils.py (shell): fix small but critical bug for
354 win32 system access.
358 win32 system access.
355
359
356 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
360 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
357
361
358 * IPython/iplib.py (showtraceback): remove use of the
362 * IPython/iplib.py (showtraceback): remove use of the
359 sys.last_{type/value/traceback} structures, which are non
363 sys.last_{type/value/traceback} structures, which are non
360 thread-safe.
364 thread-safe.
361 (_prefilter): change control flow to ensure that we NEVER
365 (_prefilter): change control flow to ensure that we NEVER
362 introspect objects when autocall is off. This will guarantee that
366 introspect objects when autocall is off. This will guarantee that
363 having an input line of the form 'x.y', where access to attribute
367 having an input line of the form 'x.y', where access to attribute
364 'y' has side effects, doesn't trigger the side effect TWICE. It
368 'y' has side effects, doesn't trigger the side effect TWICE. It
365 is important to note that, with autocall on, these side effects
369 is important to note that, with autocall on, these side effects
366 can still happen.
370 can still happen.
367 (ipsystem): new builtin, to complete the ip{magic/alias/system}
371 (ipsystem): new builtin, to complete the ip{magic/alias/system}
368 trio. IPython offers these three kinds of special calls which are
372 trio. IPython offers these three kinds of special calls which are
369 not python code, and it's a good thing to have their call method
373 not python code, and it's a good thing to have their call method
370 be accessible as pure python functions (not just special syntax at
374 be accessible as pure python functions (not just special syntax at
371 the command line). It gives us a better internal implementation
375 the command line). It gives us a better internal implementation
372 structure, as well as exposing these for user scripting more
376 structure, as well as exposing these for user scripting more
373 cleanly.
377 cleanly.
374
378
375 * IPython/macro.py (Macro.__init__): moved macros to a standalone
379 * IPython/macro.py (Macro.__init__): moved macros to a standalone
376 file. Now that they'll be more likely to be used with the
380 file. Now that they'll be more likely to be used with the
377 persistance system (%store), I want to make sure their module path
381 persistance system (%store), I want to make sure their module path
378 doesn't change in the future, so that we don't break things for
382 doesn't change in the future, so that we don't break things for
379 users' persisted data.
383 users' persisted data.
380
384
381 * IPython/iplib.py (autoindent_update): move indentation
385 * IPython/iplib.py (autoindent_update): move indentation
382 management into the _text_ processing loop, not the keyboard
386 management into the _text_ processing loop, not the keyboard
383 interactive one. This is necessary to correctly process non-typed
387 interactive one. This is necessary to correctly process non-typed
384 multiline input (such as macros).
388 multiline input (such as macros).
385
389
386 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
390 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
387 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
391 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
388 which was producing problems in the resulting manual.
392 which was producing problems in the resulting manual.
389 (magic_whos): improve reporting of instances (show their class,
393 (magic_whos): improve reporting of instances (show their class,
390 instead of simply printing 'instance' which isn't terribly
394 instead of simply printing 'instance' which isn't terribly
391 informative).
395 informative).
392
396
393 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
397 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
394 (minor mods) to support network shares under win32.
398 (minor mods) to support network shares under win32.
395
399
396 * IPython/winconsole.py (get_console_size): add new winconsole
400 * IPython/winconsole.py (get_console_size): add new winconsole
397 module and fixes to page_dumb() to improve its behavior under
401 module and fixes to page_dumb() to improve its behavior under
398 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
402 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
399
403
400 * IPython/Magic.py (Macro): simplified Macro class to just
404 * IPython/Magic.py (Macro): simplified Macro class to just
401 subclass list. We've had only 2.2 compatibility for a very long
405 subclass list. We've had only 2.2 compatibility for a very long
402 time, yet I was still avoiding subclassing the builtin types. No
406 time, yet I was still avoiding subclassing the builtin types. No
403 more (I'm also starting to use properties, though I won't shift to
407 more (I'm also starting to use properties, though I won't shift to
404 2.3-specific features quite yet).
408 2.3-specific features quite yet).
405 (magic_store): added Ville's patch for lightweight variable
409 (magic_store): added Ville's patch for lightweight variable
406 persistence, after a request on the user list by Matt Wilkie
410 persistence, after a request on the user list by Matt Wilkie
407 <maphew-AT-gmail.com>. The new %store magic's docstring has full
411 <maphew-AT-gmail.com>. The new %store magic's docstring has full
408 details.
412 details.
409
413
410 * IPython/iplib.py (InteractiveShell.post_config_initialization):
414 * IPython/iplib.py (InteractiveShell.post_config_initialization):
411 changed the default logfile name from 'ipython.log' to
415 changed the default logfile name from 'ipython.log' to
412 'ipython_log.py'. These logs are real python files, and now that
416 'ipython_log.py'. These logs are real python files, and now that
413 we have much better multiline support, people are more likely to
417 we have much better multiline support, people are more likely to
414 want to use them as such. Might as well name them correctly.
418 want to use them as such. Might as well name them correctly.
415
419
416 * IPython/Magic.py: substantial cleanup. While we can't stop
420 * IPython/Magic.py: substantial cleanup. While we can't stop
417 using magics as mixins, due to the existing customizations 'out
421 using magics as mixins, due to the existing customizations 'out
418 there' which rely on the mixin naming conventions, at least I
422 there' which rely on the mixin naming conventions, at least I
419 cleaned out all cross-class name usage. So once we are OK with
423 cleaned out all cross-class name usage. So once we are OK with
420 breaking compatibility, the two systems can be separated.
424 breaking compatibility, the two systems can be separated.
421
425
422 * IPython/Logger.py: major cleanup. This one is NOT a mixin
426 * IPython/Logger.py: major cleanup. This one is NOT a mixin
423 anymore, and the class is a fair bit less hideous as well. New
427 anymore, and the class is a fair bit less hideous as well. New
424 features were also introduced: timestamping of input, and logging
428 features were also introduced: timestamping of input, and logging
425 of output results. These are user-visible with the -t and -o
429 of output results. These are user-visible with the -t and -o
426 options to %logstart. Closes
430 options to %logstart. Closes
427 http://www.scipy.net/roundup/ipython/issue11 and a request by
431 http://www.scipy.net/roundup/ipython/issue11 and a request by
428 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
432 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
429
433
430 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
434 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
431
435
432 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
436 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
433 better hadnle backslashes in paths. See the thread 'More Windows
437 better hadnle backslashes in paths. See the thread 'More Windows
434 questions part 2 - \/ characters revisited' on the iypthon user
438 questions part 2 - \/ characters revisited' on the iypthon user
435 list:
439 list:
436 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
440 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
437
441
438 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
442 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
439
443
440 (InteractiveShell.__init__): change threaded shells to not use the
444 (InteractiveShell.__init__): change threaded shells to not use the
441 ipython crash handler. This was causing more problems than not,
445 ipython crash handler. This was causing more problems than not,
442 as exceptions in the main thread (GUI code, typically) would
446 as exceptions in the main thread (GUI code, typically) would
443 always show up as a 'crash', when they really weren't.
447 always show up as a 'crash', when they really weren't.
444
448
445 The colors and exception mode commands (%colors/%xmode) have been
449 The colors and exception mode commands (%colors/%xmode) have been
446 synchronized to also take this into account, so users can get
450 synchronized to also take this into account, so users can get
447 verbose exceptions for their threaded code as well. I also added
451 verbose exceptions for their threaded code as well. I also added
448 support for activating pdb inside this exception handler as well,
452 support for activating pdb inside this exception handler as well,
449 so now GUI authors can use IPython's enhanced pdb at runtime.
453 so now GUI authors can use IPython's enhanced pdb at runtime.
450
454
451 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
455 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
452 true by default, and add it to the shipped ipythonrc file. Since
456 true by default, and add it to the shipped ipythonrc file. Since
453 this asks the user before proceeding, I think it's OK to make it
457 this asks the user before proceeding, I think it's OK to make it
454 true by default.
458 true by default.
455
459
456 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
460 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
457 of the previous special-casing of input in the eval loop. I think
461 of the previous special-casing of input in the eval loop. I think
458 this is cleaner, as they really are commands and shouldn't have
462 this is cleaner, as they really are commands and shouldn't have
459 a special role in the middle of the core code.
463 a special role in the middle of the core code.
460
464
461 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
465 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
462
466
463 * IPython/iplib.py (edit_syntax_error): added support for
467 * IPython/iplib.py (edit_syntax_error): added support for
464 automatically reopening the editor if the file had a syntax error
468 automatically reopening the editor if the file had a syntax error
465 in it. Thanks to scottt who provided the patch at:
469 in it. Thanks to scottt who provided the patch at:
466 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
470 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
467 version committed).
471 version committed).
468
472
469 * IPython/iplib.py (handle_normal): add suport for multi-line
473 * IPython/iplib.py (handle_normal): add suport for multi-line
470 input with emtpy lines. This fixes
474 input with emtpy lines. This fixes
471 http://www.scipy.net/roundup/ipython/issue43 and a similar
475 http://www.scipy.net/roundup/ipython/issue43 and a similar
472 discussion on the user list.
476 discussion on the user list.
473
477
474 WARNING: a behavior change is necessarily introduced to support
478 WARNING: a behavior change is necessarily introduced to support
475 blank lines: now a single blank line with whitespace does NOT
479 blank lines: now a single blank line with whitespace does NOT
476 break the input loop, which means that when autoindent is on, by
480 break the input loop, which means that when autoindent is on, by
477 default hitting return on the next (indented) line does NOT exit.
481 default hitting return on the next (indented) line does NOT exit.
478
482
479 Instead, to exit a multiline input you can either have:
483 Instead, to exit a multiline input you can either have:
480
484
481 - TWO whitespace lines (just hit return again), or
485 - TWO whitespace lines (just hit return again), or
482 - a single whitespace line of a different length than provided
486 - a single whitespace line of a different length than provided
483 by the autoindent (add or remove a space).
487 by the autoindent (add or remove a space).
484
488
485 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
489 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
486 module to better organize all readline-related functionality.
490 module to better organize all readline-related functionality.
487 I've deleted FlexCompleter and put all completion clases here.
491 I've deleted FlexCompleter and put all completion clases here.
488
492
489 * IPython/iplib.py (raw_input): improve indentation management.
493 * IPython/iplib.py (raw_input): improve indentation management.
490 It is now possible to paste indented code with autoindent on, and
494 It is now possible to paste indented code with autoindent on, and
491 the code is interpreted correctly (though it still looks bad on
495 the code is interpreted correctly (though it still looks bad on
492 screen, due to the line-oriented nature of ipython).
496 screen, due to the line-oriented nature of ipython).
493 (MagicCompleter.complete): change behavior so that a TAB key on an
497 (MagicCompleter.complete): change behavior so that a TAB key on an
494 otherwise empty line actually inserts a tab, instead of completing
498 otherwise empty line actually inserts a tab, instead of completing
495 on the entire global namespace. This makes it easier to use the
499 on the entire global namespace. This makes it easier to use the
496 TAB key for indentation. After a request by Hans Meine
500 TAB key for indentation. After a request by Hans Meine
497 <hans_meine-AT-gmx.net>
501 <hans_meine-AT-gmx.net>
498 (_prefilter): add support so that typing plain 'exit' or 'quit'
502 (_prefilter): add support so that typing plain 'exit' or 'quit'
499 does a sensible thing. Originally I tried to deviate as little as
503 does a sensible thing. Originally I tried to deviate as little as
500 possible from the default python behavior, but even that one may
504 possible from the default python behavior, but even that one may
501 change in this direction (thread on python-dev to that effect).
505 change in this direction (thread on python-dev to that effect).
502 Regardless, ipython should do the right thing even if CPython's
506 Regardless, ipython should do the right thing even if CPython's
503 '>>>' prompt doesn't.
507 '>>>' prompt doesn't.
504 (InteractiveShell): removed subclassing code.InteractiveConsole
508 (InteractiveShell): removed subclassing code.InteractiveConsole
505 class. By now we'd overridden just about all of its methods: I've
509 class. By now we'd overridden just about all of its methods: I've
506 copied the remaining two over, and now ipython is a standalone
510 copied the remaining two over, and now ipython is a standalone
507 class. This will provide a clearer picture for the chainsaw
511 class. This will provide a clearer picture for the chainsaw
508 branch refactoring.
512 branch refactoring.
509
513
510 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
514 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
511
515
512 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
516 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
513 failures for objects which break when dir() is called on them.
517 failures for objects which break when dir() is called on them.
514
518
515 * IPython/FlexCompleter.py (Completer.__init__): Added support for
519 * IPython/FlexCompleter.py (Completer.__init__): Added support for
516 distinct local and global namespaces in the completer API. This
520 distinct local and global namespaces in the completer API. This
517 change allows us top properly handle completion with distinct
521 change allows us top properly handle completion with distinct
518 scopes, including in embedded instances (this had never really
522 scopes, including in embedded instances (this had never really
519 worked correctly).
523 worked correctly).
520
524
521 Note: this introduces a change in the constructor for
525 Note: this introduces a change in the constructor for
522 MagicCompleter, as a new global_namespace parameter is now the
526 MagicCompleter, as a new global_namespace parameter is now the
523 second argument (the others were bumped one position).
527 second argument (the others were bumped one position).
524
528
525 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
529 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
526
530
527 * IPython/iplib.py (embed_mainloop): fix tab-completion in
531 * IPython/iplib.py (embed_mainloop): fix tab-completion in
528 embedded instances (which can be done now thanks to Vivian's
532 embedded instances (which can be done now thanks to Vivian's
529 frame-handling fixes for pdb).
533 frame-handling fixes for pdb).
530 (InteractiveShell.__init__): Fix namespace handling problem in
534 (InteractiveShell.__init__): Fix namespace handling problem in
531 embedded instances. We were overwriting __main__ unconditionally,
535 embedded instances. We were overwriting __main__ unconditionally,
532 and this should only be done for 'full' (non-embedded) IPython;
536 and this should only be done for 'full' (non-embedded) IPython;
533 embedded instances must respect the caller's __main__. Thanks to
537 embedded instances must respect the caller's __main__. Thanks to
534 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
538 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
535
539
536 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
540 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
537
541
538 * setup.py: added download_url to setup(). This registers the
542 * setup.py: added download_url to setup(). This registers the
539 download address at PyPI, which is not only useful to humans
543 download address at PyPI, which is not only useful to humans
540 browsing the site, but is also picked up by setuptools (the Eggs
544 browsing the site, but is also picked up by setuptools (the Eggs
541 machinery). Thanks to Ville and R. Kern for the info/discussion
545 machinery). Thanks to Ville and R. Kern for the info/discussion
542 on this.
546 on this.
543
547
544 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
548 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
545
549
546 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
550 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
547 This brings a lot of nice functionality to the pdb mode, which now
551 This brings a lot of nice functionality to the pdb mode, which now
548 has tab-completion, syntax highlighting, and better stack handling
552 has tab-completion, syntax highlighting, and better stack handling
549 than before. Many thanks to Vivian De Smedt
553 than before. Many thanks to Vivian De Smedt
550 <vivian-AT-vdesmedt.com> for the original patches.
554 <vivian-AT-vdesmedt.com> for the original patches.
551
555
552 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
556 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
553
557
554 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
558 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
555 sequence to consistently accept the banner argument. The
559 sequence to consistently accept the banner argument. The
556 inconsistency was tripping SAGE, thanks to Gary Zablackis
560 inconsistency was tripping SAGE, thanks to Gary Zablackis
557 <gzabl-AT-yahoo.com> for the report.
561 <gzabl-AT-yahoo.com> for the report.
558
562
559 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
563 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
560
564
561 * IPython/iplib.py (InteractiveShell.post_config_initialization):
565 * IPython/iplib.py (InteractiveShell.post_config_initialization):
562 Fix bug where a naked 'alias' call in the ipythonrc file would
566 Fix bug where a naked 'alias' call in the ipythonrc file would
563 cause a crash. Bug reported by Jorgen Stenarson.
567 cause a crash. Bug reported by Jorgen Stenarson.
564
568
565 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
569 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
566
570
567 * IPython/ipmaker.py (make_IPython): cleanups which should improve
571 * IPython/ipmaker.py (make_IPython): cleanups which should improve
568 startup time.
572 startup time.
569
573
570 * IPython/iplib.py (runcode): my globals 'fix' for embedded
574 * IPython/iplib.py (runcode): my globals 'fix' for embedded
571 instances had introduced a bug with globals in normal code. Now
575 instances had introduced a bug with globals in normal code. Now
572 it's working in all cases.
576 it's working in all cases.
573
577
574 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
578 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
575 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
579 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
576 has been introduced to set the default case sensitivity of the
580 has been introduced to set the default case sensitivity of the
577 searches. Users can still select either mode at runtime on a
581 searches. Users can still select either mode at runtime on a
578 per-search basis.
582 per-search basis.
579
583
580 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
584 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
581
585
582 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
586 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
583 attributes in wildcard searches for subclasses. Modified version
587 attributes in wildcard searches for subclasses. Modified version
584 of a patch by Jorgen.
588 of a patch by Jorgen.
585
589
586 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
590 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
587
591
588 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
592 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
589 embedded instances. I added a user_global_ns attribute to the
593 embedded instances. I added a user_global_ns attribute to the
590 InteractiveShell class to handle this.
594 InteractiveShell class to handle this.
591
595
592 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
596 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
593
597
594 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
598 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
595 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
599 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
596 (reported under win32, but may happen also in other platforms).
600 (reported under win32, but may happen also in other platforms).
597 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
601 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
598
602
599 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
603 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
600
604
601 * IPython/Magic.py (magic_psearch): new support for wildcard
605 * IPython/Magic.py (magic_psearch): new support for wildcard
602 patterns. Now, typing ?a*b will list all names which begin with a
606 patterns. Now, typing ?a*b will list all names which begin with a
603 and end in b, for example. The %psearch magic has full
607 and end in b, for example. The %psearch magic has full
604 docstrings. Many thanks to JΓΆrgen Stenarson
608 docstrings. Many thanks to JΓΆrgen Stenarson
605 <jorgen.stenarson-AT-bostream.nu>, author of the patches
609 <jorgen.stenarson-AT-bostream.nu>, author of the patches
606 implementing this functionality.
610 implementing this functionality.
607
611
608 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
612 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
609
613
610 * Manual: fixed long-standing annoyance of double-dashes (as in
614 * Manual: fixed long-standing annoyance of double-dashes (as in
611 --prefix=~, for example) being stripped in the HTML version. This
615 --prefix=~, for example) being stripped in the HTML version. This
612 is a latex2html bug, but a workaround was provided. Many thanks
616 is a latex2html bug, but a workaround was provided. Many thanks
613 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
617 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
614 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
618 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
615 rolling. This seemingly small issue had tripped a number of users
619 rolling. This seemingly small issue had tripped a number of users
616 when first installing, so I'm glad to see it gone.
620 when first installing, so I'm glad to see it gone.
617
621
618 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
622 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
619
623
620 * IPython/Extensions/numeric_formats.py: fix missing import,
624 * IPython/Extensions/numeric_formats.py: fix missing import,
621 reported by Stephen Walton.
625 reported by Stephen Walton.
622
626
623 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
627 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
624
628
625 * IPython/demo.py: finish demo module, fully documented now.
629 * IPython/demo.py: finish demo module, fully documented now.
626
630
627 * IPython/genutils.py (file_read): simple little utility to read a
631 * IPython/genutils.py (file_read): simple little utility to read a
628 file and ensure it's closed afterwards.
632 file and ensure it's closed afterwards.
629
633
630 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
634 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
631
635
632 * IPython/demo.py (Demo.__init__): added support for individually
636 * IPython/demo.py (Demo.__init__): added support for individually
633 tagging blocks for automatic execution.
637 tagging blocks for automatic execution.
634
638
635 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
639 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
636 syntax-highlighted python sources, requested by John.
640 syntax-highlighted python sources, requested by John.
637
641
638 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
642 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
639
643
640 * IPython/demo.py (Demo.again): fix bug where again() blocks after
644 * IPython/demo.py (Demo.again): fix bug where again() blocks after
641 finishing.
645 finishing.
642
646
643 * IPython/genutils.py (shlex_split): moved from Magic to here,
647 * IPython/genutils.py (shlex_split): moved from Magic to here,
644 where all 2.2 compatibility stuff lives. I needed it for demo.py.
648 where all 2.2 compatibility stuff lives. I needed it for demo.py.
645
649
646 * IPython/demo.py (Demo.__init__): added support for silent
650 * IPython/demo.py (Demo.__init__): added support for silent
647 blocks, improved marks as regexps, docstrings written.
651 blocks, improved marks as regexps, docstrings written.
648 (Demo.__init__): better docstring, added support for sys.argv.
652 (Demo.__init__): better docstring, added support for sys.argv.
649
653
650 * IPython/genutils.py (marquee): little utility used by the demo
654 * IPython/genutils.py (marquee): little utility used by the demo
651 code, handy in general.
655 code, handy in general.
652
656
653 * IPython/demo.py (Demo.__init__): new class for interactive
657 * IPython/demo.py (Demo.__init__): new class for interactive
654 demos. Not documented yet, I just wrote it in a hurry for
658 demos. Not documented yet, I just wrote it in a hurry for
655 scipy'05. Will docstring later.
659 scipy'05. Will docstring later.
656
660
657 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
661 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
658
662
659 * IPython/Shell.py (sigint_handler): Drastic simplification which
663 * IPython/Shell.py (sigint_handler): Drastic simplification which
660 also seems to make Ctrl-C work correctly across threads! This is
664 also seems to make Ctrl-C work correctly across threads! This is
661 so simple, that I can't beleive I'd missed it before. Needs more
665 so simple, that I can't beleive I'd missed it before. Needs more
662 testing, though.
666 testing, though.
663 (KBINT): Never mind, revert changes. I'm sure I'd tried something
667 (KBINT): Never mind, revert changes. I'm sure I'd tried something
664 like this before...
668 like this before...
665
669
666 * IPython/genutils.py (get_home_dir): add protection against
670 * IPython/genutils.py (get_home_dir): add protection against
667 non-dirs in win32 registry.
671 non-dirs in win32 registry.
668
672
669 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
673 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
670 bug where dict was mutated while iterating (pysh crash).
674 bug where dict was mutated while iterating (pysh crash).
671
675
672 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
676 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
673
677
674 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
678 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
675 spurious newlines added by this routine. After a report by
679 spurious newlines added by this routine. After a report by
676 F. Mantegazza.
680 F. Mantegazza.
677
681
678 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
682 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
679
683
680 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
684 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
681 calls. These were a leftover from the GTK 1.x days, and can cause
685 calls. These were a leftover from the GTK 1.x days, and can cause
682 problems in certain cases (after a report by John Hunter).
686 problems in certain cases (after a report by John Hunter).
683
687
684 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
688 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
685 os.getcwd() fails at init time. Thanks to patch from David Remahl
689 os.getcwd() fails at init time. Thanks to patch from David Remahl
686 <chmod007-AT-mac.com>.
690 <chmod007-AT-mac.com>.
687 (InteractiveShell.__init__): prevent certain special magics from
691 (InteractiveShell.__init__): prevent certain special magics from
688 being shadowed by aliases. Closes
692 being shadowed by aliases. Closes
689 http://www.scipy.net/roundup/ipython/issue41.
693 http://www.scipy.net/roundup/ipython/issue41.
690
694
691 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
695 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
692
696
693 * IPython/iplib.py (InteractiveShell.complete): Added new
697 * IPython/iplib.py (InteractiveShell.complete): Added new
694 top-level completion method to expose the completion mechanism
698 top-level completion method to expose the completion mechanism
695 beyond readline-based environments.
699 beyond readline-based environments.
696
700
697 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
701 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
698
702
699 * tools/ipsvnc (svnversion): fix svnversion capture.
703 * tools/ipsvnc (svnversion): fix svnversion capture.
700
704
701 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
705 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
702 attribute to self, which was missing. Before, it was set by a
706 attribute to self, which was missing. Before, it was set by a
703 routine which in certain cases wasn't being called, so the
707 routine which in certain cases wasn't being called, so the
704 instance could end up missing the attribute. This caused a crash.
708 instance could end up missing the attribute. This caused a crash.
705 Closes http://www.scipy.net/roundup/ipython/issue40.
709 Closes http://www.scipy.net/roundup/ipython/issue40.
706
710
707 2005-08-16 Fernando Perez <fperez@colorado.edu>
711 2005-08-16 Fernando Perez <fperez@colorado.edu>
708
712
709 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
713 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
710 contains non-string attribute. Closes
714 contains non-string attribute. Closes
711 http://www.scipy.net/roundup/ipython/issue38.
715 http://www.scipy.net/roundup/ipython/issue38.
712
716
713 2005-08-14 Fernando Perez <fperez@colorado.edu>
717 2005-08-14 Fernando Perez <fperez@colorado.edu>
714
718
715 * tools/ipsvnc: Minor improvements, to add changeset info.
719 * tools/ipsvnc: Minor improvements, to add changeset info.
716
720
717 2005-08-12 Fernando Perez <fperez@colorado.edu>
721 2005-08-12 Fernando Perez <fperez@colorado.edu>
718
722
719 * IPython/iplib.py (runsource): remove self.code_to_run_src
723 * IPython/iplib.py (runsource): remove self.code_to_run_src
720 attribute. I realized this is nothing more than
724 attribute. I realized this is nothing more than
721 '\n'.join(self.buffer), and having the same data in two different
725 '\n'.join(self.buffer), and having the same data in two different
722 places is just asking for synchronization bugs. This may impact
726 places is just asking for synchronization bugs. This may impact
723 people who have custom exception handlers, so I need to warn
727 people who have custom exception handlers, so I need to warn
724 ipython-dev about it (F. Mantegazza may use them).
728 ipython-dev about it (F. Mantegazza may use them).
725
729
726 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
730 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
727
731
728 * IPython/genutils.py: fix 2.2 compatibility (generators)
732 * IPython/genutils.py: fix 2.2 compatibility (generators)
729
733
730 2005-07-18 Fernando Perez <fperez@colorado.edu>
734 2005-07-18 Fernando Perez <fperez@colorado.edu>
731
735
732 * IPython/genutils.py (get_home_dir): fix to help users with
736 * IPython/genutils.py (get_home_dir): fix to help users with
733 invalid $HOME under win32.
737 invalid $HOME under win32.
734
738
735 2005-07-17 Fernando Perez <fperez@colorado.edu>
739 2005-07-17 Fernando Perez <fperez@colorado.edu>
736
740
737 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
741 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
738 some old hacks and clean up a bit other routines; code should be
742 some old hacks and clean up a bit other routines; code should be
739 simpler and a bit faster.
743 simpler and a bit faster.
740
744
741 * IPython/iplib.py (interact): removed some last-resort attempts
745 * IPython/iplib.py (interact): removed some last-resort attempts
742 to survive broken stdout/stderr. That code was only making it
746 to survive broken stdout/stderr. That code was only making it
743 harder to abstract out the i/o (necessary for gui integration),
747 harder to abstract out the i/o (necessary for gui integration),
744 and the crashes it could prevent were extremely rare in practice
748 and the crashes it could prevent were extremely rare in practice
745 (besides being fully user-induced in a pretty violent manner).
749 (besides being fully user-induced in a pretty violent manner).
746
750
747 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
751 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
748 Nothing major yet, but the code is simpler to read; this should
752 Nothing major yet, but the code is simpler to read; this should
749 make it easier to do more serious modifications in the future.
753 make it easier to do more serious modifications in the future.
750
754
751 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
755 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
752 which broke in .15 (thanks to a report by Ville).
756 which broke in .15 (thanks to a report by Ville).
753
757
754 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
758 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
755 be quite correct, I know next to nothing about unicode). This
759 be quite correct, I know next to nothing about unicode). This
756 will allow unicode strings to be used in prompts, amongst other
760 will allow unicode strings to be used in prompts, amongst other
757 cases. It also will prevent ipython from crashing when unicode
761 cases. It also will prevent ipython from crashing when unicode
758 shows up unexpectedly in many places. If ascii encoding fails, we
762 shows up unexpectedly in many places. If ascii encoding fails, we
759 assume utf_8. Currently the encoding is not a user-visible
763 assume utf_8. Currently the encoding is not a user-visible
760 setting, though it could be made so if there is demand for it.
764 setting, though it could be made so if there is demand for it.
761
765
762 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
766 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
763
767
764 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
768 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
765
769
766 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
770 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
767
771
768 * IPython/genutils.py: Add 2.2 compatibility here, so all other
772 * IPython/genutils.py: Add 2.2 compatibility here, so all other
769 code can work transparently for 2.2/2.3.
773 code can work transparently for 2.2/2.3.
770
774
771 2005-07-16 Fernando Perez <fperez@colorado.edu>
775 2005-07-16 Fernando Perez <fperez@colorado.edu>
772
776
773 * IPython/ultraTB.py (ExceptionColors): Make a global variable
777 * IPython/ultraTB.py (ExceptionColors): Make a global variable
774 out of the color scheme table used for coloring exception
778 out of the color scheme table used for coloring exception
775 tracebacks. This allows user code to add new schemes at runtime.
779 tracebacks. This allows user code to add new schemes at runtime.
776 This is a minimally modified version of the patch at
780 This is a minimally modified version of the patch at
777 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
781 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
778 for the contribution.
782 for the contribution.
779
783
780 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
784 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
781 slightly modified version of the patch in
785 slightly modified version of the patch in
782 http://www.scipy.net/roundup/ipython/issue34, which also allows me
786 http://www.scipy.net/roundup/ipython/issue34, which also allows me
783 to remove the previous try/except solution (which was costlier).
787 to remove the previous try/except solution (which was costlier).
784 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
788 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
785
789
786 2005-06-08 Fernando Perez <fperez@colorado.edu>
790 2005-06-08 Fernando Perez <fperez@colorado.edu>
787
791
788 * IPython/iplib.py (write/write_err): Add methods to abstract all
792 * IPython/iplib.py (write/write_err): Add methods to abstract all
789 I/O a bit more.
793 I/O a bit more.
790
794
791 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
795 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
792 warning, reported by Aric Hagberg, fix by JD Hunter.
796 warning, reported by Aric Hagberg, fix by JD Hunter.
793
797
794 2005-06-02 *** Released version 0.6.15
798 2005-06-02 *** Released version 0.6.15
795
799
796 2005-06-01 Fernando Perez <fperez@colorado.edu>
800 2005-06-01 Fernando Perez <fperez@colorado.edu>
797
801
798 * IPython/iplib.py (MagicCompleter.file_matches): Fix
802 * IPython/iplib.py (MagicCompleter.file_matches): Fix
799 tab-completion of filenames within open-quoted strings. Note that
803 tab-completion of filenames within open-quoted strings. Note that
800 this requires that in ~/.ipython/ipythonrc, users change the
804 this requires that in ~/.ipython/ipythonrc, users change the
801 readline delimiters configuration to read:
805 readline delimiters configuration to read:
802
806
803 readline_remove_delims -/~
807 readline_remove_delims -/~
804
808
805
809
806 2005-05-31 *** Released version 0.6.14
810 2005-05-31 *** Released version 0.6.14
807
811
808 2005-05-29 Fernando Perez <fperez@colorado.edu>
812 2005-05-29 Fernando Perez <fperez@colorado.edu>
809
813
810 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
814 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
811 with files not on the filesystem. Reported by Eliyahu Sandler
815 with files not on the filesystem. Reported by Eliyahu Sandler
812 <eli@gondolin.net>
816 <eli@gondolin.net>
813
817
814 2005-05-22 Fernando Perez <fperez@colorado.edu>
818 2005-05-22 Fernando Perez <fperez@colorado.edu>
815
819
816 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
820 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
817 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
821 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
818
822
819 2005-05-19 Fernando Perez <fperez@colorado.edu>
823 2005-05-19 Fernando Perez <fperez@colorado.edu>
820
824
821 * IPython/iplib.py (safe_execfile): close a file which could be
825 * IPython/iplib.py (safe_execfile): close a file which could be
822 left open (causing problems in win32, which locks open files).
826 left open (causing problems in win32, which locks open files).
823 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
827 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
824
828
825 2005-05-18 Fernando Perez <fperez@colorado.edu>
829 2005-05-18 Fernando Perez <fperez@colorado.edu>
826
830
827 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
831 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
828 keyword arguments correctly to safe_execfile().
832 keyword arguments correctly to safe_execfile().
829
833
830 2005-05-13 Fernando Perez <fperez@colorado.edu>
834 2005-05-13 Fernando Perez <fperez@colorado.edu>
831
835
832 * ipython.1: Added info about Qt to manpage, and threads warning
836 * ipython.1: Added info about Qt to manpage, and threads warning
833 to usage page (invoked with --help).
837 to usage page (invoked with --help).
834
838
835 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
839 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
836 new matcher (it goes at the end of the priority list) to do
840 new matcher (it goes at the end of the priority list) to do
837 tab-completion on named function arguments. Submitted by George
841 tab-completion on named function arguments. Submitted by George
838 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
842 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
839 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
843 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
840 for more details.
844 for more details.
841
845
842 * IPython/Magic.py (magic_run): Added new -e flag to ignore
846 * IPython/Magic.py (magic_run): Added new -e flag to ignore
843 SystemExit exceptions in the script being run. Thanks to a report
847 SystemExit exceptions in the script being run. Thanks to a report
844 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
848 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
845 producing very annoying behavior when running unit tests.
849 producing very annoying behavior when running unit tests.
846
850
847 2005-05-12 Fernando Perez <fperez@colorado.edu>
851 2005-05-12 Fernando Perez <fperez@colorado.edu>
848
852
849 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
853 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
850 which I'd broken (again) due to a changed regexp. In the process,
854 which I'd broken (again) due to a changed regexp. In the process,
851 added ';' as an escape to auto-quote the whole line without
855 added ';' as an escape to auto-quote the whole line without
852 splitting its arguments. Thanks to a report by Jerry McRae
856 splitting its arguments. Thanks to a report by Jerry McRae
853 <qrs0xyc02-AT-sneakemail.com>.
857 <qrs0xyc02-AT-sneakemail.com>.
854
858
855 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
859 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
856 possible crashes caused by a TokenError. Reported by Ed Schofield
860 possible crashes caused by a TokenError. Reported by Ed Schofield
857 <schofield-AT-ftw.at>.
861 <schofield-AT-ftw.at>.
858
862
859 2005-05-06 Fernando Perez <fperez@colorado.edu>
863 2005-05-06 Fernando Perez <fperez@colorado.edu>
860
864
861 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
865 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
862
866
863 2005-04-29 Fernando Perez <fperez@colorado.edu>
867 2005-04-29 Fernando Perez <fperez@colorado.edu>
864
868
865 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
869 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
866 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
870 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
867 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
871 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
868 which provides support for Qt interactive usage (similar to the
872 which provides support for Qt interactive usage (similar to the
869 existing one for WX and GTK). This had been often requested.
873 existing one for WX and GTK). This had been often requested.
870
874
871 2005-04-14 *** Released version 0.6.13
875 2005-04-14 *** Released version 0.6.13
872
876
873 2005-04-08 Fernando Perez <fperez@colorado.edu>
877 2005-04-08 Fernando Perez <fperez@colorado.edu>
874
878
875 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
879 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
876 from _ofind, which gets called on almost every input line. Now,
880 from _ofind, which gets called on almost every input line. Now,
877 we only try to get docstrings if they are actually going to be
881 we only try to get docstrings if they are actually going to be
878 used (the overhead of fetching unnecessary docstrings can be
882 used (the overhead of fetching unnecessary docstrings can be
879 noticeable for certain objects, such as Pyro proxies).
883 noticeable for certain objects, such as Pyro proxies).
880
884
881 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
885 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
882 for completers. For some reason I had been passing them the state
886 for completers. For some reason I had been passing them the state
883 variable, which completers never actually need, and was in
887 variable, which completers never actually need, and was in
884 conflict with the rlcompleter API. Custom completers ONLY need to
888 conflict with the rlcompleter API. Custom completers ONLY need to
885 take the text parameter.
889 take the text parameter.
886
890
887 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
891 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
888 work correctly in pysh. I've also moved all the logic which used
892 work correctly in pysh. I've also moved all the logic which used
889 to be in pysh.py here, which will prevent problems with future
893 to be in pysh.py here, which will prevent problems with future
890 upgrades. However, this time I must warn users to update their
894 upgrades. However, this time I must warn users to update their
891 pysh profile to include the line
895 pysh profile to include the line
892
896
893 import_all IPython.Extensions.InterpreterExec
897 import_all IPython.Extensions.InterpreterExec
894
898
895 because otherwise things won't work for them. They MUST also
899 because otherwise things won't work for them. They MUST also
896 delete pysh.py and the line
900 delete pysh.py and the line
897
901
898 execfile pysh.py
902 execfile pysh.py
899
903
900 from their ipythonrc-pysh.
904 from their ipythonrc-pysh.
901
905
902 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
906 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
903 robust in the face of objects whose dir() returns non-strings
907 robust in the face of objects whose dir() returns non-strings
904 (which it shouldn't, but some broken libs like ITK do). Thanks to
908 (which it shouldn't, but some broken libs like ITK do). Thanks to
905 a patch by John Hunter (implemented differently, though). Also
909 a patch by John Hunter (implemented differently, though). Also
906 minor improvements by using .extend instead of + on lists.
910 minor improvements by using .extend instead of + on lists.
907
911
908 * pysh.py:
912 * pysh.py:
909
913
910 2005-04-06 Fernando Perez <fperez@colorado.edu>
914 2005-04-06 Fernando Perez <fperez@colorado.edu>
911
915
912 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
916 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
913 by default, so that all users benefit from it. Those who don't
917 by default, so that all users benefit from it. Those who don't
914 want it can still turn it off.
918 want it can still turn it off.
915
919
916 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
920 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
917 config file, I'd forgotten about this, so users were getting it
921 config file, I'd forgotten about this, so users were getting it
918 off by default.
922 off by default.
919
923
920 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
924 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
921 consistency. Now magics can be called in multiline statements,
925 consistency. Now magics can be called in multiline statements,
922 and python variables can be expanded in magic calls via $var.
926 and python variables can be expanded in magic calls via $var.
923 This makes the magic system behave just like aliases or !system
927 This makes the magic system behave just like aliases or !system
924 calls.
928 calls.
925
929
926 2005-03-28 Fernando Perez <fperez@colorado.edu>
930 2005-03-28 Fernando Perez <fperez@colorado.edu>
927
931
928 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
932 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
929 expensive string additions for building command. Add support for
933 expensive string additions for building command. Add support for
930 trailing ';' when autocall is used.
934 trailing ';' when autocall is used.
931
935
932 2005-03-26 Fernando Perez <fperez@colorado.edu>
936 2005-03-26 Fernando Perez <fperez@colorado.edu>
933
937
934 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
938 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
935 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
939 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
936 ipython.el robust against prompts with any number of spaces
940 ipython.el robust against prompts with any number of spaces
937 (including 0) after the ':' character.
941 (including 0) after the ':' character.
938
942
939 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
943 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
940 continuation prompt, which misled users to think the line was
944 continuation prompt, which misled users to think the line was
941 already indented. Closes debian Bug#300847, reported to me by
945 already indented. Closes debian Bug#300847, reported to me by
942 Norbert Tretkowski <tretkowski-AT-inittab.de>.
946 Norbert Tretkowski <tretkowski-AT-inittab.de>.
943
947
944 2005-03-23 Fernando Perez <fperez@colorado.edu>
948 2005-03-23 Fernando Perez <fperez@colorado.edu>
945
949
946 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
950 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
947 properly aligned if they have embedded newlines.
951 properly aligned if they have embedded newlines.
948
952
949 * IPython/iplib.py (runlines): Add a public method to expose
953 * IPython/iplib.py (runlines): Add a public method to expose
950 IPython's code execution machinery, so that users can run strings
954 IPython's code execution machinery, so that users can run strings
951 as if they had been typed at the prompt interactively.
955 as if they had been typed at the prompt interactively.
952 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
956 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
953 methods which can call the system shell, but with python variable
957 methods which can call the system shell, but with python variable
954 expansion. The three such methods are: __IPYTHON__.system,
958 expansion. The three such methods are: __IPYTHON__.system,
955 .getoutput and .getoutputerror. These need to be documented in a
959 .getoutput and .getoutputerror. These need to be documented in a
956 'public API' section (to be written) of the manual.
960 'public API' section (to be written) of the manual.
957
961
958 2005-03-20 Fernando Perez <fperez@colorado.edu>
962 2005-03-20 Fernando Perez <fperez@colorado.edu>
959
963
960 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
964 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
961 for custom exception handling. This is quite powerful, and it
965 for custom exception handling. This is quite powerful, and it
962 allows for user-installable exception handlers which can trap
966 allows for user-installable exception handlers which can trap
963 custom exceptions at runtime and treat them separately from
967 custom exceptions at runtime and treat them separately from
964 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
968 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
965 Mantegazza <mantegazza-AT-ill.fr>.
969 Mantegazza <mantegazza-AT-ill.fr>.
966 (InteractiveShell.set_custom_completer): public API function to
970 (InteractiveShell.set_custom_completer): public API function to
967 add new completers at runtime.
971 add new completers at runtime.
968
972
969 2005-03-19 Fernando Perez <fperez@colorado.edu>
973 2005-03-19 Fernando Perez <fperez@colorado.edu>
970
974
971 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
975 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
972 allow objects which provide their docstrings via non-standard
976 allow objects which provide their docstrings via non-standard
973 mechanisms (like Pyro proxies) to still be inspected by ipython's
977 mechanisms (like Pyro proxies) to still be inspected by ipython's
974 ? system.
978 ? system.
975
979
976 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
980 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
977 automatic capture system. I tried quite hard to make it work
981 automatic capture system. I tried quite hard to make it work
978 reliably, and simply failed. I tried many combinations with the
982 reliably, and simply failed. I tried many combinations with the
979 subprocess module, but eventually nothing worked in all needed
983 subprocess module, but eventually nothing worked in all needed
980 cases (not blocking stdin for the child, duplicating stdout
984 cases (not blocking stdin for the child, duplicating stdout
981 without blocking, etc). The new %sc/%sx still do capture to these
985 without blocking, etc). The new %sc/%sx still do capture to these
982 magical list/string objects which make shell use much more
986 magical list/string objects which make shell use much more
983 conveninent, so not all is lost.
987 conveninent, so not all is lost.
984
988
985 XXX - FIX MANUAL for the change above!
989 XXX - FIX MANUAL for the change above!
986
990
987 (runsource): I copied code.py's runsource() into ipython to modify
991 (runsource): I copied code.py's runsource() into ipython to modify
988 it a bit. Now the code object and source to be executed are
992 it a bit. Now the code object and source to be executed are
989 stored in ipython. This makes this info accessible to third-party
993 stored in ipython. This makes this info accessible to third-party
990 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
994 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
991 Mantegazza <mantegazza-AT-ill.fr>.
995 Mantegazza <mantegazza-AT-ill.fr>.
992
996
993 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
997 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
994 history-search via readline (like C-p/C-n). I'd wanted this for a
998 history-search via readline (like C-p/C-n). I'd wanted this for a
995 long time, but only recently found out how to do it. For users
999 long time, but only recently found out how to do it. For users
996 who already have their ipythonrc files made and want this, just
1000 who already have their ipythonrc files made and want this, just
997 add:
1001 add:
998
1002
999 readline_parse_and_bind "\e[A": history-search-backward
1003 readline_parse_and_bind "\e[A": history-search-backward
1000 readline_parse_and_bind "\e[B": history-search-forward
1004 readline_parse_and_bind "\e[B": history-search-forward
1001
1005
1002 2005-03-18 Fernando Perez <fperez@colorado.edu>
1006 2005-03-18 Fernando Perez <fperez@colorado.edu>
1003
1007
1004 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1008 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1005 LSString and SList classes which allow transparent conversions
1009 LSString and SList classes which allow transparent conversions
1006 between list mode and whitespace-separated string.
1010 between list mode and whitespace-separated string.
1007 (magic_r): Fix recursion problem in %r.
1011 (magic_r): Fix recursion problem in %r.
1008
1012
1009 * IPython/genutils.py (LSString): New class to be used for
1013 * IPython/genutils.py (LSString): New class to be used for
1010 automatic storage of the results of all alias/system calls in _o
1014 automatic storage of the results of all alias/system calls in _o
1011 and _e (stdout/err). These provide a .l/.list attribute which
1015 and _e (stdout/err). These provide a .l/.list attribute which
1012 does automatic splitting on newlines. This means that for most
1016 does automatic splitting on newlines. This means that for most
1013 uses, you'll never need to do capturing of output with %sc/%sx
1017 uses, you'll never need to do capturing of output with %sc/%sx
1014 anymore, since ipython keeps this always done for you. Note that
1018 anymore, since ipython keeps this always done for you. Note that
1015 only the LAST results are stored, the _o/e variables are
1019 only the LAST results are stored, the _o/e variables are
1016 overwritten on each call. If you need to save their contents
1020 overwritten on each call. If you need to save their contents
1017 further, simply bind them to any other name.
1021 further, simply bind them to any other name.
1018
1022
1019 2005-03-17 Fernando Perez <fperez@colorado.edu>
1023 2005-03-17 Fernando Perez <fperez@colorado.edu>
1020
1024
1021 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1025 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1022 prompt namespace handling.
1026 prompt namespace handling.
1023
1027
1024 2005-03-16 Fernando Perez <fperez@colorado.edu>
1028 2005-03-16 Fernando Perez <fperez@colorado.edu>
1025
1029
1026 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1030 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1027 classic prompts to be '>>> ' (final space was missing, and it
1031 classic prompts to be '>>> ' (final space was missing, and it
1028 trips the emacs python mode).
1032 trips the emacs python mode).
1029 (BasePrompt.__str__): Added safe support for dynamic prompt
1033 (BasePrompt.__str__): Added safe support for dynamic prompt
1030 strings. Now you can set your prompt string to be '$x', and the
1034 strings. Now you can set your prompt string to be '$x', and the
1031 value of x will be printed from your interactive namespace. The
1035 value of x will be printed from your interactive namespace. The
1032 interpolation syntax includes the full Itpl support, so
1036 interpolation syntax includes the full Itpl support, so
1033 ${foo()+x+bar()} is a valid prompt string now, and the function
1037 ${foo()+x+bar()} is a valid prompt string now, and the function
1034 calls will be made at runtime.
1038 calls will be made at runtime.
1035
1039
1036 2005-03-15 Fernando Perez <fperez@colorado.edu>
1040 2005-03-15 Fernando Perez <fperez@colorado.edu>
1037
1041
1038 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1042 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1039 avoid name clashes in pylab. %hist still works, it just forwards
1043 avoid name clashes in pylab. %hist still works, it just forwards
1040 the call to %history.
1044 the call to %history.
1041
1045
1042 2005-03-02 *** Released version 0.6.12
1046 2005-03-02 *** Released version 0.6.12
1043
1047
1044 2005-03-02 Fernando Perez <fperez@colorado.edu>
1048 2005-03-02 Fernando Perez <fperez@colorado.edu>
1045
1049
1046 * IPython/iplib.py (handle_magic): log magic calls properly as
1050 * IPython/iplib.py (handle_magic): log magic calls properly as
1047 ipmagic() function calls.
1051 ipmagic() function calls.
1048
1052
1049 * IPython/Magic.py (magic_time): Improved %time to support
1053 * IPython/Magic.py (magic_time): Improved %time to support
1050 statements and provide wall-clock as well as CPU time.
1054 statements and provide wall-clock as well as CPU time.
1051
1055
1052 2005-02-27 Fernando Perez <fperez@colorado.edu>
1056 2005-02-27 Fernando Perez <fperez@colorado.edu>
1053
1057
1054 * IPython/hooks.py: New hooks module, to expose user-modifiable
1058 * IPython/hooks.py: New hooks module, to expose user-modifiable
1055 IPython functionality in a clean manner. For now only the editor
1059 IPython functionality in a clean manner. For now only the editor
1056 hook is actually written, and other thigns which I intend to turn
1060 hook is actually written, and other thigns which I intend to turn
1057 into proper hooks aren't yet there. The display and prefilter
1061 into proper hooks aren't yet there. The display and prefilter
1058 stuff, for example, should be hooks. But at least now the
1062 stuff, for example, should be hooks. But at least now the
1059 framework is in place, and the rest can be moved here with more
1063 framework is in place, and the rest can be moved here with more
1060 time later. IPython had had a .hooks variable for a long time for
1064 time later. IPython had had a .hooks variable for a long time for
1061 this purpose, but I'd never actually used it for anything.
1065 this purpose, but I'd never actually used it for anything.
1062
1066
1063 2005-02-26 Fernando Perez <fperez@colorado.edu>
1067 2005-02-26 Fernando Perez <fperez@colorado.edu>
1064
1068
1065 * IPython/ipmaker.py (make_IPython): make the default ipython
1069 * IPython/ipmaker.py (make_IPython): make the default ipython
1066 directory be called _ipython under win32, to follow more the
1070 directory be called _ipython under win32, to follow more the
1067 naming peculiarities of that platform (where buggy software like
1071 naming peculiarities of that platform (where buggy software like
1068 Visual Sourcesafe breaks with .named directories). Reported by
1072 Visual Sourcesafe breaks with .named directories). Reported by
1069 Ville Vainio.
1073 Ville Vainio.
1070
1074
1071 2005-02-23 Fernando Perez <fperez@colorado.edu>
1075 2005-02-23 Fernando Perez <fperez@colorado.edu>
1072
1076
1073 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1077 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1074 auto_aliases for win32 which were causing problems. Users can
1078 auto_aliases for win32 which were causing problems. Users can
1075 define the ones they personally like.
1079 define the ones they personally like.
1076
1080
1077 2005-02-21 Fernando Perez <fperez@colorado.edu>
1081 2005-02-21 Fernando Perez <fperez@colorado.edu>
1078
1082
1079 * IPython/Magic.py (magic_time): new magic to time execution of
1083 * IPython/Magic.py (magic_time): new magic to time execution of
1080 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1084 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1081
1085
1082 2005-02-19 Fernando Perez <fperez@colorado.edu>
1086 2005-02-19 Fernando Perez <fperez@colorado.edu>
1083
1087
1084 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1088 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1085 into keys (for prompts, for example).
1089 into keys (for prompts, for example).
1086
1090
1087 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1091 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1088 prompts in case users want them. This introduces a small behavior
1092 prompts in case users want them. This introduces a small behavior
1089 change: ipython does not automatically add a space to all prompts
1093 change: ipython does not automatically add a space to all prompts
1090 anymore. To get the old prompts with a space, users should add it
1094 anymore. To get the old prompts with a space, users should add it
1091 manually to their ipythonrc file, so for example prompt_in1 should
1095 manually to their ipythonrc file, so for example prompt_in1 should
1092 now read 'In [\#]: ' instead of 'In [\#]:'.
1096 now read 'In [\#]: ' instead of 'In [\#]:'.
1093 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1097 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1094 file) to control left-padding of secondary prompts.
1098 file) to control left-padding of secondary prompts.
1095
1099
1096 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1100 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1097 the profiler can't be imported. Fix for Debian, which removed
1101 the profiler can't be imported. Fix for Debian, which removed
1098 profile.py because of License issues. I applied a slightly
1102 profile.py because of License issues. I applied a slightly
1099 modified version of the original Debian patch at
1103 modified version of the original Debian patch at
1100 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1104 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1101
1105
1102 2005-02-17 Fernando Perez <fperez@colorado.edu>
1106 2005-02-17 Fernando Perez <fperez@colorado.edu>
1103
1107
1104 * IPython/genutils.py (native_line_ends): Fix bug which would
1108 * IPython/genutils.py (native_line_ends): Fix bug which would
1105 cause improper line-ends under win32 b/c I was not opening files
1109 cause improper line-ends under win32 b/c I was not opening files
1106 in binary mode. Bug report and fix thanks to Ville.
1110 in binary mode. Bug report and fix thanks to Ville.
1107
1111
1108 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1112 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1109 trying to catch spurious foo[1] autocalls. My fix actually broke
1113 trying to catch spurious foo[1] autocalls. My fix actually broke
1110 ',/' autoquote/call with explicit escape (bad regexp).
1114 ',/' autoquote/call with explicit escape (bad regexp).
1111
1115
1112 2005-02-15 *** Released version 0.6.11
1116 2005-02-15 *** Released version 0.6.11
1113
1117
1114 2005-02-14 Fernando Perez <fperez@colorado.edu>
1118 2005-02-14 Fernando Perez <fperez@colorado.edu>
1115
1119
1116 * IPython/background_jobs.py: New background job management
1120 * IPython/background_jobs.py: New background job management
1117 subsystem. This is implemented via a new set of classes, and
1121 subsystem. This is implemented via a new set of classes, and
1118 IPython now provides a builtin 'jobs' object for background job
1122 IPython now provides a builtin 'jobs' object for background job
1119 execution. A convenience %bg magic serves as a lightweight
1123 execution. A convenience %bg magic serves as a lightweight
1120 frontend for starting the more common type of calls. This was
1124 frontend for starting the more common type of calls. This was
1121 inspired by discussions with B. Granger and the BackgroundCommand
1125 inspired by discussions with B. Granger and the BackgroundCommand
1122 class described in the book Python Scripting for Computational
1126 class described in the book Python Scripting for Computational
1123 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1127 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1124 (although ultimately no code from this text was used, as IPython's
1128 (although ultimately no code from this text was used, as IPython's
1125 system is a separate implementation).
1129 system is a separate implementation).
1126
1130
1127 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1131 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1128 to control the completion of single/double underscore names
1132 to control the completion of single/double underscore names
1129 separately. As documented in the example ipytonrc file, the
1133 separately. As documented in the example ipytonrc file, the
1130 readline_omit__names variable can now be set to 2, to omit even
1134 readline_omit__names variable can now be set to 2, to omit even
1131 single underscore names. Thanks to a patch by Brian Wong
1135 single underscore names. Thanks to a patch by Brian Wong
1132 <BrianWong-AT-AirgoNetworks.Com>.
1136 <BrianWong-AT-AirgoNetworks.Com>.
1133 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1137 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1134 be autocalled as foo([1]) if foo were callable. A problem for
1138 be autocalled as foo([1]) if foo were callable. A problem for
1135 things which are both callable and implement __getitem__.
1139 things which are both callable and implement __getitem__.
1136 (init_readline): Fix autoindentation for win32. Thanks to a patch
1140 (init_readline): Fix autoindentation for win32. Thanks to a patch
1137 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1141 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1138
1142
1139 2005-02-12 Fernando Perez <fperez@colorado.edu>
1143 2005-02-12 Fernando Perez <fperez@colorado.edu>
1140
1144
1141 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1145 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1142 which I had written long ago to sort out user error messages which
1146 which I had written long ago to sort out user error messages which
1143 may occur during startup. This seemed like a good idea initially,
1147 may occur during startup. This seemed like a good idea initially,
1144 but it has proven a disaster in retrospect. I don't want to
1148 but it has proven a disaster in retrospect. I don't want to
1145 change much code for now, so my fix is to set the internal 'debug'
1149 change much code for now, so my fix is to set the internal 'debug'
1146 flag to true everywhere, whose only job was precisely to control
1150 flag to true everywhere, whose only job was precisely to control
1147 this subsystem. This closes issue 28 (as well as avoiding all
1151 this subsystem. This closes issue 28 (as well as avoiding all
1148 sorts of strange hangups which occur from time to time).
1152 sorts of strange hangups which occur from time to time).
1149
1153
1150 2005-02-07 Fernando Perez <fperez@colorado.edu>
1154 2005-02-07 Fernando Perez <fperez@colorado.edu>
1151
1155
1152 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1156 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1153 previous call produced a syntax error.
1157 previous call produced a syntax error.
1154
1158
1155 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1159 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1156 classes without constructor.
1160 classes without constructor.
1157
1161
1158 2005-02-06 Fernando Perez <fperez@colorado.edu>
1162 2005-02-06 Fernando Perez <fperez@colorado.edu>
1159
1163
1160 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1164 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1161 completions with the results of each matcher, so we return results
1165 completions with the results of each matcher, so we return results
1162 to the user from all namespaces. This breaks with ipython
1166 to the user from all namespaces. This breaks with ipython
1163 tradition, but I think it's a nicer behavior. Now you get all
1167 tradition, but I think it's a nicer behavior. Now you get all
1164 possible completions listed, from all possible namespaces (python,
1168 possible completions listed, from all possible namespaces (python,
1165 filesystem, magics...) After a request by John Hunter
1169 filesystem, magics...) After a request by John Hunter
1166 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1170 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1167
1171
1168 2005-02-05 Fernando Perez <fperez@colorado.edu>
1172 2005-02-05 Fernando Perez <fperez@colorado.edu>
1169
1173
1170 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1174 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1171 the call had quote characters in it (the quotes were stripped).
1175 the call had quote characters in it (the quotes were stripped).
1172
1176
1173 2005-01-31 Fernando Perez <fperez@colorado.edu>
1177 2005-01-31 Fernando Perez <fperez@colorado.edu>
1174
1178
1175 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1179 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1176 Itpl.itpl() to make the code more robust against psyco
1180 Itpl.itpl() to make the code more robust against psyco
1177 optimizations.
1181 optimizations.
1178
1182
1179 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1183 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1180 of causing an exception. Quicker, cleaner.
1184 of causing an exception. Quicker, cleaner.
1181
1185
1182 2005-01-28 Fernando Perez <fperez@colorado.edu>
1186 2005-01-28 Fernando Perez <fperez@colorado.edu>
1183
1187
1184 * scripts/ipython_win_post_install.py (install): hardcode
1188 * scripts/ipython_win_post_install.py (install): hardcode
1185 sys.prefix+'python.exe' as the executable path. It turns out that
1189 sys.prefix+'python.exe' as the executable path. It turns out that
1186 during the post-installation run, sys.executable resolves to the
1190 during the post-installation run, sys.executable resolves to the
1187 name of the binary installer! I should report this as a distutils
1191 name of the binary installer! I should report this as a distutils
1188 bug, I think. I updated the .10 release with this tiny fix, to
1192 bug, I think. I updated the .10 release with this tiny fix, to
1189 avoid annoying the lists further.
1193 avoid annoying the lists further.
1190
1194
1191 2005-01-27 *** Released version 0.6.10
1195 2005-01-27 *** Released version 0.6.10
1192
1196
1193 2005-01-27 Fernando Perez <fperez@colorado.edu>
1197 2005-01-27 Fernando Perez <fperez@colorado.edu>
1194
1198
1195 * IPython/numutils.py (norm): Added 'inf' as optional name for
1199 * IPython/numutils.py (norm): Added 'inf' as optional name for
1196 L-infinity norm, included references to mathworld.com for vector
1200 L-infinity norm, included references to mathworld.com for vector
1197 norm definitions.
1201 norm definitions.
1198 (amin/amax): added amin/amax for array min/max. Similar to what
1202 (amin/amax): added amin/amax for array min/max. Similar to what
1199 pylab ships with after the recent reorganization of names.
1203 pylab ships with after the recent reorganization of names.
1200 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1204 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1201
1205
1202 * ipython.el: committed Alex's recent fixes and improvements.
1206 * ipython.el: committed Alex's recent fixes and improvements.
1203 Tested with python-mode from CVS, and it looks excellent. Since
1207 Tested with python-mode from CVS, and it looks excellent. Since
1204 python-mode hasn't released anything in a while, I'm temporarily
1208 python-mode hasn't released anything in a while, I'm temporarily
1205 putting a copy of today's CVS (v 4.70) of python-mode in:
1209 putting a copy of today's CVS (v 4.70) of python-mode in:
1206 http://ipython.scipy.org/tmp/python-mode.el
1210 http://ipython.scipy.org/tmp/python-mode.el
1207
1211
1208 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1212 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1209 sys.executable for the executable name, instead of assuming it's
1213 sys.executable for the executable name, instead of assuming it's
1210 called 'python.exe' (the post-installer would have produced broken
1214 called 'python.exe' (the post-installer would have produced broken
1211 setups on systems with a differently named python binary).
1215 setups on systems with a differently named python binary).
1212
1216
1213 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1217 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1214 references to os.linesep, to make the code more
1218 references to os.linesep, to make the code more
1215 platform-independent. This is also part of the win32 coloring
1219 platform-independent. This is also part of the win32 coloring
1216 fixes.
1220 fixes.
1217
1221
1218 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1222 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1219 lines, which actually cause coloring bugs because the length of
1223 lines, which actually cause coloring bugs because the length of
1220 the line is very difficult to correctly compute with embedded
1224 the line is very difficult to correctly compute with embedded
1221 escapes. This was the source of all the coloring problems under
1225 escapes. This was the source of all the coloring problems under
1222 Win32. I think that _finally_, Win32 users have a properly
1226 Win32. I think that _finally_, Win32 users have a properly
1223 working ipython in all respects. This would never have happened
1227 working ipython in all respects. This would never have happened
1224 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1228 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1225
1229
1226 2005-01-26 *** Released version 0.6.9
1230 2005-01-26 *** Released version 0.6.9
1227
1231
1228 2005-01-25 Fernando Perez <fperez@colorado.edu>
1232 2005-01-25 Fernando Perez <fperez@colorado.edu>
1229
1233
1230 * setup.py: finally, we have a true Windows installer, thanks to
1234 * setup.py: finally, we have a true Windows installer, thanks to
1231 the excellent work of Viktor Ransmayr
1235 the excellent work of Viktor Ransmayr
1232 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1236 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1233 Windows users. The setup routine is quite a bit cleaner thanks to
1237 Windows users. The setup routine is quite a bit cleaner thanks to
1234 this, and the post-install script uses the proper functions to
1238 this, and the post-install script uses the proper functions to
1235 allow a clean de-installation using the standard Windows Control
1239 allow a clean de-installation using the standard Windows Control
1236 Panel.
1240 Panel.
1237
1241
1238 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1242 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1239 environment variable under all OSes (including win32) if
1243 environment variable under all OSes (including win32) if
1240 available. This will give consistency to win32 users who have set
1244 available. This will give consistency to win32 users who have set
1241 this variable for any reason. If os.environ['HOME'] fails, the
1245 this variable for any reason. If os.environ['HOME'] fails, the
1242 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1246 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1243
1247
1244 2005-01-24 Fernando Perez <fperez@colorado.edu>
1248 2005-01-24 Fernando Perez <fperez@colorado.edu>
1245
1249
1246 * IPython/numutils.py (empty_like): add empty_like(), similar to
1250 * IPython/numutils.py (empty_like): add empty_like(), similar to
1247 zeros_like() but taking advantage of the new empty() Numeric routine.
1251 zeros_like() but taking advantage of the new empty() Numeric routine.
1248
1252
1249 2005-01-23 *** Released version 0.6.8
1253 2005-01-23 *** Released version 0.6.8
1250
1254
1251 2005-01-22 Fernando Perez <fperez@colorado.edu>
1255 2005-01-22 Fernando Perez <fperez@colorado.edu>
1252
1256
1253 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1257 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1254 automatic show() calls. After discussing things with JDH, it
1258 automatic show() calls. After discussing things with JDH, it
1255 turns out there are too many corner cases where this can go wrong.
1259 turns out there are too many corner cases where this can go wrong.
1256 It's best not to try to be 'too smart', and simply have ipython
1260 It's best not to try to be 'too smart', and simply have ipython
1257 reproduce as much as possible the default behavior of a normal
1261 reproduce as much as possible the default behavior of a normal
1258 python shell.
1262 python shell.
1259
1263
1260 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1264 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1261 line-splitting regexp and _prefilter() to avoid calling getattr()
1265 line-splitting regexp and _prefilter() to avoid calling getattr()
1262 on assignments. This closes
1266 on assignments. This closes
1263 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1267 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1264 readline uses getattr(), so a simple <TAB> keypress is still
1268 readline uses getattr(), so a simple <TAB> keypress is still
1265 enough to trigger getattr() calls on an object.
1269 enough to trigger getattr() calls on an object.
1266
1270
1267 2005-01-21 Fernando Perez <fperez@colorado.edu>
1271 2005-01-21 Fernando Perez <fperez@colorado.edu>
1268
1272
1269 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1273 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1270 docstring under pylab so it doesn't mask the original.
1274 docstring under pylab so it doesn't mask the original.
1271
1275
1272 2005-01-21 *** Released version 0.6.7
1276 2005-01-21 *** Released version 0.6.7
1273
1277
1274 2005-01-21 Fernando Perez <fperez@colorado.edu>
1278 2005-01-21 Fernando Perez <fperez@colorado.edu>
1275
1279
1276 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1280 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1277 signal handling for win32 users in multithreaded mode.
1281 signal handling for win32 users in multithreaded mode.
1278
1282
1279 2005-01-17 Fernando Perez <fperez@colorado.edu>
1283 2005-01-17 Fernando Perez <fperez@colorado.edu>
1280
1284
1281 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1285 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1282 instances with no __init__. After a crash report by Norbert Nemec
1286 instances with no __init__. After a crash report by Norbert Nemec
1283 <Norbert-AT-nemec-online.de>.
1287 <Norbert-AT-nemec-online.de>.
1284
1288
1285 2005-01-14 Fernando Perez <fperez@colorado.edu>
1289 2005-01-14 Fernando Perez <fperez@colorado.edu>
1286
1290
1287 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1291 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1288 names for verbose exceptions, when multiple dotted names and the
1292 names for verbose exceptions, when multiple dotted names and the
1289 'parent' object were present on the same line.
1293 'parent' object were present on the same line.
1290
1294
1291 2005-01-11 Fernando Perez <fperez@colorado.edu>
1295 2005-01-11 Fernando Perez <fperez@colorado.edu>
1292
1296
1293 * IPython/genutils.py (flag_calls): new utility to trap and flag
1297 * IPython/genutils.py (flag_calls): new utility to trap and flag
1294 calls in functions. I need it to clean up matplotlib support.
1298 calls in functions. I need it to clean up matplotlib support.
1295 Also removed some deprecated code in genutils.
1299 Also removed some deprecated code in genutils.
1296
1300
1297 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1301 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1298 that matplotlib scripts called with %run, which don't call show()
1302 that matplotlib scripts called with %run, which don't call show()
1299 themselves, still have their plotting windows open.
1303 themselves, still have their plotting windows open.
1300
1304
1301 2005-01-05 Fernando Perez <fperez@colorado.edu>
1305 2005-01-05 Fernando Perez <fperez@colorado.edu>
1302
1306
1303 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1307 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1304 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1308 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1305
1309
1306 2004-12-19 Fernando Perez <fperez@colorado.edu>
1310 2004-12-19 Fernando Perez <fperez@colorado.edu>
1307
1311
1308 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1312 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1309 parent_runcode, which was an eyesore. The same result can be
1313 parent_runcode, which was an eyesore. The same result can be
1310 obtained with Python's regular superclass mechanisms.
1314 obtained with Python's regular superclass mechanisms.
1311
1315
1312 2004-12-17 Fernando Perez <fperez@colorado.edu>
1316 2004-12-17 Fernando Perez <fperez@colorado.edu>
1313
1317
1314 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1318 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1315 reported by Prabhu.
1319 reported by Prabhu.
1316 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1320 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1317 sys.stderr) instead of explicitly calling sys.stderr. This helps
1321 sys.stderr) instead of explicitly calling sys.stderr. This helps
1318 maintain our I/O abstractions clean, for future GUI embeddings.
1322 maintain our I/O abstractions clean, for future GUI embeddings.
1319
1323
1320 * IPython/genutils.py (info): added new utility for sys.stderr
1324 * IPython/genutils.py (info): added new utility for sys.stderr
1321 unified info message handling (thin wrapper around warn()).
1325 unified info message handling (thin wrapper around warn()).
1322
1326
1323 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1327 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1324 composite (dotted) names on verbose exceptions.
1328 composite (dotted) names on verbose exceptions.
1325 (VerboseTB.nullrepr): harden against another kind of errors which
1329 (VerboseTB.nullrepr): harden against another kind of errors which
1326 Python's inspect module can trigger, and which were crashing
1330 Python's inspect module can trigger, and which were crashing
1327 IPython. Thanks to a report by Marco Lombardi
1331 IPython. Thanks to a report by Marco Lombardi
1328 <mlombard-AT-ma010192.hq.eso.org>.
1332 <mlombard-AT-ma010192.hq.eso.org>.
1329
1333
1330 2004-12-13 *** Released version 0.6.6
1334 2004-12-13 *** Released version 0.6.6
1331
1335
1332 2004-12-12 Fernando Perez <fperez@colorado.edu>
1336 2004-12-12 Fernando Perez <fperez@colorado.edu>
1333
1337
1334 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1338 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1335 generated by pygtk upon initialization if it was built without
1339 generated by pygtk upon initialization if it was built without
1336 threads (for matplotlib users). After a crash reported by
1340 threads (for matplotlib users). After a crash reported by
1337 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1341 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1338
1342
1339 * IPython/ipmaker.py (make_IPython): fix small bug in the
1343 * IPython/ipmaker.py (make_IPython): fix small bug in the
1340 import_some parameter for multiple imports.
1344 import_some parameter for multiple imports.
1341
1345
1342 * IPython/iplib.py (ipmagic): simplified the interface of
1346 * IPython/iplib.py (ipmagic): simplified the interface of
1343 ipmagic() to take a single string argument, just as it would be
1347 ipmagic() to take a single string argument, just as it would be
1344 typed at the IPython cmd line.
1348 typed at the IPython cmd line.
1345 (ipalias): Added new ipalias() with an interface identical to
1349 (ipalias): Added new ipalias() with an interface identical to
1346 ipmagic(). This completes exposing a pure python interface to the
1350 ipmagic(). This completes exposing a pure python interface to the
1347 alias and magic system, which can be used in loops or more complex
1351 alias and magic system, which can be used in loops or more complex
1348 code where IPython's automatic line mangling is not active.
1352 code where IPython's automatic line mangling is not active.
1349
1353
1350 * IPython/genutils.py (timing): changed interface of timing to
1354 * IPython/genutils.py (timing): changed interface of timing to
1351 simply run code once, which is the most common case. timings()
1355 simply run code once, which is the most common case. timings()
1352 remains unchanged, for the cases where you want multiple runs.
1356 remains unchanged, for the cases where you want multiple runs.
1353
1357
1354 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1358 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1355 bug where Python2.2 crashes with exec'ing code which does not end
1359 bug where Python2.2 crashes with exec'ing code which does not end
1356 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1360 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1357 before.
1361 before.
1358
1362
1359 2004-12-10 Fernando Perez <fperez@colorado.edu>
1363 2004-12-10 Fernando Perez <fperez@colorado.edu>
1360
1364
1361 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1365 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1362 -t to -T, to accomodate the new -t flag in %run (the %run and
1366 -t to -T, to accomodate the new -t flag in %run (the %run and
1363 %prun options are kind of intermixed, and it's not easy to change
1367 %prun options are kind of intermixed, and it's not easy to change
1364 this with the limitations of python's getopt).
1368 this with the limitations of python's getopt).
1365
1369
1366 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1370 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1367 the execution of scripts. It's not as fine-tuned as timeit.py,
1371 the execution of scripts. It's not as fine-tuned as timeit.py,
1368 but it works from inside ipython (and under 2.2, which lacks
1372 but it works from inside ipython (and under 2.2, which lacks
1369 timeit.py). Optionally a number of runs > 1 can be given for
1373 timeit.py). Optionally a number of runs > 1 can be given for
1370 timing very short-running code.
1374 timing very short-running code.
1371
1375
1372 * IPython/genutils.py (uniq_stable): new routine which returns a
1376 * IPython/genutils.py (uniq_stable): new routine which returns a
1373 list of unique elements in any iterable, but in stable order of
1377 list of unique elements in any iterable, but in stable order of
1374 appearance. I needed this for the ultraTB fixes, and it's a handy
1378 appearance. I needed this for the ultraTB fixes, and it's a handy
1375 utility.
1379 utility.
1376
1380
1377 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1381 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1378 dotted names in Verbose exceptions. This had been broken since
1382 dotted names in Verbose exceptions. This had been broken since
1379 the very start, now x.y will properly be printed in a Verbose
1383 the very start, now x.y will properly be printed in a Verbose
1380 traceback, instead of x being shown and y appearing always as an
1384 traceback, instead of x being shown and y appearing always as an
1381 'undefined global'. Getting this to work was a bit tricky,
1385 'undefined global'. Getting this to work was a bit tricky,
1382 because by default python tokenizers are stateless. Saved by
1386 because by default python tokenizers are stateless. Saved by
1383 python's ability to easily add a bit of state to an arbitrary
1387 python's ability to easily add a bit of state to an arbitrary
1384 function (without needing to build a full-blown callable object).
1388 function (without needing to build a full-blown callable object).
1385
1389
1386 Also big cleanup of this code, which had horrendous runtime
1390 Also big cleanup of this code, which had horrendous runtime
1387 lookups of zillions of attributes for colorization. Moved all
1391 lookups of zillions of attributes for colorization. Moved all
1388 this code into a few templates, which make it cleaner and quicker.
1392 this code into a few templates, which make it cleaner and quicker.
1389
1393
1390 Printout quality was also improved for Verbose exceptions: one
1394 Printout quality was also improved for Verbose exceptions: one
1391 variable per line, and memory addresses are printed (this can be
1395 variable per line, and memory addresses are printed (this can be
1392 quite handy in nasty debugging situations, which is what Verbose
1396 quite handy in nasty debugging situations, which is what Verbose
1393 is for).
1397 is for).
1394
1398
1395 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1399 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1396 the command line as scripts to be loaded by embedded instances.
1400 the command line as scripts to be loaded by embedded instances.
1397 Doing so has the potential for an infinite recursion if there are
1401 Doing so has the potential for an infinite recursion if there are
1398 exceptions thrown in the process. This fixes a strange crash
1402 exceptions thrown in the process. This fixes a strange crash
1399 reported by Philippe MULLER <muller-AT-irit.fr>.
1403 reported by Philippe MULLER <muller-AT-irit.fr>.
1400
1404
1401 2004-12-09 Fernando Perez <fperez@colorado.edu>
1405 2004-12-09 Fernando Perez <fperez@colorado.edu>
1402
1406
1403 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1407 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1404 to reflect new names in matplotlib, which now expose the
1408 to reflect new names in matplotlib, which now expose the
1405 matlab-compatible interface via a pylab module instead of the
1409 matlab-compatible interface via a pylab module instead of the
1406 'matlab' name. The new code is backwards compatible, so users of
1410 'matlab' name. The new code is backwards compatible, so users of
1407 all matplotlib versions are OK. Patch by J. Hunter.
1411 all matplotlib versions are OK. Patch by J. Hunter.
1408
1412
1409 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1413 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1410 of __init__ docstrings for instances (class docstrings are already
1414 of __init__ docstrings for instances (class docstrings are already
1411 automatically printed). Instances with customized docstrings
1415 automatically printed). Instances with customized docstrings
1412 (indep. of the class) are also recognized and all 3 separate
1416 (indep. of the class) are also recognized and all 3 separate
1413 docstrings are printed (instance, class, constructor). After some
1417 docstrings are printed (instance, class, constructor). After some
1414 comments/suggestions by J. Hunter.
1418 comments/suggestions by J. Hunter.
1415
1419
1416 2004-12-05 Fernando Perez <fperez@colorado.edu>
1420 2004-12-05 Fernando Perez <fperez@colorado.edu>
1417
1421
1418 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1422 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1419 warnings when tab-completion fails and triggers an exception.
1423 warnings when tab-completion fails and triggers an exception.
1420
1424
1421 2004-12-03 Fernando Perez <fperez@colorado.edu>
1425 2004-12-03 Fernando Perez <fperez@colorado.edu>
1422
1426
1423 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1427 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1424 be triggered when using 'run -p'. An incorrect option flag was
1428 be triggered when using 'run -p'. An incorrect option flag was
1425 being set ('d' instead of 'D').
1429 being set ('d' instead of 'D').
1426 (manpage): fix missing escaped \- sign.
1430 (manpage): fix missing escaped \- sign.
1427
1431
1428 2004-11-30 *** Released version 0.6.5
1432 2004-11-30 *** Released version 0.6.5
1429
1433
1430 2004-11-30 Fernando Perez <fperez@colorado.edu>
1434 2004-11-30 Fernando Perez <fperez@colorado.edu>
1431
1435
1432 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1436 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1433 setting with -d option.
1437 setting with -d option.
1434
1438
1435 * setup.py (docfiles): Fix problem where the doc glob I was using
1439 * setup.py (docfiles): Fix problem where the doc glob I was using
1436 was COMPLETELY BROKEN. It was giving the right files by pure
1440 was COMPLETELY BROKEN. It was giving the right files by pure
1437 accident, but failed once I tried to include ipython.el. Note:
1441 accident, but failed once I tried to include ipython.el. Note:
1438 glob() does NOT allow you to do exclusion on multiple endings!
1442 glob() does NOT allow you to do exclusion on multiple endings!
1439
1443
1440 2004-11-29 Fernando Perez <fperez@colorado.edu>
1444 2004-11-29 Fernando Perez <fperez@colorado.edu>
1441
1445
1442 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1446 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1443 the manpage as the source. Better formatting & consistency.
1447 the manpage as the source. Better formatting & consistency.
1444
1448
1445 * IPython/Magic.py (magic_run): Added new -d option, to run
1449 * IPython/Magic.py (magic_run): Added new -d option, to run
1446 scripts under the control of the python pdb debugger. Note that
1450 scripts under the control of the python pdb debugger. Note that
1447 this required changing the %prun option -d to -D, to avoid a clash
1451 this required changing the %prun option -d to -D, to avoid a clash
1448 (since %run must pass options to %prun, and getopt is too dumb to
1452 (since %run must pass options to %prun, and getopt is too dumb to
1449 handle options with string values with embedded spaces). Thanks
1453 handle options with string values with embedded spaces). Thanks
1450 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1454 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1451 (magic_who_ls): added type matching to %who and %whos, so that one
1455 (magic_who_ls): added type matching to %who and %whos, so that one
1452 can filter their output to only include variables of certain
1456 can filter their output to only include variables of certain
1453 types. Another suggestion by Matthew.
1457 types. Another suggestion by Matthew.
1454 (magic_whos): Added memory summaries in kb and Mb for arrays.
1458 (magic_whos): Added memory summaries in kb and Mb for arrays.
1455 (magic_who): Improve formatting (break lines every 9 vars).
1459 (magic_who): Improve formatting (break lines every 9 vars).
1456
1460
1457 2004-11-28 Fernando Perez <fperez@colorado.edu>
1461 2004-11-28 Fernando Perez <fperez@colorado.edu>
1458
1462
1459 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1463 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1460 cache when empty lines were present.
1464 cache when empty lines were present.
1461
1465
1462 2004-11-24 Fernando Perez <fperez@colorado.edu>
1466 2004-11-24 Fernando Perez <fperez@colorado.edu>
1463
1467
1464 * IPython/usage.py (__doc__): document the re-activated threading
1468 * IPython/usage.py (__doc__): document the re-activated threading
1465 options for WX and GTK.
1469 options for WX and GTK.
1466
1470
1467 2004-11-23 Fernando Perez <fperez@colorado.edu>
1471 2004-11-23 Fernando Perez <fperez@colorado.edu>
1468
1472
1469 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1473 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1470 the -wthread and -gthread options, along with a new -tk one to try
1474 the -wthread and -gthread options, along with a new -tk one to try
1471 and coordinate Tk threading with wx/gtk. The tk support is very
1475 and coordinate Tk threading with wx/gtk. The tk support is very
1472 platform dependent, since it seems to require Tcl and Tk to be
1476 platform dependent, since it seems to require Tcl and Tk to be
1473 built with threads (Fedora1/2 appears NOT to have it, but in
1477 built with threads (Fedora1/2 appears NOT to have it, but in
1474 Prabhu's Debian boxes it works OK). But even with some Tk
1478 Prabhu's Debian boxes it works OK). But even with some Tk
1475 limitations, this is a great improvement.
1479 limitations, this is a great improvement.
1476
1480
1477 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1481 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1478 info in user prompts. Patch by Prabhu.
1482 info in user prompts. Patch by Prabhu.
1479
1483
1480 2004-11-18 Fernando Perez <fperez@colorado.edu>
1484 2004-11-18 Fernando Perez <fperez@colorado.edu>
1481
1485
1482 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1486 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1483 EOFErrors and bail, to avoid infinite loops if a non-terminating
1487 EOFErrors and bail, to avoid infinite loops if a non-terminating
1484 file is fed into ipython. Patch submitted in issue 19 by user,
1488 file is fed into ipython. Patch submitted in issue 19 by user,
1485 many thanks.
1489 many thanks.
1486
1490
1487 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1491 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1488 autoquote/parens in continuation prompts, which can cause lots of
1492 autoquote/parens in continuation prompts, which can cause lots of
1489 problems. Closes roundup issue 20.
1493 problems. Closes roundup issue 20.
1490
1494
1491 2004-11-17 Fernando Perez <fperez@colorado.edu>
1495 2004-11-17 Fernando Perez <fperez@colorado.edu>
1492
1496
1493 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1497 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1494 reported as debian bug #280505. I'm not sure my local changelog
1498 reported as debian bug #280505. I'm not sure my local changelog
1495 entry has the proper debian format (Jack?).
1499 entry has the proper debian format (Jack?).
1496
1500
1497 2004-11-08 *** Released version 0.6.4
1501 2004-11-08 *** Released version 0.6.4
1498
1502
1499 2004-11-08 Fernando Perez <fperez@colorado.edu>
1503 2004-11-08 Fernando Perez <fperez@colorado.edu>
1500
1504
1501 * IPython/iplib.py (init_readline): Fix exit message for Windows
1505 * IPython/iplib.py (init_readline): Fix exit message for Windows
1502 when readline is active. Thanks to a report by Eric Jones
1506 when readline is active. Thanks to a report by Eric Jones
1503 <eric-AT-enthought.com>.
1507 <eric-AT-enthought.com>.
1504
1508
1505 2004-11-07 Fernando Perez <fperez@colorado.edu>
1509 2004-11-07 Fernando Perez <fperez@colorado.edu>
1506
1510
1507 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1511 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1508 sometimes seen by win2k/cygwin users.
1512 sometimes seen by win2k/cygwin users.
1509
1513
1510 2004-11-06 Fernando Perez <fperez@colorado.edu>
1514 2004-11-06 Fernando Perez <fperez@colorado.edu>
1511
1515
1512 * IPython/iplib.py (interact): Change the handling of %Exit from
1516 * IPython/iplib.py (interact): Change the handling of %Exit from
1513 trying to propagate a SystemExit to an internal ipython flag.
1517 trying to propagate a SystemExit to an internal ipython flag.
1514 This is less elegant than using Python's exception mechanism, but
1518 This is less elegant than using Python's exception mechanism, but
1515 I can't get that to work reliably with threads, so under -pylab
1519 I can't get that to work reliably with threads, so under -pylab
1516 %Exit was hanging IPython. Cross-thread exception handling is
1520 %Exit was hanging IPython. Cross-thread exception handling is
1517 really a bitch. Thaks to a bug report by Stephen Walton
1521 really a bitch. Thaks to a bug report by Stephen Walton
1518 <stephen.walton-AT-csun.edu>.
1522 <stephen.walton-AT-csun.edu>.
1519
1523
1520 2004-11-04 Fernando Perez <fperez@colorado.edu>
1524 2004-11-04 Fernando Perez <fperez@colorado.edu>
1521
1525
1522 * IPython/iplib.py (raw_input_original): store a pointer to the
1526 * IPython/iplib.py (raw_input_original): store a pointer to the
1523 true raw_input to harden against code which can modify it
1527 true raw_input to harden against code which can modify it
1524 (wx.py.PyShell does this and would otherwise crash ipython).
1528 (wx.py.PyShell does this and would otherwise crash ipython).
1525 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1529 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1526
1530
1527 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1531 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1528 Ctrl-C problem, which does not mess up the input line.
1532 Ctrl-C problem, which does not mess up the input line.
1529
1533
1530 2004-11-03 Fernando Perez <fperez@colorado.edu>
1534 2004-11-03 Fernando Perez <fperez@colorado.edu>
1531
1535
1532 * IPython/Release.py: Changed licensing to BSD, in all files.
1536 * IPython/Release.py: Changed licensing to BSD, in all files.
1533 (name): lowercase name for tarball/RPM release.
1537 (name): lowercase name for tarball/RPM release.
1534
1538
1535 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1539 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1536 use throughout ipython.
1540 use throughout ipython.
1537
1541
1538 * IPython/Magic.py (Magic._ofind): Switch to using the new
1542 * IPython/Magic.py (Magic._ofind): Switch to using the new
1539 OInspect.getdoc() function.
1543 OInspect.getdoc() function.
1540
1544
1541 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1545 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1542 of the line currently being canceled via Ctrl-C. It's extremely
1546 of the line currently being canceled via Ctrl-C. It's extremely
1543 ugly, but I don't know how to do it better (the problem is one of
1547 ugly, but I don't know how to do it better (the problem is one of
1544 handling cross-thread exceptions).
1548 handling cross-thread exceptions).
1545
1549
1546 2004-10-28 Fernando Perez <fperez@colorado.edu>
1550 2004-10-28 Fernando Perez <fperez@colorado.edu>
1547
1551
1548 * IPython/Shell.py (signal_handler): add signal handlers to trap
1552 * IPython/Shell.py (signal_handler): add signal handlers to trap
1549 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1553 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1550 report by Francesc Alted.
1554 report by Francesc Alted.
1551
1555
1552 2004-10-21 Fernando Perez <fperez@colorado.edu>
1556 2004-10-21 Fernando Perez <fperez@colorado.edu>
1553
1557
1554 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1558 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1555 to % for pysh syntax extensions.
1559 to % for pysh syntax extensions.
1556
1560
1557 2004-10-09 Fernando Perez <fperez@colorado.edu>
1561 2004-10-09 Fernando Perez <fperez@colorado.edu>
1558
1562
1559 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1563 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1560 arrays to print a more useful summary, without calling str(arr).
1564 arrays to print a more useful summary, without calling str(arr).
1561 This avoids the problem of extremely lengthy computations which
1565 This avoids the problem of extremely lengthy computations which
1562 occur if arr is large, and appear to the user as a system lockup
1566 occur if arr is large, and appear to the user as a system lockup
1563 with 100% cpu activity. After a suggestion by Kristian Sandberg
1567 with 100% cpu activity. After a suggestion by Kristian Sandberg
1564 <Kristian.Sandberg@colorado.edu>.
1568 <Kristian.Sandberg@colorado.edu>.
1565 (Magic.__init__): fix bug in global magic escapes not being
1569 (Magic.__init__): fix bug in global magic escapes not being
1566 correctly set.
1570 correctly set.
1567
1571
1568 2004-10-08 Fernando Perez <fperez@colorado.edu>
1572 2004-10-08 Fernando Perez <fperez@colorado.edu>
1569
1573
1570 * IPython/Magic.py (__license__): change to absolute imports of
1574 * IPython/Magic.py (__license__): change to absolute imports of
1571 ipython's own internal packages, to start adapting to the absolute
1575 ipython's own internal packages, to start adapting to the absolute
1572 import requirement of PEP-328.
1576 import requirement of PEP-328.
1573
1577
1574 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1578 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1575 files, and standardize author/license marks through the Release
1579 files, and standardize author/license marks through the Release
1576 module instead of having per/file stuff (except for files with
1580 module instead of having per/file stuff (except for files with
1577 particular licenses, like the MIT/PSF-licensed codes).
1581 particular licenses, like the MIT/PSF-licensed codes).
1578
1582
1579 * IPython/Debugger.py: remove dead code for python 2.1
1583 * IPython/Debugger.py: remove dead code for python 2.1
1580
1584
1581 2004-10-04 Fernando Perez <fperez@colorado.edu>
1585 2004-10-04 Fernando Perez <fperez@colorado.edu>
1582
1586
1583 * IPython/iplib.py (ipmagic): New function for accessing magics
1587 * IPython/iplib.py (ipmagic): New function for accessing magics
1584 via a normal python function call.
1588 via a normal python function call.
1585
1589
1586 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1590 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1587 from '@' to '%', to accomodate the new @decorator syntax of python
1591 from '@' to '%', to accomodate the new @decorator syntax of python
1588 2.4.
1592 2.4.
1589
1593
1590 2004-09-29 Fernando Perez <fperez@colorado.edu>
1594 2004-09-29 Fernando Perez <fperez@colorado.edu>
1591
1595
1592 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1596 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1593 matplotlib.use to prevent running scripts which try to switch
1597 matplotlib.use to prevent running scripts which try to switch
1594 interactive backends from within ipython. This will just crash
1598 interactive backends from within ipython. This will just crash
1595 the python interpreter, so we can't allow it (but a detailed error
1599 the python interpreter, so we can't allow it (but a detailed error
1596 is given to the user).
1600 is given to the user).
1597
1601
1598 2004-09-28 Fernando Perez <fperez@colorado.edu>
1602 2004-09-28 Fernando Perez <fperez@colorado.edu>
1599
1603
1600 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1604 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1601 matplotlib-related fixes so that using @run with non-matplotlib
1605 matplotlib-related fixes so that using @run with non-matplotlib
1602 scripts doesn't pop up spurious plot windows. This requires
1606 scripts doesn't pop up spurious plot windows. This requires
1603 matplotlib >= 0.63, where I had to make some changes as well.
1607 matplotlib >= 0.63, where I had to make some changes as well.
1604
1608
1605 * IPython/ipmaker.py (make_IPython): update version requirement to
1609 * IPython/ipmaker.py (make_IPython): update version requirement to
1606 python 2.2.
1610 python 2.2.
1607
1611
1608 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1612 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1609 banner arg for embedded customization.
1613 banner arg for embedded customization.
1610
1614
1611 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1615 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1612 explicit uses of __IP as the IPython's instance name. Now things
1616 explicit uses of __IP as the IPython's instance name. Now things
1613 are properly handled via the shell.name value. The actual code
1617 are properly handled via the shell.name value. The actual code
1614 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1618 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1615 is much better than before. I'll clean things completely when the
1619 is much better than before. I'll clean things completely when the
1616 magic stuff gets a real overhaul.
1620 magic stuff gets a real overhaul.
1617
1621
1618 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1622 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1619 minor changes to debian dir.
1623 minor changes to debian dir.
1620
1624
1621 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1625 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1622 pointer to the shell itself in the interactive namespace even when
1626 pointer to the shell itself in the interactive namespace even when
1623 a user-supplied dict is provided. This is needed for embedding
1627 a user-supplied dict is provided. This is needed for embedding
1624 purposes (found by tests with Michel Sanner).
1628 purposes (found by tests with Michel Sanner).
1625
1629
1626 2004-09-27 Fernando Perez <fperez@colorado.edu>
1630 2004-09-27 Fernando Perez <fperez@colorado.edu>
1627
1631
1628 * IPython/UserConfig/ipythonrc: remove []{} from
1632 * IPython/UserConfig/ipythonrc: remove []{} from
1629 readline_remove_delims, so that things like [modname.<TAB> do
1633 readline_remove_delims, so that things like [modname.<TAB> do
1630 proper completion. This disables [].TAB, but that's a less common
1634 proper completion. This disables [].TAB, but that's a less common
1631 case than module names in list comprehensions, for example.
1635 case than module names in list comprehensions, for example.
1632 Thanks to a report by Andrea Riciputi.
1636 Thanks to a report by Andrea Riciputi.
1633
1637
1634 2004-09-09 Fernando Perez <fperez@colorado.edu>
1638 2004-09-09 Fernando Perez <fperez@colorado.edu>
1635
1639
1636 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1640 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1637 blocking problems in win32 and osx. Fix by John.
1641 blocking problems in win32 and osx. Fix by John.
1638
1642
1639 2004-09-08 Fernando Perez <fperez@colorado.edu>
1643 2004-09-08 Fernando Perez <fperez@colorado.edu>
1640
1644
1641 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1645 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1642 for Win32 and OSX. Fix by John Hunter.
1646 for Win32 and OSX. Fix by John Hunter.
1643
1647
1644 2004-08-30 *** Released version 0.6.3
1648 2004-08-30 *** Released version 0.6.3
1645
1649
1646 2004-08-30 Fernando Perez <fperez@colorado.edu>
1650 2004-08-30 Fernando Perez <fperez@colorado.edu>
1647
1651
1648 * setup.py (isfile): Add manpages to list of dependent files to be
1652 * setup.py (isfile): Add manpages to list of dependent files to be
1649 updated.
1653 updated.
1650
1654
1651 2004-08-27 Fernando Perez <fperez@colorado.edu>
1655 2004-08-27 Fernando Perez <fperez@colorado.edu>
1652
1656
1653 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1657 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1654 for now. They don't really work with standalone WX/GTK code
1658 for now. They don't really work with standalone WX/GTK code
1655 (though matplotlib IS working fine with both of those backends).
1659 (though matplotlib IS working fine with both of those backends).
1656 This will neeed much more testing. I disabled most things with
1660 This will neeed much more testing. I disabled most things with
1657 comments, so turning it back on later should be pretty easy.
1661 comments, so turning it back on later should be pretty easy.
1658
1662
1659 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1663 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1660 autocalling of expressions like r'foo', by modifying the line
1664 autocalling of expressions like r'foo', by modifying the line
1661 split regexp. Closes
1665 split regexp. Closes
1662 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1666 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1663 Riley <ipythonbugs-AT-sabi.net>.
1667 Riley <ipythonbugs-AT-sabi.net>.
1664 (InteractiveShell.mainloop): honor --nobanner with banner
1668 (InteractiveShell.mainloop): honor --nobanner with banner
1665 extensions.
1669 extensions.
1666
1670
1667 * IPython/Shell.py: Significant refactoring of all classes, so
1671 * IPython/Shell.py: Significant refactoring of all classes, so
1668 that we can really support ALL matplotlib backends and threading
1672 that we can really support ALL matplotlib backends and threading
1669 models (John spotted a bug with Tk which required this). Now we
1673 models (John spotted a bug with Tk which required this). Now we
1670 should support single-threaded, WX-threads and GTK-threads, both
1674 should support single-threaded, WX-threads and GTK-threads, both
1671 for generic code and for matplotlib.
1675 for generic code and for matplotlib.
1672
1676
1673 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1677 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1674 -pylab, to simplify things for users. Will also remove the pylab
1678 -pylab, to simplify things for users. Will also remove the pylab
1675 profile, since now all of matplotlib configuration is directly
1679 profile, since now all of matplotlib configuration is directly
1676 handled here. This also reduces startup time.
1680 handled here. This also reduces startup time.
1677
1681
1678 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1682 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1679 shell wasn't being correctly called. Also in IPShellWX.
1683 shell wasn't being correctly called. Also in IPShellWX.
1680
1684
1681 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1685 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1682 fine-tune banner.
1686 fine-tune banner.
1683
1687
1684 * IPython/numutils.py (spike): Deprecate these spike functions,
1688 * IPython/numutils.py (spike): Deprecate these spike functions,
1685 delete (long deprecated) gnuplot_exec handler.
1689 delete (long deprecated) gnuplot_exec handler.
1686
1690
1687 2004-08-26 Fernando Perez <fperez@colorado.edu>
1691 2004-08-26 Fernando Perez <fperez@colorado.edu>
1688
1692
1689 * ipython.1: Update for threading options, plus some others which
1693 * ipython.1: Update for threading options, plus some others which
1690 were missing.
1694 were missing.
1691
1695
1692 * IPython/ipmaker.py (__call__): Added -wthread option for
1696 * IPython/ipmaker.py (__call__): Added -wthread option for
1693 wxpython thread handling. Make sure threading options are only
1697 wxpython thread handling. Make sure threading options are only
1694 valid at the command line.
1698 valid at the command line.
1695
1699
1696 * scripts/ipython: moved shell selection into a factory function
1700 * scripts/ipython: moved shell selection into a factory function
1697 in Shell.py, to keep the starter script to a minimum.
1701 in Shell.py, to keep the starter script to a minimum.
1698
1702
1699 2004-08-25 Fernando Perez <fperez@colorado.edu>
1703 2004-08-25 Fernando Perez <fperez@colorado.edu>
1700
1704
1701 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1705 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1702 John. Along with some recent changes he made to matplotlib, the
1706 John. Along with some recent changes he made to matplotlib, the
1703 next versions of both systems should work very well together.
1707 next versions of both systems should work very well together.
1704
1708
1705 2004-08-24 Fernando Perez <fperez@colorado.edu>
1709 2004-08-24 Fernando Perez <fperez@colorado.edu>
1706
1710
1707 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1711 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1708 tried to switch the profiling to using hotshot, but I'm getting
1712 tried to switch the profiling to using hotshot, but I'm getting
1709 strange errors from prof.runctx() there. I may be misreading the
1713 strange errors from prof.runctx() there. I may be misreading the
1710 docs, but it looks weird. For now the profiling code will
1714 docs, but it looks weird. For now the profiling code will
1711 continue to use the standard profiler.
1715 continue to use the standard profiler.
1712
1716
1713 2004-08-23 Fernando Perez <fperez@colorado.edu>
1717 2004-08-23 Fernando Perez <fperez@colorado.edu>
1714
1718
1715 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1719 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1716 threaded shell, by John Hunter. It's not quite ready yet, but
1720 threaded shell, by John Hunter. It's not quite ready yet, but
1717 close.
1721 close.
1718
1722
1719 2004-08-22 Fernando Perez <fperez@colorado.edu>
1723 2004-08-22 Fernando Perez <fperez@colorado.edu>
1720
1724
1721 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1725 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1722 in Magic and ultraTB.
1726 in Magic and ultraTB.
1723
1727
1724 * ipython.1: document threading options in manpage.
1728 * ipython.1: document threading options in manpage.
1725
1729
1726 * scripts/ipython: Changed name of -thread option to -gthread,
1730 * scripts/ipython: Changed name of -thread option to -gthread,
1727 since this is GTK specific. I want to leave the door open for a
1731 since this is GTK specific. I want to leave the door open for a
1728 -wthread option for WX, which will most likely be necessary. This
1732 -wthread option for WX, which will most likely be necessary. This
1729 change affects usage and ipmaker as well.
1733 change affects usage and ipmaker as well.
1730
1734
1731 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1735 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1732 handle the matplotlib shell issues. Code by John Hunter
1736 handle the matplotlib shell issues. Code by John Hunter
1733 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1737 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1734 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1738 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1735 broken (and disabled for end users) for now, but it puts the
1739 broken (and disabled for end users) for now, but it puts the
1736 infrastructure in place.
1740 infrastructure in place.
1737
1741
1738 2004-08-21 Fernando Perez <fperez@colorado.edu>
1742 2004-08-21 Fernando Perez <fperez@colorado.edu>
1739
1743
1740 * ipythonrc-pylab: Add matplotlib support.
1744 * ipythonrc-pylab: Add matplotlib support.
1741
1745
1742 * matplotlib_config.py: new files for matplotlib support, part of
1746 * matplotlib_config.py: new files for matplotlib support, part of
1743 the pylab profile.
1747 the pylab profile.
1744
1748
1745 * IPython/usage.py (__doc__): documented the threading options.
1749 * IPython/usage.py (__doc__): documented the threading options.
1746
1750
1747 2004-08-20 Fernando Perez <fperez@colorado.edu>
1751 2004-08-20 Fernando Perez <fperez@colorado.edu>
1748
1752
1749 * ipython: Modified the main calling routine to handle the -thread
1753 * ipython: Modified the main calling routine to handle the -thread
1750 and -mpthread options. This needs to be done as a top-level hack,
1754 and -mpthread options. This needs to be done as a top-level hack,
1751 because it determines which class to instantiate for IPython
1755 because it determines which class to instantiate for IPython
1752 itself.
1756 itself.
1753
1757
1754 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1758 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1755 classes to support multithreaded GTK operation without blocking,
1759 classes to support multithreaded GTK operation without blocking,
1756 and matplotlib with all backends. This is a lot of still very
1760 and matplotlib with all backends. This is a lot of still very
1757 experimental code, and threads are tricky. So it may still have a
1761 experimental code, and threads are tricky. So it may still have a
1758 few rough edges... This code owes a lot to
1762 few rough edges... This code owes a lot to
1759 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1763 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1760 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1764 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1761 to John Hunter for all the matplotlib work.
1765 to John Hunter for all the matplotlib work.
1762
1766
1763 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1767 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1764 options for gtk thread and matplotlib support.
1768 options for gtk thread and matplotlib support.
1765
1769
1766 2004-08-16 Fernando Perez <fperez@colorado.edu>
1770 2004-08-16 Fernando Perez <fperez@colorado.edu>
1767
1771
1768 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1772 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1769 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1773 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1770 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1774 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1771
1775
1772 2004-08-11 Fernando Perez <fperez@colorado.edu>
1776 2004-08-11 Fernando Perez <fperez@colorado.edu>
1773
1777
1774 * setup.py (isfile): Fix build so documentation gets updated for
1778 * setup.py (isfile): Fix build so documentation gets updated for
1775 rpms (it was only done for .tgz builds).
1779 rpms (it was only done for .tgz builds).
1776
1780
1777 2004-08-10 Fernando Perez <fperez@colorado.edu>
1781 2004-08-10 Fernando Perez <fperez@colorado.edu>
1778
1782
1779 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1783 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1780
1784
1781 * iplib.py : Silence syntax error exceptions in tab-completion.
1785 * iplib.py : Silence syntax error exceptions in tab-completion.
1782
1786
1783 2004-08-05 Fernando Perez <fperez@colorado.edu>
1787 2004-08-05 Fernando Perez <fperez@colorado.edu>
1784
1788
1785 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1789 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1786 'color off' mark for continuation prompts. This was causing long
1790 'color off' mark for continuation prompts. This was causing long
1787 continuation lines to mis-wrap.
1791 continuation lines to mis-wrap.
1788
1792
1789 2004-08-01 Fernando Perez <fperez@colorado.edu>
1793 2004-08-01 Fernando Perez <fperez@colorado.edu>
1790
1794
1791 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1795 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1792 for building ipython to be a parameter. All this is necessary
1796 for building ipython to be a parameter. All this is necessary
1793 right now to have a multithreaded version, but this insane
1797 right now to have a multithreaded version, but this insane
1794 non-design will be cleaned up soon. For now, it's a hack that
1798 non-design will be cleaned up soon. For now, it's a hack that
1795 works.
1799 works.
1796
1800
1797 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1801 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1798 args in various places. No bugs so far, but it's a dangerous
1802 args in various places. No bugs so far, but it's a dangerous
1799 practice.
1803 practice.
1800
1804
1801 2004-07-31 Fernando Perez <fperez@colorado.edu>
1805 2004-07-31 Fernando Perez <fperez@colorado.edu>
1802
1806
1803 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1807 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1804 fix completion of files with dots in their names under most
1808 fix completion of files with dots in their names under most
1805 profiles (pysh was OK because the completion order is different).
1809 profiles (pysh was OK because the completion order is different).
1806
1810
1807 2004-07-27 Fernando Perez <fperez@colorado.edu>
1811 2004-07-27 Fernando Perez <fperez@colorado.edu>
1808
1812
1809 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1813 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1810 keywords manually, b/c the one in keyword.py was removed in python
1814 keywords manually, b/c the one in keyword.py was removed in python
1811 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1815 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1812 This is NOT a bug under python 2.3 and earlier.
1816 This is NOT a bug under python 2.3 and earlier.
1813
1817
1814 2004-07-26 Fernando Perez <fperez@colorado.edu>
1818 2004-07-26 Fernando Perez <fperez@colorado.edu>
1815
1819
1816 * IPython/ultraTB.py (VerboseTB.text): Add another
1820 * IPython/ultraTB.py (VerboseTB.text): Add another
1817 linecache.checkcache() call to try to prevent inspect.py from
1821 linecache.checkcache() call to try to prevent inspect.py from
1818 crashing under python 2.3. I think this fixes
1822 crashing under python 2.3. I think this fixes
1819 http://www.scipy.net/roundup/ipython/issue17.
1823 http://www.scipy.net/roundup/ipython/issue17.
1820
1824
1821 2004-07-26 *** Released version 0.6.2
1825 2004-07-26 *** Released version 0.6.2
1822
1826
1823 2004-07-26 Fernando Perez <fperez@colorado.edu>
1827 2004-07-26 Fernando Perez <fperez@colorado.edu>
1824
1828
1825 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1829 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1826 fail for any number.
1830 fail for any number.
1827 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1831 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1828 empty bookmarks.
1832 empty bookmarks.
1829
1833
1830 2004-07-26 *** Released version 0.6.1
1834 2004-07-26 *** Released version 0.6.1
1831
1835
1832 2004-07-26 Fernando Perez <fperez@colorado.edu>
1836 2004-07-26 Fernando Perez <fperez@colorado.edu>
1833
1837
1834 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1838 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1835
1839
1836 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1840 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1837 escaping '()[]{}' in filenames.
1841 escaping '()[]{}' in filenames.
1838
1842
1839 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1843 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1840 Python 2.2 users who lack a proper shlex.split.
1844 Python 2.2 users who lack a proper shlex.split.
1841
1845
1842 2004-07-19 Fernando Perez <fperez@colorado.edu>
1846 2004-07-19 Fernando Perez <fperez@colorado.edu>
1843
1847
1844 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1848 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1845 for reading readline's init file. I follow the normal chain:
1849 for reading readline's init file. I follow the normal chain:
1846 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1850 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1847 report by Mike Heeter. This closes
1851 report by Mike Heeter. This closes
1848 http://www.scipy.net/roundup/ipython/issue16.
1852 http://www.scipy.net/roundup/ipython/issue16.
1849
1853
1850 2004-07-18 Fernando Perez <fperez@colorado.edu>
1854 2004-07-18 Fernando Perez <fperez@colorado.edu>
1851
1855
1852 * IPython/iplib.py (__init__): Add better handling of '\' under
1856 * IPython/iplib.py (__init__): Add better handling of '\' under
1853 Win32 for filenames. After a patch by Ville.
1857 Win32 for filenames. After a patch by Ville.
1854
1858
1855 2004-07-17 Fernando Perez <fperez@colorado.edu>
1859 2004-07-17 Fernando Perez <fperez@colorado.edu>
1856
1860
1857 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1861 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1858 autocalling would be triggered for 'foo is bar' if foo is
1862 autocalling would be triggered for 'foo is bar' if foo is
1859 callable. I also cleaned up the autocall detection code to use a
1863 callable. I also cleaned up the autocall detection code to use a
1860 regexp, which is faster. Bug reported by Alexander Schmolck.
1864 regexp, which is faster. Bug reported by Alexander Schmolck.
1861
1865
1862 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1866 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1863 '?' in them would confuse the help system. Reported by Alex
1867 '?' in them would confuse the help system. Reported by Alex
1864 Schmolck.
1868 Schmolck.
1865
1869
1866 2004-07-16 Fernando Perez <fperez@colorado.edu>
1870 2004-07-16 Fernando Perez <fperez@colorado.edu>
1867
1871
1868 * IPython/GnuplotInteractive.py (__all__): added plot2.
1872 * IPython/GnuplotInteractive.py (__all__): added plot2.
1869
1873
1870 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1874 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1871 plotting dictionaries, lists or tuples of 1d arrays.
1875 plotting dictionaries, lists or tuples of 1d arrays.
1872
1876
1873 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1877 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1874 optimizations.
1878 optimizations.
1875
1879
1876 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1880 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1877 the information which was there from Janko's original IPP code:
1881 the information which was there from Janko's original IPP code:
1878
1882
1879 03.05.99 20:53 porto.ifm.uni-kiel.de
1883 03.05.99 20:53 porto.ifm.uni-kiel.de
1880 --Started changelog.
1884 --Started changelog.
1881 --make clear do what it say it does
1885 --make clear do what it say it does
1882 --added pretty output of lines from inputcache
1886 --added pretty output of lines from inputcache
1883 --Made Logger a mixin class, simplifies handling of switches
1887 --Made Logger a mixin class, simplifies handling of switches
1884 --Added own completer class. .string<TAB> expands to last history
1888 --Added own completer class. .string<TAB> expands to last history
1885 line which starts with string. The new expansion is also present
1889 line which starts with string. The new expansion is also present
1886 with Ctrl-r from the readline library. But this shows, who this
1890 with Ctrl-r from the readline library. But this shows, who this
1887 can be done for other cases.
1891 can be done for other cases.
1888 --Added convention that all shell functions should accept a
1892 --Added convention that all shell functions should accept a
1889 parameter_string This opens the door for different behaviour for
1893 parameter_string This opens the door for different behaviour for
1890 each function. @cd is a good example of this.
1894 each function. @cd is a good example of this.
1891
1895
1892 04.05.99 12:12 porto.ifm.uni-kiel.de
1896 04.05.99 12:12 porto.ifm.uni-kiel.de
1893 --added logfile rotation
1897 --added logfile rotation
1894 --added new mainloop method which freezes first the namespace
1898 --added new mainloop method which freezes first the namespace
1895
1899
1896 07.05.99 21:24 porto.ifm.uni-kiel.de
1900 07.05.99 21:24 porto.ifm.uni-kiel.de
1897 --added the docreader classes. Now there is a help system.
1901 --added the docreader classes. Now there is a help system.
1898 -This is only a first try. Currently it's not easy to put new
1902 -This is only a first try. Currently it's not easy to put new
1899 stuff in the indices. But this is the way to go. Info would be
1903 stuff in the indices. But this is the way to go. Info would be
1900 better, but HTML is every where and not everybody has an info
1904 better, but HTML is every where and not everybody has an info
1901 system installed and it's not so easy to change html-docs to info.
1905 system installed and it's not so easy to change html-docs to info.
1902 --added global logfile option
1906 --added global logfile option
1903 --there is now a hook for object inspection method pinfo needs to
1907 --there is now a hook for object inspection method pinfo needs to
1904 be provided for this. Can be reached by two '??'.
1908 be provided for this. Can be reached by two '??'.
1905
1909
1906 08.05.99 20:51 porto.ifm.uni-kiel.de
1910 08.05.99 20:51 porto.ifm.uni-kiel.de
1907 --added a README
1911 --added a README
1908 --bug in rc file. Something has changed so functions in the rc
1912 --bug in rc file. Something has changed so functions in the rc
1909 file need to reference the shell and not self. Not clear if it's a
1913 file need to reference the shell and not self. Not clear if it's a
1910 bug or feature.
1914 bug or feature.
1911 --changed rc file for new behavior
1915 --changed rc file for new behavior
1912
1916
1913 2004-07-15 Fernando Perez <fperez@colorado.edu>
1917 2004-07-15 Fernando Perez <fperez@colorado.edu>
1914
1918
1915 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1919 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1916 cache was falling out of sync in bizarre manners when multi-line
1920 cache was falling out of sync in bizarre manners when multi-line
1917 input was present. Minor optimizations and cleanup.
1921 input was present. Minor optimizations and cleanup.
1918
1922
1919 (Logger): Remove old Changelog info for cleanup. This is the
1923 (Logger): Remove old Changelog info for cleanup. This is the
1920 information which was there from Janko's original code:
1924 information which was there from Janko's original code:
1921
1925
1922 Changes to Logger: - made the default log filename a parameter
1926 Changes to Logger: - made the default log filename a parameter
1923
1927
1924 - put a check for lines beginning with !@? in log(). Needed
1928 - put a check for lines beginning with !@? in log(). Needed
1925 (even if the handlers properly log their lines) for mid-session
1929 (even if the handlers properly log their lines) for mid-session
1926 logging activation to work properly. Without this, lines logged
1930 logging activation to work properly. Without this, lines logged
1927 in mid session, which get read from the cache, would end up
1931 in mid session, which get read from the cache, would end up
1928 'bare' (with !@? in the open) in the log. Now they are caught
1932 'bare' (with !@? in the open) in the log. Now they are caught
1929 and prepended with a #.
1933 and prepended with a #.
1930
1934
1931 * IPython/iplib.py (InteractiveShell.init_readline): added check
1935 * IPython/iplib.py (InteractiveShell.init_readline): added check
1932 in case MagicCompleter fails to be defined, so we don't crash.
1936 in case MagicCompleter fails to be defined, so we don't crash.
1933
1937
1934 2004-07-13 Fernando Perez <fperez@colorado.edu>
1938 2004-07-13 Fernando Perez <fperez@colorado.edu>
1935
1939
1936 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1940 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1937 of EPS if the requested filename ends in '.eps'.
1941 of EPS if the requested filename ends in '.eps'.
1938
1942
1939 2004-07-04 Fernando Perez <fperez@colorado.edu>
1943 2004-07-04 Fernando Perez <fperez@colorado.edu>
1940
1944
1941 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1945 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1942 escaping of quotes when calling the shell.
1946 escaping of quotes when calling the shell.
1943
1947
1944 2004-07-02 Fernando Perez <fperez@colorado.edu>
1948 2004-07-02 Fernando Perez <fperez@colorado.edu>
1945
1949
1946 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1950 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1947 gettext not working because we were clobbering '_'. Fixes
1951 gettext not working because we were clobbering '_'. Fixes
1948 http://www.scipy.net/roundup/ipython/issue6.
1952 http://www.scipy.net/roundup/ipython/issue6.
1949
1953
1950 2004-07-01 Fernando Perez <fperez@colorado.edu>
1954 2004-07-01 Fernando Perez <fperez@colorado.edu>
1951
1955
1952 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1956 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1953 into @cd. Patch by Ville.
1957 into @cd. Patch by Ville.
1954
1958
1955 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1959 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1956 new function to store things after ipmaker runs. Patch by Ville.
1960 new function to store things after ipmaker runs. Patch by Ville.
1957 Eventually this will go away once ipmaker is removed and the class
1961 Eventually this will go away once ipmaker is removed and the class
1958 gets cleaned up, but for now it's ok. Key functionality here is
1962 gets cleaned up, but for now it's ok. Key functionality here is
1959 the addition of the persistent storage mechanism, a dict for
1963 the addition of the persistent storage mechanism, a dict for
1960 keeping data across sessions (for now just bookmarks, but more can
1964 keeping data across sessions (for now just bookmarks, but more can
1961 be implemented later).
1965 be implemented later).
1962
1966
1963 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1967 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1964 persistent across sections. Patch by Ville, I modified it
1968 persistent across sections. Patch by Ville, I modified it
1965 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1969 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1966 added a '-l' option to list all bookmarks.
1970 added a '-l' option to list all bookmarks.
1967
1971
1968 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1972 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1969 center for cleanup. Registered with atexit.register(). I moved
1973 center for cleanup. Registered with atexit.register(). I moved
1970 here the old exit_cleanup(). After a patch by Ville.
1974 here the old exit_cleanup(). After a patch by Ville.
1971
1975
1972 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1976 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1973 characters in the hacked shlex_split for python 2.2.
1977 characters in the hacked shlex_split for python 2.2.
1974
1978
1975 * IPython/iplib.py (file_matches): more fixes to filenames with
1979 * IPython/iplib.py (file_matches): more fixes to filenames with
1976 whitespace in them. It's not perfect, but limitations in python's
1980 whitespace in them. It's not perfect, but limitations in python's
1977 readline make it impossible to go further.
1981 readline make it impossible to go further.
1978
1982
1979 2004-06-29 Fernando Perez <fperez@colorado.edu>
1983 2004-06-29 Fernando Perez <fperez@colorado.edu>
1980
1984
1981 * IPython/iplib.py (file_matches): escape whitespace correctly in
1985 * IPython/iplib.py (file_matches): escape whitespace correctly in
1982 filename completions. Bug reported by Ville.
1986 filename completions. Bug reported by Ville.
1983
1987
1984 2004-06-28 Fernando Perez <fperez@colorado.edu>
1988 2004-06-28 Fernando Perez <fperez@colorado.edu>
1985
1989
1986 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1990 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1987 the history file will be called 'history-PROFNAME' (or just
1991 the history file will be called 'history-PROFNAME' (or just
1988 'history' if no profile is loaded). I was getting annoyed at
1992 'history' if no profile is loaded). I was getting annoyed at
1989 getting my Numerical work history clobbered by pysh sessions.
1993 getting my Numerical work history clobbered by pysh sessions.
1990
1994
1991 * IPython/iplib.py (InteractiveShell.__init__): Internal
1995 * IPython/iplib.py (InteractiveShell.__init__): Internal
1992 getoutputerror() function so that we can honor the system_verbose
1996 getoutputerror() function so that we can honor the system_verbose
1993 flag for _all_ system calls. I also added escaping of #
1997 flag for _all_ system calls. I also added escaping of #
1994 characters here to avoid confusing Itpl.
1998 characters here to avoid confusing Itpl.
1995
1999
1996 * IPython/Magic.py (shlex_split): removed call to shell in
2000 * IPython/Magic.py (shlex_split): removed call to shell in
1997 parse_options and replaced it with shlex.split(). The annoying
2001 parse_options and replaced it with shlex.split(). The annoying
1998 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2002 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1999 to backport it from 2.3, with several frail hacks (the shlex
2003 to backport it from 2.3, with several frail hacks (the shlex
2000 module is rather limited in 2.2). Thanks to a suggestion by Ville
2004 module is rather limited in 2.2). Thanks to a suggestion by Ville
2001 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2005 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2002 problem.
2006 problem.
2003
2007
2004 (Magic.magic_system_verbose): new toggle to print the actual
2008 (Magic.magic_system_verbose): new toggle to print the actual
2005 system calls made by ipython. Mainly for debugging purposes.
2009 system calls made by ipython. Mainly for debugging purposes.
2006
2010
2007 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2011 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2008 doesn't support persistence. Reported (and fix suggested) by
2012 doesn't support persistence. Reported (and fix suggested) by
2009 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2013 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2010
2014
2011 2004-06-26 Fernando Perez <fperez@colorado.edu>
2015 2004-06-26 Fernando Perez <fperez@colorado.edu>
2012
2016
2013 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2017 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2014 continue prompts.
2018 continue prompts.
2015
2019
2016 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2020 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2017 function (basically a big docstring) and a few more things here to
2021 function (basically a big docstring) and a few more things here to
2018 speedup startup. pysh.py is now very lightweight. We want because
2022 speedup startup. pysh.py is now very lightweight. We want because
2019 it gets execfile'd, while InterpreterExec gets imported, so
2023 it gets execfile'd, while InterpreterExec gets imported, so
2020 byte-compilation saves time.
2024 byte-compilation saves time.
2021
2025
2022 2004-06-25 Fernando Perez <fperez@colorado.edu>
2026 2004-06-25 Fernando Perez <fperez@colorado.edu>
2023
2027
2024 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2028 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2025 -NUM', which was recently broken.
2029 -NUM', which was recently broken.
2026
2030
2027 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2031 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2028 in multi-line input (but not !!, which doesn't make sense there).
2032 in multi-line input (but not !!, which doesn't make sense there).
2029
2033
2030 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2034 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2031 It's just too useful, and people can turn it off in the less
2035 It's just too useful, and people can turn it off in the less
2032 common cases where it's a problem.
2036 common cases where it's a problem.
2033
2037
2034 2004-06-24 Fernando Perez <fperez@colorado.edu>
2038 2004-06-24 Fernando Perez <fperez@colorado.edu>
2035
2039
2036 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2040 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2037 special syntaxes (like alias calling) is now allied in multi-line
2041 special syntaxes (like alias calling) is now allied in multi-line
2038 input. This is still _very_ experimental, but it's necessary for
2042 input. This is still _very_ experimental, but it's necessary for
2039 efficient shell usage combining python looping syntax with system
2043 efficient shell usage combining python looping syntax with system
2040 calls. For now it's restricted to aliases, I don't think it
2044 calls. For now it's restricted to aliases, I don't think it
2041 really even makes sense to have this for magics.
2045 really even makes sense to have this for magics.
2042
2046
2043 2004-06-23 Fernando Perez <fperez@colorado.edu>
2047 2004-06-23 Fernando Perez <fperez@colorado.edu>
2044
2048
2045 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2049 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2046 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2050 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2047
2051
2048 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2052 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2049 extensions under Windows (after code sent by Gary Bishop). The
2053 extensions under Windows (after code sent by Gary Bishop). The
2050 extensions considered 'executable' are stored in IPython's rc
2054 extensions considered 'executable' are stored in IPython's rc
2051 structure as win_exec_ext.
2055 structure as win_exec_ext.
2052
2056
2053 * IPython/genutils.py (shell): new function, like system() but
2057 * IPython/genutils.py (shell): new function, like system() but
2054 without return value. Very useful for interactive shell work.
2058 without return value. Very useful for interactive shell work.
2055
2059
2056 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2060 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2057 delete aliases.
2061 delete aliases.
2058
2062
2059 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2063 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2060 sure that the alias table doesn't contain python keywords.
2064 sure that the alias table doesn't contain python keywords.
2061
2065
2062 2004-06-21 Fernando Perez <fperez@colorado.edu>
2066 2004-06-21 Fernando Perez <fperez@colorado.edu>
2063
2067
2064 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2068 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2065 non-existent items are found in $PATH. Reported by Thorsten.
2069 non-existent items are found in $PATH. Reported by Thorsten.
2066
2070
2067 2004-06-20 Fernando Perez <fperez@colorado.edu>
2071 2004-06-20 Fernando Perez <fperez@colorado.edu>
2068
2072
2069 * IPython/iplib.py (complete): modified the completer so that the
2073 * IPython/iplib.py (complete): modified the completer so that the
2070 order of priorities can be easily changed at runtime.
2074 order of priorities can be easily changed at runtime.
2071
2075
2072 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2076 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2073 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2077 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2074
2078
2075 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2079 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2076 expand Python variables prepended with $ in all system calls. The
2080 expand Python variables prepended with $ in all system calls. The
2077 same was done to InteractiveShell.handle_shell_escape. Now all
2081 same was done to InteractiveShell.handle_shell_escape. Now all
2078 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2082 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2079 expansion of python variables and expressions according to the
2083 expansion of python variables and expressions according to the
2080 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2084 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2081
2085
2082 Though PEP-215 has been rejected, a similar (but simpler) one
2086 Though PEP-215 has been rejected, a similar (but simpler) one
2083 seems like it will go into Python 2.4, PEP-292 -
2087 seems like it will go into Python 2.4, PEP-292 -
2084 http://www.python.org/peps/pep-0292.html.
2088 http://www.python.org/peps/pep-0292.html.
2085
2089
2086 I'll keep the full syntax of PEP-215, since IPython has since the
2090 I'll keep the full syntax of PEP-215, since IPython has since the
2087 start used Ka-Ping Yee's reference implementation discussed there
2091 start used Ka-Ping Yee's reference implementation discussed there
2088 (Itpl), and I actually like the powerful semantics it offers.
2092 (Itpl), and I actually like the powerful semantics it offers.
2089
2093
2090 In order to access normal shell variables, the $ has to be escaped
2094 In order to access normal shell variables, the $ has to be escaped
2091 via an extra $. For example:
2095 via an extra $. For example:
2092
2096
2093 In [7]: PATH='a python variable'
2097 In [7]: PATH='a python variable'
2094
2098
2095 In [8]: !echo $PATH
2099 In [8]: !echo $PATH
2096 a python variable
2100 a python variable
2097
2101
2098 In [9]: !echo $$PATH
2102 In [9]: !echo $$PATH
2099 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2103 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2100
2104
2101 (Magic.parse_options): escape $ so the shell doesn't evaluate
2105 (Magic.parse_options): escape $ so the shell doesn't evaluate
2102 things prematurely.
2106 things prematurely.
2103
2107
2104 * IPython/iplib.py (InteractiveShell.call_alias): added the
2108 * IPython/iplib.py (InteractiveShell.call_alias): added the
2105 ability for aliases to expand python variables via $.
2109 ability for aliases to expand python variables via $.
2106
2110
2107 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2111 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2108 system, now there's a @rehash/@rehashx pair of magics. These work
2112 system, now there's a @rehash/@rehashx pair of magics. These work
2109 like the csh rehash command, and can be invoked at any time. They
2113 like the csh rehash command, and can be invoked at any time. They
2110 build a table of aliases to everything in the user's $PATH
2114 build a table of aliases to everything in the user's $PATH
2111 (@rehash uses everything, @rehashx is slower but only adds
2115 (@rehash uses everything, @rehashx is slower but only adds
2112 executable files). With this, the pysh.py-based shell profile can
2116 executable files). With this, the pysh.py-based shell profile can
2113 now simply call rehash upon startup, and full access to all
2117 now simply call rehash upon startup, and full access to all
2114 programs in the user's path is obtained.
2118 programs in the user's path is obtained.
2115
2119
2116 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2120 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2117 functionality is now fully in place. I removed the old dynamic
2121 functionality is now fully in place. I removed the old dynamic
2118 code generation based approach, in favor of a much lighter one
2122 code generation based approach, in favor of a much lighter one
2119 based on a simple dict. The advantage is that this allows me to
2123 based on a simple dict. The advantage is that this allows me to
2120 now have thousands of aliases with negligible cost (unthinkable
2124 now have thousands of aliases with negligible cost (unthinkable
2121 with the old system).
2125 with the old system).
2122
2126
2123 2004-06-19 Fernando Perez <fperez@colorado.edu>
2127 2004-06-19 Fernando Perez <fperez@colorado.edu>
2124
2128
2125 * IPython/iplib.py (__init__): extended MagicCompleter class to
2129 * IPython/iplib.py (__init__): extended MagicCompleter class to
2126 also complete (last in priority) on user aliases.
2130 also complete (last in priority) on user aliases.
2127
2131
2128 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2132 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2129 call to eval.
2133 call to eval.
2130 (ItplNS.__init__): Added a new class which functions like Itpl,
2134 (ItplNS.__init__): Added a new class which functions like Itpl,
2131 but allows configuring the namespace for the evaluation to occur
2135 but allows configuring the namespace for the evaluation to occur
2132 in.
2136 in.
2133
2137
2134 2004-06-18 Fernando Perez <fperez@colorado.edu>
2138 2004-06-18 Fernando Perez <fperez@colorado.edu>
2135
2139
2136 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2140 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2137 better message when 'exit' or 'quit' are typed (a common newbie
2141 better message when 'exit' or 'quit' are typed (a common newbie
2138 confusion).
2142 confusion).
2139
2143
2140 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2144 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2141 check for Windows users.
2145 check for Windows users.
2142
2146
2143 * IPython/iplib.py (InteractiveShell.user_setup): removed
2147 * IPython/iplib.py (InteractiveShell.user_setup): removed
2144 disabling of colors for Windows. I'll test at runtime and issue a
2148 disabling of colors for Windows. I'll test at runtime and issue a
2145 warning if Gary's readline isn't found, as to nudge users to
2149 warning if Gary's readline isn't found, as to nudge users to
2146 download it.
2150 download it.
2147
2151
2148 2004-06-16 Fernando Perez <fperez@colorado.edu>
2152 2004-06-16 Fernando Perez <fperez@colorado.edu>
2149
2153
2150 * IPython/genutils.py (Stream.__init__): changed to print errors
2154 * IPython/genutils.py (Stream.__init__): changed to print errors
2151 to sys.stderr. I had a circular dependency here. Now it's
2155 to sys.stderr. I had a circular dependency here. Now it's
2152 possible to run ipython as IDLE's shell (consider this pre-alpha,
2156 possible to run ipython as IDLE's shell (consider this pre-alpha,
2153 since true stdout things end up in the starting terminal instead
2157 since true stdout things end up in the starting terminal instead
2154 of IDLE's out).
2158 of IDLE's out).
2155
2159
2156 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2160 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2157 users who haven't # updated their prompt_in2 definitions. Remove
2161 users who haven't # updated their prompt_in2 definitions. Remove
2158 eventually.
2162 eventually.
2159 (multiple_replace): added credit to original ASPN recipe.
2163 (multiple_replace): added credit to original ASPN recipe.
2160
2164
2161 2004-06-15 Fernando Perez <fperez@colorado.edu>
2165 2004-06-15 Fernando Perez <fperez@colorado.edu>
2162
2166
2163 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2167 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2164 list of auto-defined aliases.
2168 list of auto-defined aliases.
2165
2169
2166 2004-06-13 Fernando Perez <fperez@colorado.edu>
2170 2004-06-13 Fernando Perez <fperez@colorado.edu>
2167
2171
2168 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2172 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2169 install was really requested (so setup.py can be used for other
2173 install was really requested (so setup.py can be used for other
2170 things under Windows).
2174 things under Windows).
2171
2175
2172 2004-06-10 Fernando Perez <fperez@colorado.edu>
2176 2004-06-10 Fernando Perez <fperez@colorado.edu>
2173
2177
2174 * IPython/Logger.py (Logger.create_log): Manually remove any old
2178 * IPython/Logger.py (Logger.create_log): Manually remove any old
2175 backup, since os.remove may fail under Windows. Fixes bug
2179 backup, since os.remove may fail under Windows. Fixes bug
2176 reported by Thorsten.
2180 reported by Thorsten.
2177
2181
2178 2004-06-09 Fernando Perez <fperez@colorado.edu>
2182 2004-06-09 Fernando Perez <fperez@colorado.edu>
2179
2183
2180 * examples/example-embed.py: fixed all references to %n (replaced
2184 * examples/example-embed.py: fixed all references to %n (replaced
2181 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2185 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2182 for all examples and the manual as well.
2186 for all examples and the manual as well.
2183
2187
2184 2004-06-08 Fernando Perez <fperez@colorado.edu>
2188 2004-06-08 Fernando Perez <fperez@colorado.edu>
2185
2189
2186 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2190 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2187 alignment and color management. All 3 prompt subsystems now
2191 alignment and color management. All 3 prompt subsystems now
2188 inherit from BasePrompt.
2192 inherit from BasePrompt.
2189
2193
2190 * tools/release: updates for windows installer build and tag rpms
2194 * tools/release: updates for windows installer build and tag rpms
2191 with python version (since paths are fixed).
2195 with python version (since paths are fixed).
2192
2196
2193 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2197 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2194 which will become eventually obsolete. Also fixed the default
2198 which will become eventually obsolete. Also fixed the default
2195 prompt_in2 to use \D, so at least new users start with the correct
2199 prompt_in2 to use \D, so at least new users start with the correct
2196 defaults.
2200 defaults.
2197 WARNING: Users with existing ipythonrc files will need to apply
2201 WARNING: Users with existing ipythonrc files will need to apply
2198 this fix manually!
2202 this fix manually!
2199
2203
2200 * setup.py: make windows installer (.exe). This is finally the
2204 * setup.py: make windows installer (.exe). This is finally the
2201 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2205 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2202 which I hadn't included because it required Python 2.3 (or recent
2206 which I hadn't included because it required Python 2.3 (or recent
2203 distutils).
2207 distutils).
2204
2208
2205 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2209 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2206 usage of new '\D' escape.
2210 usage of new '\D' escape.
2207
2211
2208 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2212 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2209 lacks os.getuid())
2213 lacks os.getuid())
2210 (CachedOutput.set_colors): Added the ability to turn coloring
2214 (CachedOutput.set_colors): Added the ability to turn coloring
2211 on/off with @colors even for manually defined prompt colors. It
2215 on/off with @colors even for manually defined prompt colors. It
2212 uses a nasty global, but it works safely and via the generic color
2216 uses a nasty global, but it works safely and via the generic color
2213 handling mechanism.
2217 handling mechanism.
2214 (Prompt2.__init__): Introduced new escape '\D' for continuation
2218 (Prompt2.__init__): Introduced new escape '\D' for continuation
2215 prompts. It represents the counter ('\#') as dots.
2219 prompts. It represents the counter ('\#') as dots.
2216 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2220 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2217 need to update their ipythonrc files and replace '%n' with '\D' in
2221 need to update their ipythonrc files and replace '%n' with '\D' in
2218 their prompt_in2 settings everywhere. Sorry, but there's
2222 their prompt_in2 settings everywhere. Sorry, but there's
2219 otherwise no clean way to get all prompts to properly align. The
2223 otherwise no clean way to get all prompts to properly align. The
2220 ipythonrc shipped with IPython has been updated.
2224 ipythonrc shipped with IPython has been updated.
2221
2225
2222 2004-06-07 Fernando Perez <fperez@colorado.edu>
2226 2004-06-07 Fernando Perez <fperez@colorado.edu>
2223
2227
2224 * setup.py (isfile): Pass local_icons option to latex2html, so the
2228 * setup.py (isfile): Pass local_icons option to latex2html, so the
2225 resulting HTML file is self-contained. Thanks to
2229 resulting HTML file is self-contained. Thanks to
2226 dryice-AT-liu.com.cn for the tip.
2230 dryice-AT-liu.com.cn for the tip.
2227
2231
2228 * pysh.py: I created a new profile 'shell', which implements a
2232 * pysh.py: I created a new profile 'shell', which implements a
2229 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2233 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2230 system shell, nor will it become one anytime soon. It's mainly
2234 system shell, nor will it become one anytime soon. It's mainly
2231 meant to illustrate the use of the new flexible bash-like prompts.
2235 meant to illustrate the use of the new flexible bash-like prompts.
2232 I guess it could be used by hardy souls for true shell management,
2236 I guess it could be used by hardy souls for true shell management,
2233 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2237 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2234 profile. This uses the InterpreterExec extension provided by
2238 profile. This uses the InterpreterExec extension provided by
2235 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2239 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2236
2240
2237 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2241 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2238 auto-align itself with the length of the previous input prompt
2242 auto-align itself with the length of the previous input prompt
2239 (taking into account the invisible color escapes).
2243 (taking into account the invisible color escapes).
2240 (CachedOutput.__init__): Large restructuring of this class. Now
2244 (CachedOutput.__init__): Large restructuring of this class. Now
2241 all three prompts (primary1, primary2, output) are proper objects,
2245 all three prompts (primary1, primary2, output) are proper objects,
2242 managed by the 'parent' CachedOutput class. The code is still a
2246 managed by the 'parent' CachedOutput class. The code is still a
2243 bit hackish (all prompts share state via a pointer to the cache),
2247 bit hackish (all prompts share state via a pointer to the cache),
2244 but it's overall far cleaner than before.
2248 but it's overall far cleaner than before.
2245
2249
2246 * IPython/genutils.py (getoutputerror): modified to add verbose,
2250 * IPython/genutils.py (getoutputerror): modified to add verbose,
2247 debug and header options. This makes the interface of all getout*
2251 debug and header options. This makes the interface of all getout*
2248 functions uniform.
2252 functions uniform.
2249 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2253 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2250
2254
2251 * IPython/Magic.py (Magic.default_option): added a function to
2255 * IPython/Magic.py (Magic.default_option): added a function to
2252 allow registering default options for any magic command. This
2256 allow registering default options for any magic command. This
2253 makes it easy to have profiles which customize the magics globally
2257 makes it easy to have profiles which customize the magics globally
2254 for a certain use. The values set through this function are
2258 for a certain use. The values set through this function are
2255 picked up by the parse_options() method, which all magics should
2259 picked up by the parse_options() method, which all magics should
2256 use to parse their options.
2260 use to parse their options.
2257
2261
2258 * IPython/genutils.py (warn): modified the warnings framework to
2262 * IPython/genutils.py (warn): modified the warnings framework to
2259 use the Term I/O class. I'm trying to slowly unify all of
2263 use the Term I/O class. I'm trying to slowly unify all of
2260 IPython's I/O operations to pass through Term.
2264 IPython's I/O operations to pass through Term.
2261
2265
2262 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2266 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2263 the secondary prompt to correctly match the length of the primary
2267 the secondary prompt to correctly match the length of the primary
2264 one for any prompt. Now multi-line code will properly line up
2268 one for any prompt. Now multi-line code will properly line up
2265 even for path dependent prompts, such as the new ones available
2269 even for path dependent prompts, such as the new ones available
2266 via the prompt_specials.
2270 via the prompt_specials.
2267
2271
2268 2004-06-06 Fernando Perez <fperez@colorado.edu>
2272 2004-06-06 Fernando Perez <fperez@colorado.edu>
2269
2273
2270 * IPython/Prompts.py (prompt_specials): Added the ability to have
2274 * IPython/Prompts.py (prompt_specials): Added the ability to have
2271 bash-like special sequences in the prompts, which get
2275 bash-like special sequences in the prompts, which get
2272 automatically expanded. Things like hostname, current working
2276 automatically expanded. Things like hostname, current working
2273 directory and username are implemented already, but it's easy to
2277 directory and username are implemented already, but it's easy to
2274 add more in the future. Thanks to a patch by W.J. van der Laan
2278 add more in the future. Thanks to a patch by W.J. van der Laan
2275 <gnufnork-AT-hetdigitalegat.nl>
2279 <gnufnork-AT-hetdigitalegat.nl>
2276 (prompt_specials): Added color support for prompt strings, so
2280 (prompt_specials): Added color support for prompt strings, so
2277 users can define arbitrary color setups for their prompts.
2281 users can define arbitrary color setups for their prompts.
2278
2282
2279 2004-06-05 Fernando Perez <fperez@colorado.edu>
2283 2004-06-05 Fernando Perez <fperez@colorado.edu>
2280
2284
2281 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2285 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2282 code to load Gary Bishop's readline and configure it
2286 code to load Gary Bishop's readline and configure it
2283 automatically. Thanks to Gary for help on this.
2287 automatically. Thanks to Gary for help on this.
2284
2288
2285 2004-06-01 Fernando Perez <fperez@colorado.edu>
2289 2004-06-01 Fernando Perez <fperez@colorado.edu>
2286
2290
2287 * IPython/Logger.py (Logger.create_log): fix bug for logging
2291 * IPython/Logger.py (Logger.create_log): fix bug for logging
2288 with no filename (previous fix was incomplete).
2292 with no filename (previous fix was incomplete).
2289
2293
2290 2004-05-25 Fernando Perez <fperez@colorado.edu>
2294 2004-05-25 Fernando Perez <fperez@colorado.edu>
2291
2295
2292 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2296 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2293 parens would get passed to the shell.
2297 parens would get passed to the shell.
2294
2298
2295 2004-05-20 Fernando Perez <fperez@colorado.edu>
2299 2004-05-20 Fernando Perez <fperez@colorado.edu>
2296
2300
2297 * IPython/Magic.py (Magic.magic_prun): changed default profile
2301 * IPython/Magic.py (Magic.magic_prun): changed default profile
2298 sort order to 'time' (the more common profiling need).
2302 sort order to 'time' (the more common profiling need).
2299
2303
2300 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2304 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2301 so that source code shown is guaranteed in sync with the file on
2305 so that source code shown is guaranteed in sync with the file on
2302 disk (also changed in psource). Similar fix to the one for
2306 disk (also changed in psource). Similar fix to the one for
2303 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2307 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2304 <yann.ledu-AT-noos.fr>.
2308 <yann.ledu-AT-noos.fr>.
2305
2309
2306 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2310 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2307 with a single option would not be correctly parsed. Closes
2311 with a single option would not be correctly parsed. Closes
2308 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2312 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2309 introduced in 0.6.0 (on 2004-05-06).
2313 introduced in 0.6.0 (on 2004-05-06).
2310
2314
2311 2004-05-13 *** Released version 0.6.0
2315 2004-05-13 *** Released version 0.6.0
2312
2316
2313 2004-05-13 Fernando Perez <fperez@colorado.edu>
2317 2004-05-13 Fernando Perez <fperez@colorado.edu>
2314
2318
2315 * debian/: Added debian/ directory to CVS, so that debian support
2319 * debian/: Added debian/ directory to CVS, so that debian support
2316 is publicly accessible. The debian package is maintained by Jack
2320 is publicly accessible. The debian package is maintained by Jack
2317 Moffit <jack-AT-xiph.org>.
2321 Moffit <jack-AT-xiph.org>.
2318
2322
2319 * Documentation: included the notes about an ipython-based system
2323 * Documentation: included the notes about an ipython-based system
2320 shell (the hypothetical 'pysh') into the new_design.pdf document,
2324 shell (the hypothetical 'pysh') into the new_design.pdf document,
2321 so that these ideas get distributed to users along with the
2325 so that these ideas get distributed to users along with the
2322 official documentation.
2326 official documentation.
2323
2327
2324 2004-05-10 Fernando Perez <fperez@colorado.edu>
2328 2004-05-10 Fernando Perez <fperez@colorado.edu>
2325
2329
2326 * IPython/Logger.py (Logger.create_log): fix recently introduced
2330 * IPython/Logger.py (Logger.create_log): fix recently introduced
2327 bug (misindented line) where logstart would fail when not given an
2331 bug (misindented line) where logstart would fail when not given an
2328 explicit filename.
2332 explicit filename.
2329
2333
2330 2004-05-09 Fernando Perez <fperez@colorado.edu>
2334 2004-05-09 Fernando Perez <fperez@colorado.edu>
2331
2335
2332 * IPython/Magic.py (Magic.parse_options): skip system call when
2336 * IPython/Magic.py (Magic.parse_options): skip system call when
2333 there are no options to look for. Faster, cleaner for the common
2337 there are no options to look for. Faster, cleaner for the common
2334 case.
2338 case.
2335
2339
2336 * Documentation: many updates to the manual: describing Windows
2340 * Documentation: many updates to the manual: describing Windows
2337 support better, Gnuplot updates, credits, misc small stuff. Also
2341 support better, Gnuplot updates, credits, misc small stuff. Also
2338 updated the new_design doc a bit.
2342 updated the new_design doc a bit.
2339
2343
2340 2004-05-06 *** Released version 0.6.0.rc1
2344 2004-05-06 *** Released version 0.6.0.rc1
2341
2345
2342 2004-05-06 Fernando Perez <fperez@colorado.edu>
2346 2004-05-06 Fernando Perez <fperez@colorado.edu>
2343
2347
2344 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2348 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2345 operations to use the vastly more efficient list/''.join() method.
2349 operations to use the vastly more efficient list/''.join() method.
2346 (FormattedTB.text): Fix
2350 (FormattedTB.text): Fix
2347 http://www.scipy.net/roundup/ipython/issue12 - exception source
2351 http://www.scipy.net/roundup/ipython/issue12 - exception source
2348 extract not updated after reload. Thanks to Mike Salib
2352 extract not updated after reload. Thanks to Mike Salib
2349 <msalib-AT-mit.edu> for pinning the source of the problem.
2353 <msalib-AT-mit.edu> for pinning the source of the problem.
2350 Fortunately, the solution works inside ipython and doesn't require
2354 Fortunately, the solution works inside ipython and doesn't require
2351 any changes to python proper.
2355 any changes to python proper.
2352
2356
2353 * IPython/Magic.py (Magic.parse_options): Improved to process the
2357 * IPython/Magic.py (Magic.parse_options): Improved to process the
2354 argument list as a true shell would (by actually using the
2358 argument list as a true shell would (by actually using the
2355 underlying system shell). This way, all @magics automatically get
2359 underlying system shell). This way, all @magics automatically get
2356 shell expansion for variables. Thanks to a comment by Alex
2360 shell expansion for variables. Thanks to a comment by Alex
2357 Schmolck.
2361 Schmolck.
2358
2362
2359 2004-04-04 Fernando Perez <fperez@colorado.edu>
2363 2004-04-04 Fernando Perez <fperez@colorado.edu>
2360
2364
2361 * IPython/iplib.py (InteractiveShell.interact): Added a special
2365 * IPython/iplib.py (InteractiveShell.interact): Added a special
2362 trap for a debugger quit exception, which is basically impossible
2366 trap for a debugger quit exception, which is basically impossible
2363 to handle by normal mechanisms, given what pdb does to the stack.
2367 to handle by normal mechanisms, given what pdb does to the stack.
2364 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2368 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2365
2369
2366 2004-04-03 Fernando Perez <fperez@colorado.edu>
2370 2004-04-03 Fernando Perez <fperez@colorado.edu>
2367
2371
2368 * IPython/genutils.py (Term): Standardized the names of the Term
2372 * IPython/genutils.py (Term): Standardized the names of the Term
2369 class streams to cin/cout/cerr, following C++ naming conventions
2373 class streams to cin/cout/cerr, following C++ naming conventions
2370 (I can't use in/out/err because 'in' is not a valid attribute
2374 (I can't use in/out/err because 'in' is not a valid attribute
2371 name).
2375 name).
2372
2376
2373 * IPython/iplib.py (InteractiveShell.interact): don't increment
2377 * IPython/iplib.py (InteractiveShell.interact): don't increment
2374 the prompt if there's no user input. By Daniel 'Dang' Griffith
2378 the prompt if there's no user input. By Daniel 'Dang' Griffith
2375 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2379 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2376 Francois Pinard.
2380 Francois Pinard.
2377
2381
2378 2004-04-02 Fernando Perez <fperez@colorado.edu>
2382 2004-04-02 Fernando Perez <fperez@colorado.edu>
2379
2383
2380 * IPython/genutils.py (Stream.__init__): Modified to survive at
2384 * IPython/genutils.py (Stream.__init__): Modified to survive at
2381 least importing in contexts where stdin/out/err aren't true file
2385 least importing in contexts where stdin/out/err aren't true file
2382 objects, such as PyCrust (they lack fileno() and mode). However,
2386 objects, such as PyCrust (they lack fileno() and mode). However,
2383 the recovery facilities which rely on these things existing will
2387 the recovery facilities which rely on these things existing will
2384 not work.
2388 not work.
2385
2389
2386 2004-04-01 Fernando Perez <fperez@colorado.edu>
2390 2004-04-01 Fernando Perez <fperez@colorado.edu>
2387
2391
2388 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2392 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2389 use the new getoutputerror() function, so it properly
2393 use the new getoutputerror() function, so it properly
2390 distinguishes stdout/err.
2394 distinguishes stdout/err.
2391
2395
2392 * IPython/genutils.py (getoutputerror): added a function to
2396 * IPython/genutils.py (getoutputerror): added a function to
2393 capture separately the standard output and error of a command.
2397 capture separately the standard output and error of a command.
2394 After a comment from dang on the mailing lists. This code is
2398 After a comment from dang on the mailing lists. This code is
2395 basically a modified version of commands.getstatusoutput(), from
2399 basically a modified version of commands.getstatusoutput(), from
2396 the standard library.
2400 the standard library.
2397
2401
2398 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2402 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2399 '!!' as a special syntax (shorthand) to access @sx.
2403 '!!' as a special syntax (shorthand) to access @sx.
2400
2404
2401 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2405 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2402 command and return its output as a list split on '\n'.
2406 command and return its output as a list split on '\n'.
2403
2407
2404 2004-03-31 Fernando Perez <fperez@colorado.edu>
2408 2004-03-31 Fernando Perez <fperez@colorado.edu>
2405
2409
2406 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2410 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2407 method to dictionaries used as FakeModule instances if they lack
2411 method to dictionaries used as FakeModule instances if they lack
2408 it. At least pydoc in python2.3 breaks for runtime-defined
2412 it. At least pydoc in python2.3 breaks for runtime-defined
2409 functions without this hack. At some point I need to _really_
2413 functions without this hack. At some point I need to _really_
2410 understand what FakeModule is doing, because it's a gross hack.
2414 understand what FakeModule is doing, because it's a gross hack.
2411 But it solves Arnd's problem for now...
2415 But it solves Arnd's problem for now...
2412
2416
2413 2004-02-27 Fernando Perez <fperez@colorado.edu>
2417 2004-02-27 Fernando Perez <fperez@colorado.edu>
2414
2418
2415 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2419 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2416 mode would behave erratically. Also increased the number of
2420 mode would behave erratically. Also increased the number of
2417 possible logs in rotate mod to 999. Thanks to Rod Holland
2421 possible logs in rotate mod to 999. Thanks to Rod Holland
2418 <rhh@StructureLABS.com> for the report and fixes.
2422 <rhh@StructureLABS.com> for the report and fixes.
2419
2423
2420 2004-02-26 Fernando Perez <fperez@colorado.edu>
2424 2004-02-26 Fernando Perez <fperez@colorado.edu>
2421
2425
2422 * IPython/genutils.py (page): Check that the curses module really
2426 * IPython/genutils.py (page): Check that the curses module really
2423 has the initscr attribute before trying to use it. For some
2427 has the initscr attribute before trying to use it. For some
2424 reason, the Solaris curses module is missing this. I think this
2428 reason, the Solaris curses module is missing this. I think this
2425 should be considered a Solaris python bug, but I'm not sure.
2429 should be considered a Solaris python bug, but I'm not sure.
2426
2430
2427 2004-01-17 Fernando Perez <fperez@colorado.edu>
2431 2004-01-17 Fernando Perez <fperez@colorado.edu>
2428
2432
2429 * IPython/genutils.py (Stream.__init__): Changes to try to make
2433 * IPython/genutils.py (Stream.__init__): Changes to try to make
2430 ipython robust against stdin/out/err being closed by the user.
2434 ipython robust against stdin/out/err being closed by the user.
2431 This is 'user error' (and blocks a normal python session, at least
2435 This is 'user error' (and blocks a normal python session, at least
2432 the stdout case). However, Ipython should be able to survive such
2436 the stdout case). However, Ipython should be able to survive such
2433 instances of abuse as gracefully as possible. To simplify the
2437 instances of abuse as gracefully as possible. To simplify the
2434 coding and maintain compatibility with Gary Bishop's Term
2438 coding and maintain compatibility with Gary Bishop's Term
2435 contributions, I've made use of classmethods for this. I think
2439 contributions, I've made use of classmethods for this. I think
2436 this introduces a dependency on python 2.2.
2440 this introduces a dependency on python 2.2.
2437
2441
2438 2004-01-13 Fernando Perez <fperez@colorado.edu>
2442 2004-01-13 Fernando Perez <fperez@colorado.edu>
2439
2443
2440 * IPython/numutils.py (exp_safe): simplified the code a bit and
2444 * IPython/numutils.py (exp_safe): simplified the code a bit and
2441 removed the need for importing the kinds module altogether.
2445 removed the need for importing the kinds module altogether.
2442
2446
2443 2004-01-06 Fernando Perez <fperez@colorado.edu>
2447 2004-01-06 Fernando Perez <fperez@colorado.edu>
2444
2448
2445 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2449 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2446 a magic function instead, after some community feedback. No
2450 a magic function instead, after some community feedback. No
2447 special syntax will exist for it, but its name is deliberately
2451 special syntax will exist for it, but its name is deliberately
2448 very short.
2452 very short.
2449
2453
2450 2003-12-20 Fernando Perez <fperez@colorado.edu>
2454 2003-12-20 Fernando Perez <fperez@colorado.edu>
2451
2455
2452 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2456 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2453 new functionality, to automagically assign the result of a shell
2457 new functionality, to automagically assign the result of a shell
2454 command to a variable. I'll solicit some community feedback on
2458 command to a variable. I'll solicit some community feedback on
2455 this before making it permanent.
2459 this before making it permanent.
2456
2460
2457 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2461 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2458 requested about callables for which inspect couldn't obtain a
2462 requested about callables for which inspect couldn't obtain a
2459 proper argspec. Thanks to a crash report sent by Etienne
2463 proper argspec. Thanks to a crash report sent by Etienne
2460 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2464 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2461
2465
2462 2003-12-09 Fernando Perez <fperez@colorado.edu>
2466 2003-12-09 Fernando Perez <fperez@colorado.edu>
2463
2467
2464 * IPython/genutils.py (page): patch for the pager to work across
2468 * IPython/genutils.py (page): patch for the pager to work across
2465 various versions of Windows. By Gary Bishop.
2469 various versions of Windows. By Gary Bishop.
2466
2470
2467 2003-12-04 Fernando Perez <fperez@colorado.edu>
2471 2003-12-04 Fernando Perez <fperez@colorado.edu>
2468
2472
2469 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2473 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2470 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2474 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2471 While I tested this and it looks ok, there may still be corner
2475 While I tested this and it looks ok, there may still be corner
2472 cases I've missed.
2476 cases I've missed.
2473
2477
2474 2003-12-01 Fernando Perez <fperez@colorado.edu>
2478 2003-12-01 Fernando Perez <fperez@colorado.edu>
2475
2479
2476 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2480 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2477 where a line like 'p,q=1,2' would fail because the automagic
2481 where a line like 'p,q=1,2' would fail because the automagic
2478 system would be triggered for @p.
2482 system would be triggered for @p.
2479
2483
2480 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2484 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2481 cleanups, code unmodified.
2485 cleanups, code unmodified.
2482
2486
2483 * IPython/genutils.py (Term): added a class for IPython to handle
2487 * IPython/genutils.py (Term): added a class for IPython to handle
2484 output. In most cases it will just be a proxy for stdout/err, but
2488 output. In most cases it will just be a proxy for stdout/err, but
2485 having this allows modifications to be made for some platforms,
2489 having this allows modifications to be made for some platforms,
2486 such as handling color escapes under Windows. All of this code
2490 such as handling color escapes under Windows. All of this code
2487 was contributed by Gary Bishop, with minor modifications by me.
2491 was contributed by Gary Bishop, with minor modifications by me.
2488 The actual changes affect many files.
2492 The actual changes affect many files.
2489
2493
2490 2003-11-30 Fernando Perez <fperez@colorado.edu>
2494 2003-11-30 Fernando Perez <fperez@colorado.edu>
2491
2495
2492 * IPython/iplib.py (file_matches): new completion code, courtesy
2496 * IPython/iplib.py (file_matches): new completion code, courtesy
2493 of Jeff Collins. This enables filename completion again under
2497 of Jeff Collins. This enables filename completion again under
2494 python 2.3, which disabled it at the C level.
2498 python 2.3, which disabled it at the C level.
2495
2499
2496 2003-11-11 Fernando Perez <fperez@colorado.edu>
2500 2003-11-11 Fernando Perez <fperez@colorado.edu>
2497
2501
2498 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2502 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2499 for Numeric.array(map(...)), but often convenient.
2503 for Numeric.array(map(...)), but often convenient.
2500
2504
2501 2003-11-05 Fernando Perez <fperez@colorado.edu>
2505 2003-11-05 Fernando Perez <fperez@colorado.edu>
2502
2506
2503 * IPython/numutils.py (frange): Changed a call from int() to
2507 * IPython/numutils.py (frange): Changed a call from int() to
2504 int(round()) to prevent a problem reported with arange() in the
2508 int(round()) to prevent a problem reported with arange() in the
2505 numpy list.
2509 numpy list.
2506
2510
2507 2003-10-06 Fernando Perez <fperez@colorado.edu>
2511 2003-10-06 Fernando Perez <fperez@colorado.edu>
2508
2512
2509 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2513 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2510 prevent crashes if sys lacks an argv attribute (it happens with
2514 prevent crashes if sys lacks an argv attribute (it happens with
2511 embedded interpreters which build a bare-bones sys module).
2515 embedded interpreters which build a bare-bones sys module).
2512 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2516 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2513
2517
2514 2003-09-24 Fernando Perez <fperez@colorado.edu>
2518 2003-09-24 Fernando Perez <fperez@colorado.edu>
2515
2519
2516 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2520 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2517 to protect against poorly written user objects where __getattr__
2521 to protect against poorly written user objects where __getattr__
2518 raises exceptions other than AttributeError. Thanks to a bug
2522 raises exceptions other than AttributeError. Thanks to a bug
2519 report by Oliver Sander <osander-AT-gmx.de>.
2523 report by Oliver Sander <osander-AT-gmx.de>.
2520
2524
2521 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2525 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2522 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2526 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2523
2527
2524 2003-09-09 Fernando Perez <fperez@colorado.edu>
2528 2003-09-09 Fernando Perez <fperez@colorado.edu>
2525
2529
2526 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2530 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2527 unpacking a list whith a callable as first element would
2531 unpacking a list whith a callable as first element would
2528 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2532 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2529 Collins.
2533 Collins.
2530
2534
2531 2003-08-25 *** Released version 0.5.0
2535 2003-08-25 *** Released version 0.5.0
2532
2536
2533 2003-08-22 Fernando Perez <fperez@colorado.edu>
2537 2003-08-22 Fernando Perez <fperez@colorado.edu>
2534
2538
2535 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2539 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2536 improperly defined user exceptions. Thanks to feedback from Mark
2540 improperly defined user exceptions. Thanks to feedback from Mark
2537 Russell <mrussell-AT-verio.net>.
2541 Russell <mrussell-AT-verio.net>.
2538
2542
2539 2003-08-20 Fernando Perez <fperez@colorado.edu>
2543 2003-08-20 Fernando Perez <fperez@colorado.edu>
2540
2544
2541 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2545 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2542 printing so that it would print multi-line string forms starting
2546 printing so that it would print multi-line string forms starting
2543 with a new line. This way the formatting is better respected for
2547 with a new line. This way the formatting is better respected for
2544 objects which work hard to make nice string forms.
2548 objects which work hard to make nice string forms.
2545
2549
2546 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2550 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2547 autocall would overtake data access for objects with both
2551 autocall would overtake data access for objects with both
2548 __getitem__ and __call__.
2552 __getitem__ and __call__.
2549
2553
2550 2003-08-19 *** Released version 0.5.0-rc1
2554 2003-08-19 *** Released version 0.5.0-rc1
2551
2555
2552 2003-08-19 Fernando Perez <fperez@colorado.edu>
2556 2003-08-19 Fernando Perez <fperez@colorado.edu>
2553
2557
2554 * IPython/deep_reload.py (load_tail): single tiny change here
2558 * IPython/deep_reload.py (load_tail): single tiny change here
2555 seems to fix the long-standing bug of dreload() failing to work
2559 seems to fix the long-standing bug of dreload() failing to work
2556 for dotted names. But this module is pretty tricky, so I may have
2560 for dotted names. But this module is pretty tricky, so I may have
2557 missed some subtlety. Needs more testing!.
2561 missed some subtlety. Needs more testing!.
2558
2562
2559 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2563 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2560 exceptions which have badly implemented __str__ methods.
2564 exceptions which have badly implemented __str__ methods.
2561 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2565 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2562 which I've been getting reports about from Python 2.3 users. I
2566 which I've been getting reports about from Python 2.3 users. I
2563 wish I had a simple test case to reproduce the problem, so I could
2567 wish I had a simple test case to reproduce the problem, so I could
2564 either write a cleaner workaround or file a bug report if
2568 either write a cleaner workaround or file a bug report if
2565 necessary.
2569 necessary.
2566
2570
2567 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2571 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2568 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2572 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2569 a bug report by Tjabo Kloppenburg.
2573 a bug report by Tjabo Kloppenburg.
2570
2574
2571 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2575 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2572 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2576 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2573 seems rather unstable. Thanks to a bug report by Tjabo
2577 seems rather unstable. Thanks to a bug report by Tjabo
2574 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2578 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2575
2579
2576 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2580 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2577 this out soon because of the critical fixes in the inner loop for
2581 this out soon because of the critical fixes in the inner loop for
2578 generators.
2582 generators.
2579
2583
2580 * IPython/Magic.py (Magic.getargspec): removed. This (and
2584 * IPython/Magic.py (Magic.getargspec): removed. This (and
2581 _get_def) have been obsoleted by OInspect for a long time, I
2585 _get_def) have been obsoleted by OInspect for a long time, I
2582 hadn't noticed that they were dead code.
2586 hadn't noticed that they were dead code.
2583 (Magic._ofind): restored _ofind functionality for a few literals
2587 (Magic._ofind): restored _ofind functionality for a few literals
2584 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2588 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2585 for things like "hello".capitalize?, since that would require a
2589 for things like "hello".capitalize?, since that would require a
2586 potentially dangerous eval() again.
2590 potentially dangerous eval() again.
2587
2591
2588 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2592 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2589 logic a bit more to clean up the escapes handling and minimize the
2593 logic a bit more to clean up the escapes handling and minimize the
2590 use of _ofind to only necessary cases. The interactive 'feel' of
2594 use of _ofind to only necessary cases. The interactive 'feel' of
2591 IPython should have improved quite a bit with the changes in
2595 IPython should have improved quite a bit with the changes in
2592 _prefilter and _ofind (besides being far safer than before).
2596 _prefilter and _ofind (besides being far safer than before).
2593
2597
2594 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2598 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2595 obscure, never reported). Edit would fail to find the object to
2599 obscure, never reported). Edit would fail to find the object to
2596 edit under some circumstances.
2600 edit under some circumstances.
2597 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2601 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2598 which were causing double-calling of generators. Those eval calls
2602 which were causing double-calling of generators. Those eval calls
2599 were _very_ dangerous, since code with side effects could be
2603 were _very_ dangerous, since code with side effects could be
2600 triggered. As they say, 'eval is evil'... These were the
2604 triggered. As they say, 'eval is evil'... These were the
2601 nastiest evals in IPython. Besides, _ofind is now far simpler,
2605 nastiest evals in IPython. Besides, _ofind is now far simpler,
2602 and it should also be quite a bit faster. Its use of inspect is
2606 and it should also be quite a bit faster. Its use of inspect is
2603 also safer, so perhaps some of the inspect-related crashes I've
2607 also safer, so perhaps some of the inspect-related crashes I've
2604 seen lately with Python 2.3 might be taken care of. That will
2608 seen lately with Python 2.3 might be taken care of. That will
2605 need more testing.
2609 need more testing.
2606
2610
2607 2003-08-17 Fernando Perez <fperez@colorado.edu>
2611 2003-08-17 Fernando Perez <fperez@colorado.edu>
2608
2612
2609 * IPython/iplib.py (InteractiveShell._prefilter): significant
2613 * IPython/iplib.py (InteractiveShell._prefilter): significant
2610 simplifications to the logic for handling user escapes. Faster
2614 simplifications to the logic for handling user escapes. Faster
2611 and simpler code.
2615 and simpler code.
2612
2616
2613 2003-08-14 Fernando Perez <fperez@colorado.edu>
2617 2003-08-14 Fernando Perez <fperez@colorado.edu>
2614
2618
2615 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2619 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2616 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2620 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2617 but it should be quite a bit faster. And the recursive version
2621 but it should be quite a bit faster. And the recursive version
2618 generated O(log N) intermediate storage for all rank>1 arrays,
2622 generated O(log N) intermediate storage for all rank>1 arrays,
2619 even if they were contiguous.
2623 even if they were contiguous.
2620 (l1norm): Added this function.
2624 (l1norm): Added this function.
2621 (norm): Added this function for arbitrary norms (including
2625 (norm): Added this function for arbitrary norms (including
2622 l-infinity). l1 and l2 are still special cases for convenience
2626 l-infinity). l1 and l2 are still special cases for convenience
2623 and speed.
2627 and speed.
2624
2628
2625 2003-08-03 Fernando Perez <fperez@colorado.edu>
2629 2003-08-03 Fernando Perez <fperez@colorado.edu>
2626
2630
2627 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2631 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2628 exceptions, which now raise PendingDeprecationWarnings in Python
2632 exceptions, which now raise PendingDeprecationWarnings in Python
2629 2.3. There were some in Magic and some in Gnuplot2.
2633 2.3. There were some in Magic and some in Gnuplot2.
2630
2634
2631 2003-06-30 Fernando Perez <fperez@colorado.edu>
2635 2003-06-30 Fernando Perez <fperez@colorado.edu>
2632
2636
2633 * IPython/genutils.py (page): modified to call curses only for
2637 * IPython/genutils.py (page): modified to call curses only for
2634 terminals where TERM=='xterm'. After problems under many other
2638 terminals where TERM=='xterm'. After problems under many other
2635 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2639 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2636
2640
2637 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2641 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2638 would be triggered when readline was absent. This was just an old
2642 would be triggered when readline was absent. This was just an old
2639 debugging statement I'd forgotten to take out.
2643 debugging statement I'd forgotten to take out.
2640
2644
2641 2003-06-20 Fernando Perez <fperez@colorado.edu>
2645 2003-06-20 Fernando Perez <fperez@colorado.edu>
2642
2646
2643 * IPython/genutils.py (clock): modified to return only user time
2647 * IPython/genutils.py (clock): modified to return only user time
2644 (not counting system time), after a discussion on scipy. While
2648 (not counting system time), after a discussion on scipy. While
2645 system time may be a useful quantity occasionally, it may much
2649 system time may be a useful quantity occasionally, it may much
2646 more easily be skewed by occasional swapping or other similar
2650 more easily be skewed by occasional swapping or other similar
2647 activity.
2651 activity.
2648
2652
2649 2003-06-05 Fernando Perez <fperez@colorado.edu>
2653 2003-06-05 Fernando Perez <fperez@colorado.edu>
2650
2654
2651 * IPython/numutils.py (identity): new function, for building
2655 * IPython/numutils.py (identity): new function, for building
2652 arbitrary rank Kronecker deltas (mostly backwards compatible with
2656 arbitrary rank Kronecker deltas (mostly backwards compatible with
2653 Numeric.identity)
2657 Numeric.identity)
2654
2658
2655 2003-06-03 Fernando Perez <fperez@colorado.edu>
2659 2003-06-03 Fernando Perez <fperez@colorado.edu>
2656
2660
2657 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2661 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2658 arguments passed to magics with spaces, to allow trailing '\' to
2662 arguments passed to magics with spaces, to allow trailing '\' to
2659 work normally (mainly for Windows users).
2663 work normally (mainly for Windows users).
2660
2664
2661 2003-05-29 Fernando Perez <fperez@colorado.edu>
2665 2003-05-29 Fernando Perez <fperez@colorado.edu>
2662
2666
2663 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2667 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2664 instead of pydoc.help. This fixes a bizarre behavior where
2668 instead of pydoc.help. This fixes a bizarre behavior where
2665 printing '%s' % locals() would trigger the help system. Now
2669 printing '%s' % locals() would trigger the help system. Now
2666 ipython behaves like normal python does.
2670 ipython behaves like normal python does.
2667
2671
2668 Note that if one does 'from pydoc import help', the bizarre
2672 Note that if one does 'from pydoc import help', the bizarre
2669 behavior returns, but this will also happen in normal python, so
2673 behavior returns, but this will also happen in normal python, so
2670 it's not an ipython bug anymore (it has to do with how pydoc.help
2674 it's not an ipython bug anymore (it has to do with how pydoc.help
2671 is implemented).
2675 is implemented).
2672
2676
2673 2003-05-22 Fernando Perez <fperez@colorado.edu>
2677 2003-05-22 Fernando Perez <fperez@colorado.edu>
2674
2678
2675 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2679 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2676 return [] instead of None when nothing matches, also match to end
2680 return [] instead of None when nothing matches, also match to end
2677 of line. Patch by Gary Bishop.
2681 of line. Patch by Gary Bishop.
2678
2682
2679 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2683 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2680 protection as before, for files passed on the command line. This
2684 protection as before, for files passed on the command line. This
2681 prevents the CrashHandler from kicking in if user files call into
2685 prevents the CrashHandler from kicking in if user files call into
2682 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2686 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2683 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2687 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2684
2688
2685 2003-05-20 *** Released version 0.4.0
2689 2003-05-20 *** Released version 0.4.0
2686
2690
2687 2003-05-20 Fernando Perez <fperez@colorado.edu>
2691 2003-05-20 Fernando Perez <fperez@colorado.edu>
2688
2692
2689 * setup.py: added support for manpages. It's a bit hackish b/c of
2693 * setup.py: added support for manpages. It's a bit hackish b/c of
2690 a bug in the way the bdist_rpm distutils target handles gzipped
2694 a bug in the way the bdist_rpm distutils target handles gzipped
2691 manpages, but it works. After a patch by Jack.
2695 manpages, but it works. After a patch by Jack.
2692
2696
2693 2003-05-19 Fernando Perez <fperez@colorado.edu>
2697 2003-05-19 Fernando Perez <fperez@colorado.edu>
2694
2698
2695 * IPython/numutils.py: added a mockup of the kinds module, since
2699 * IPython/numutils.py: added a mockup of the kinds module, since
2696 it was recently removed from Numeric. This way, numutils will
2700 it was recently removed from Numeric. This way, numutils will
2697 work for all users even if they are missing kinds.
2701 work for all users even if they are missing kinds.
2698
2702
2699 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2703 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2700 failure, which can occur with SWIG-wrapped extensions. After a
2704 failure, which can occur with SWIG-wrapped extensions. After a
2701 crash report from Prabhu.
2705 crash report from Prabhu.
2702
2706
2703 2003-05-16 Fernando Perez <fperez@colorado.edu>
2707 2003-05-16 Fernando Perez <fperez@colorado.edu>
2704
2708
2705 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2709 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2706 protect ipython from user code which may call directly
2710 protect ipython from user code which may call directly
2707 sys.excepthook (this looks like an ipython crash to the user, even
2711 sys.excepthook (this looks like an ipython crash to the user, even
2708 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2712 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2709 This is especially important to help users of WxWindows, but may
2713 This is especially important to help users of WxWindows, but may
2710 also be useful in other cases.
2714 also be useful in other cases.
2711
2715
2712 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2716 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2713 an optional tb_offset to be specified, and to preserve exception
2717 an optional tb_offset to be specified, and to preserve exception
2714 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2718 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2715
2719
2716 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2720 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2717
2721
2718 2003-05-15 Fernando Perez <fperez@colorado.edu>
2722 2003-05-15 Fernando Perez <fperez@colorado.edu>
2719
2723
2720 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2724 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2721 installing for a new user under Windows.
2725 installing for a new user under Windows.
2722
2726
2723 2003-05-12 Fernando Perez <fperez@colorado.edu>
2727 2003-05-12 Fernando Perez <fperez@colorado.edu>
2724
2728
2725 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2729 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2726 handler for Emacs comint-based lines. Currently it doesn't do
2730 handler for Emacs comint-based lines. Currently it doesn't do
2727 much (but importantly, it doesn't update the history cache). In
2731 much (but importantly, it doesn't update the history cache). In
2728 the future it may be expanded if Alex needs more functionality
2732 the future it may be expanded if Alex needs more functionality
2729 there.
2733 there.
2730
2734
2731 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2735 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2732 info to crash reports.
2736 info to crash reports.
2733
2737
2734 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2738 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2735 just like Python's -c. Also fixed crash with invalid -color
2739 just like Python's -c. Also fixed crash with invalid -color
2736 option value at startup. Thanks to Will French
2740 option value at startup. Thanks to Will French
2737 <wfrench-AT-bestweb.net> for the bug report.
2741 <wfrench-AT-bestweb.net> for the bug report.
2738
2742
2739 2003-05-09 Fernando Perez <fperez@colorado.edu>
2743 2003-05-09 Fernando Perez <fperez@colorado.edu>
2740
2744
2741 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2745 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2742 to EvalDict (it's a mapping, after all) and simplified its code
2746 to EvalDict (it's a mapping, after all) and simplified its code
2743 quite a bit, after a nice discussion on c.l.py where Gustavo
2747 quite a bit, after a nice discussion on c.l.py where Gustavo
2744 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2748 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2745
2749
2746 2003-04-30 Fernando Perez <fperez@colorado.edu>
2750 2003-04-30 Fernando Perez <fperez@colorado.edu>
2747
2751
2748 * IPython/genutils.py (timings_out): modified it to reduce its
2752 * IPython/genutils.py (timings_out): modified it to reduce its
2749 overhead in the common reps==1 case.
2753 overhead in the common reps==1 case.
2750
2754
2751 2003-04-29 Fernando Perez <fperez@colorado.edu>
2755 2003-04-29 Fernando Perez <fperez@colorado.edu>
2752
2756
2753 * IPython/genutils.py (timings_out): Modified to use the resource
2757 * IPython/genutils.py (timings_out): Modified to use the resource
2754 module, which avoids the wraparound problems of time.clock().
2758 module, which avoids the wraparound problems of time.clock().
2755
2759
2756 2003-04-17 *** Released version 0.2.15pre4
2760 2003-04-17 *** Released version 0.2.15pre4
2757
2761
2758 2003-04-17 Fernando Perez <fperez@colorado.edu>
2762 2003-04-17 Fernando Perez <fperez@colorado.edu>
2759
2763
2760 * setup.py (scriptfiles): Split windows-specific stuff over to a
2764 * setup.py (scriptfiles): Split windows-specific stuff over to a
2761 separate file, in an attempt to have a Windows GUI installer.
2765 separate file, in an attempt to have a Windows GUI installer.
2762 That didn't work, but part of the groundwork is done.
2766 That didn't work, but part of the groundwork is done.
2763
2767
2764 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2768 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2765 indent/unindent with 4 spaces. Particularly useful in combination
2769 indent/unindent with 4 spaces. Particularly useful in combination
2766 with the new auto-indent option.
2770 with the new auto-indent option.
2767
2771
2768 2003-04-16 Fernando Perez <fperez@colorado.edu>
2772 2003-04-16 Fernando Perez <fperez@colorado.edu>
2769
2773
2770 * IPython/Magic.py: various replacements of self.rc for
2774 * IPython/Magic.py: various replacements of self.rc for
2771 self.shell.rc. A lot more remains to be done to fully disentangle
2775 self.shell.rc. A lot more remains to be done to fully disentangle
2772 this class from the main Shell class.
2776 this class from the main Shell class.
2773
2777
2774 * IPython/GnuplotRuntime.py: added checks for mouse support so
2778 * IPython/GnuplotRuntime.py: added checks for mouse support so
2775 that we don't try to enable it if the current gnuplot doesn't
2779 that we don't try to enable it if the current gnuplot doesn't
2776 really support it. Also added checks so that we don't try to
2780 really support it. Also added checks so that we don't try to
2777 enable persist under Windows (where Gnuplot doesn't recognize the
2781 enable persist under Windows (where Gnuplot doesn't recognize the
2778 option).
2782 option).
2779
2783
2780 * IPython/iplib.py (InteractiveShell.interact): Added optional
2784 * IPython/iplib.py (InteractiveShell.interact): Added optional
2781 auto-indenting code, after a patch by King C. Shu
2785 auto-indenting code, after a patch by King C. Shu
2782 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2786 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2783 get along well with pasting indented code. If I ever figure out
2787 get along well with pasting indented code. If I ever figure out
2784 how to make that part go well, it will become on by default.
2788 how to make that part go well, it will become on by default.
2785
2789
2786 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2790 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2787 crash ipython if there was an unmatched '%' in the user's prompt
2791 crash ipython if there was an unmatched '%' in the user's prompt
2788 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2792 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2789
2793
2790 * IPython/iplib.py (InteractiveShell.interact): removed the
2794 * IPython/iplib.py (InteractiveShell.interact): removed the
2791 ability to ask the user whether he wants to crash or not at the
2795 ability to ask the user whether he wants to crash or not at the
2792 'last line' exception handler. Calling functions at that point
2796 'last line' exception handler. Calling functions at that point
2793 changes the stack, and the error reports would have incorrect
2797 changes the stack, and the error reports would have incorrect
2794 tracebacks.
2798 tracebacks.
2795
2799
2796 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2800 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2797 pass through a peger a pretty-printed form of any object. After a
2801 pass through a peger a pretty-printed form of any object. After a
2798 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2802 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2799
2803
2800 2003-04-14 Fernando Perez <fperez@colorado.edu>
2804 2003-04-14 Fernando Perez <fperez@colorado.edu>
2801
2805
2802 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2806 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2803 all files in ~ would be modified at first install (instead of
2807 all files in ~ would be modified at first install (instead of
2804 ~/.ipython). This could be potentially disastrous, as the
2808 ~/.ipython). This could be potentially disastrous, as the
2805 modification (make line-endings native) could damage binary files.
2809 modification (make line-endings native) could damage binary files.
2806
2810
2807 2003-04-10 Fernando Perez <fperez@colorado.edu>
2811 2003-04-10 Fernando Perez <fperez@colorado.edu>
2808
2812
2809 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2813 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2810 handle only lines which are invalid python. This now means that
2814 handle only lines which are invalid python. This now means that
2811 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2815 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2812 for the bug report.
2816 for the bug report.
2813
2817
2814 2003-04-01 Fernando Perez <fperez@colorado.edu>
2818 2003-04-01 Fernando Perez <fperez@colorado.edu>
2815
2819
2816 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2820 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2817 where failing to set sys.last_traceback would crash pdb.pm().
2821 where failing to set sys.last_traceback would crash pdb.pm().
2818 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2822 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2819 report.
2823 report.
2820
2824
2821 2003-03-25 Fernando Perez <fperez@colorado.edu>
2825 2003-03-25 Fernando Perez <fperez@colorado.edu>
2822
2826
2823 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2827 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2824 before printing it (it had a lot of spurious blank lines at the
2828 before printing it (it had a lot of spurious blank lines at the
2825 end).
2829 end).
2826
2830
2827 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2831 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2828 output would be sent 21 times! Obviously people don't use this
2832 output would be sent 21 times! Obviously people don't use this
2829 too often, or I would have heard about it.
2833 too often, or I would have heard about it.
2830
2834
2831 2003-03-24 Fernando Perez <fperez@colorado.edu>
2835 2003-03-24 Fernando Perez <fperez@colorado.edu>
2832
2836
2833 * setup.py (scriptfiles): renamed the data_files parameter from
2837 * setup.py (scriptfiles): renamed the data_files parameter from
2834 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2838 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2835 for the patch.
2839 for the patch.
2836
2840
2837 2003-03-20 Fernando Perez <fperez@colorado.edu>
2841 2003-03-20 Fernando Perez <fperez@colorado.edu>
2838
2842
2839 * IPython/genutils.py (error): added error() and fatal()
2843 * IPython/genutils.py (error): added error() and fatal()
2840 functions.
2844 functions.
2841
2845
2842 2003-03-18 *** Released version 0.2.15pre3
2846 2003-03-18 *** Released version 0.2.15pre3
2843
2847
2844 2003-03-18 Fernando Perez <fperez@colorado.edu>
2848 2003-03-18 Fernando Perez <fperez@colorado.edu>
2845
2849
2846 * setupext/install_data_ext.py
2850 * setupext/install_data_ext.py
2847 (install_data_ext.initialize_options): Class contributed by Jack
2851 (install_data_ext.initialize_options): Class contributed by Jack
2848 Moffit for fixing the old distutils hack. He is sending this to
2852 Moffit for fixing the old distutils hack. He is sending this to
2849 the distutils folks so in the future we may not need it as a
2853 the distutils folks so in the future we may not need it as a
2850 private fix.
2854 private fix.
2851
2855
2852 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2856 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2853 changes for Debian packaging. See his patch for full details.
2857 changes for Debian packaging. See his patch for full details.
2854 The old distutils hack of making the ipythonrc* files carry a
2858 The old distutils hack of making the ipythonrc* files carry a
2855 bogus .py extension is gone, at last. Examples were moved to a
2859 bogus .py extension is gone, at last. Examples were moved to a
2856 separate subdir under doc/, and the separate executable scripts
2860 separate subdir under doc/, and the separate executable scripts
2857 now live in their own directory. Overall a great cleanup. The
2861 now live in their own directory. Overall a great cleanup. The
2858 manual was updated to use the new files, and setup.py has been
2862 manual was updated to use the new files, and setup.py has been
2859 fixed for this setup.
2863 fixed for this setup.
2860
2864
2861 * IPython/PyColorize.py (Parser.usage): made non-executable and
2865 * IPython/PyColorize.py (Parser.usage): made non-executable and
2862 created a pycolor wrapper around it to be included as a script.
2866 created a pycolor wrapper around it to be included as a script.
2863
2867
2864 2003-03-12 *** Released version 0.2.15pre2
2868 2003-03-12 *** Released version 0.2.15pre2
2865
2869
2866 2003-03-12 Fernando Perez <fperez@colorado.edu>
2870 2003-03-12 Fernando Perez <fperez@colorado.edu>
2867
2871
2868 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2872 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2869 long-standing problem with garbage characters in some terminals.
2873 long-standing problem with garbage characters in some terminals.
2870 The issue was really that the \001 and \002 escapes must _only_ be
2874 The issue was really that the \001 and \002 escapes must _only_ be
2871 passed to input prompts (which call readline), but _never_ to
2875 passed to input prompts (which call readline), but _never_ to
2872 normal text to be printed on screen. I changed ColorANSI to have
2876 normal text to be printed on screen. I changed ColorANSI to have
2873 two classes: TermColors and InputTermColors, each with the
2877 two classes: TermColors and InputTermColors, each with the
2874 appropriate escapes for input prompts or normal text. The code in
2878 appropriate escapes for input prompts or normal text. The code in
2875 Prompts.py got slightly more complicated, but this very old and
2879 Prompts.py got slightly more complicated, but this very old and
2876 annoying bug is finally fixed.
2880 annoying bug is finally fixed.
2877
2881
2878 All the credit for nailing down the real origin of this problem
2882 All the credit for nailing down the real origin of this problem
2879 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2883 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2880 *Many* thanks to him for spending quite a bit of effort on this.
2884 *Many* thanks to him for spending quite a bit of effort on this.
2881
2885
2882 2003-03-05 *** Released version 0.2.15pre1
2886 2003-03-05 *** Released version 0.2.15pre1
2883
2887
2884 2003-03-03 Fernando Perez <fperez@colorado.edu>
2888 2003-03-03 Fernando Perez <fperez@colorado.edu>
2885
2889
2886 * IPython/FakeModule.py: Moved the former _FakeModule to a
2890 * IPython/FakeModule.py: Moved the former _FakeModule to a
2887 separate file, because it's also needed by Magic (to fix a similar
2891 separate file, because it's also needed by Magic (to fix a similar
2888 pickle-related issue in @run).
2892 pickle-related issue in @run).
2889
2893
2890 2003-03-02 Fernando Perez <fperez@colorado.edu>
2894 2003-03-02 Fernando Perez <fperez@colorado.edu>
2891
2895
2892 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2896 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2893 the autocall option at runtime.
2897 the autocall option at runtime.
2894 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2898 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2895 across Magic.py to start separating Magic from InteractiveShell.
2899 across Magic.py to start separating Magic from InteractiveShell.
2896 (Magic._ofind): Fixed to return proper namespace for dotted
2900 (Magic._ofind): Fixed to return proper namespace for dotted
2897 names. Before, a dotted name would always return 'not currently
2901 names. Before, a dotted name would always return 'not currently
2898 defined', because it would find the 'parent'. s.x would be found,
2902 defined', because it would find the 'parent'. s.x would be found,
2899 but since 'x' isn't defined by itself, it would get confused.
2903 but since 'x' isn't defined by itself, it would get confused.
2900 (Magic.magic_run): Fixed pickling problems reported by Ralf
2904 (Magic.magic_run): Fixed pickling problems reported by Ralf
2901 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2905 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2902 that I'd used when Mike Heeter reported similar issues at the
2906 that I'd used when Mike Heeter reported similar issues at the
2903 top-level, but now for @run. It boils down to injecting the
2907 top-level, but now for @run. It boils down to injecting the
2904 namespace where code is being executed with something that looks
2908 namespace where code is being executed with something that looks
2905 enough like a module to fool pickle.dump(). Since a pickle stores
2909 enough like a module to fool pickle.dump(). Since a pickle stores
2906 a named reference to the importing module, we need this for
2910 a named reference to the importing module, we need this for
2907 pickles to save something sensible.
2911 pickles to save something sensible.
2908
2912
2909 * IPython/ipmaker.py (make_IPython): added an autocall option.
2913 * IPython/ipmaker.py (make_IPython): added an autocall option.
2910
2914
2911 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2915 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2912 the auto-eval code. Now autocalling is an option, and the code is
2916 the auto-eval code. Now autocalling is an option, and the code is
2913 also vastly safer. There is no more eval() involved at all.
2917 also vastly safer. There is no more eval() involved at all.
2914
2918
2915 2003-03-01 Fernando Perez <fperez@colorado.edu>
2919 2003-03-01 Fernando Perez <fperez@colorado.edu>
2916
2920
2917 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2921 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2918 dict with named keys instead of a tuple.
2922 dict with named keys instead of a tuple.
2919
2923
2920 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2924 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2921
2925
2922 * setup.py (make_shortcut): Fixed message about directories
2926 * setup.py (make_shortcut): Fixed message about directories
2923 created during Windows installation (the directories were ok, just
2927 created during Windows installation (the directories were ok, just
2924 the printed message was misleading). Thanks to Chris Liechti
2928 the printed message was misleading). Thanks to Chris Liechti
2925 <cliechti-AT-gmx.net> for the heads up.
2929 <cliechti-AT-gmx.net> for the heads up.
2926
2930
2927 2003-02-21 Fernando Perez <fperez@colorado.edu>
2931 2003-02-21 Fernando Perez <fperez@colorado.edu>
2928
2932
2929 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2933 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2930 of ValueError exception when checking for auto-execution. This
2934 of ValueError exception when checking for auto-execution. This
2931 one is raised by things like Numeric arrays arr.flat when the
2935 one is raised by things like Numeric arrays arr.flat when the
2932 array is non-contiguous.
2936 array is non-contiguous.
2933
2937
2934 2003-01-31 Fernando Perez <fperez@colorado.edu>
2938 2003-01-31 Fernando Perez <fperez@colorado.edu>
2935
2939
2936 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2940 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2937 not return any value at all (even though the command would get
2941 not return any value at all (even though the command would get
2938 executed).
2942 executed).
2939 (xsys): Flush stdout right after printing the command to ensure
2943 (xsys): Flush stdout right after printing the command to ensure
2940 proper ordering of commands and command output in the total
2944 proper ordering of commands and command output in the total
2941 output.
2945 output.
2942 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2946 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2943 system/getoutput as defaults. The old ones are kept for
2947 system/getoutput as defaults. The old ones are kept for
2944 compatibility reasons, so no code which uses this library needs
2948 compatibility reasons, so no code which uses this library needs
2945 changing.
2949 changing.
2946
2950
2947 2003-01-27 *** Released version 0.2.14
2951 2003-01-27 *** Released version 0.2.14
2948
2952
2949 2003-01-25 Fernando Perez <fperez@colorado.edu>
2953 2003-01-25 Fernando Perez <fperez@colorado.edu>
2950
2954
2951 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2955 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2952 functions defined in previous edit sessions could not be re-edited
2956 functions defined in previous edit sessions could not be re-edited
2953 (because the temp files were immediately removed). Now temp files
2957 (because the temp files were immediately removed). Now temp files
2954 are removed only at IPython's exit.
2958 are removed only at IPython's exit.
2955 (Magic.magic_run): Improved @run to perform shell-like expansions
2959 (Magic.magic_run): Improved @run to perform shell-like expansions
2956 on its arguments (~users and $VARS). With this, @run becomes more
2960 on its arguments (~users and $VARS). With this, @run becomes more
2957 like a normal command-line.
2961 like a normal command-line.
2958
2962
2959 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2963 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2960 bugs related to embedding and cleaned up that code. A fairly
2964 bugs related to embedding and cleaned up that code. A fairly
2961 important one was the impossibility to access the global namespace
2965 important one was the impossibility to access the global namespace
2962 through the embedded IPython (only local variables were visible).
2966 through the embedded IPython (only local variables were visible).
2963
2967
2964 2003-01-14 Fernando Perez <fperez@colorado.edu>
2968 2003-01-14 Fernando Perez <fperez@colorado.edu>
2965
2969
2966 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2970 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2967 auto-calling to be a bit more conservative. Now it doesn't get
2971 auto-calling to be a bit more conservative. Now it doesn't get
2968 triggered if any of '!=()<>' are in the rest of the input line, to
2972 triggered if any of '!=()<>' are in the rest of the input line, to
2969 allow comparing callables. Thanks to Alex for the heads up.
2973 allow comparing callables. Thanks to Alex for the heads up.
2970
2974
2971 2003-01-07 Fernando Perez <fperez@colorado.edu>
2975 2003-01-07 Fernando Perez <fperez@colorado.edu>
2972
2976
2973 * IPython/genutils.py (page): fixed estimation of the number of
2977 * IPython/genutils.py (page): fixed estimation of the number of
2974 lines in a string to be paged to simply count newlines. This
2978 lines in a string to be paged to simply count newlines. This
2975 prevents over-guessing due to embedded escape sequences. A better
2979 prevents over-guessing due to embedded escape sequences. A better
2976 long-term solution would involve stripping out the control chars
2980 long-term solution would involve stripping out the control chars
2977 for the count, but it's potentially so expensive I just don't
2981 for the count, but it's potentially so expensive I just don't
2978 think it's worth doing.
2982 think it's worth doing.
2979
2983
2980 2002-12-19 *** Released version 0.2.14pre50
2984 2002-12-19 *** Released version 0.2.14pre50
2981
2985
2982 2002-12-19 Fernando Perez <fperez@colorado.edu>
2986 2002-12-19 Fernando Perez <fperez@colorado.edu>
2983
2987
2984 * tools/release (version): Changed release scripts to inform
2988 * tools/release (version): Changed release scripts to inform
2985 Andrea and build a NEWS file with a list of recent changes.
2989 Andrea and build a NEWS file with a list of recent changes.
2986
2990
2987 * IPython/ColorANSI.py (__all__): changed terminal detection
2991 * IPython/ColorANSI.py (__all__): changed terminal detection
2988 code. Seems to work better for xterms without breaking
2992 code. Seems to work better for xterms without breaking
2989 konsole. Will need more testing to determine if WinXP and Mac OSX
2993 konsole. Will need more testing to determine if WinXP and Mac OSX
2990 also work ok.
2994 also work ok.
2991
2995
2992 2002-12-18 *** Released version 0.2.14pre49
2996 2002-12-18 *** Released version 0.2.14pre49
2993
2997
2994 2002-12-18 Fernando Perez <fperez@colorado.edu>
2998 2002-12-18 Fernando Perez <fperez@colorado.edu>
2995
2999
2996 * Docs: added new info about Mac OSX, from Andrea.
3000 * Docs: added new info about Mac OSX, from Andrea.
2997
3001
2998 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3002 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2999 allow direct plotting of python strings whose format is the same
3003 allow direct plotting of python strings whose format is the same
3000 of gnuplot data files.
3004 of gnuplot data files.
3001
3005
3002 2002-12-16 Fernando Perez <fperez@colorado.edu>
3006 2002-12-16 Fernando Perez <fperez@colorado.edu>
3003
3007
3004 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3008 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3005 value of exit question to be acknowledged.
3009 value of exit question to be acknowledged.
3006
3010
3007 2002-12-03 Fernando Perez <fperez@colorado.edu>
3011 2002-12-03 Fernando Perez <fperez@colorado.edu>
3008
3012
3009 * IPython/ipmaker.py: removed generators, which had been added
3013 * IPython/ipmaker.py: removed generators, which had been added
3010 by mistake in an earlier debugging run. This was causing trouble
3014 by mistake in an earlier debugging run. This was causing trouble
3011 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3015 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3012 for pointing this out.
3016 for pointing this out.
3013
3017
3014 2002-11-17 Fernando Perez <fperez@colorado.edu>
3018 2002-11-17 Fernando Perez <fperez@colorado.edu>
3015
3019
3016 * Manual: updated the Gnuplot section.
3020 * Manual: updated the Gnuplot section.
3017
3021
3018 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3022 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3019 a much better split of what goes in Runtime and what goes in
3023 a much better split of what goes in Runtime and what goes in
3020 Interactive.
3024 Interactive.
3021
3025
3022 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3026 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3023 being imported from iplib.
3027 being imported from iplib.
3024
3028
3025 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3029 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3026 for command-passing. Now the global Gnuplot instance is called
3030 for command-passing. Now the global Gnuplot instance is called
3027 'gp' instead of 'g', which was really a far too fragile and
3031 'gp' instead of 'g', which was really a far too fragile and
3028 common name.
3032 common name.
3029
3033
3030 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3034 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3031 bounding boxes generated by Gnuplot for square plots.
3035 bounding boxes generated by Gnuplot for square plots.
3032
3036
3033 * IPython/genutils.py (popkey): new function added. I should
3037 * IPython/genutils.py (popkey): new function added. I should
3034 suggest this on c.l.py as a dict method, it seems useful.
3038 suggest this on c.l.py as a dict method, it seems useful.
3035
3039
3036 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3040 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3037 to transparently handle PostScript generation. MUCH better than
3041 to transparently handle PostScript generation. MUCH better than
3038 the previous plot_eps/replot_eps (which I removed now). The code
3042 the previous plot_eps/replot_eps (which I removed now). The code
3039 is also fairly clean and well documented now (including
3043 is also fairly clean and well documented now (including
3040 docstrings).
3044 docstrings).
3041
3045
3042 2002-11-13 Fernando Perez <fperez@colorado.edu>
3046 2002-11-13 Fernando Perez <fperez@colorado.edu>
3043
3047
3044 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3048 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3045 (inconsistent with options).
3049 (inconsistent with options).
3046
3050
3047 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3051 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3048 manually disabled, I don't know why. Fixed it.
3052 manually disabled, I don't know why. Fixed it.
3049 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3053 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3050 eps output.
3054 eps output.
3051
3055
3052 2002-11-12 Fernando Perez <fperez@colorado.edu>
3056 2002-11-12 Fernando Perez <fperez@colorado.edu>
3053
3057
3054 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3058 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3055 don't propagate up to caller. Fixes crash reported by François
3059 don't propagate up to caller. Fixes crash reported by François
3056 Pinard.
3060 Pinard.
3057
3061
3058 2002-11-09 Fernando Perez <fperez@colorado.edu>
3062 2002-11-09 Fernando Perez <fperez@colorado.edu>
3059
3063
3060 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3064 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3061 history file for new users.
3065 history file for new users.
3062 (make_IPython): fixed bug where initial install would leave the
3066 (make_IPython): fixed bug where initial install would leave the
3063 user running in the .ipython dir.
3067 user running in the .ipython dir.
3064 (make_IPython): fixed bug where config dir .ipython would be
3068 (make_IPython): fixed bug where config dir .ipython would be
3065 created regardless of the given -ipythondir option. Thanks to Cory
3069 created regardless of the given -ipythondir option. Thanks to Cory
3066 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3070 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3067
3071
3068 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3072 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3069 type confirmations. Will need to use it in all of IPython's code
3073 type confirmations. Will need to use it in all of IPython's code
3070 consistently.
3074 consistently.
3071
3075
3072 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3076 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3073 context to print 31 lines instead of the default 5. This will make
3077 context to print 31 lines instead of the default 5. This will make
3074 the crash reports extremely detailed in case the problem is in
3078 the crash reports extremely detailed in case the problem is in
3075 libraries I don't have access to.
3079 libraries I don't have access to.
3076
3080
3077 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3081 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3078 line of defense' code to still crash, but giving users fair
3082 line of defense' code to still crash, but giving users fair
3079 warning. I don't want internal errors to go unreported: if there's
3083 warning. I don't want internal errors to go unreported: if there's
3080 an internal problem, IPython should crash and generate a full
3084 an internal problem, IPython should crash and generate a full
3081 report.
3085 report.
3082
3086
3083 2002-11-08 Fernando Perez <fperez@colorado.edu>
3087 2002-11-08 Fernando Perez <fperez@colorado.edu>
3084
3088
3085 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3089 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3086 otherwise uncaught exceptions which can appear if people set
3090 otherwise uncaught exceptions which can appear if people set
3087 sys.stdout to something badly broken. Thanks to a crash report
3091 sys.stdout to something badly broken. Thanks to a crash report
3088 from henni-AT-mail.brainbot.com.
3092 from henni-AT-mail.brainbot.com.
3089
3093
3090 2002-11-04 Fernando Perez <fperez@colorado.edu>
3094 2002-11-04 Fernando Perez <fperez@colorado.edu>
3091
3095
3092 * IPython/iplib.py (InteractiveShell.interact): added
3096 * IPython/iplib.py (InteractiveShell.interact): added
3093 __IPYTHON__active to the builtins. It's a flag which goes on when
3097 __IPYTHON__active to the builtins. It's a flag which goes on when
3094 the interaction starts and goes off again when it stops. This
3098 the interaction starts and goes off again when it stops. This
3095 allows embedding code to detect being inside IPython. Before this
3099 allows embedding code to detect being inside IPython. Before this
3096 was done via __IPYTHON__, but that only shows that an IPython
3100 was done via __IPYTHON__, but that only shows that an IPython
3097 instance has been created.
3101 instance has been created.
3098
3102
3099 * IPython/Magic.py (Magic.magic_env): I realized that in a
3103 * IPython/Magic.py (Magic.magic_env): I realized that in a
3100 UserDict, instance.data holds the data as a normal dict. So I
3104 UserDict, instance.data holds the data as a normal dict. So I
3101 modified @env to return os.environ.data instead of rebuilding a
3105 modified @env to return os.environ.data instead of rebuilding a
3102 dict by hand.
3106 dict by hand.
3103
3107
3104 2002-11-02 Fernando Perez <fperez@colorado.edu>
3108 2002-11-02 Fernando Perez <fperez@colorado.edu>
3105
3109
3106 * IPython/genutils.py (warn): changed so that level 1 prints no
3110 * IPython/genutils.py (warn): changed so that level 1 prints no
3107 header. Level 2 is now the default (with 'WARNING' header, as
3111 header. Level 2 is now the default (with 'WARNING' header, as
3108 before). I think I tracked all places where changes were needed in
3112 before). I think I tracked all places where changes were needed in
3109 IPython, but outside code using the old level numbering may have
3113 IPython, but outside code using the old level numbering may have
3110 broken.
3114 broken.
3111
3115
3112 * IPython/iplib.py (InteractiveShell.runcode): added this to
3116 * IPython/iplib.py (InteractiveShell.runcode): added this to
3113 handle the tracebacks in SystemExit traps correctly. The previous
3117 handle the tracebacks in SystemExit traps correctly. The previous
3114 code (through interact) was printing more of the stack than
3118 code (through interact) was printing more of the stack than
3115 necessary, showing IPython internal code to the user.
3119 necessary, showing IPython internal code to the user.
3116
3120
3117 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3121 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3118 default. Now that the default at the confirmation prompt is yes,
3122 default. Now that the default at the confirmation prompt is yes,
3119 it's not so intrusive. François' argument that ipython sessions
3123 it's not so intrusive. François' argument that ipython sessions
3120 tend to be complex enough not to lose them from an accidental C-d,
3124 tend to be complex enough not to lose them from an accidental C-d,
3121 is a valid one.
3125 is a valid one.
3122
3126
3123 * IPython/iplib.py (InteractiveShell.interact): added a
3127 * IPython/iplib.py (InteractiveShell.interact): added a
3124 showtraceback() call to the SystemExit trap, and modified the exit
3128 showtraceback() call to the SystemExit trap, and modified the exit
3125 confirmation to have yes as the default.
3129 confirmation to have yes as the default.
3126
3130
3127 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3131 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3128 this file. It's been gone from the code for a long time, this was
3132 this file. It's been gone from the code for a long time, this was
3129 simply leftover junk.
3133 simply leftover junk.
3130
3134
3131 2002-11-01 Fernando Perez <fperez@colorado.edu>
3135 2002-11-01 Fernando Perez <fperez@colorado.edu>
3132
3136
3133 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3137 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3134 added. If set, IPython now traps EOF and asks for
3138 added. If set, IPython now traps EOF and asks for
3135 confirmation. After a request by François Pinard.
3139 confirmation. After a request by François Pinard.
3136
3140
3137 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3141 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3138 of @abort, and with a new (better) mechanism for handling the
3142 of @abort, and with a new (better) mechanism for handling the
3139 exceptions.
3143 exceptions.
3140
3144
3141 2002-10-27 Fernando Perez <fperez@colorado.edu>
3145 2002-10-27 Fernando Perez <fperez@colorado.edu>
3142
3146
3143 * IPython/usage.py (__doc__): updated the --help information and
3147 * IPython/usage.py (__doc__): updated the --help information and
3144 the ipythonrc file to indicate that -log generates
3148 the ipythonrc file to indicate that -log generates
3145 ./ipython.log. Also fixed the corresponding info in @logstart.
3149 ./ipython.log. Also fixed the corresponding info in @logstart.
3146 This and several other fixes in the manuals thanks to reports by
3150 This and several other fixes in the manuals thanks to reports by
3147 François Pinard <pinard-AT-iro.umontreal.ca>.
3151 François Pinard <pinard-AT-iro.umontreal.ca>.
3148
3152
3149 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3153 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3150 refer to @logstart (instead of @log, which doesn't exist).
3154 refer to @logstart (instead of @log, which doesn't exist).
3151
3155
3152 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3156 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3153 AttributeError crash. Thanks to Christopher Armstrong
3157 AttributeError crash. Thanks to Christopher Armstrong
3154 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3158 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3155 introduced recently (in 0.2.14pre37) with the fix to the eval
3159 introduced recently (in 0.2.14pre37) with the fix to the eval
3156 problem mentioned below.
3160 problem mentioned below.
3157
3161
3158 2002-10-17 Fernando Perez <fperez@colorado.edu>
3162 2002-10-17 Fernando Perez <fperez@colorado.edu>
3159
3163
3160 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3164 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3161 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3165 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3162
3166
3163 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3167 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3164 this function to fix a problem reported by Alex Schmolck. He saw
3168 this function to fix a problem reported by Alex Schmolck. He saw
3165 it with list comprehensions and generators, which were getting
3169 it with list comprehensions and generators, which were getting
3166 called twice. The real problem was an 'eval' call in testing for
3170 called twice. The real problem was an 'eval' call in testing for
3167 automagic which was evaluating the input line silently.
3171 automagic which was evaluating the input line silently.
3168
3172
3169 This is a potentially very nasty bug, if the input has side
3173 This is a potentially very nasty bug, if the input has side
3170 effects which must not be repeated. The code is much cleaner now,
3174 effects which must not be repeated. The code is much cleaner now,
3171 without any blanket 'except' left and with a regexp test for
3175 without any blanket 'except' left and with a regexp test for
3172 actual function names.
3176 actual function names.
3173
3177
3174 But an eval remains, which I'm not fully comfortable with. I just
3178 But an eval remains, which I'm not fully comfortable with. I just
3175 don't know how to find out if an expression could be a callable in
3179 don't know how to find out if an expression could be a callable in
3176 the user's namespace without doing an eval on the string. However
3180 the user's namespace without doing an eval on the string. However
3177 that string is now much more strictly checked so that no code
3181 that string is now much more strictly checked so that no code
3178 slips by, so the eval should only happen for things that can
3182 slips by, so the eval should only happen for things that can
3179 really be only function/method names.
3183 really be only function/method names.
3180
3184
3181 2002-10-15 Fernando Perez <fperez@colorado.edu>
3185 2002-10-15 Fernando Perez <fperez@colorado.edu>
3182
3186
3183 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3187 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3184 OSX information to main manual, removed README_Mac_OSX file from
3188 OSX information to main manual, removed README_Mac_OSX file from
3185 distribution. Also updated credits for recent additions.
3189 distribution. Also updated credits for recent additions.
3186
3190
3187 2002-10-10 Fernando Perez <fperez@colorado.edu>
3191 2002-10-10 Fernando Perez <fperez@colorado.edu>
3188
3192
3189 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3193 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3190 terminal-related issues. Many thanks to Andrea Riciputi
3194 terminal-related issues. Many thanks to Andrea Riciputi
3191 <andrea.riciputi-AT-libero.it> for writing it.
3195 <andrea.riciputi-AT-libero.it> for writing it.
3192
3196
3193 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3197 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3194 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3198 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3195
3199
3196 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3200 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3197 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3201 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3198 <syver-en-AT-online.no> who both submitted patches for this problem.
3202 <syver-en-AT-online.no> who both submitted patches for this problem.
3199
3203
3200 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3204 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3201 global embedding to make sure that things don't overwrite user
3205 global embedding to make sure that things don't overwrite user
3202 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3206 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3203
3207
3204 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3208 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3205 compatibility. Thanks to Hayden Callow
3209 compatibility. Thanks to Hayden Callow
3206 <h.callow-AT-elec.canterbury.ac.nz>
3210 <h.callow-AT-elec.canterbury.ac.nz>
3207
3211
3208 2002-10-04 Fernando Perez <fperez@colorado.edu>
3212 2002-10-04 Fernando Perez <fperez@colorado.edu>
3209
3213
3210 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3214 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3211 Gnuplot.File objects.
3215 Gnuplot.File objects.
3212
3216
3213 2002-07-23 Fernando Perez <fperez@colorado.edu>
3217 2002-07-23 Fernando Perez <fperez@colorado.edu>
3214
3218
3215 * IPython/genutils.py (timing): Added timings() and timing() for
3219 * IPython/genutils.py (timing): Added timings() and timing() for
3216 quick access to the most commonly needed data, the execution
3220 quick access to the most commonly needed data, the execution
3217 times. Old timing() renamed to timings_out().
3221 times. Old timing() renamed to timings_out().
3218
3222
3219 2002-07-18 Fernando Perez <fperez@colorado.edu>
3223 2002-07-18 Fernando Perez <fperez@colorado.edu>
3220
3224
3221 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3225 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3222 bug with nested instances disrupting the parent's tab completion.
3226 bug with nested instances disrupting the parent's tab completion.
3223
3227
3224 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3228 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3225 all_completions code to begin the emacs integration.
3229 all_completions code to begin the emacs integration.
3226
3230
3227 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3231 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3228 argument to allow titling individual arrays when plotting.
3232 argument to allow titling individual arrays when plotting.
3229
3233
3230 2002-07-15 Fernando Perez <fperez@colorado.edu>
3234 2002-07-15 Fernando Perez <fperez@colorado.edu>
3231
3235
3232 * setup.py (make_shortcut): changed to retrieve the value of
3236 * setup.py (make_shortcut): changed to retrieve the value of
3233 'Program Files' directory from the registry (this value changes in
3237 'Program Files' directory from the registry (this value changes in
3234 non-english versions of Windows). Thanks to Thomas Fanslau
3238 non-english versions of Windows). Thanks to Thomas Fanslau
3235 <tfanslau-AT-gmx.de> for the report.
3239 <tfanslau-AT-gmx.de> for the report.
3236
3240
3237 2002-07-10 Fernando Perez <fperez@colorado.edu>
3241 2002-07-10 Fernando Perez <fperez@colorado.edu>
3238
3242
3239 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3243 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3240 a bug in pdb, which crashes if a line with only whitespace is
3244 a bug in pdb, which crashes if a line with only whitespace is
3241 entered. Bug report submitted to sourceforge.
3245 entered. Bug report submitted to sourceforge.
3242
3246
3243 2002-07-09 Fernando Perez <fperez@colorado.edu>
3247 2002-07-09 Fernando Perez <fperez@colorado.edu>
3244
3248
3245 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3249 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3246 reporting exceptions (it's a bug in inspect.py, I just set a
3250 reporting exceptions (it's a bug in inspect.py, I just set a
3247 workaround).
3251 workaround).
3248
3252
3249 2002-07-08 Fernando Perez <fperez@colorado.edu>
3253 2002-07-08 Fernando Perez <fperez@colorado.edu>
3250
3254
3251 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3255 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3252 __IPYTHON__ in __builtins__ to show up in user_ns.
3256 __IPYTHON__ in __builtins__ to show up in user_ns.
3253
3257
3254 2002-07-03 Fernando Perez <fperez@colorado.edu>
3258 2002-07-03 Fernando Perez <fperez@colorado.edu>
3255
3259
3256 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3260 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3257 name from @gp_set_instance to @gp_set_default.
3261 name from @gp_set_instance to @gp_set_default.
3258
3262
3259 * IPython/ipmaker.py (make_IPython): default editor value set to
3263 * IPython/ipmaker.py (make_IPython): default editor value set to
3260 '0' (a string), to match the rc file. Otherwise will crash when
3264 '0' (a string), to match the rc file. Otherwise will crash when
3261 .strip() is called on it.
3265 .strip() is called on it.
3262
3266
3263
3267
3264 2002-06-28 Fernando Perez <fperez@colorado.edu>
3268 2002-06-28 Fernando Perez <fperez@colorado.edu>
3265
3269
3266 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3270 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3267 of files in current directory when a file is executed via
3271 of files in current directory when a file is executed via
3268 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3272 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3269
3273
3270 * setup.py (manfiles): fix for rpm builds, submitted by RA
3274 * setup.py (manfiles): fix for rpm builds, submitted by RA
3271 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3275 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3272
3276
3273 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3277 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3274 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3278 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3275 string!). A. Schmolck caught this one.
3279 string!). A. Schmolck caught this one.
3276
3280
3277 2002-06-27 Fernando Perez <fperez@colorado.edu>
3281 2002-06-27 Fernando Perez <fperez@colorado.edu>
3278
3282
3279 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3283 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3280 defined files at the cmd line. __name__ wasn't being set to
3284 defined files at the cmd line. __name__ wasn't being set to
3281 __main__.
3285 __main__.
3282
3286
3283 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3287 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3284 regular lists and tuples besides Numeric arrays.
3288 regular lists and tuples besides Numeric arrays.
3285
3289
3286 * IPython/Prompts.py (CachedOutput.__call__): Added output
3290 * IPython/Prompts.py (CachedOutput.__call__): Added output
3287 supression for input ending with ';'. Similar to Mathematica and
3291 supression for input ending with ';'. Similar to Mathematica and
3288 Matlab. The _* vars and Out[] list are still updated, just like
3292 Matlab. The _* vars and Out[] list are still updated, just like
3289 Mathematica behaves.
3293 Mathematica behaves.
3290
3294
3291 2002-06-25 Fernando Perez <fperez@colorado.edu>
3295 2002-06-25 Fernando Perez <fperez@colorado.edu>
3292
3296
3293 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3297 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3294 .ini extensions for profiels under Windows.
3298 .ini extensions for profiels under Windows.
3295
3299
3296 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3300 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3297 string form. Fix contributed by Alexander Schmolck
3301 string form. Fix contributed by Alexander Schmolck
3298 <a.schmolck-AT-gmx.net>
3302 <a.schmolck-AT-gmx.net>
3299
3303
3300 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3304 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3301 pre-configured Gnuplot instance.
3305 pre-configured Gnuplot instance.
3302
3306
3303 2002-06-21 Fernando Perez <fperez@colorado.edu>
3307 2002-06-21 Fernando Perez <fperez@colorado.edu>
3304
3308
3305 * IPython/numutils.py (exp_safe): new function, works around the
3309 * IPython/numutils.py (exp_safe): new function, works around the
3306 underflow problems in Numeric.
3310 underflow problems in Numeric.
3307 (log2): New fn. Safe log in base 2: returns exact integer answer
3311 (log2): New fn. Safe log in base 2: returns exact integer answer
3308 for exact integer powers of 2.
3312 for exact integer powers of 2.
3309
3313
3310 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3314 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3311 properly.
3315 properly.
3312
3316
3313 2002-06-20 Fernando Perez <fperez@colorado.edu>
3317 2002-06-20 Fernando Perez <fperez@colorado.edu>
3314
3318
3315 * IPython/genutils.py (timing): new function like
3319 * IPython/genutils.py (timing): new function like
3316 Mathematica's. Similar to time_test, but returns more info.
3320 Mathematica's. Similar to time_test, but returns more info.
3317
3321
3318 2002-06-18 Fernando Perez <fperez@colorado.edu>
3322 2002-06-18 Fernando Perez <fperez@colorado.edu>
3319
3323
3320 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3324 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3321 according to Mike Heeter's suggestions.
3325 according to Mike Heeter's suggestions.
3322
3326
3323 2002-06-16 Fernando Perez <fperez@colorado.edu>
3327 2002-06-16 Fernando Perez <fperez@colorado.edu>
3324
3328
3325 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3329 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3326 system. GnuplotMagic is gone as a user-directory option. New files
3330 system. GnuplotMagic is gone as a user-directory option. New files
3327 make it easier to use all the gnuplot stuff both from external
3331 make it easier to use all the gnuplot stuff both from external
3328 programs as well as from IPython. Had to rewrite part of
3332 programs as well as from IPython. Had to rewrite part of
3329 hardcopy() b/c of a strange bug: often the ps files simply don't
3333 hardcopy() b/c of a strange bug: often the ps files simply don't
3330 get created, and require a repeat of the command (often several
3334 get created, and require a repeat of the command (often several
3331 times).
3335 times).
3332
3336
3333 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3337 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3334 resolve output channel at call time, so that if sys.stderr has
3338 resolve output channel at call time, so that if sys.stderr has
3335 been redirected by user this gets honored.
3339 been redirected by user this gets honored.
3336
3340
3337 2002-06-13 Fernando Perez <fperez@colorado.edu>
3341 2002-06-13 Fernando Perez <fperez@colorado.edu>
3338
3342
3339 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3343 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3340 IPShell. Kept a copy with the old names to avoid breaking people's
3344 IPShell. Kept a copy with the old names to avoid breaking people's
3341 embedded code.
3345 embedded code.
3342
3346
3343 * IPython/ipython: simplified it to the bare minimum after
3347 * IPython/ipython: simplified it to the bare minimum after
3344 Holger's suggestions. Added info about how to use it in
3348 Holger's suggestions. Added info about how to use it in
3345 PYTHONSTARTUP.
3349 PYTHONSTARTUP.
3346
3350
3347 * IPython/Shell.py (IPythonShell): changed the options passing
3351 * IPython/Shell.py (IPythonShell): changed the options passing
3348 from a string with funky %s replacements to a straight list. Maybe
3352 from a string with funky %s replacements to a straight list. Maybe
3349 a bit more typing, but it follows sys.argv conventions, so there's
3353 a bit more typing, but it follows sys.argv conventions, so there's
3350 less special-casing to remember.
3354 less special-casing to remember.
3351
3355
3352 2002-06-12 Fernando Perez <fperez@colorado.edu>
3356 2002-06-12 Fernando Perez <fperez@colorado.edu>
3353
3357
3354 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3358 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3355 command. Thanks to a suggestion by Mike Heeter.
3359 command. Thanks to a suggestion by Mike Heeter.
3356 (Magic.magic_pfile): added behavior to look at filenames if given
3360 (Magic.magic_pfile): added behavior to look at filenames if given
3357 arg is not a defined object.
3361 arg is not a defined object.
3358 (Magic.magic_save): New @save function to save code snippets. Also
3362 (Magic.magic_save): New @save function to save code snippets. Also
3359 a Mike Heeter idea.
3363 a Mike Heeter idea.
3360
3364
3361 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3365 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3362 plot() and replot(). Much more convenient now, especially for
3366 plot() and replot(). Much more convenient now, especially for
3363 interactive use.
3367 interactive use.
3364
3368
3365 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3369 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3366 filenames.
3370 filenames.
3367
3371
3368 2002-06-02 Fernando Perez <fperez@colorado.edu>
3372 2002-06-02 Fernando Perez <fperez@colorado.edu>
3369
3373
3370 * IPython/Struct.py (Struct.__init__): modified to admit
3374 * IPython/Struct.py (Struct.__init__): modified to admit
3371 initialization via another struct.
3375 initialization via another struct.
3372
3376
3373 * IPython/genutils.py (SystemExec.__init__): New stateful
3377 * IPython/genutils.py (SystemExec.__init__): New stateful
3374 interface to xsys and bq. Useful for writing system scripts.
3378 interface to xsys and bq. Useful for writing system scripts.
3375
3379
3376 2002-05-30 Fernando Perez <fperez@colorado.edu>
3380 2002-05-30 Fernando Perez <fperez@colorado.edu>
3377
3381
3378 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3382 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3379 documents. This will make the user download smaller (it's getting
3383 documents. This will make the user download smaller (it's getting
3380 too big).
3384 too big).
3381
3385
3382 2002-05-29 Fernando Perez <fperez@colorado.edu>
3386 2002-05-29 Fernando Perez <fperez@colorado.edu>
3383
3387
3384 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3388 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3385 fix problems with shelve and pickle. Seems to work, but I don't
3389 fix problems with shelve and pickle. Seems to work, but I don't
3386 know if corner cases break it. Thanks to Mike Heeter
3390 know if corner cases break it. Thanks to Mike Heeter
3387 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3391 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3388
3392
3389 2002-05-24 Fernando Perez <fperez@colorado.edu>
3393 2002-05-24 Fernando Perez <fperez@colorado.edu>
3390
3394
3391 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3395 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3392 macros having broken.
3396 macros having broken.
3393
3397
3394 2002-05-21 Fernando Perez <fperez@colorado.edu>
3398 2002-05-21 Fernando Perez <fperez@colorado.edu>
3395
3399
3396 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3400 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3397 introduced logging bug: all history before logging started was
3401 introduced logging bug: all history before logging started was
3398 being written one character per line! This came from the redesign
3402 being written one character per line! This came from the redesign
3399 of the input history as a special list which slices to strings,
3403 of the input history as a special list which slices to strings,
3400 not to lists.
3404 not to lists.
3401
3405
3402 2002-05-20 Fernando Perez <fperez@colorado.edu>
3406 2002-05-20 Fernando Perez <fperez@colorado.edu>
3403
3407
3404 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3408 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3405 be an attribute of all classes in this module. The design of these
3409 be an attribute of all classes in this module. The design of these
3406 classes needs some serious overhauling.
3410 classes needs some serious overhauling.
3407
3411
3408 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3412 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3409 which was ignoring '_' in option names.
3413 which was ignoring '_' in option names.
3410
3414
3411 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3415 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3412 'Verbose_novars' to 'Context' and made it the new default. It's a
3416 'Verbose_novars' to 'Context' and made it the new default. It's a
3413 bit more readable and also safer than verbose.
3417 bit more readable and also safer than verbose.
3414
3418
3415 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3419 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3416 triple-quoted strings.
3420 triple-quoted strings.
3417
3421
3418 * IPython/OInspect.py (__all__): new module exposing the object
3422 * IPython/OInspect.py (__all__): new module exposing the object
3419 introspection facilities. Now the corresponding magics are dummy
3423 introspection facilities. Now the corresponding magics are dummy
3420 wrappers around this. Having this module will make it much easier
3424 wrappers around this. Having this module will make it much easier
3421 to put these functions into our modified pdb.
3425 to put these functions into our modified pdb.
3422 This new object inspector system uses the new colorizing module,
3426 This new object inspector system uses the new colorizing module,
3423 so source code and other things are nicely syntax highlighted.
3427 so source code and other things are nicely syntax highlighted.
3424
3428
3425 2002-05-18 Fernando Perez <fperez@colorado.edu>
3429 2002-05-18 Fernando Perez <fperez@colorado.edu>
3426
3430
3427 * IPython/ColorANSI.py: Split the coloring tools into a separate
3431 * IPython/ColorANSI.py: Split the coloring tools into a separate
3428 module so I can use them in other code easier (they were part of
3432 module so I can use them in other code easier (they were part of
3429 ultraTB).
3433 ultraTB).
3430
3434
3431 2002-05-17 Fernando Perez <fperez@colorado.edu>
3435 2002-05-17 Fernando Perez <fperez@colorado.edu>
3432
3436
3433 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3437 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3434 fixed it to set the global 'g' also to the called instance, as
3438 fixed it to set the global 'g' also to the called instance, as
3435 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3439 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3436 user's 'g' variables).
3440 user's 'g' variables).
3437
3441
3438 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3442 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3439 global variables (aliases to _ih,_oh) so that users which expect
3443 global variables (aliases to _ih,_oh) so that users which expect
3440 In[5] or Out[7] to work aren't unpleasantly surprised.
3444 In[5] or Out[7] to work aren't unpleasantly surprised.
3441 (InputList.__getslice__): new class to allow executing slices of
3445 (InputList.__getslice__): new class to allow executing slices of
3442 input history directly. Very simple class, complements the use of
3446 input history directly. Very simple class, complements the use of
3443 macros.
3447 macros.
3444
3448
3445 2002-05-16 Fernando Perez <fperez@colorado.edu>
3449 2002-05-16 Fernando Perez <fperez@colorado.edu>
3446
3450
3447 * setup.py (docdirbase): make doc directory be just doc/IPython
3451 * setup.py (docdirbase): make doc directory be just doc/IPython
3448 without version numbers, it will reduce clutter for users.
3452 without version numbers, it will reduce clutter for users.
3449
3453
3450 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3454 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3451 execfile call to prevent possible memory leak. See for details:
3455 execfile call to prevent possible memory leak. See for details:
3452 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3456 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3453
3457
3454 2002-05-15 Fernando Perez <fperez@colorado.edu>
3458 2002-05-15 Fernando Perez <fperez@colorado.edu>
3455
3459
3456 * IPython/Magic.py (Magic.magic_psource): made the object
3460 * IPython/Magic.py (Magic.magic_psource): made the object
3457 introspection names be more standard: pdoc, pdef, pfile and
3461 introspection names be more standard: pdoc, pdef, pfile and
3458 psource. They all print/page their output, and it makes
3462 psource. They all print/page their output, and it makes
3459 remembering them easier. Kept old names for compatibility as
3463 remembering them easier. Kept old names for compatibility as
3460 aliases.
3464 aliases.
3461
3465
3462 2002-05-14 Fernando Perez <fperez@colorado.edu>
3466 2002-05-14 Fernando Perez <fperez@colorado.edu>
3463
3467
3464 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3468 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3465 what the mouse problem was. The trick is to use gnuplot with temp
3469 what the mouse problem was. The trick is to use gnuplot with temp
3466 files and NOT with pipes (for data communication), because having
3470 files and NOT with pipes (for data communication), because having
3467 both pipes and the mouse on is bad news.
3471 both pipes and the mouse on is bad news.
3468
3472
3469 2002-05-13 Fernando Perez <fperez@colorado.edu>
3473 2002-05-13 Fernando Perez <fperez@colorado.edu>
3470
3474
3471 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3475 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3472 bug. Information would be reported about builtins even when
3476 bug. Information would be reported about builtins even when
3473 user-defined functions overrode them.
3477 user-defined functions overrode them.
3474
3478
3475 2002-05-11 Fernando Perez <fperez@colorado.edu>
3479 2002-05-11 Fernando Perez <fperez@colorado.edu>
3476
3480
3477 * IPython/__init__.py (__all__): removed FlexCompleter from
3481 * IPython/__init__.py (__all__): removed FlexCompleter from
3478 __all__ so that things don't fail in platforms without readline.
3482 __all__ so that things don't fail in platforms without readline.
3479
3483
3480 2002-05-10 Fernando Perez <fperez@colorado.edu>
3484 2002-05-10 Fernando Perez <fperez@colorado.edu>
3481
3485
3482 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3486 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3483 it requires Numeric, effectively making Numeric a dependency for
3487 it requires Numeric, effectively making Numeric a dependency for
3484 IPython.
3488 IPython.
3485
3489
3486 * Released 0.2.13
3490 * Released 0.2.13
3487
3491
3488 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3492 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3489 profiler interface. Now all the major options from the profiler
3493 profiler interface. Now all the major options from the profiler
3490 module are directly supported in IPython, both for single
3494 module are directly supported in IPython, both for single
3491 expressions (@prun) and for full programs (@run -p).
3495 expressions (@prun) and for full programs (@run -p).
3492
3496
3493 2002-05-09 Fernando Perez <fperez@colorado.edu>
3497 2002-05-09 Fernando Perez <fperez@colorado.edu>
3494
3498
3495 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3499 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3496 magic properly formatted for screen.
3500 magic properly formatted for screen.
3497
3501
3498 * setup.py (make_shortcut): Changed things to put pdf version in
3502 * setup.py (make_shortcut): Changed things to put pdf version in
3499 doc/ instead of doc/manual (had to change lyxport a bit).
3503 doc/ instead of doc/manual (had to change lyxport a bit).
3500
3504
3501 * IPython/Magic.py (Profile.string_stats): made profile runs go
3505 * IPython/Magic.py (Profile.string_stats): made profile runs go
3502 through pager (they are long and a pager allows searching, saving,
3506 through pager (they are long and a pager allows searching, saving,
3503 etc.)
3507 etc.)
3504
3508
3505 2002-05-08 Fernando Perez <fperez@colorado.edu>
3509 2002-05-08 Fernando Perez <fperez@colorado.edu>
3506
3510
3507 * Released 0.2.12
3511 * Released 0.2.12
3508
3512
3509 2002-05-06 Fernando Perez <fperez@colorado.edu>
3513 2002-05-06 Fernando Perez <fperez@colorado.edu>
3510
3514
3511 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3515 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3512 introduced); 'hist n1 n2' was broken.
3516 introduced); 'hist n1 n2' was broken.
3513 (Magic.magic_pdb): added optional on/off arguments to @pdb
3517 (Magic.magic_pdb): added optional on/off arguments to @pdb
3514 (Magic.magic_run): added option -i to @run, which executes code in
3518 (Magic.magic_run): added option -i to @run, which executes code in
3515 the IPython namespace instead of a clean one. Also added @irun as
3519 the IPython namespace instead of a clean one. Also added @irun as
3516 an alias to @run -i.
3520 an alias to @run -i.
3517
3521
3518 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3522 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3519 fixed (it didn't really do anything, the namespaces were wrong).
3523 fixed (it didn't really do anything, the namespaces were wrong).
3520
3524
3521 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3525 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3522
3526
3523 * IPython/__init__.py (__all__): Fixed package namespace, now
3527 * IPython/__init__.py (__all__): Fixed package namespace, now
3524 'import IPython' does give access to IPython.<all> as
3528 'import IPython' does give access to IPython.<all> as
3525 expected. Also renamed __release__ to Release.
3529 expected. Also renamed __release__ to Release.
3526
3530
3527 * IPython/Debugger.py (__license__): created new Pdb class which
3531 * IPython/Debugger.py (__license__): created new Pdb class which
3528 functions like a drop-in for the normal pdb.Pdb but does NOT
3532 functions like a drop-in for the normal pdb.Pdb but does NOT
3529 import readline by default. This way it doesn't muck up IPython's
3533 import readline by default. This way it doesn't muck up IPython's
3530 readline handling, and now tab-completion finally works in the
3534 readline handling, and now tab-completion finally works in the
3531 debugger -- sort of. It completes things globally visible, but the
3535 debugger -- sort of. It completes things globally visible, but the
3532 completer doesn't track the stack as pdb walks it. That's a bit
3536 completer doesn't track the stack as pdb walks it. That's a bit
3533 tricky, and I'll have to implement it later.
3537 tricky, and I'll have to implement it later.
3534
3538
3535 2002-05-05 Fernando Perez <fperez@colorado.edu>
3539 2002-05-05 Fernando Perez <fperez@colorado.edu>
3536
3540
3537 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3541 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3538 magic docstrings when printed via ? (explicit \'s were being
3542 magic docstrings when printed via ? (explicit \'s were being
3539 printed).
3543 printed).
3540
3544
3541 * IPython/ipmaker.py (make_IPython): fixed namespace
3545 * IPython/ipmaker.py (make_IPython): fixed namespace
3542 identification bug. Now variables loaded via logs or command-line
3546 identification bug. Now variables loaded via logs or command-line
3543 files are recognized in the interactive namespace by @who.
3547 files are recognized in the interactive namespace by @who.
3544
3548
3545 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3549 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3546 log replay system stemming from the string form of Structs.
3550 log replay system stemming from the string form of Structs.
3547
3551
3548 * IPython/Magic.py (Macro.__init__): improved macros to properly
3552 * IPython/Magic.py (Macro.__init__): improved macros to properly
3549 handle magic commands in them.
3553 handle magic commands in them.
3550 (Magic.magic_logstart): usernames are now expanded so 'logstart
3554 (Magic.magic_logstart): usernames are now expanded so 'logstart
3551 ~/mylog' now works.
3555 ~/mylog' now works.
3552
3556
3553 * IPython/iplib.py (complete): fixed bug where paths starting with
3557 * IPython/iplib.py (complete): fixed bug where paths starting with
3554 '/' would be completed as magic names.
3558 '/' would be completed as magic names.
3555
3559
3556 2002-05-04 Fernando Perez <fperez@colorado.edu>
3560 2002-05-04 Fernando Perez <fperez@colorado.edu>
3557
3561
3558 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3562 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3559 allow running full programs under the profiler's control.
3563 allow running full programs under the profiler's control.
3560
3564
3561 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3565 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3562 mode to report exceptions verbosely but without formatting
3566 mode to report exceptions verbosely but without formatting
3563 variables. This addresses the issue of ipython 'freezing' (it's
3567 variables. This addresses the issue of ipython 'freezing' (it's
3564 not frozen, but caught in an expensive formatting loop) when huge
3568 not frozen, but caught in an expensive formatting loop) when huge
3565 variables are in the context of an exception.
3569 variables are in the context of an exception.
3566 (VerboseTB.text): Added '--->' markers at line where exception was
3570 (VerboseTB.text): Added '--->' markers at line where exception was
3567 triggered. Much clearer to read, especially in NoColor modes.
3571 triggered. Much clearer to read, especially in NoColor modes.
3568
3572
3569 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3573 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3570 implemented in reverse when changing to the new parse_options().
3574 implemented in reverse when changing to the new parse_options().
3571
3575
3572 2002-05-03 Fernando Perez <fperez@colorado.edu>
3576 2002-05-03 Fernando Perez <fperez@colorado.edu>
3573
3577
3574 * IPython/Magic.py (Magic.parse_options): new function so that
3578 * IPython/Magic.py (Magic.parse_options): new function so that
3575 magics can parse options easier.
3579 magics can parse options easier.
3576 (Magic.magic_prun): new function similar to profile.run(),
3580 (Magic.magic_prun): new function similar to profile.run(),
3577 suggested by Chris Hart.
3581 suggested by Chris Hart.
3578 (Magic.magic_cd): fixed behavior so that it only changes if
3582 (Magic.magic_cd): fixed behavior so that it only changes if
3579 directory actually is in history.
3583 directory actually is in history.
3580
3584
3581 * IPython/usage.py (__doc__): added information about potential
3585 * IPython/usage.py (__doc__): added information about potential
3582 slowness of Verbose exception mode when there are huge data
3586 slowness of Verbose exception mode when there are huge data
3583 structures to be formatted (thanks to Archie Paulson).
3587 structures to be formatted (thanks to Archie Paulson).
3584
3588
3585 * IPython/ipmaker.py (make_IPython): Changed default logging
3589 * IPython/ipmaker.py (make_IPython): Changed default logging
3586 (when simply called with -log) to use curr_dir/ipython.log in
3590 (when simply called with -log) to use curr_dir/ipython.log in
3587 rotate mode. Fixed crash which was occuring with -log before
3591 rotate mode. Fixed crash which was occuring with -log before
3588 (thanks to Jim Boyle).
3592 (thanks to Jim Boyle).
3589
3593
3590 2002-05-01 Fernando Perez <fperez@colorado.edu>
3594 2002-05-01 Fernando Perez <fperez@colorado.edu>
3591
3595
3592 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3596 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3593 was nasty -- though somewhat of a corner case).
3597 was nasty -- though somewhat of a corner case).
3594
3598
3595 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3599 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3596 text (was a bug).
3600 text (was a bug).
3597
3601
3598 2002-04-30 Fernando Perez <fperez@colorado.edu>
3602 2002-04-30 Fernando Perez <fperez@colorado.edu>
3599
3603
3600 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3604 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3601 a print after ^D or ^C from the user so that the In[] prompt
3605 a print after ^D or ^C from the user so that the In[] prompt
3602 doesn't over-run the gnuplot one.
3606 doesn't over-run the gnuplot one.
3603
3607
3604 2002-04-29 Fernando Perez <fperez@colorado.edu>
3608 2002-04-29 Fernando Perez <fperez@colorado.edu>
3605
3609
3606 * Released 0.2.10
3610 * Released 0.2.10
3607
3611
3608 * IPython/__release__.py (version): get date dynamically.
3612 * IPython/__release__.py (version): get date dynamically.
3609
3613
3610 * Misc. documentation updates thanks to Arnd's comments. Also ran
3614 * Misc. documentation updates thanks to Arnd's comments. Also ran
3611 a full spellcheck on the manual (hadn't been done in a while).
3615 a full spellcheck on the manual (hadn't been done in a while).
3612
3616
3613 2002-04-27 Fernando Perez <fperez@colorado.edu>
3617 2002-04-27 Fernando Perez <fperez@colorado.edu>
3614
3618
3615 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3619 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3616 starting a log in mid-session would reset the input history list.
3620 starting a log in mid-session would reset the input history list.
3617
3621
3618 2002-04-26 Fernando Perez <fperez@colorado.edu>
3622 2002-04-26 Fernando Perez <fperez@colorado.edu>
3619
3623
3620 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3624 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3621 all files were being included in an update. Now anything in
3625 all files were being included in an update. Now anything in
3622 UserConfig that matches [A-Za-z]*.py will go (this excludes
3626 UserConfig that matches [A-Za-z]*.py will go (this excludes
3623 __init__.py)
3627 __init__.py)
3624
3628
3625 2002-04-25 Fernando Perez <fperez@colorado.edu>
3629 2002-04-25 Fernando Perez <fperez@colorado.edu>
3626
3630
3627 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3631 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3628 to __builtins__ so that any form of embedded or imported code can
3632 to __builtins__ so that any form of embedded or imported code can
3629 test for being inside IPython.
3633 test for being inside IPython.
3630
3634
3631 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3635 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3632 changed to GnuplotMagic because it's now an importable module,
3636 changed to GnuplotMagic because it's now an importable module,
3633 this makes the name follow that of the standard Gnuplot module.
3637 this makes the name follow that of the standard Gnuplot module.
3634 GnuplotMagic can now be loaded at any time in mid-session.
3638 GnuplotMagic can now be loaded at any time in mid-session.
3635
3639
3636 2002-04-24 Fernando Perez <fperez@colorado.edu>
3640 2002-04-24 Fernando Perez <fperez@colorado.edu>
3637
3641
3638 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3642 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3639 the globals (IPython has its own namespace) and the
3643 the globals (IPython has its own namespace) and the
3640 PhysicalQuantity stuff is much better anyway.
3644 PhysicalQuantity stuff is much better anyway.
3641
3645
3642 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3646 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3643 embedding example to standard user directory for
3647 embedding example to standard user directory for
3644 distribution. Also put it in the manual.
3648 distribution. Also put it in the manual.
3645
3649
3646 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3650 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3647 instance as first argument (so it doesn't rely on some obscure
3651 instance as first argument (so it doesn't rely on some obscure
3648 hidden global).
3652 hidden global).
3649
3653
3650 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3654 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3651 delimiters. While it prevents ().TAB from working, it allows
3655 delimiters. While it prevents ().TAB from working, it allows
3652 completions in open (... expressions. This is by far a more common
3656 completions in open (... expressions. This is by far a more common
3653 case.
3657 case.
3654
3658
3655 2002-04-23 Fernando Perez <fperez@colorado.edu>
3659 2002-04-23 Fernando Perez <fperez@colorado.edu>
3656
3660
3657 * IPython/Extensions/InterpreterPasteInput.py: new
3661 * IPython/Extensions/InterpreterPasteInput.py: new
3658 syntax-processing module for pasting lines with >>> or ... at the
3662 syntax-processing module for pasting lines with >>> or ... at the
3659 start.
3663 start.
3660
3664
3661 * IPython/Extensions/PhysicalQ_Interactive.py
3665 * IPython/Extensions/PhysicalQ_Interactive.py
3662 (PhysicalQuantityInteractive.__int__): fixed to work with either
3666 (PhysicalQuantityInteractive.__int__): fixed to work with either
3663 Numeric or math.
3667 Numeric or math.
3664
3668
3665 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3669 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3666 provided profiles. Now we have:
3670 provided profiles. Now we have:
3667 -math -> math module as * and cmath with its own namespace.
3671 -math -> math module as * and cmath with its own namespace.
3668 -numeric -> Numeric as *, plus gnuplot & grace
3672 -numeric -> Numeric as *, plus gnuplot & grace
3669 -physics -> same as before
3673 -physics -> same as before
3670
3674
3671 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3675 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3672 user-defined magics wouldn't be found by @magic if they were
3676 user-defined magics wouldn't be found by @magic if they were
3673 defined as class methods. Also cleaned up the namespace search
3677 defined as class methods. Also cleaned up the namespace search
3674 logic and the string building (to use %s instead of many repeated
3678 logic and the string building (to use %s instead of many repeated
3675 string adds).
3679 string adds).
3676
3680
3677 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3681 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3678 of user-defined magics to operate with class methods (cleaner, in
3682 of user-defined magics to operate with class methods (cleaner, in
3679 line with the gnuplot code).
3683 line with the gnuplot code).
3680
3684
3681 2002-04-22 Fernando Perez <fperez@colorado.edu>
3685 2002-04-22 Fernando Perez <fperez@colorado.edu>
3682
3686
3683 * setup.py: updated dependency list so that manual is updated when
3687 * setup.py: updated dependency list so that manual is updated when
3684 all included files change.
3688 all included files change.
3685
3689
3686 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3690 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3687 the delimiter removal option (the fix is ugly right now).
3691 the delimiter removal option (the fix is ugly right now).
3688
3692
3689 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3693 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3690 all of the math profile (quicker loading, no conflict between
3694 all of the math profile (quicker loading, no conflict between
3691 g-9.8 and g-gnuplot).
3695 g-9.8 and g-gnuplot).
3692
3696
3693 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3697 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3694 name of post-mortem files to IPython_crash_report.txt.
3698 name of post-mortem files to IPython_crash_report.txt.
3695
3699
3696 * Cleanup/update of the docs. Added all the new readline info and
3700 * Cleanup/update of the docs. Added all the new readline info and
3697 formatted all lists as 'real lists'.
3701 formatted all lists as 'real lists'.
3698
3702
3699 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3703 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3700 tab-completion options, since the full readline parse_and_bind is
3704 tab-completion options, since the full readline parse_and_bind is
3701 now accessible.
3705 now accessible.
3702
3706
3703 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3707 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3704 handling of readline options. Now users can specify any string to
3708 handling of readline options. Now users can specify any string to
3705 be passed to parse_and_bind(), as well as the delimiters to be
3709 be passed to parse_and_bind(), as well as the delimiters to be
3706 removed.
3710 removed.
3707 (InteractiveShell.__init__): Added __name__ to the global
3711 (InteractiveShell.__init__): Added __name__ to the global
3708 namespace so that things like Itpl which rely on its existence
3712 namespace so that things like Itpl which rely on its existence
3709 don't crash.
3713 don't crash.
3710 (InteractiveShell._prefilter): Defined the default with a _ so
3714 (InteractiveShell._prefilter): Defined the default with a _ so
3711 that prefilter() is easier to override, while the default one
3715 that prefilter() is easier to override, while the default one
3712 remains available.
3716 remains available.
3713
3717
3714 2002-04-18 Fernando Perez <fperez@colorado.edu>
3718 2002-04-18 Fernando Perez <fperez@colorado.edu>
3715
3719
3716 * Added information about pdb in the docs.
3720 * Added information about pdb in the docs.
3717
3721
3718 2002-04-17 Fernando Perez <fperez@colorado.edu>
3722 2002-04-17 Fernando Perez <fperez@colorado.edu>
3719
3723
3720 * IPython/ipmaker.py (make_IPython): added rc_override option to
3724 * IPython/ipmaker.py (make_IPython): added rc_override option to
3721 allow passing config options at creation time which may override
3725 allow passing config options at creation time which may override
3722 anything set in the config files or command line. This is
3726 anything set in the config files or command line. This is
3723 particularly useful for configuring embedded instances.
3727 particularly useful for configuring embedded instances.
3724
3728
3725 2002-04-15 Fernando Perez <fperez@colorado.edu>
3729 2002-04-15 Fernando Perez <fperez@colorado.edu>
3726
3730
3727 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3731 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3728 crash embedded instances because of the input cache falling out of
3732 crash embedded instances because of the input cache falling out of
3729 sync with the output counter.
3733 sync with the output counter.
3730
3734
3731 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3735 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3732 mode which calls pdb after an uncaught exception in IPython itself.
3736 mode which calls pdb after an uncaught exception in IPython itself.
3733
3737
3734 2002-04-14 Fernando Perez <fperez@colorado.edu>
3738 2002-04-14 Fernando Perez <fperez@colorado.edu>
3735
3739
3736 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3740 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3737 readline, fix it back after each call.
3741 readline, fix it back after each call.
3738
3742
3739 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3743 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3740 method to force all access via __call__(), which guarantees that
3744 method to force all access via __call__(), which guarantees that
3741 traceback references are properly deleted.
3745 traceback references are properly deleted.
3742
3746
3743 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3747 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3744 improve printing when pprint is in use.
3748 improve printing when pprint is in use.
3745
3749
3746 2002-04-13 Fernando Perez <fperez@colorado.edu>
3750 2002-04-13 Fernando Perez <fperez@colorado.edu>
3747
3751
3748 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3752 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3749 exceptions aren't caught anymore. If the user triggers one, he
3753 exceptions aren't caught anymore. If the user triggers one, he
3750 should know why he's doing it and it should go all the way up,
3754 should know why he's doing it and it should go all the way up,
3751 just like any other exception. So now @abort will fully kill the
3755 just like any other exception. So now @abort will fully kill the
3752 embedded interpreter and the embedding code (unless that happens
3756 embedded interpreter and the embedding code (unless that happens
3753 to catch SystemExit).
3757 to catch SystemExit).
3754
3758
3755 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3759 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3756 and a debugger() method to invoke the interactive pdb debugger
3760 and a debugger() method to invoke the interactive pdb debugger
3757 after printing exception information. Also added the corresponding
3761 after printing exception information. Also added the corresponding
3758 -pdb option and @pdb magic to control this feature, and updated
3762 -pdb option and @pdb magic to control this feature, and updated
3759 the docs. After a suggestion from Christopher Hart
3763 the docs. After a suggestion from Christopher Hart
3760 (hart-AT-caltech.edu).
3764 (hart-AT-caltech.edu).
3761
3765
3762 2002-04-12 Fernando Perez <fperez@colorado.edu>
3766 2002-04-12 Fernando Perez <fperez@colorado.edu>
3763
3767
3764 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3768 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3765 the exception handlers defined by the user (not the CrashHandler)
3769 the exception handlers defined by the user (not the CrashHandler)
3766 so that user exceptions don't trigger an ipython bug report.
3770 so that user exceptions don't trigger an ipython bug report.
3767
3771
3768 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3772 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3769 configurable (it should have always been so).
3773 configurable (it should have always been so).
3770
3774
3771 2002-03-26 Fernando Perez <fperez@colorado.edu>
3775 2002-03-26 Fernando Perez <fperez@colorado.edu>
3772
3776
3773 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3777 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3774 and there to fix embedding namespace issues. This should all be
3778 and there to fix embedding namespace issues. This should all be
3775 done in a more elegant way.
3779 done in a more elegant way.
3776
3780
3777 2002-03-25 Fernando Perez <fperez@colorado.edu>
3781 2002-03-25 Fernando Perez <fperez@colorado.edu>
3778
3782
3779 * IPython/genutils.py (get_home_dir): Try to make it work under
3783 * IPython/genutils.py (get_home_dir): Try to make it work under
3780 win9x also.
3784 win9x also.
3781
3785
3782 2002-03-20 Fernando Perez <fperez@colorado.edu>
3786 2002-03-20 Fernando Perez <fperez@colorado.edu>
3783
3787
3784 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3788 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3785 sys.displayhook untouched upon __init__.
3789 sys.displayhook untouched upon __init__.
3786
3790
3787 2002-03-19 Fernando Perez <fperez@colorado.edu>
3791 2002-03-19 Fernando Perez <fperez@colorado.edu>
3788
3792
3789 * Released 0.2.9 (for embedding bug, basically).
3793 * Released 0.2.9 (for embedding bug, basically).
3790
3794
3791 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3795 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3792 exceptions so that enclosing shell's state can be restored.
3796 exceptions so that enclosing shell's state can be restored.
3793
3797
3794 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3798 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3795 naming conventions in the .ipython/ dir.
3799 naming conventions in the .ipython/ dir.
3796
3800
3797 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3801 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3798 from delimiters list so filenames with - in them get expanded.
3802 from delimiters list so filenames with - in them get expanded.
3799
3803
3800 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3804 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3801 sys.displayhook not being properly restored after an embedded call.
3805 sys.displayhook not being properly restored after an embedded call.
3802
3806
3803 2002-03-18 Fernando Perez <fperez@colorado.edu>
3807 2002-03-18 Fernando Perez <fperez@colorado.edu>
3804
3808
3805 * Released 0.2.8
3809 * Released 0.2.8
3806
3810
3807 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3811 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3808 some files weren't being included in a -upgrade.
3812 some files weren't being included in a -upgrade.
3809 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3813 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3810 on' so that the first tab completes.
3814 on' so that the first tab completes.
3811 (InteractiveShell.handle_magic): fixed bug with spaces around
3815 (InteractiveShell.handle_magic): fixed bug with spaces around
3812 quotes breaking many magic commands.
3816 quotes breaking many magic commands.
3813
3817
3814 * setup.py: added note about ignoring the syntax error messages at
3818 * setup.py: added note about ignoring the syntax error messages at
3815 installation.
3819 installation.
3816
3820
3817 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3821 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3818 streamlining the gnuplot interface, now there's only one magic @gp.
3822 streamlining the gnuplot interface, now there's only one magic @gp.
3819
3823
3820 2002-03-17 Fernando Perez <fperez@colorado.edu>
3824 2002-03-17 Fernando Perez <fperez@colorado.edu>
3821
3825
3822 * IPython/UserConfig/magic_gnuplot.py: new name for the
3826 * IPython/UserConfig/magic_gnuplot.py: new name for the
3823 example-magic_pm.py file. Much enhanced system, now with a shell
3827 example-magic_pm.py file. Much enhanced system, now with a shell
3824 for communicating directly with gnuplot, one command at a time.
3828 for communicating directly with gnuplot, one command at a time.
3825
3829
3826 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3830 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3827 setting __name__=='__main__'.
3831 setting __name__=='__main__'.
3828
3832
3829 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3833 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3830 mini-shell for accessing gnuplot from inside ipython. Should
3834 mini-shell for accessing gnuplot from inside ipython. Should
3831 extend it later for grace access too. Inspired by Arnd's
3835 extend it later for grace access too. Inspired by Arnd's
3832 suggestion.
3836 suggestion.
3833
3837
3834 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3838 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3835 calling magic functions with () in their arguments. Thanks to Arnd
3839 calling magic functions with () in their arguments. Thanks to Arnd
3836 Baecker for pointing this to me.
3840 Baecker for pointing this to me.
3837
3841
3838 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3842 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3839 infinitely for integer or complex arrays (only worked with floats).
3843 infinitely for integer or complex arrays (only worked with floats).
3840
3844
3841 2002-03-16 Fernando Perez <fperez@colorado.edu>
3845 2002-03-16 Fernando Perez <fperez@colorado.edu>
3842
3846
3843 * setup.py: Merged setup and setup_windows into a single script
3847 * setup.py: Merged setup and setup_windows into a single script
3844 which properly handles things for windows users.
3848 which properly handles things for windows users.
3845
3849
3846 2002-03-15 Fernando Perez <fperez@colorado.edu>
3850 2002-03-15 Fernando Perez <fperez@colorado.edu>
3847
3851
3848 * Big change to the manual: now the magics are all automatically
3852 * Big change to the manual: now the magics are all automatically
3849 documented. This information is generated from their docstrings
3853 documented. This information is generated from their docstrings
3850 and put in a latex file included by the manual lyx file. This way
3854 and put in a latex file included by the manual lyx file. This way
3851 we get always up to date information for the magics. The manual
3855 we get always up to date information for the magics. The manual
3852 now also has proper version information, also auto-synced.
3856 now also has proper version information, also auto-synced.
3853
3857
3854 For this to work, an undocumented --magic_docstrings option was added.
3858 For this to work, an undocumented --magic_docstrings option was added.
3855
3859
3856 2002-03-13 Fernando Perez <fperez@colorado.edu>
3860 2002-03-13 Fernando Perez <fperez@colorado.edu>
3857
3861
3858 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3862 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3859 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3863 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3860
3864
3861 2002-03-12 Fernando Perez <fperez@colorado.edu>
3865 2002-03-12 Fernando Perez <fperez@colorado.edu>
3862
3866
3863 * IPython/ultraTB.py (TermColors): changed color escapes again to
3867 * IPython/ultraTB.py (TermColors): changed color escapes again to
3864 fix the (old, reintroduced) line-wrapping bug. Basically, if
3868 fix the (old, reintroduced) line-wrapping bug. Basically, if
3865 \001..\002 aren't given in the color escapes, lines get wrapped
3869 \001..\002 aren't given in the color escapes, lines get wrapped
3866 weirdly. But giving those screws up old xterms and emacs terms. So
3870 weirdly. But giving those screws up old xterms and emacs terms. So
3867 I added some logic for emacs terms to be ok, but I can't identify old
3871 I added some logic for emacs terms to be ok, but I can't identify old
3868 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3872 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3869
3873
3870 2002-03-10 Fernando Perez <fperez@colorado.edu>
3874 2002-03-10 Fernando Perez <fperez@colorado.edu>
3871
3875
3872 * IPython/usage.py (__doc__): Various documentation cleanups and
3876 * IPython/usage.py (__doc__): Various documentation cleanups and
3873 updates, both in usage docstrings and in the manual.
3877 updates, both in usage docstrings and in the manual.
3874
3878
3875 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3879 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3876 handling of caching. Set minimum acceptabe value for having a
3880 handling of caching. Set minimum acceptabe value for having a
3877 cache at 20 values.
3881 cache at 20 values.
3878
3882
3879 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3883 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3880 install_first_time function to a method, renamed it and added an
3884 install_first_time function to a method, renamed it and added an
3881 'upgrade' mode. Now people can update their config directory with
3885 'upgrade' mode. Now people can update their config directory with
3882 a simple command line switch (-upgrade, also new).
3886 a simple command line switch (-upgrade, also new).
3883
3887
3884 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3888 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3885 @file (convenient for automagic users under Python >= 2.2).
3889 @file (convenient for automagic users under Python >= 2.2).
3886 Removed @files (it seemed more like a plural than an abbrev. of
3890 Removed @files (it seemed more like a plural than an abbrev. of
3887 'file show').
3891 'file show').
3888
3892
3889 * IPython/iplib.py (install_first_time): Fixed crash if there were
3893 * IPython/iplib.py (install_first_time): Fixed crash if there were
3890 backup files ('~') in .ipython/ install directory.
3894 backup files ('~') in .ipython/ install directory.
3891
3895
3892 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3896 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3893 system. Things look fine, but these changes are fairly
3897 system. Things look fine, but these changes are fairly
3894 intrusive. Test them for a few days.
3898 intrusive. Test them for a few days.
3895
3899
3896 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3900 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3897 the prompts system. Now all in/out prompt strings are user
3901 the prompts system. Now all in/out prompt strings are user
3898 controllable. This is particularly useful for embedding, as one
3902 controllable. This is particularly useful for embedding, as one
3899 can tag embedded instances with particular prompts.
3903 can tag embedded instances with particular prompts.
3900
3904
3901 Also removed global use of sys.ps1/2, which now allows nested
3905 Also removed global use of sys.ps1/2, which now allows nested
3902 embeddings without any problems. Added command-line options for
3906 embeddings without any problems. Added command-line options for
3903 the prompt strings.
3907 the prompt strings.
3904
3908
3905 2002-03-08 Fernando Perez <fperez@colorado.edu>
3909 2002-03-08 Fernando Perez <fperez@colorado.edu>
3906
3910
3907 * IPython/UserConfig/example-embed-short.py (ipshell): added
3911 * IPython/UserConfig/example-embed-short.py (ipshell): added
3908 example file with the bare minimum code for embedding.
3912 example file with the bare minimum code for embedding.
3909
3913
3910 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3914 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3911 functionality for the embeddable shell to be activated/deactivated
3915 functionality for the embeddable shell to be activated/deactivated
3912 either globally or at each call.
3916 either globally or at each call.
3913
3917
3914 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3918 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3915 rewriting the prompt with '--->' for auto-inputs with proper
3919 rewriting the prompt with '--->' for auto-inputs with proper
3916 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3920 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3917 this is handled by the prompts class itself, as it should.
3921 this is handled by the prompts class itself, as it should.
3918
3922
3919 2002-03-05 Fernando Perez <fperez@colorado.edu>
3923 2002-03-05 Fernando Perez <fperez@colorado.edu>
3920
3924
3921 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3925 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3922 @logstart to avoid name clashes with the math log function.
3926 @logstart to avoid name clashes with the math log function.
3923
3927
3924 * Big updates to X/Emacs section of the manual.
3928 * Big updates to X/Emacs section of the manual.
3925
3929
3926 * Removed ipython_emacs. Milan explained to me how to pass
3930 * Removed ipython_emacs. Milan explained to me how to pass
3927 arguments to ipython through Emacs. Some day I'm going to end up
3931 arguments to ipython through Emacs. Some day I'm going to end up
3928 learning some lisp...
3932 learning some lisp...
3929
3933
3930 2002-03-04 Fernando Perez <fperez@colorado.edu>
3934 2002-03-04 Fernando Perez <fperez@colorado.edu>
3931
3935
3932 * IPython/ipython_emacs: Created script to be used as the
3936 * IPython/ipython_emacs: Created script to be used as the
3933 py-python-command Emacs variable so we can pass IPython
3937 py-python-command Emacs variable so we can pass IPython
3934 parameters. I can't figure out how to tell Emacs directly to pass
3938 parameters. I can't figure out how to tell Emacs directly to pass
3935 parameters to IPython, so a dummy shell script will do it.
3939 parameters to IPython, so a dummy shell script will do it.
3936
3940
3937 Other enhancements made for things to work better under Emacs'
3941 Other enhancements made for things to work better under Emacs'
3938 various types of terminals. Many thanks to Milan Zamazal
3942 various types of terminals. Many thanks to Milan Zamazal
3939 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3943 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3940
3944
3941 2002-03-01 Fernando Perez <fperez@colorado.edu>
3945 2002-03-01 Fernando Perez <fperez@colorado.edu>
3942
3946
3943 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3947 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3944 that loading of readline is now optional. This gives better
3948 that loading of readline is now optional. This gives better
3945 control to emacs users.
3949 control to emacs users.
3946
3950
3947 * IPython/ultraTB.py (__date__): Modified color escape sequences
3951 * IPython/ultraTB.py (__date__): Modified color escape sequences
3948 and now things work fine under xterm and in Emacs' term buffers
3952 and now things work fine under xterm and in Emacs' term buffers
3949 (though not shell ones). Well, in emacs you get colors, but all
3953 (though not shell ones). Well, in emacs you get colors, but all
3950 seem to be 'light' colors (no difference between dark and light
3954 seem to be 'light' colors (no difference between dark and light
3951 ones). But the garbage chars are gone, and also in xterms. It
3955 ones). But the garbage chars are gone, and also in xterms. It
3952 seems that now I'm using 'cleaner' ansi sequences.
3956 seems that now I'm using 'cleaner' ansi sequences.
3953
3957
3954 2002-02-21 Fernando Perez <fperez@colorado.edu>
3958 2002-02-21 Fernando Perez <fperez@colorado.edu>
3955
3959
3956 * Released 0.2.7 (mainly to publish the scoping fix).
3960 * Released 0.2.7 (mainly to publish the scoping fix).
3957
3961
3958 * IPython/Logger.py (Logger.logstate): added. A corresponding
3962 * IPython/Logger.py (Logger.logstate): added. A corresponding
3959 @logstate magic was created.
3963 @logstate magic was created.
3960
3964
3961 * IPython/Magic.py: fixed nested scoping problem under Python
3965 * IPython/Magic.py: fixed nested scoping problem under Python
3962 2.1.x (automagic wasn't working).
3966 2.1.x (automagic wasn't working).
3963
3967
3964 2002-02-20 Fernando Perez <fperez@colorado.edu>
3968 2002-02-20 Fernando Perez <fperez@colorado.edu>
3965
3969
3966 * Released 0.2.6.
3970 * Released 0.2.6.
3967
3971
3968 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3972 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3969 option so that logs can come out without any headers at all.
3973 option so that logs can come out without any headers at all.
3970
3974
3971 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3975 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3972 SciPy.
3976 SciPy.
3973
3977
3974 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3978 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3975 that embedded IPython calls don't require vars() to be explicitly
3979 that embedded IPython calls don't require vars() to be explicitly
3976 passed. Now they are extracted from the caller's frame (code
3980 passed. Now they are extracted from the caller's frame (code
3977 snatched from Eric Jones' weave). Added better documentation to
3981 snatched from Eric Jones' weave). Added better documentation to
3978 the section on embedding and the example file.
3982 the section on embedding and the example file.
3979
3983
3980 * IPython/genutils.py (page): Changed so that under emacs, it just
3984 * IPython/genutils.py (page): Changed so that under emacs, it just
3981 prints the string. You can then page up and down in the emacs
3985 prints the string. You can then page up and down in the emacs
3982 buffer itself. This is how the builtin help() works.
3986 buffer itself. This is how the builtin help() works.
3983
3987
3984 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3988 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3985 macro scoping: macros need to be executed in the user's namespace
3989 macro scoping: macros need to be executed in the user's namespace
3986 to work as if they had been typed by the user.
3990 to work as if they had been typed by the user.
3987
3991
3988 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3992 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3989 execute automatically (no need to type 'exec...'). They then
3993 execute automatically (no need to type 'exec...'). They then
3990 behave like 'true macros'. The printing system was also modified
3994 behave like 'true macros'. The printing system was also modified
3991 for this to work.
3995 for this to work.
3992
3996
3993 2002-02-19 Fernando Perez <fperez@colorado.edu>
3997 2002-02-19 Fernando Perez <fperez@colorado.edu>
3994
3998
3995 * IPython/genutils.py (page_file): new function for paging files
3999 * IPython/genutils.py (page_file): new function for paging files
3996 in an OS-independent way. Also necessary for file viewing to work
4000 in an OS-independent way. Also necessary for file viewing to work
3997 well inside Emacs buffers.
4001 well inside Emacs buffers.
3998 (page): Added checks for being in an emacs buffer.
4002 (page): Added checks for being in an emacs buffer.
3999 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4003 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4000 same bug in iplib.
4004 same bug in iplib.
4001
4005
4002 2002-02-18 Fernando Perez <fperez@colorado.edu>
4006 2002-02-18 Fernando Perez <fperez@colorado.edu>
4003
4007
4004 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4008 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4005 of readline so that IPython can work inside an Emacs buffer.
4009 of readline so that IPython can work inside an Emacs buffer.
4006
4010
4007 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4011 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4008 method signatures (they weren't really bugs, but it looks cleaner
4012 method signatures (they weren't really bugs, but it looks cleaner
4009 and keeps PyChecker happy).
4013 and keeps PyChecker happy).
4010
4014
4011 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4015 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4012 for implementing various user-defined hooks. Currently only
4016 for implementing various user-defined hooks. Currently only
4013 display is done.
4017 display is done.
4014
4018
4015 * IPython/Prompts.py (CachedOutput._display): changed display
4019 * IPython/Prompts.py (CachedOutput._display): changed display
4016 functions so that they can be dynamically changed by users easily.
4020 functions so that they can be dynamically changed by users easily.
4017
4021
4018 * IPython/Extensions/numeric_formats.py (num_display): added an
4022 * IPython/Extensions/numeric_formats.py (num_display): added an
4019 extension for printing NumPy arrays in flexible manners. It
4023 extension for printing NumPy arrays in flexible manners. It
4020 doesn't do anything yet, but all the structure is in
4024 doesn't do anything yet, but all the structure is in
4021 place. Ultimately the plan is to implement output format control
4025 place. Ultimately the plan is to implement output format control
4022 like in Octave.
4026 like in Octave.
4023
4027
4024 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4028 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4025 methods are found at run-time by all the automatic machinery.
4029 methods are found at run-time by all the automatic machinery.
4026
4030
4027 2002-02-17 Fernando Perez <fperez@colorado.edu>
4031 2002-02-17 Fernando Perez <fperez@colorado.edu>
4028
4032
4029 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4033 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4030 whole file a little.
4034 whole file a little.
4031
4035
4032 * ToDo: closed this document. Now there's a new_design.lyx
4036 * ToDo: closed this document. Now there's a new_design.lyx
4033 document for all new ideas. Added making a pdf of it for the
4037 document for all new ideas. Added making a pdf of it for the
4034 end-user distro.
4038 end-user distro.
4035
4039
4036 * IPython/Logger.py (Logger.switch_log): Created this to replace
4040 * IPython/Logger.py (Logger.switch_log): Created this to replace
4037 logon() and logoff(). It also fixes a nasty crash reported by
4041 logon() and logoff(). It also fixes a nasty crash reported by
4038 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4042 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4039
4043
4040 * IPython/iplib.py (complete): got auto-completion to work with
4044 * IPython/iplib.py (complete): got auto-completion to work with
4041 automagic (I had wanted this for a long time).
4045 automagic (I had wanted this for a long time).
4042
4046
4043 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4047 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4044 to @file, since file() is now a builtin and clashes with automagic
4048 to @file, since file() is now a builtin and clashes with automagic
4045 for @file.
4049 for @file.
4046
4050
4047 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4051 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4048 of this was previously in iplib, which had grown to more than 2000
4052 of this was previously in iplib, which had grown to more than 2000
4049 lines, way too long. No new functionality, but it makes managing
4053 lines, way too long. No new functionality, but it makes managing
4050 the code a bit easier.
4054 the code a bit easier.
4051
4055
4052 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4056 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4053 information to crash reports.
4057 information to crash reports.
4054
4058
4055 2002-02-12 Fernando Perez <fperez@colorado.edu>
4059 2002-02-12 Fernando Perez <fperez@colorado.edu>
4056
4060
4057 * Released 0.2.5.
4061 * Released 0.2.5.
4058
4062
4059 2002-02-11 Fernando Perez <fperez@colorado.edu>
4063 2002-02-11 Fernando Perez <fperez@colorado.edu>
4060
4064
4061 * Wrote a relatively complete Windows installer. It puts
4065 * Wrote a relatively complete Windows installer. It puts
4062 everything in place, creates Start Menu entries and fixes the
4066 everything in place, creates Start Menu entries and fixes the
4063 color issues. Nothing fancy, but it works.
4067 color issues. Nothing fancy, but it works.
4064
4068
4065 2002-02-10 Fernando Perez <fperez@colorado.edu>
4069 2002-02-10 Fernando Perez <fperez@colorado.edu>
4066
4070
4067 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4071 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4068 os.path.expanduser() call so that we can type @run ~/myfile.py and
4072 os.path.expanduser() call so that we can type @run ~/myfile.py and
4069 have thigs work as expected.
4073 have thigs work as expected.
4070
4074
4071 * IPython/genutils.py (page): fixed exception handling so things
4075 * IPython/genutils.py (page): fixed exception handling so things
4072 work both in Unix and Windows correctly. Quitting a pager triggers
4076 work both in Unix and Windows correctly. Quitting a pager triggers
4073 an IOError/broken pipe in Unix, and in windows not finding a pager
4077 an IOError/broken pipe in Unix, and in windows not finding a pager
4074 is also an IOError, so I had to actually look at the return value
4078 is also an IOError, so I had to actually look at the return value
4075 of the exception, not just the exception itself. Should be ok now.
4079 of the exception, not just the exception itself. Should be ok now.
4076
4080
4077 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4081 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4078 modified to allow case-insensitive color scheme changes.
4082 modified to allow case-insensitive color scheme changes.
4079
4083
4080 2002-02-09 Fernando Perez <fperez@colorado.edu>
4084 2002-02-09 Fernando Perez <fperez@colorado.edu>
4081
4085
4082 * IPython/genutils.py (native_line_ends): new function to leave
4086 * IPython/genutils.py (native_line_ends): new function to leave
4083 user config files with os-native line-endings.
4087 user config files with os-native line-endings.
4084
4088
4085 * README and manual updates.
4089 * README and manual updates.
4086
4090
4087 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4091 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4088 instead of StringType to catch Unicode strings.
4092 instead of StringType to catch Unicode strings.
4089
4093
4090 * IPython/genutils.py (filefind): fixed bug for paths with
4094 * IPython/genutils.py (filefind): fixed bug for paths with
4091 embedded spaces (very common in Windows).
4095 embedded spaces (very common in Windows).
4092
4096
4093 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4097 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4094 files under Windows, so that they get automatically associated
4098 files under Windows, so that they get automatically associated
4095 with a text editor. Windows makes it a pain to handle
4099 with a text editor. Windows makes it a pain to handle
4096 extension-less files.
4100 extension-less files.
4097
4101
4098 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4102 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4099 warning about readline only occur for Posix. In Windows there's no
4103 warning about readline only occur for Posix. In Windows there's no
4100 way to get readline, so why bother with the warning.
4104 way to get readline, so why bother with the warning.
4101
4105
4102 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4106 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4103 for __str__ instead of dir(self), since dir() changed in 2.2.
4107 for __str__ instead of dir(self), since dir() changed in 2.2.
4104
4108
4105 * Ported to Windows! Tested on XP, I suspect it should work fine
4109 * Ported to Windows! Tested on XP, I suspect it should work fine
4106 on NT/2000, but I don't think it will work on 98 et al. That
4110 on NT/2000, but I don't think it will work on 98 et al. That
4107 series of Windows is such a piece of junk anyway that I won't try
4111 series of Windows is such a piece of junk anyway that I won't try
4108 porting it there. The XP port was straightforward, showed a few
4112 porting it there. The XP port was straightforward, showed a few
4109 bugs here and there (fixed all), in particular some string
4113 bugs here and there (fixed all), in particular some string
4110 handling stuff which required considering Unicode strings (which
4114 handling stuff which required considering Unicode strings (which
4111 Windows uses). This is good, but hasn't been too tested :) No
4115 Windows uses). This is good, but hasn't been too tested :) No
4112 fancy installer yet, I'll put a note in the manual so people at
4116 fancy installer yet, I'll put a note in the manual so people at
4113 least make manually a shortcut.
4117 least make manually a shortcut.
4114
4118
4115 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4119 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4116 into a single one, "colors". This now controls both prompt and
4120 into a single one, "colors". This now controls both prompt and
4117 exception color schemes, and can be changed both at startup
4121 exception color schemes, and can be changed both at startup
4118 (either via command-line switches or via ipythonrc files) and at
4122 (either via command-line switches or via ipythonrc files) and at
4119 runtime, with @colors.
4123 runtime, with @colors.
4120 (Magic.magic_run): renamed @prun to @run and removed the old
4124 (Magic.magic_run): renamed @prun to @run and removed the old
4121 @run. The two were too similar to warrant keeping both.
4125 @run. The two were too similar to warrant keeping both.
4122
4126
4123 2002-02-03 Fernando Perez <fperez@colorado.edu>
4127 2002-02-03 Fernando Perez <fperez@colorado.edu>
4124
4128
4125 * IPython/iplib.py (install_first_time): Added comment on how to
4129 * IPython/iplib.py (install_first_time): Added comment on how to
4126 configure the color options for first-time users. Put a <return>
4130 configure the color options for first-time users. Put a <return>
4127 request at the end so that small-terminal users get a chance to
4131 request at the end so that small-terminal users get a chance to
4128 read the startup info.
4132 read the startup info.
4129
4133
4130 2002-01-23 Fernando Perez <fperez@colorado.edu>
4134 2002-01-23 Fernando Perez <fperez@colorado.edu>
4131
4135
4132 * IPython/iplib.py (CachedOutput.update): Changed output memory
4136 * IPython/iplib.py (CachedOutput.update): Changed output memory
4133 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4137 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4134 input history we still use _i. Did this b/c these variable are
4138 input history we still use _i. Did this b/c these variable are
4135 very commonly used in interactive work, so the less we need to
4139 very commonly used in interactive work, so the less we need to
4136 type the better off we are.
4140 type the better off we are.
4137 (Magic.magic_prun): updated @prun to better handle the namespaces
4141 (Magic.magic_prun): updated @prun to better handle the namespaces
4138 the file will run in, including a fix for __name__ not being set
4142 the file will run in, including a fix for __name__ not being set
4139 before.
4143 before.
4140
4144
4141 2002-01-20 Fernando Perez <fperez@colorado.edu>
4145 2002-01-20 Fernando Perez <fperez@colorado.edu>
4142
4146
4143 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4147 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4144 extra garbage for Python 2.2. Need to look more carefully into
4148 extra garbage for Python 2.2. Need to look more carefully into
4145 this later.
4149 this later.
4146
4150
4147 2002-01-19 Fernando Perez <fperez@colorado.edu>
4151 2002-01-19 Fernando Perez <fperez@colorado.edu>
4148
4152
4149 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4153 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4150 display SyntaxError exceptions properly formatted when they occur
4154 display SyntaxError exceptions properly formatted when they occur
4151 (they can be triggered by imported code).
4155 (they can be triggered by imported code).
4152
4156
4153 2002-01-18 Fernando Perez <fperez@colorado.edu>
4157 2002-01-18 Fernando Perez <fperez@colorado.edu>
4154
4158
4155 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4159 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4156 SyntaxError exceptions are reported nicely formatted, instead of
4160 SyntaxError exceptions are reported nicely formatted, instead of
4157 spitting out only offset information as before.
4161 spitting out only offset information as before.
4158 (Magic.magic_prun): Added the @prun function for executing
4162 (Magic.magic_prun): Added the @prun function for executing
4159 programs with command line args inside IPython.
4163 programs with command line args inside IPython.
4160
4164
4161 2002-01-16 Fernando Perez <fperez@colorado.edu>
4165 2002-01-16 Fernando Perez <fperez@colorado.edu>
4162
4166
4163 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4167 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4164 to *not* include the last item given in a range. This brings their
4168 to *not* include the last item given in a range. This brings their
4165 behavior in line with Python's slicing:
4169 behavior in line with Python's slicing:
4166 a[n1:n2] -> a[n1]...a[n2-1]
4170 a[n1:n2] -> a[n1]...a[n2-1]
4167 It may be a bit less convenient, but I prefer to stick to Python's
4171 It may be a bit less convenient, but I prefer to stick to Python's
4168 conventions *everywhere*, so users never have to wonder.
4172 conventions *everywhere*, so users never have to wonder.
4169 (Magic.magic_macro): Added @macro function to ease the creation of
4173 (Magic.magic_macro): Added @macro function to ease the creation of
4170 macros.
4174 macros.
4171
4175
4172 2002-01-05 Fernando Perez <fperez@colorado.edu>
4176 2002-01-05 Fernando Perez <fperez@colorado.edu>
4173
4177
4174 * Released 0.2.4.
4178 * Released 0.2.4.
4175
4179
4176 * IPython/iplib.py (Magic.magic_pdef):
4180 * IPython/iplib.py (Magic.magic_pdef):
4177 (InteractiveShell.safe_execfile): report magic lines and error
4181 (InteractiveShell.safe_execfile): report magic lines and error
4178 lines without line numbers so one can easily copy/paste them for
4182 lines without line numbers so one can easily copy/paste them for
4179 re-execution.
4183 re-execution.
4180
4184
4181 * Updated manual with recent changes.
4185 * Updated manual with recent changes.
4182
4186
4183 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4187 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4184 docstring printing when class? is called. Very handy for knowing
4188 docstring printing when class? is called. Very handy for knowing
4185 how to create class instances (as long as __init__ is well
4189 how to create class instances (as long as __init__ is well
4186 documented, of course :)
4190 documented, of course :)
4187 (Magic.magic_doc): print both class and constructor docstrings.
4191 (Magic.magic_doc): print both class and constructor docstrings.
4188 (Magic.magic_pdef): give constructor info if passed a class and
4192 (Magic.magic_pdef): give constructor info if passed a class and
4189 __call__ info for callable object instances.
4193 __call__ info for callable object instances.
4190
4194
4191 2002-01-04 Fernando Perez <fperez@colorado.edu>
4195 2002-01-04 Fernando Perez <fperez@colorado.edu>
4192
4196
4193 * Made deep_reload() off by default. It doesn't always work
4197 * Made deep_reload() off by default. It doesn't always work
4194 exactly as intended, so it's probably safer to have it off. It's
4198 exactly as intended, so it's probably safer to have it off. It's
4195 still available as dreload() anyway, so nothing is lost.
4199 still available as dreload() anyway, so nothing is lost.
4196
4200
4197 2002-01-02 Fernando Perez <fperez@colorado.edu>
4201 2002-01-02 Fernando Perez <fperez@colorado.edu>
4198
4202
4199 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4203 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4200 so I wanted an updated release).
4204 so I wanted an updated release).
4201
4205
4202 2001-12-27 Fernando Perez <fperez@colorado.edu>
4206 2001-12-27 Fernando Perez <fperez@colorado.edu>
4203
4207
4204 * IPython/iplib.py (InteractiveShell.interact): Added the original
4208 * IPython/iplib.py (InteractiveShell.interact): Added the original
4205 code from 'code.py' for this module in order to change the
4209 code from 'code.py' for this module in order to change the
4206 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4210 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4207 the history cache would break when the user hit Ctrl-C, and
4211 the history cache would break when the user hit Ctrl-C, and
4208 interact() offers no way to add any hooks to it.
4212 interact() offers no way to add any hooks to it.
4209
4213
4210 2001-12-23 Fernando Perez <fperez@colorado.edu>
4214 2001-12-23 Fernando Perez <fperez@colorado.edu>
4211
4215
4212 * setup.py: added check for 'MANIFEST' before trying to remove
4216 * setup.py: added check for 'MANIFEST' before trying to remove
4213 it. Thanks to Sean Reifschneider.
4217 it. Thanks to Sean Reifschneider.
4214
4218
4215 2001-12-22 Fernando Perez <fperez@colorado.edu>
4219 2001-12-22 Fernando Perez <fperez@colorado.edu>
4216
4220
4217 * Released 0.2.2.
4221 * Released 0.2.2.
4218
4222
4219 * Finished (reasonably) writing the manual. Later will add the
4223 * Finished (reasonably) writing the manual. Later will add the
4220 python-standard navigation stylesheets, but for the time being
4224 python-standard navigation stylesheets, but for the time being
4221 it's fairly complete. Distribution will include html and pdf
4225 it's fairly complete. Distribution will include html and pdf
4222 versions.
4226 versions.
4223
4227
4224 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4228 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4225 (MayaVi author).
4229 (MayaVi author).
4226
4230
4227 2001-12-21 Fernando Perez <fperez@colorado.edu>
4231 2001-12-21 Fernando Perez <fperez@colorado.edu>
4228
4232
4229 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4233 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4230 good public release, I think (with the manual and the distutils
4234 good public release, I think (with the manual and the distutils
4231 installer). The manual can use some work, but that can go
4235 installer). The manual can use some work, but that can go
4232 slowly. Otherwise I think it's quite nice for end users. Next
4236 slowly. Otherwise I think it's quite nice for end users. Next
4233 summer, rewrite the guts of it...
4237 summer, rewrite the guts of it...
4234
4238
4235 * Changed format of ipythonrc files to use whitespace as the
4239 * Changed format of ipythonrc files to use whitespace as the
4236 separator instead of an explicit '='. Cleaner.
4240 separator instead of an explicit '='. Cleaner.
4237
4241
4238 2001-12-20 Fernando Perez <fperez@colorado.edu>
4242 2001-12-20 Fernando Perez <fperez@colorado.edu>
4239
4243
4240 * Started a manual in LyX. For now it's just a quick merge of the
4244 * Started a manual in LyX. For now it's just a quick merge of the
4241 various internal docstrings and READMEs. Later it may grow into a
4245 various internal docstrings and READMEs. Later it may grow into a
4242 nice, full-blown manual.
4246 nice, full-blown manual.
4243
4247
4244 * Set up a distutils based installer. Installation should now be
4248 * Set up a distutils based installer. Installation should now be
4245 trivially simple for end-users.
4249 trivially simple for end-users.
4246
4250
4247 2001-12-11 Fernando Perez <fperez@colorado.edu>
4251 2001-12-11 Fernando Perez <fperez@colorado.edu>
4248
4252
4249 * Released 0.2.0. First public release, announced it at
4253 * Released 0.2.0. First public release, announced it at
4250 comp.lang.python. From now on, just bugfixes...
4254 comp.lang.python. From now on, just bugfixes...
4251
4255
4252 * Went through all the files, set copyright/license notices and
4256 * Went through all the files, set copyright/license notices and
4253 cleaned up things. Ready for release.
4257 cleaned up things. Ready for release.
4254
4258
4255 2001-12-10 Fernando Perez <fperez@colorado.edu>
4259 2001-12-10 Fernando Perez <fperez@colorado.edu>
4256
4260
4257 * Changed the first-time installer not to use tarfiles. It's more
4261 * Changed the first-time installer not to use tarfiles. It's more
4258 robust now and less unix-dependent. Also makes it easier for
4262 robust now and less unix-dependent. Also makes it easier for
4259 people to later upgrade versions.
4263 people to later upgrade versions.
4260
4264
4261 * Changed @exit to @abort to reflect the fact that it's pretty
4265 * Changed @exit to @abort to reflect the fact that it's pretty
4262 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4266 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4263 becomes significant only when IPyhton is embedded: in that case,
4267 becomes significant only when IPyhton is embedded: in that case,
4264 C-D closes IPython only, but @abort kills the enclosing program
4268 C-D closes IPython only, but @abort kills the enclosing program
4265 too (unless it had called IPython inside a try catching
4269 too (unless it had called IPython inside a try catching
4266 SystemExit).
4270 SystemExit).
4267
4271
4268 * Created Shell module which exposes the actuall IPython Shell
4272 * Created Shell module which exposes the actuall IPython Shell
4269 classes, currently the normal and the embeddable one. This at
4273 classes, currently the normal and the embeddable one. This at
4270 least offers a stable interface we won't need to change when
4274 least offers a stable interface we won't need to change when
4271 (later) the internals are rewritten. That rewrite will be confined
4275 (later) the internals are rewritten. That rewrite will be confined
4272 to iplib and ipmaker, but the Shell interface should remain as is.
4276 to iplib and ipmaker, but the Shell interface should remain as is.
4273
4277
4274 * Added embed module which offers an embeddable IPShell object,
4278 * Added embed module which offers an embeddable IPShell object,
4275 useful to fire up IPython *inside* a running program. Great for
4279 useful to fire up IPython *inside* a running program. Great for
4276 debugging or dynamical data analysis.
4280 debugging or dynamical data analysis.
4277
4281
4278 2001-12-08 Fernando Perez <fperez@colorado.edu>
4282 2001-12-08 Fernando Perez <fperez@colorado.edu>
4279
4283
4280 * Fixed small bug preventing seeing info from methods of defined
4284 * Fixed small bug preventing seeing info from methods of defined
4281 objects (incorrect namespace in _ofind()).
4285 objects (incorrect namespace in _ofind()).
4282
4286
4283 * Documentation cleanup. Moved the main usage docstrings to a
4287 * Documentation cleanup. Moved the main usage docstrings to a
4284 separate file, usage.py (cleaner to maintain, and hopefully in the
4288 separate file, usage.py (cleaner to maintain, and hopefully in the
4285 future some perlpod-like way of producing interactive, man and
4289 future some perlpod-like way of producing interactive, man and
4286 html docs out of it will be found).
4290 html docs out of it will be found).
4287
4291
4288 * Added @profile to see your profile at any time.
4292 * Added @profile to see your profile at any time.
4289
4293
4290 * Added @p as an alias for 'print'. It's especially convenient if
4294 * Added @p as an alias for 'print'. It's especially convenient if
4291 using automagic ('p x' prints x).
4295 using automagic ('p x' prints x).
4292
4296
4293 * Small cleanups and fixes after a pychecker run.
4297 * Small cleanups and fixes after a pychecker run.
4294
4298
4295 * Changed the @cd command to handle @cd - and @cd -<n> for
4299 * Changed the @cd command to handle @cd - and @cd -<n> for
4296 visiting any directory in _dh.
4300 visiting any directory in _dh.
4297
4301
4298 * Introduced _dh, a history of visited directories. @dhist prints
4302 * Introduced _dh, a history of visited directories. @dhist prints
4299 it out with numbers.
4303 it out with numbers.
4300
4304
4301 2001-12-07 Fernando Perez <fperez@colorado.edu>
4305 2001-12-07 Fernando Perez <fperez@colorado.edu>
4302
4306
4303 * Released 0.1.22
4307 * Released 0.1.22
4304
4308
4305 * Made initialization a bit more robust against invalid color
4309 * Made initialization a bit more robust against invalid color
4306 options in user input (exit, not traceback-crash).
4310 options in user input (exit, not traceback-crash).
4307
4311
4308 * Changed the bug crash reporter to write the report only in the
4312 * Changed the bug crash reporter to write the report only in the
4309 user's .ipython directory. That way IPython won't litter people's
4313 user's .ipython directory. That way IPython won't litter people's
4310 hard disks with crash files all over the place. Also print on
4314 hard disks with crash files all over the place. Also print on
4311 screen the necessary mail command.
4315 screen the necessary mail command.
4312
4316
4313 * With the new ultraTB, implemented LightBG color scheme for light
4317 * With the new ultraTB, implemented LightBG color scheme for light
4314 background terminals. A lot of people like white backgrounds, so I
4318 background terminals. A lot of people like white backgrounds, so I
4315 guess we should at least give them something readable.
4319 guess we should at least give them something readable.
4316
4320
4317 2001-12-06 Fernando Perez <fperez@colorado.edu>
4321 2001-12-06 Fernando Perez <fperez@colorado.edu>
4318
4322
4319 * Modified the structure of ultraTB. Now there's a proper class
4323 * Modified the structure of ultraTB. Now there's a proper class
4320 for tables of color schemes which allow adding schemes easily and
4324 for tables of color schemes which allow adding schemes easily and
4321 switching the active scheme without creating a new instance every
4325 switching the active scheme without creating a new instance every
4322 time (which was ridiculous). The syntax for creating new schemes
4326 time (which was ridiculous). The syntax for creating new schemes
4323 is also cleaner. I think ultraTB is finally done, with a clean
4327 is also cleaner. I think ultraTB is finally done, with a clean
4324 class structure. Names are also much cleaner (now there's proper
4328 class structure. Names are also much cleaner (now there's proper
4325 color tables, no need for every variable to also have 'color' in
4329 color tables, no need for every variable to also have 'color' in
4326 its name).
4330 its name).
4327
4331
4328 * Broke down genutils into separate files. Now genutils only
4332 * Broke down genutils into separate files. Now genutils only
4329 contains utility functions, and classes have been moved to their
4333 contains utility functions, and classes have been moved to their
4330 own files (they had enough independent functionality to warrant
4334 own files (they had enough independent functionality to warrant
4331 it): ConfigLoader, OutputTrap, Struct.
4335 it): ConfigLoader, OutputTrap, Struct.
4332
4336
4333 2001-12-05 Fernando Perez <fperez@colorado.edu>
4337 2001-12-05 Fernando Perez <fperez@colorado.edu>
4334
4338
4335 * IPython turns 21! Released version 0.1.21, as a candidate for
4339 * IPython turns 21! Released version 0.1.21, as a candidate for
4336 public consumption. If all goes well, release in a few days.
4340 public consumption. If all goes well, release in a few days.
4337
4341
4338 * Fixed path bug (files in Extensions/ directory wouldn't be found
4342 * Fixed path bug (files in Extensions/ directory wouldn't be found
4339 unless IPython/ was explicitly in sys.path).
4343 unless IPython/ was explicitly in sys.path).
4340
4344
4341 * Extended the FlexCompleter class as MagicCompleter to allow
4345 * Extended the FlexCompleter class as MagicCompleter to allow
4342 completion of @-starting lines.
4346 completion of @-starting lines.
4343
4347
4344 * Created __release__.py file as a central repository for release
4348 * Created __release__.py file as a central repository for release
4345 info that other files can read from.
4349 info that other files can read from.
4346
4350
4347 * Fixed small bug in logging: when logging was turned on in
4351 * Fixed small bug in logging: when logging was turned on in
4348 mid-session, old lines with special meanings (!@?) were being
4352 mid-session, old lines with special meanings (!@?) were being
4349 logged without the prepended comment, which is necessary since
4353 logged without the prepended comment, which is necessary since
4350 they are not truly valid python syntax. This should make session
4354 they are not truly valid python syntax. This should make session
4351 restores produce less errors.
4355 restores produce less errors.
4352
4356
4353 * The namespace cleanup forced me to make a FlexCompleter class
4357 * The namespace cleanup forced me to make a FlexCompleter class
4354 which is nothing but a ripoff of rlcompleter, but with selectable
4358 which is nothing but a ripoff of rlcompleter, but with selectable
4355 namespace (rlcompleter only works in __main__.__dict__). I'll try
4359 namespace (rlcompleter only works in __main__.__dict__). I'll try
4356 to submit a note to the authors to see if this change can be
4360 to submit a note to the authors to see if this change can be
4357 incorporated in future rlcompleter releases (Dec.6: done)
4361 incorporated in future rlcompleter releases (Dec.6: done)
4358
4362
4359 * More fixes to namespace handling. It was a mess! Now all
4363 * More fixes to namespace handling. It was a mess! Now all
4360 explicit references to __main__.__dict__ are gone (except when
4364 explicit references to __main__.__dict__ are gone (except when
4361 really needed) and everything is handled through the namespace
4365 really needed) and everything is handled through the namespace
4362 dicts in the IPython instance. We seem to be getting somewhere
4366 dicts in the IPython instance. We seem to be getting somewhere
4363 with this, finally...
4367 with this, finally...
4364
4368
4365 * Small documentation updates.
4369 * Small documentation updates.
4366
4370
4367 * Created the Extensions directory under IPython (with an
4371 * Created the Extensions directory under IPython (with an
4368 __init__.py). Put the PhysicalQ stuff there. This directory should
4372 __init__.py). Put the PhysicalQ stuff there. This directory should
4369 be used for all special-purpose extensions.
4373 be used for all special-purpose extensions.
4370
4374
4371 * File renaming:
4375 * File renaming:
4372 ipythonlib --> ipmaker
4376 ipythonlib --> ipmaker
4373 ipplib --> iplib
4377 ipplib --> iplib
4374 This makes a bit more sense in terms of what these files actually do.
4378 This makes a bit more sense in terms of what these files actually do.
4375
4379
4376 * Moved all the classes and functions in ipythonlib to ipplib, so
4380 * Moved all the classes and functions in ipythonlib to ipplib, so
4377 now ipythonlib only has make_IPython(). This will ease up its
4381 now ipythonlib only has make_IPython(). This will ease up its
4378 splitting in smaller functional chunks later.
4382 splitting in smaller functional chunks later.
4379
4383
4380 * Cleaned up (done, I think) output of @whos. Better column
4384 * Cleaned up (done, I think) output of @whos. Better column
4381 formatting, and now shows str(var) for as much as it can, which is
4385 formatting, and now shows str(var) for as much as it can, which is
4382 typically what one gets with a 'print var'.
4386 typically what one gets with a 'print var'.
4383
4387
4384 2001-12-04 Fernando Perez <fperez@colorado.edu>
4388 2001-12-04 Fernando Perez <fperez@colorado.edu>
4385
4389
4386 * Fixed namespace problems. Now builtin/IPyhton/user names get
4390 * Fixed namespace problems. Now builtin/IPyhton/user names get
4387 properly reported in their namespace. Internal namespace handling
4391 properly reported in their namespace. Internal namespace handling
4388 is finally getting decent (not perfect yet, but much better than
4392 is finally getting decent (not perfect yet, but much better than
4389 the ad-hoc mess we had).
4393 the ad-hoc mess we had).
4390
4394
4391 * Removed -exit option. If people just want to run a python
4395 * Removed -exit option. If people just want to run a python
4392 script, that's what the normal interpreter is for. Less
4396 script, that's what the normal interpreter is for. Less
4393 unnecessary options, less chances for bugs.
4397 unnecessary options, less chances for bugs.
4394
4398
4395 * Added a crash handler which generates a complete post-mortem if
4399 * Added a crash handler which generates a complete post-mortem if
4396 IPython crashes. This will help a lot in tracking bugs down the
4400 IPython crashes. This will help a lot in tracking bugs down the
4397 road.
4401 road.
4398
4402
4399 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4403 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4400 which were boud to functions being reassigned would bypass the
4404 which were boud to functions being reassigned would bypass the
4401 logger, breaking the sync of _il with the prompt counter. This
4405 logger, breaking the sync of _il with the prompt counter. This
4402 would then crash IPython later when a new line was logged.
4406 would then crash IPython later when a new line was logged.
4403
4407
4404 2001-12-02 Fernando Perez <fperez@colorado.edu>
4408 2001-12-02 Fernando Perez <fperez@colorado.edu>
4405
4409
4406 * Made IPython a package. This means people don't have to clutter
4410 * Made IPython a package. This means people don't have to clutter
4407 their sys.path with yet another directory. Changed the INSTALL
4411 their sys.path with yet another directory. Changed the INSTALL
4408 file accordingly.
4412 file accordingly.
4409
4413
4410 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4414 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4411 sorts its output (so @who shows it sorted) and @whos formats the
4415 sorts its output (so @who shows it sorted) and @whos formats the
4412 table according to the width of the first column. Nicer, easier to
4416 table according to the width of the first column. Nicer, easier to
4413 read. Todo: write a generic table_format() which takes a list of
4417 read. Todo: write a generic table_format() which takes a list of
4414 lists and prints it nicely formatted, with optional row/column
4418 lists and prints it nicely formatted, with optional row/column
4415 separators and proper padding and justification.
4419 separators and proper padding and justification.
4416
4420
4417 * Released 0.1.20
4421 * Released 0.1.20
4418
4422
4419 * Fixed bug in @log which would reverse the inputcache list (a
4423 * Fixed bug in @log which would reverse the inputcache list (a
4420 copy operation was missing).
4424 copy operation was missing).
4421
4425
4422 * Code cleanup. @config was changed to use page(). Better, since
4426 * Code cleanup. @config was changed to use page(). Better, since
4423 its output is always quite long.
4427 its output is always quite long.
4424
4428
4425 * Itpl is back as a dependency. I was having too many problems
4429 * Itpl is back as a dependency. I was having too many problems
4426 getting the parametric aliases to work reliably, and it's just
4430 getting the parametric aliases to work reliably, and it's just
4427 easier to code weird string operations with it than playing %()s
4431 easier to code weird string operations with it than playing %()s
4428 games. It's only ~6k, so I don't think it's too big a deal.
4432 games. It's only ~6k, so I don't think it's too big a deal.
4429
4433
4430 * Found (and fixed) a very nasty bug with history. !lines weren't
4434 * Found (and fixed) a very nasty bug with history. !lines weren't
4431 getting cached, and the out of sync caches would crash
4435 getting cached, and the out of sync caches would crash
4432 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4436 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4433 division of labor a bit better. Bug fixed, cleaner structure.
4437 division of labor a bit better. Bug fixed, cleaner structure.
4434
4438
4435 2001-12-01 Fernando Perez <fperez@colorado.edu>
4439 2001-12-01 Fernando Perez <fperez@colorado.edu>
4436
4440
4437 * Released 0.1.19
4441 * Released 0.1.19
4438
4442
4439 * Added option -n to @hist to prevent line number printing. Much
4443 * Added option -n to @hist to prevent line number printing. Much
4440 easier to copy/paste code this way.
4444 easier to copy/paste code this way.
4441
4445
4442 * Created global _il to hold the input list. Allows easy
4446 * Created global _il to hold the input list. Allows easy
4443 re-execution of blocks of code by slicing it (inspired by Janko's
4447 re-execution of blocks of code by slicing it (inspired by Janko's
4444 comment on 'macros').
4448 comment on 'macros').
4445
4449
4446 * Small fixes and doc updates.
4450 * Small fixes and doc updates.
4447
4451
4448 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4452 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4449 much too fragile with automagic. Handles properly multi-line
4453 much too fragile with automagic. Handles properly multi-line
4450 statements and takes parameters.
4454 statements and takes parameters.
4451
4455
4452 2001-11-30 Fernando Perez <fperez@colorado.edu>
4456 2001-11-30 Fernando Perez <fperez@colorado.edu>
4453
4457
4454 * Version 0.1.18 released.
4458 * Version 0.1.18 released.
4455
4459
4456 * Fixed nasty namespace bug in initial module imports.
4460 * Fixed nasty namespace bug in initial module imports.
4457
4461
4458 * Added copyright/license notes to all code files (except
4462 * Added copyright/license notes to all code files (except
4459 DPyGetOpt). For the time being, LGPL. That could change.
4463 DPyGetOpt). For the time being, LGPL. That could change.
4460
4464
4461 * Rewrote a much nicer README, updated INSTALL, cleaned up
4465 * Rewrote a much nicer README, updated INSTALL, cleaned up
4462 ipythonrc-* samples.
4466 ipythonrc-* samples.
4463
4467
4464 * Overall code/documentation cleanup. Basically ready for
4468 * Overall code/documentation cleanup. Basically ready for
4465 release. Only remaining thing: licence decision (LGPL?).
4469 release. Only remaining thing: licence decision (LGPL?).
4466
4470
4467 * Converted load_config to a class, ConfigLoader. Now recursion
4471 * Converted load_config to a class, ConfigLoader. Now recursion
4468 control is better organized. Doesn't include the same file twice.
4472 control is better organized. Doesn't include the same file twice.
4469
4473
4470 2001-11-29 Fernando Perez <fperez@colorado.edu>
4474 2001-11-29 Fernando Perez <fperez@colorado.edu>
4471
4475
4472 * Got input history working. Changed output history variables from
4476 * Got input history working. Changed output history variables from
4473 _p to _o so that _i is for input and _o for output. Just cleaner
4477 _p to _o so that _i is for input and _o for output. Just cleaner
4474 convention.
4478 convention.
4475
4479
4476 * Implemented parametric aliases. This pretty much allows the
4480 * Implemented parametric aliases. This pretty much allows the
4477 alias system to offer full-blown shell convenience, I think.
4481 alias system to offer full-blown shell convenience, I think.
4478
4482
4479 * Version 0.1.17 released, 0.1.18 opened.
4483 * Version 0.1.17 released, 0.1.18 opened.
4480
4484
4481 * dot_ipython/ipythonrc (alias): added documentation.
4485 * dot_ipython/ipythonrc (alias): added documentation.
4482 (xcolor): Fixed small bug (xcolors -> xcolor)
4486 (xcolor): Fixed small bug (xcolors -> xcolor)
4483
4487
4484 * Changed the alias system. Now alias is a magic command to define
4488 * Changed the alias system. Now alias is a magic command to define
4485 aliases just like the shell. Rationale: the builtin magics should
4489 aliases just like the shell. Rationale: the builtin magics should
4486 be there for things deeply connected to IPython's
4490 be there for things deeply connected to IPython's
4487 architecture. And this is a much lighter system for what I think
4491 architecture. And this is a much lighter system for what I think
4488 is the really important feature: allowing users to define quickly
4492 is the really important feature: allowing users to define quickly
4489 magics that will do shell things for them, so they can customize
4493 magics that will do shell things for them, so they can customize
4490 IPython easily to match their work habits. If someone is really
4494 IPython easily to match their work habits. If someone is really
4491 desperate to have another name for a builtin alias, they can
4495 desperate to have another name for a builtin alias, they can
4492 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4496 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4493 works.
4497 works.
4494
4498
4495 2001-11-28 Fernando Perez <fperez@colorado.edu>
4499 2001-11-28 Fernando Perez <fperez@colorado.edu>
4496
4500
4497 * Changed @file so that it opens the source file at the proper
4501 * Changed @file so that it opens the source file at the proper
4498 line. Since it uses less, if your EDITOR environment is
4502 line. Since it uses less, if your EDITOR environment is
4499 configured, typing v will immediately open your editor of choice
4503 configured, typing v will immediately open your editor of choice
4500 right at the line where the object is defined. Not as quick as
4504 right at the line where the object is defined. Not as quick as
4501 having a direct @edit command, but for all intents and purposes it
4505 having a direct @edit command, but for all intents and purposes it
4502 works. And I don't have to worry about writing @edit to deal with
4506 works. And I don't have to worry about writing @edit to deal with
4503 all the editors, less does that.
4507 all the editors, less does that.
4504
4508
4505 * Version 0.1.16 released, 0.1.17 opened.
4509 * Version 0.1.16 released, 0.1.17 opened.
4506
4510
4507 * Fixed some nasty bugs in the page/page_dumb combo that could
4511 * Fixed some nasty bugs in the page/page_dumb combo that could
4508 crash IPython.
4512 crash IPython.
4509
4513
4510 2001-11-27 Fernando Perez <fperez@colorado.edu>
4514 2001-11-27 Fernando Perez <fperez@colorado.edu>
4511
4515
4512 * Version 0.1.15 released, 0.1.16 opened.
4516 * Version 0.1.15 released, 0.1.16 opened.
4513
4517
4514 * Finally got ? and ?? to work for undefined things: now it's
4518 * Finally got ? and ?? to work for undefined things: now it's
4515 possible to type {}.get? and get information about the get method
4519 possible to type {}.get? and get information about the get method
4516 of dicts, or os.path? even if only os is defined (so technically
4520 of dicts, or os.path? even if only os is defined (so technically
4517 os.path isn't). Works at any level. For example, after import os,
4521 os.path isn't). Works at any level. For example, after import os,
4518 os?, os.path?, os.path.abspath? all work. This is great, took some
4522 os?, os.path?, os.path.abspath? all work. This is great, took some
4519 work in _ofind.
4523 work in _ofind.
4520
4524
4521 * Fixed more bugs with logging. The sanest way to do it was to add
4525 * Fixed more bugs with logging. The sanest way to do it was to add
4522 to @log a 'mode' parameter. Killed two in one shot (this mode
4526 to @log a 'mode' parameter. Killed two in one shot (this mode
4523 option was a request of Janko's). I think it's finally clean
4527 option was a request of Janko's). I think it's finally clean
4524 (famous last words).
4528 (famous last words).
4525
4529
4526 * Added a page_dumb() pager which does a decent job of paging on
4530 * Added a page_dumb() pager which does a decent job of paging on
4527 screen, if better things (like less) aren't available. One less
4531 screen, if better things (like less) aren't available. One less
4528 unix dependency (someday maybe somebody will port this to
4532 unix dependency (someday maybe somebody will port this to
4529 windows).
4533 windows).
4530
4534
4531 * Fixed problem in magic_log: would lock of logging out if log
4535 * Fixed problem in magic_log: would lock of logging out if log
4532 creation failed (because it would still think it had succeeded).
4536 creation failed (because it would still think it had succeeded).
4533
4537
4534 * Improved the page() function using curses to auto-detect screen
4538 * Improved the page() function using curses to auto-detect screen
4535 size. Now it can make a much better decision on whether to print
4539 size. Now it can make a much better decision on whether to print
4536 or page a string. Option screen_length was modified: a value 0
4540 or page a string. Option screen_length was modified: a value 0
4537 means auto-detect, and that's the default now.
4541 means auto-detect, and that's the default now.
4538
4542
4539 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4543 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4540 go out. I'll test it for a few days, then talk to Janko about
4544 go out. I'll test it for a few days, then talk to Janko about
4541 licences and announce it.
4545 licences and announce it.
4542
4546
4543 * Fixed the length of the auto-generated ---> prompt which appears
4547 * Fixed the length of the auto-generated ---> prompt which appears
4544 for auto-parens and auto-quotes. Getting this right isn't trivial,
4548 for auto-parens and auto-quotes. Getting this right isn't trivial,
4545 with all the color escapes, different prompt types and optional
4549 with all the color escapes, different prompt types and optional
4546 separators. But it seems to be working in all the combinations.
4550 separators. But it seems to be working in all the combinations.
4547
4551
4548 2001-11-26 Fernando Perez <fperez@colorado.edu>
4552 2001-11-26 Fernando Perez <fperez@colorado.edu>
4549
4553
4550 * Wrote a regexp filter to get option types from the option names
4554 * Wrote a regexp filter to get option types from the option names
4551 string. This eliminates the need to manually keep two duplicate
4555 string. This eliminates the need to manually keep two duplicate
4552 lists.
4556 lists.
4553
4557
4554 * Removed the unneeded check_option_names. Now options are handled
4558 * Removed the unneeded check_option_names. Now options are handled
4555 in a much saner manner and it's easy to visually check that things
4559 in a much saner manner and it's easy to visually check that things
4556 are ok.
4560 are ok.
4557
4561
4558 * Updated version numbers on all files I modified to carry a
4562 * Updated version numbers on all files I modified to carry a
4559 notice so Janko and Nathan have clear version markers.
4563 notice so Janko and Nathan have clear version markers.
4560
4564
4561 * Updated docstring for ultraTB with my changes. I should send
4565 * Updated docstring for ultraTB with my changes. I should send
4562 this to Nathan.
4566 this to Nathan.
4563
4567
4564 * Lots of small fixes. Ran everything through pychecker again.
4568 * Lots of small fixes. Ran everything through pychecker again.
4565
4569
4566 * Made loading of deep_reload an cmd line option. If it's not too
4570 * Made loading of deep_reload an cmd line option. If it's not too
4567 kosher, now people can just disable it. With -nodeep_reload it's
4571 kosher, now people can just disable it. With -nodeep_reload it's
4568 still available as dreload(), it just won't overwrite reload().
4572 still available as dreload(), it just won't overwrite reload().
4569
4573
4570 * Moved many options to the no| form (-opt and -noopt
4574 * Moved many options to the no| form (-opt and -noopt
4571 accepted). Cleaner.
4575 accepted). Cleaner.
4572
4576
4573 * Changed magic_log so that if called with no parameters, it uses
4577 * Changed magic_log so that if called with no parameters, it uses
4574 'rotate' mode. That way auto-generated logs aren't automatically
4578 'rotate' mode. That way auto-generated logs aren't automatically
4575 over-written. For normal logs, now a backup is made if it exists
4579 over-written. For normal logs, now a backup is made if it exists
4576 (only 1 level of backups). A new 'backup' mode was added to the
4580 (only 1 level of backups). A new 'backup' mode was added to the
4577 Logger class to support this. This was a request by Janko.
4581 Logger class to support this. This was a request by Janko.
4578
4582
4579 * Added @logoff/@logon to stop/restart an active log.
4583 * Added @logoff/@logon to stop/restart an active log.
4580
4584
4581 * Fixed a lot of bugs in log saving/replay. It was pretty
4585 * Fixed a lot of bugs in log saving/replay. It was pretty
4582 broken. Now special lines (!@,/) appear properly in the command
4586 broken. Now special lines (!@,/) appear properly in the command
4583 history after a log replay.
4587 history after a log replay.
4584
4588
4585 * Tried and failed to implement full session saving via pickle. My
4589 * Tried and failed to implement full session saving via pickle. My
4586 idea was to pickle __main__.__dict__, but modules can't be
4590 idea was to pickle __main__.__dict__, but modules can't be
4587 pickled. This would be a better alternative to replaying logs, but
4591 pickled. This would be a better alternative to replaying logs, but
4588 seems quite tricky to get to work. Changed -session to be called
4592 seems quite tricky to get to work. Changed -session to be called
4589 -logplay, which more accurately reflects what it does. And if we
4593 -logplay, which more accurately reflects what it does. And if we
4590 ever get real session saving working, -session is now available.
4594 ever get real session saving working, -session is now available.
4591
4595
4592 * Implemented color schemes for prompts also. As for tracebacks,
4596 * Implemented color schemes for prompts also. As for tracebacks,
4593 currently only NoColor and Linux are supported. But now the
4597 currently only NoColor and Linux are supported. But now the
4594 infrastructure is in place, based on a generic ColorScheme
4598 infrastructure is in place, based on a generic ColorScheme
4595 class. So writing and activating new schemes both for the prompts
4599 class. So writing and activating new schemes both for the prompts
4596 and the tracebacks should be straightforward.
4600 and the tracebacks should be straightforward.
4597
4601
4598 * Version 0.1.13 released, 0.1.14 opened.
4602 * Version 0.1.13 released, 0.1.14 opened.
4599
4603
4600 * Changed handling of options for output cache. Now counter is
4604 * Changed handling of options for output cache. Now counter is
4601 hardwired starting at 1 and one specifies the maximum number of
4605 hardwired starting at 1 and one specifies the maximum number of
4602 entries *in the outcache* (not the max prompt counter). This is
4606 entries *in the outcache* (not the max prompt counter). This is
4603 much better, since many statements won't increase the cache
4607 much better, since many statements won't increase the cache
4604 count. It also eliminated some confusing options, now there's only
4608 count. It also eliminated some confusing options, now there's only
4605 one: cache_size.
4609 one: cache_size.
4606
4610
4607 * Added 'alias' magic function and magic_alias option in the
4611 * Added 'alias' magic function and magic_alias option in the
4608 ipythonrc file. Now the user can easily define whatever names he
4612 ipythonrc file. Now the user can easily define whatever names he
4609 wants for the magic functions without having to play weird
4613 wants for the magic functions without having to play weird
4610 namespace games. This gives IPython a real shell-like feel.
4614 namespace games. This gives IPython a real shell-like feel.
4611
4615
4612 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4616 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4613 @ or not).
4617 @ or not).
4614
4618
4615 This was one of the last remaining 'visible' bugs (that I know
4619 This was one of the last remaining 'visible' bugs (that I know
4616 of). I think if I can clean up the session loading so it works
4620 of). I think if I can clean up the session loading so it works
4617 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4621 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4618 about licensing).
4622 about licensing).
4619
4623
4620 2001-11-25 Fernando Perez <fperez@colorado.edu>
4624 2001-11-25 Fernando Perez <fperez@colorado.edu>
4621
4625
4622 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4626 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4623 there's a cleaner distinction between what ? and ?? show.
4627 there's a cleaner distinction between what ? and ?? show.
4624
4628
4625 * Added screen_length option. Now the user can define his own
4629 * Added screen_length option. Now the user can define his own
4626 screen size for page() operations.
4630 screen size for page() operations.
4627
4631
4628 * Implemented magic shell-like functions with automatic code
4632 * Implemented magic shell-like functions with automatic code
4629 generation. Now adding another function is just a matter of adding
4633 generation. Now adding another function is just a matter of adding
4630 an entry to a dict, and the function is dynamically generated at
4634 an entry to a dict, and the function is dynamically generated at
4631 run-time. Python has some really cool features!
4635 run-time. Python has some really cool features!
4632
4636
4633 * Renamed many options to cleanup conventions a little. Now all
4637 * Renamed many options to cleanup conventions a little. Now all
4634 are lowercase, and only underscores where needed. Also in the code
4638 are lowercase, and only underscores where needed. Also in the code
4635 option name tables are clearer.
4639 option name tables are clearer.
4636
4640
4637 * Changed prompts a little. Now input is 'In [n]:' instead of
4641 * Changed prompts a little. Now input is 'In [n]:' instead of
4638 'In[n]:='. This allows it the numbers to be aligned with the
4642 'In[n]:='. This allows it the numbers to be aligned with the
4639 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4643 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4640 Python (it was a Mathematica thing). The '...' continuation prompt
4644 Python (it was a Mathematica thing). The '...' continuation prompt
4641 was also changed a little to align better.
4645 was also changed a little to align better.
4642
4646
4643 * Fixed bug when flushing output cache. Not all _p<n> variables
4647 * Fixed bug when flushing output cache. Not all _p<n> variables
4644 exist, so their deletion needs to be wrapped in a try:
4648 exist, so their deletion needs to be wrapped in a try:
4645
4649
4646 * Figured out how to properly use inspect.formatargspec() (it
4650 * Figured out how to properly use inspect.formatargspec() (it
4647 requires the args preceded by *). So I removed all the code from
4651 requires the args preceded by *). So I removed all the code from
4648 _get_pdef in Magic, which was just replicating that.
4652 _get_pdef in Magic, which was just replicating that.
4649
4653
4650 * Added test to prefilter to allow redefining magic function names
4654 * Added test to prefilter to allow redefining magic function names
4651 as variables. This is ok, since the @ form is always available,
4655 as variables. This is ok, since the @ form is always available,
4652 but whe should allow the user to define a variable called 'ls' if
4656 but whe should allow the user to define a variable called 'ls' if
4653 he needs it.
4657 he needs it.
4654
4658
4655 * Moved the ToDo information from README into a separate ToDo.
4659 * Moved the ToDo information from README into a separate ToDo.
4656
4660
4657 * General code cleanup and small bugfixes. I think it's close to a
4661 * General code cleanup and small bugfixes. I think it's close to a
4658 state where it can be released, obviously with a big 'beta'
4662 state where it can be released, obviously with a big 'beta'
4659 warning on it.
4663 warning on it.
4660
4664
4661 * Got the magic function split to work. Now all magics are defined
4665 * Got the magic function split to work. Now all magics are defined
4662 in a separate class. It just organizes things a bit, and now
4666 in a separate class. It just organizes things a bit, and now
4663 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4667 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4664 was too long).
4668 was too long).
4665
4669
4666 * Changed @clear to @reset to avoid potential confusions with
4670 * Changed @clear to @reset to avoid potential confusions with
4667 the shell command clear. Also renamed @cl to @clear, which does
4671 the shell command clear. Also renamed @cl to @clear, which does
4668 exactly what people expect it to from their shell experience.
4672 exactly what people expect it to from their shell experience.
4669
4673
4670 Added a check to the @reset command (since it's so
4674 Added a check to the @reset command (since it's so
4671 destructive, it's probably a good idea to ask for confirmation).
4675 destructive, it's probably a good idea to ask for confirmation).
4672 But now reset only works for full namespace resetting. Since the
4676 But now reset only works for full namespace resetting. Since the
4673 del keyword is already there for deleting a few specific
4677 del keyword is already there for deleting a few specific
4674 variables, I don't see the point of having a redundant magic
4678 variables, I don't see the point of having a redundant magic
4675 function for the same task.
4679 function for the same task.
4676
4680
4677 2001-11-24 Fernando Perez <fperez@colorado.edu>
4681 2001-11-24 Fernando Perez <fperez@colorado.edu>
4678
4682
4679 * Updated the builtin docs (esp. the ? ones).
4683 * Updated the builtin docs (esp. the ? ones).
4680
4684
4681 * Ran all the code through pychecker. Not terribly impressed with
4685 * Ran all the code through pychecker. Not terribly impressed with
4682 it: lots of spurious warnings and didn't really find anything of
4686 it: lots of spurious warnings and didn't really find anything of
4683 substance (just a few modules being imported and not used).
4687 substance (just a few modules being imported and not used).
4684
4688
4685 * Implemented the new ultraTB functionality into IPython. New
4689 * Implemented the new ultraTB functionality into IPython. New
4686 option: xcolors. This chooses color scheme. xmode now only selects
4690 option: xcolors. This chooses color scheme. xmode now only selects
4687 between Plain and Verbose. Better orthogonality.
4691 between Plain and Verbose. Better orthogonality.
4688
4692
4689 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4693 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4690 mode and color scheme for the exception handlers. Now it's
4694 mode and color scheme for the exception handlers. Now it's
4691 possible to have the verbose traceback with no coloring.
4695 possible to have the verbose traceback with no coloring.
4692
4696
4693 2001-11-23 Fernando Perez <fperez@colorado.edu>
4697 2001-11-23 Fernando Perez <fperez@colorado.edu>
4694
4698
4695 * Version 0.1.12 released, 0.1.13 opened.
4699 * Version 0.1.12 released, 0.1.13 opened.
4696
4700
4697 * Removed option to set auto-quote and auto-paren escapes by
4701 * Removed option to set auto-quote and auto-paren escapes by
4698 user. The chances of breaking valid syntax are just too high. If
4702 user. The chances of breaking valid syntax are just too high. If
4699 someone *really* wants, they can always dig into the code.
4703 someone *really* wants, they can always dig into the code.
4700
4704
4701 * Made prompt separators configurable.
4705 * Made prompt separators configurable.
4702
4706
4703 2001-11-22 Fernando Perez <fperez@colorado.edu>
4707 2001-11-22 Fernando Perez <fperez@colorado.edu>
4704
4708
4705 * Small bugfixes in many places.
4709 * Small bugfixes in many places.
4706
4710
4707 * Removed the MyCompleter class from ipplib. It seemed redundant
4711 * Removed the MyCompleter class from ipplib. It seemed redundant
4708 with the C-p,C-n history search functionality. Less code to
4712 with the C-p,C-n history search functionality. Less code to
4709 maintain.
4713 maintain.
4710
4714
4711 * Moved all the original ipython.py code into ipythonlib.py. Right
4715 * Moved all the original ipython.py code into ipythonlib.py. Right
4712 now it's just one big dump into a function called make_IPython, so
4716 now it's just one big dump into a function called make_IPython, so
4713 no real modularity has been gained. But at least it makes the
4717 no real modularity has been gained. But at least it makes the
4714 wrapper script tiny, and since ipythonlib is a module, it gets
4718 wrapper script tiny, and since ipythonlib is a module, it gets
4715 compiled and startup is much faster.
4719 compiled and startup is much faster.
4716
4720
4717 This is a reasobably 'deep' change, so we should test it for a
4721 This is a reasobably 'deep' change, so we should test it for a
4718 while without messing too much more with the code.
4722 while without messing too much more with the code.
4719
4723
4720 2001-11-21 Fernando Perez <fperez@colorado.edu>
4724 2001-11-21 Fernando Perez <fperez@colorado.edu>
4721
4725
4722 * Version 0.1.11 released, 0.1.12 opened for further work.
4726 * Version 0.1.11 released, 0.1.12 opened for further work.
4723
4727
4724 * Removed dependency on Itpl. It was only needed in one place. It
4728 * Removed dependency on Itpl. It was only needed in one place. It
4725 would be nice if this became part of python, though. It makes life
4729 would be nice if this became part of python, though. It makes life
4726 *a lot* easier in some cases.
4730 *a lot* easier in some cases.
4727
4731
4728 * Simplified the prefilter code a bit. Now all handlers are
4732 * Simplified the prefilter code a bit. Now all handlers are
4729 expected to explicitly return a value (at least a blank string).
4733 expected to explicitly return a value (at least a blank string).
4730
4734
4731 * Heavy edits in ipplib. Removed the help system altogether. Now
4735 * Heavy edits in ipplib. Removed the help system altogether. Now
4732 obj?/?? is used for inspecting objects, a magic @doc prints
4736 obj?/?? is used for inspecting objects, a magic @doc prints
4733 docstrings, and full-blown Python help is accessed via the 'help'
4737 docstrings, and full-blown Python help is accessed via the 'help'
4734 keyword. This cleans up a lot of code (less to maintain) and does
4738 keyword. This cleans up a lot of code (less to maintain) and does
4735 the job. Since 'help' is now a standard Python component, might as
4739 the job. Since 'help' is now a standard Python component, might as
4736 well use it and remove duplicate functionality.
4740 well use it and remove duplicate functionality.
4737
4741
4738 Also removed the option to use ipplib as a standalone program. By
4742 Also removed the option to use ipplib as a standalone program. By
4739 now it's too dependent on other parts of IPython to function alone.
4743 now it's too dependent on other parts of IPython to function alone.
4740
4744
4741 * Fixed bug in genutils.pager. It would crash if the pager was
4745 * Fixed bug in genutils.pager. It would crash if the pager was
4742 exited immediately after opening (broken pipe).
4746 exited immediately after opening (broken pipe).
4743
4747
4744 * Trimmed down the VerboseTB reporting a little. The header is
4748 * Trimmed down the VerboseTB reporting a little. The header is
4745 much shorter now and the repeated exception arguments at the end
4749 much shorter now and the repeated exception arguments at the end
4746 have been removed. For interactive use the old header seemed a bit
4750 have been removed. For interactive use the old header seemed a bit
4747 excessive.
4751 excessive.
4748
4752
4749 * Fixed small bug in output of @whos for variables with multi-word
4753 * Fixed small bug in output of @whos for variables with multi-word
4750 types (only first word was displayed).
4754 types (only first word was displayed).
4751
4755
4752 2001-11-17 Fernando Perez <fperez@colorado.edu>
4756 2001-11-17 Fernando Perez <fperez@colorado.edu>
4753
4757
4754 * Version 0.1.10 released, 0.1.11 opened for further work.
4758 * Version 0.1.10 released, 0.1.11 opened for further work.
4755
4759
4756 * Modified dirs and friends. dirs now *returns* the stack (not
4760 * Modified dirs and friends. dirs now *returns* the stack (not
4757 prints), so one can manipulate it as a variable. Convenient to
4761 prints), so one can manipulate it as a variable. Convenient to
4758 travel along many directories.
4762 travel along many directories.
4759
4763
4760 * Fixed bug in magic_pdef: would only work with functions with
4764 * Fixed bug in magic_pdef: would only work with functions with
4761 arguments with default values.
4765 arguments with default values.
4762
4766
4763 2001-11-14 Fernando Perez <fperez@colorado.edu>
4767 2001-11-14 Fernando Perez <fperez@colorado.edu>
4764
4768
4765 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4769 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4766 example with IPython. Various other minor fixes and cleanups.
4770 example with IPython. Various other minor fixes and cleanups.
4767
4771
4768 * Version 0.1.9 released, 0.1.10 opened for further work.
4772 * Version 0.1.9 released, 0.1.10 opened for further work.
4769
4773
4770 * Added sys.path to the list of directories searched in the
4774 * Added sys.path to the list of directories searched in the
4771 execfile= option. It used to be the current directory and the
4775 execfile= option. It used to be the current directory and the
4772 user's IPYTHONDIR only.
4776 user's IPYTHONDIR only.
4773
4777
4774 2001-11-13 Fernando Perez <fperez@colorado.edu>
4778 2001-11-13 Fernando Perez <fperez@colorado.edu>
4775
4779
4776 * Reinstated the raw_input/prefilter separation that Janko had
4780 * Reinstated the raw_input/prefilter separation that Janko had
4777 initially. This gives a more convenient setup for extending the
4781 initially. This gives a more convenient setup for extending the
4778 pre-processor from the outside: raw_input always gets a string,
4782 pre-processor from the outside: raw_input always gets a string,
4779 and prefilter has to process it. We can then redefine prefilter
4783 and prefilter has to process it. We can then redefine prefilter
4780 from the outside and implement extensions for special
4784 from the outside and implement extensions for special
4781 purposes.
4785 purposes.
4782
4786
4783 Today I got one for inputting PhysicalQuantity objects
4787 Today I got one for inputting PhysicalQuantity objects
4784 (from Scientific) without needing any function calls at
4788 (from Scientific) without needing any function calls at
4785 all. Extremely convenient, and it's all done as a user-level
4789 all. Extremely convenient, and it's all done as a user-level
4786 extension (no IPython code was touched). Now instead of:
4790 extension (no IPython code was touched). Now instead of:
4787 a = PhysicalQuantity(4.2,'m/s**2')
4791 a = PhysicalQuantity(4.2,'m/s**2')
4788 one can simply say
4792 one can simply say
4789 a = 4.2 m/s**2
4793 a = 4.2 m/s**2
4790 or even
4794 or even
4791 a = 4.2 m/s^2
4795 a = 4.2 m/s^2
4792
4796
4793 I use this, but it's also a proof of concept: IPython really is
4797 I use this, but it's also a proof of concept: IPython really is
4794 fully user-extensible, even at the level of the parsing of the
4798 fully user-extensible, even at the level of the parsing of the
4795 command line. It's not trivial, but it's perfectly doable.
4799 command line. It's not trivial, but it's perfectly doable.
4796
4800
4797 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4801 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4798 the problem of modules being loaded in the inverse order in which
4802 the problem of modules being loaded in the inverse order in which
4799 they were defined in
4803 they were defined in
4800
4804
4801 * Version 0.1.8 released, 0.1.9 opened for further work.
4805 * Version 0.1.8 released, 0.1.9 opened for further work.
4802
4806
4803 * Added magics pdef, source and file. They respectively show the
4807 * Added magics pdef, source and file. They respectively show the
4804 definition line ('prototype' in C), source code and full python
4808 definition line ('prototype' in C), source code and full python
4805 file for any callable object. The object inspector oinfo uses
4809 file for any callable object. The object inspector oinfo uses
4806 these to show the same information.
4810 these to show the same information.
4807
4811
4808 * Version 0.1.7 released, 0.1.8 opened for further work.
4812 * Version 0.1.7 released, 0.1.8 opened for further work.
4809
4813
4810 * Separated all the magic functions into a class called Magic. The
4814 * Separated all the magic functions into a class called Magic. The
4811 InteractiveShell class was becoming too big for Xemacs to handle
4815 InteractiveShell class was becoming too big for Xemacs to handle
4812 (de-indenting a line would lock it up for 10 seconds while it
4816 (de-indenting a line would lock it up for 10 seconds while it
4813 backtracked on the whole class!)
4817 backtracked on the whole class!)
4814
4818
4815 FIXME: didn't work. It can be done, but right now namespaces are
4819 FIXME: didn't work. It can be done, but right now namespaces are
4816 all messed up. Do it later (reverted it for now, so at least
4820 all messed up. Do it later (reverted it for now, so at least
4817 everything works as before).
4821 everything works as before).
4818
4822
4819 * Got the object introspection system (magic_oinfo) working! I
4823 * Got the object introspection system (magic_oinfo) working! I
4820 think this is pretty much ready for release to Janko, so he can
4824 think this is pretty much ready for release to Janko, so he can
4821 test it for a while and then announce it. Pretty much 100% of what
4825 test it for a while and then announce it. Pretty much 100% of what
4822 I wanted for the 'phase 1' release is ready. Happy, tired.
4826 I wanted for the 'phase 1' release is ready. Happy, tired.
4823
4827
4824 2001-11-12 Fernando Perez <fperez@colorado.edu>
4828 2001-11-12 Fernando Perez <fperez@colorado.edu>
4825
4829
4826 * Version 0.1.6 released, 0.1.7 opened for further work.
4830 * Version 0.1.6 released, 0.1.7 opened for further work.
4827
4831
4828 * Fixed bug in printing: it used to test for truth before
4832 * Fixed bug in printing: it used to test for truth before
4829 printing, so 0 wouldn't print. Now checks for None.
4833 printing, so 0 wouldn't print. Now checks for None.
4830
4834
4831 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4835 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4832 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4836 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4833 reaches by hand into the outputcache. Think of a better way to do
4837 reaches by hand into the outputcache. Think of a better way to do
4834 this later.
4838 this later.
4835
4839
4836 * Various small fixes thanks to Nathan's comments.
4840 * Various small fixes thanks to Nathan's comments.
4837
4841
4838 * Changed magic_pprint to magic_Pprint. This way it doesn't
4842 * Changed magic_pprint to magic_Pprint. This way it doesn't
4839 collide with pprint() and the name is consistent with the command
4843 collide with pprint() and the name is consistent with the command
4840 line option.
4844 line option.
4841
4845
4842 * Changed prompt counter behavior to be fully like
4846 * Changed prompt counter behavior to be fully like
4843 Mathematica's. That is, even input that doesn't return a result
4847 Mathematica's. That is, even input that doesn't return a result
4844 raises the prompt counter. The old behavior was kind of confusing
4848 raises the prompt counter. The old behavior was kind of confusing
4845 (getting the same prompt number several times if the operation
4849 (getting the same prompt number several times if the operation
4846 didn't return a result).
4850 didn't return a result).
4847
4851
4848 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4852 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4849
4853
4850 * Fixed -Classic mode (wasn't working anymore).
4854 * Fixed -Classic mode (wasn't working anymore).
4851
4855
4852 * Added colored prompts using Nathan's new code. Colors are
4856 * Added colored prompts using Nathan's new code. Colors are
4853 currently hardwired, they can be user-configurable. For
4857 currently hardwired, they can be user-configurable. For
4854 developers, they can be chosen in file ipythonlib.py, at the
4858 developers, they can be chosen in file ipythonlib.py, at the
4855 beginning of the CachedOutput class def.
4859 beginning of the CachedOutput class def.
4856
4860
4857 2001-11-11 Fernando Perez <fperez@colorado.edu>
4861 2001-11-11 Fernando Perez <fperez@colorado.edu>
4858
4862
4859 * Version 0.1.5 released, 0.1.6 opened for further work.
4863 * Version 0.1.5 released, 0.1.6 opened for further work.
4860
4864
4861 * Changed magic_env to *return* the environment as a dict (not to
4865 * Changed magic_env to *return* the environment as a dict (not to
4862 print it). This way it prints, but it can also be processed.
4866 print it). This way it prints, but it can also be processed.
4863
4867
4864 * Added Verbose exception reporting to interactive
4868 * Added Verbose exception reporting to interactive
4865 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4869 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4866 traceback. Had to make some changes to the ultraTB file. This is
4870 traceback. Had to make some changes to the ultraTB file. This is
4867 probably the last 'big' thing in my mental todo list. This ties
4871 probably the last 'big' thing in my mental todo list. This ties
4868 in with the next entry:
4872 in with the next entry:
4869
4873
4870 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4874 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4871 has to specify is Plain, Color or Verbose for all exception
4875 has to specify is Plain, Color or Verbose for all exception
4872 handling.
4876 handling.
4873
4877
4874 * Removed ShellServices option. All this can really be done via
4878 * Removed ShellServices option. All this can really be done via
4875 the magic system. It's easier to extend, cleaner and has automatic
4879 the magic system. It's easier to extend, cleaner and has automatic
4876 namespace protection and documentation.
4880 namespace protection and documentation.
4877
4881
4878 2001-11-09 Fernando Perez <fperez@colorado.edu>
4882 2001-11-09 Fernando Perez <fperez@colorado.edu>
4879
4883
4880 * Fixed bug in output cache flushing (missing parameter to
4884 * Fixed bug in output cache flushing (missing parameter to
4881 __init__). Other small bugs fixed (found using pychecker).
4885 __init__). Other small bugs fixed (found using pychecker).
4882
4886
4883 * Version 0.1.4 opened for bugfixing.
4887 * Version 0.1.4 opened for bugfixing.
4884
4888
4885 2001-11-07 Fernando Perez <fperez@colorado.edu>
4889 2001-11-07 Fernando Perez <fperez@colorado.edu>
4886
4890
4887 * Version 0.1.3 released, mainly because of the raw_input bug.
4891 * Version 0.1.3 released, mainly because of the raw_input bug.
4888
4892
4889 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4893 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4890 and when testing for whether things were callable, a call could
4894 and when testing for whether things were callable, a call could
4891 actually be made to certain functions. They would get called again
4895 actually be made to certain functions. They would get called again
4892 once 'really' executed, with a resulting double call. A disaster
4896 once 'really' executed, with a resulting double call. A disaster
4893 in many cases (list.reverse() would never work!).
4897 in many cases (list.reverse() would never work!).
4894
4898
4895 * Removed prefilter() function, moved its code to raw_input (which
4899 * Removed prefilter() function, moved its code to raw_input (which
4896 after all was just a near-empty caller for prefilter). This saves
4900 after all was just a near-empty caller for prefilter). This saves
4897 a function call on every prompt, and simplifies the class a tiny bit.
4901 a function call on every prompt, and simplifies the class a tiny bit.
4898
4902
4899 * Fix _ip to __ip name in magic example file.
4903 * Fix _ip to __ip name in magic example file.
4900
4904
4901 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4905 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4902 work with non-gnu versions of tar.
4906 work with non-gnu versions of tar.
4903
4907
4904 2001-11-06 Fernando Perez <fperez@colorado.edu>
4908 2001-11-06 Fernando Perez <fperez@colorado.edu>
4905
4909
4906 * Version 0.1.2. Just to keep track of the recent changes.
4910 * Version 0.1.2. Just to keep track of the recent changes.
4907
4911
4908 * Fixed nasty bug in output prompt routine. It used to check 'if
4912 * Fixed nasty bug in output prompt routine. It used to check 'if
4909 arg != None...'. Problem is, this fails if arg implements a
4913 arg != None...'. Problem is, this fails if arg implements a
4910 special comparison (__cmp__) which disallows comparing to
4914 special comparison (__cmp__) which disallows comparing to
4911 None. Found it when trying to use the PhysicalQuantity module from
4915 None. Found it when trying to use the PhysicalQuantity module from
4912 ScientificPython.
4916 ScientificPython.
4913
4917
4914 2001-11-05 Fernando Perez <fperez@colorado.edu>
4918 2001-11-05 Fernando Perez <fperez@colorado.edu>
4915
4919
4916 * Also added dirs. Now the pushd/popd/dirs family functions
4920 * Also added dirs. Now the pushd/popd/dirs family functions
4917 basically like the shell, with the added convenience of going home
4921 basically like the shell, with the added convenience of going home
4918 when called with no args.
4922 when called with no args.
4919
4923
4920 * pushd/popd slightly modified to mimic shell behavior more
4924 * pushd/popd slightly modified to mimic shell behavior more
4921 closely.
4925 closely.
4922
4926
4923 * Added env,pushd,popd from ShellServices as magic functions. I
4927 * Added env,pushd,popd from ShellServices as magic functions. I
4924 think the cleanest will be to port all desired functions from
4928 think the cleanest will be to port all desired functions from
4925 ShellServices as magics and remove ShellServices altogether. This
4929 ShellServices as magics and remove ShellServices altogether. This
4926 will provide a single, clean way of adding functionality
4930 will provide a single, clean way of adding functionality
4927 (shell-type or otherwise) to IP.
4931 (shell-type or otherwise) to IP.
4928
4932
4929 2001-11-04 Fernando Perez <fperez@colorado.edu>
4933 2001-11-04 Fernando Perez <fperez@colorado.edu>
4930
4934
4931 * Added .ipython/ directory to sys.path. This way users can keep
4935 * Added .ipython/ directory to sys.path. This way users can keep
4932 customizations there and access them via import.
4936 customizations there and access them via import.
4933
4937
4934 2001-11-03 Fernando Perez <fperez@colorado.edu>
4938 2001-11-03 Fernando Perez <fperez@colorado.edu>
4935
4939
4936 * Opened version 0.1.1 for new changes.
4940 * Opened version 0.1.1 for new changes.
4937
4941
4938 * Changed version number to 0.1.0: first 'public' release, sent to
4942 * Changed version number to 0.1.0: first 'public' release, sent to
4939 Nathan and Janko.
4943 Nathan and Janko.
4940
4944
4941 * Lots of small fixes and tweaks.
4945 * Lots of small fixes and tweaks.
4942
4946
4943 * Minor changes to whos format. Now strings are shown, snipped if
4947 * Minor changes to whos format. Now strings are shown, snipped if
4944 too long.
4948 too long.
4945
4949
4946 * Changed ShellServices to work on __main__ so they show up in @who
4950 * Changed ShellServices to work on __main__ so they show up in @who
4947
4951
4948 * Help also works with ? at the end of a line:
4952 * Help also works with ? at the end of a line:
4949 ?sin and sin?
4953 ?sin and sin?
4950 both produce the same effect. This is nice, as often I use the
4954 both produce the same effect. This is nice, as often I use the
4951 tab-complete to find the name of a method, but I used to then have
4955 tab-complete to find the name of a method, but I used to then have
4952 to go to the beginning of the line to put a ? if I wanted more
4956 to go to the beginning of the line to put a ? if I wanted more
4953 info. Now I can just add the ? and hit return. Convenient.
4957 info. Now I can just add the ? and hit return. Convenient.
4954
4958
4955 2001-11-02 Fernando Perez <fperez@colorado.edu>
4959 2001-11-02 Fernando Perez <fperez@colorado.edu>
4956
4960
4957 * Python version check (>=2.1) added.
4961 * Python version check (>=2.1) added.
4958
4962
4959 * Added LazyPython documentation. At this point the docs are quite
4963 * Added LazyPython documentation. At this point the docs are quite
4960 a mess. A cleanup is in order.
4964 a mess. A cleanup is in order.
4961
4965
4962 * Auto-installer created. For some bizarre reason, the zipfiles
4966 * Auto-installer created. For some bizarre reason, the zipfiles
4963 module isn't working on my system. So I made a tar version
4967 module isn't working on my system. So I made a tar version
4964 (hopefully the command line options in various systems won't kill
4968 (hopefully the command line options in various systems won't kill
4965 me).
4969 me).
4966
4970
4967 * Fixes to Struct in genutils. Now all dictionary-like methods are
4971 * Fixes to Struct in genutils. Now all dictionary-like methods are
4968 protected (reasonably).
4972 protected (reasonably).
4969
4973
4970 * Added pager function to genutils and changed ? to print usage
4974 * Added pager function to genutils and changed ? to print usage
4971 note through it (it was too long).
4975 note through it (it was too long).
4972
4976
4973 * Added the LazyPython functionality. Works great! I changed the
4977 * Added the LazyPython functionality. Works great! I changed the
4974 auto-quote escape to ';', it's on home row and next to '. But
4978 auto-quote escape to ';', it's on home row and next to '. But
4975 both auto-quote and auto-paren (still /) escapes are command-line
4979 both auto-quote and auto-paren (still /) escapes are command-line
4976 parameters.
4980 parameters.
4977
4981
4978
4982
4979 2001-11-01 Fernando Perez <fperez@colorado.edu>
4983 2001-11-01 Fernando Perez <fperez@colorado.edu>
4980
4984
4981 * Version changed to 0.0.7. Fairly large change: configuration now
4985 * Version changed to 0.0.7. Fairly large change: configuration now
4982 is all stored in a directory, by default .ipython. There, all
4986 is all stored in a directory, by default .ipython. There, all
4983 config files have normal looking names (not .names)
4987 config files have normal looking names (not .names)
4984
4988
4985 * Version 0.0.6 Released first to Lucas and Archie as a test
4989 * Version 0.0.6 Released first to Lucas and Archie as a test
4986 run. Since it's the first 'semi-public' release, change version to
4990 run. Since it's the first 'semi-public' release, change version to
4987 > 0.0.6 for any changes now.
4991 > 0.0.6 for any changes now.
4988
4992
4989 * Stuff I had put in the ipplib.py changelog:
4993 * Stuff I had put in the ipplib.py changelog:
4990
4994
4991 Changes to InteractiveShell:
4995 Changes to InteractiveShell:
4992
4996
4993 - Made the usage message a parameter.
4997 - Made the usage message a parameter.
4994
4998
4995 - Require the name of the shell variable to be given. It's a bit
4999 - Require the name of the shell variable to be given. It's a bit
4996 of a hack, but allows the name 'shell' not to be hardwire in the
5000 of a hack, but allows the name 'shell' not to be hardwire in the
4997 magic (@) handler, which is problematic b/c it requires
5001 magic (@) handler, which is problematic b/c it requires
4998 polluting the global namespace with 'shell'. This in turn is
5002 polluting the global namespace with 'shell'. This in turn is
4999 fragile: if a user redefines a variable called shell, things
5003 fragile: if a user redefines a variable called shell, things
5000 break.
5004 break.
5001
5005
5002 - magic @: all functions available through @ need to be defined
5006 - magic @: all functions available through @ need to be defined
5003 as magic_<name>, even though they can be called simply as
5007 as magic_<name>, even though they can be called simply as
5004 @<name>. This allows the special command @magic to gather
5008 @<name>. This allows the special command @magic to gather
5005 information automatically about all existing magic functions,
5009 information automatically about all existing magic functions,
5006 even if they are run-time user extensions, by parsing the shell
5010 even if they are run-time user extensions, by parsing the shell
5007 instance __dict__ looking for special magic_ names.
5011 instance __dict__ looking for special magic_ names.
5008
5012
5009 - mainloop: added *two* local namespace parameters. This allows
5013 - mainloop: added *two* local namespace parameters. This allows
5010 the class to differentiate between parameters which were there
5014 the class to differentiate between parameters which were there
5011 before and after command line initialization was processed. This
5015 before and after command line initialization was processed. This
5012 way, later @who can show things loaded at startup by the
5016 way, later @who can show things loaded at startup by the
5013 user. This trick was necessary to make session saving/reloading
5017 user. This trick was necessary to make session saving/reloading
5014 really work: ideally after saving/exiting/reloading a session,
5018 really work: ideally after saving/exiting/reloading a session,
5015 *everythin* should look the same, including the output of @who. I
5019 *everythin* should look the same, including the output of @who. I
5016 was only able to make this work with this double namespace
5020 was only able to make this work with this double namespace
5017 trick.
5021 trick.
5018
5022
5019 - added a header to the logfile which allows (almost) full
5023 - added a header to the logfile which allows (almost) full
5020 session restoring.
5024 session restoring.
5021
5025
5022 - prepend lines beginning with @ or !, with a and log
5026 - prepend lines beginning with @ or !, with a and log
5023 them. Why? !lines: may be useful to know what you did @lines:
5027 them. Why? !lines: may be useful to know what you did @lines:
5024 they may affect session state. So when restoring a session, at
5028 they may affect session state. So when restoring a session, at
5025 least inform the user of their presence. I couldn't quite get
5029 least inform the user of their presence. I couldn't quite get
5026 them to properly re-execute, but at least the user is warned.
5030 them to properly re-execute, but at least the user is warned.
5027
5031
5028 * Started ChangeLog.
5032 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now