##// END OF EJS Templates
%store now prevents storing objs that are in module IPython.FakeModule...
vivainio -
Show More
@@ -1,2752 +1,2762 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 1030 2006-01-18 19:24:48Z fperez $"""
4 $Id: Magic.py 1034 2006-01-20 12:59:31Z 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 from cStringIO import StringIO
35 from cStringIO import StringIO
35 from getopt import getopt
36 from getopt import getopt
36 from pprint import pprint, pformat
37 from pprint import pprint, pformat
37
38
38 # profile isn't bundled by default in Debian for license reasons
39 # profile isn't bundled by default in Debian for license reasons
39 try:
40 try:
40 import profile,pstats
41 import profile,pstats
41 except ImportError:
42 except ImportError:
42 profile = pstats = None
43 profile = pstats = None
43
44
44 # Homebrewed
45 # Homebrewed
45 from IPython import Debugger, OInspect, wildcard
46 from IPython import Debugger, OInspect, wildcard
46 from IPython.FakeModule import FakeModule
47 from IPython.FakeModule import FakeModule
47 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.PyColorize import Parser
49 from IPython.PyColorize import Parser
49 from IPython.ipstruct import Struct
50 from IPython.ipstruct import Struct
50 from IPython.macro import Macro
51 from IPython.macro import Macro
51 from IPython.genutils import *
52 from IPython.genutils import *
52 from IPython import platutils
53 from IPython import platutils
53 #***************************************************************************
54 #***************************************************************************
54 # Utility functions
55 # Utility functions
55 def on_off(tag):
56 def on_off(tag):
56 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
57 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
57 return ['OFF','ON'][tag]
58 return ['OFF','ON'][tag]
58
59
59 class Bunch: pass
60 class Bunch: pass
60
61
61 #***************************************************************************
62 #***************************************************************************
62 # Main class implementing Magic functionality
63 # Main class implementing Magic functionality
63 class Magic:
64 class Magic:
64 """Magic functions for InteractiveShell.
65 """Magic functions for InteractiveShell.
65
66
66 Shell functions which can be reached as %function_name. All magic
67 Shell functions which can be reached as %function_name. All magic
67 functions should accept a string, which they can parse for their own
68 functions should accept a string, which they can parse for their own
68 needs. This can make some functions easier to type, eg `%cd ../`
69 needs. This can make some functions easier to type, eg `%cd ../`
69 vs. `%cd("../")`
70 vs. `%cd("../")`
70
71
71 ALL definitions MUST begin with the prefix magic_. The user won't need it
72 ALL definitions MUST begin with the prefix magic_. The user won't need it
72 at the command line, but it is is needed in the definition. """
73 at the command line, but it is is needed in the definition. """
73
74
74 # class globals
75 # class globals
75 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
76 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
76 'Automagic is ON, % prefix NOT needed for magic functions.']
77 'Automagic is ON, % prefix NOT needed for magic functions.']
77
78
78 #......................................................................
79 #......................................................................
79 # some utility functions
80 # some utility functions
80
81
81 def __init__(self,shell):
82 def __init__(self,shell):
82
83
83 self.options_table = {}
84 self.options_table = {}
84 if profile is None:
85 if profile is None:
85 self.magic_prun = self.profile_missing_notice
86 self.magic_prun = self.profile_missing_notice
86 self.shell = shell
87 self.shell = shell
87
88
88 # namespace for holding state we may need
89 # namespace for holding state we may need
89 self._magic_state = Bunch()
90 self._magic_state = Bunch()
90
91
91 def profile_missing_notice(self, *args, **kwargs):
92 def profile_missing_notice(self, *args, **kwargs):
92 error("""\
93 error("""\
93 The profile module could not be found. If you are a Debian user,
94 The profile module could not be found. If you are a Debian user,
94 it has been removed from the standard Debian package because of its non-free
95 it has been removed from the standard Debian package because of its non-free
95 license. To use profiling, please install"python2.3-profiler" from non-free.""")
96 license. To use profiling, please install"python2.3-profiler" from non-free.""")
96
97
97 def default_option(self,fn,optstr):
98 def default_option(self,fn,optstr):
98 """Make an entry in the options_table for fn, with value optstr"""
99 """Make an entry in the options_table for fn, with value optstr"""
99
100
100 if fn not in self.lsmagic():
101 if fn not in self.lsmagic():
101 error("%s is not a magic function" % fn)
102 error("%s is not a magic function" % fn)
102 self.options_table[fn] = optstr
103 self.options_table[fn] = optstr
103
104
104 def lsmagic(self):
105 def lsmagic(self):
105 """Return a list of currently available magic functions.
106 """Return a list of currently available magic functions.
106
107
107 Gives a list of the bare names after mangling (['ls','cd', ...], not
108 Gives a list of the bare names after mangling (['ls','cd', ...], not
108 ['magic_ls','magic_cd',...]"""
109 ['magic_ls','magic_cd',...]"""
109
110
110 # FIXME. This needs a cleanup, in the way the magics list is built.
111 # FIXME. This needs a cleanup, in the way the magics list is built.
111
112
112 # magics in class definition
113 # magics in class definition
113 class_magic = lambda fn: fn.startswith('magic_') and \
114 class_magic = lambda fn: fn.startswith('magic_') and \
114 callable(Magic.__dict__[fn])
115 callable(Magic.__dict__[fn])
115 # in instance namespace (run-time user additions)
116 # in instance namespace (run-time user additions)
116 inst_magic = lambda fn: fn.startswith('magic_') and \
117 inst_magic = lambda fn: fn.startswith('magic_') and \
117 callable(self.__dict__[fn])
118 callable(self.__dict__[fn])
118 # and bound magics by user (so they can access self):
119 # and bound magics by user (so they can access self):
119 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
120 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
120 callable(self.__class__.__dict__[fn])
121 callable(self.__class__.__dict__[fn])
121 magics = filter(class_magic,Magic.__dict__.keys()) + \
122 magics = filter(class_magic,Magic.__dict__.keys()) + \
122 filter(inst_magic,self.__dict__.keys()) + \
123 filter(inst_magic,self.__dict__.keys()) + \
123 filter(inst_bound_magic,self.__class__.__dict__.keys())
124 filter(inst_bound_magic,self.__class__.__dict__.keys())
124 out = []
125 out = []
125 for fn in magics:
126 for fn in magics:
126 out.append(fn.replace('magic_','',1))
127 out.append(fn.replace('magic_','',1))
127 out.sort()
128 out.sort()
128 return out
129 return out
129
130
130 def extract_input_slices(self,slices):
131 def extract_input_slices(self,slices):
131 """Return as a string a set of input history slices.
132 """Return as a string a set of input history slices.
132
133
133 The set of slices is given as a list of strings (like ['1','4:8','9'],
134 The set of slices is given as a list of strings (like ['1','4:8','9'],
134 since this function is for use by magic functions which get their
135 since this function is for use by magic functions which get their
135 arguments as strings.
136 arguments as strings.
136
137
137 Note that slices can be called with two notations:
138 Note that slices can be called with two notations:
138
139
139 N:M -> standard python form, means including items N...(M-1).
140 N:M -> standard python form, means including items N...(M-1).
140
141
141 N-M -> include items N..M (closed endpoint)."""
142 N-M -> include items N..M (closed endpoint)."""
142
143
143 cmds = []
144 cmds = []
144 for chunk in slices:
145 for chunk in slices:
145 if ':' in chunk:
146 if ':' in chunk:
146 ini,fin = map(int,chunk.split(':'))
147 ini,fin = map(int,chunk.split(':'))
147 elif '-' in chunk:
148 elif '-' in chunk:
148 ini,fin = map(int,chunk.split('-'))
149 ini,fin = map(int,chunk.split('-'))
149 fin += 1
150 fin += 1
150 else:
151 else:
151 ini = int(chunk)
152 ini = int(chunk)
152 fin = ini+1
153 fin = ini+1
153 cmds.append(self.shell.input_hist[ini:fin])
154 cmds.append(self.shell.input_hist[ini:fin])
154 return cmds
155 return cmds
155
156
156 def _ofind(self,oname):
157 def _ofind(self,oname):
157 """Find an object in the available namespaces.
158 """Find an object in the available namespaces.
158
159
159 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
160 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
160
161
161 Has special code to detect magic functions.
162 Has special code to detect magic functions.
162 """
163 """
163
164
164 oname = oname.strip()
165 oname = oname.strip()
165
166
166 # Namespaces to search in:
167 # Namespaces to search in:
167 user_ns = self.shell.user_ns
168 user_ns = self.shell.user_ns
168 internal_ns = self.shell.internal_ns
169 internal_ns = self.shell.internal_ns
169 builtin_ns = __builtin__.__dict__
170 builtin_ns = __builtin__.__dict__
170 alias_ns = self.shell.alias_table
171 alias_ns = self.shell.alias_table
171
172
172 # Put them in a list. The order is important so that we find things in
173 # Put them in a list. The order is important so that we find things in
173 # the same order that Python finds them.
174 # the same order that Python finds them.
174 namespaces = [ ('Interactive',user_ns),
175 namespaces = [ ('Interactive',user_ns),
175 ('IPython internal',internal_ns),
176 ('IPython internal',internal_ns),
176 ('Python builtin',builtin_ns),
177 ('Python builtin',builtin_ns),
177 ('Alias',alias_ns),
178 ('Alias',alias_ns),
178 ]
179 ]
179
180
180 # initialize results to 'null'
181 # initialize results to 'null'
181 found = 0; obj = None; ospace = None; ds = None;
182 found = 0; obj = None; ospace = None; ds = None;
182 ismagic = 0; isalias = 0
183 ismagic = 0; isalias = 0
183
184
184 # Look for the given name by splitting it in parts. If the head is
185 # Look for the given name by splitting it in parts. If the head is
185 # found, then we look for all the remaining parts as members, and only
186 # found, then we look for all the remaining parts as members, and only
186 # declare success if we can find them all.
187 # declare success if we can find them all.
187 oname_parts = oname.split('.')
188 oname_parts = oname.split('.')
188 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
189 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
189 for nsname,ns in namespaces:
190 for nsname,ns in namespaces:
190 try:
191 try:
191 obj = ns[oname_head]
192 obj = ns[oname_head]
192 except KeyError:
193 except KeyError:
193 continue
194 continue
194 else:
195 else:
195 for part in oname_rest:
196 for part in oname_rest:
196 try:
197 try:
197 obj = getattr(obj,part)
198 obj = getattr(obj,part)
198 except:
199 except:
199 # Blanket except b/c some badly implemented objects
200 # Blanket except b/c some badly implemented objects
200 # allow __getattr__ to raise exceptions other than
201 # allow __getattr__ to raise exceptions other than
201 # AttributeError, which then crashes IPython.
202 # AttributeError, which then crashes IPython.
202 break
203 break
203 else:
204 else:
204 # If we finish the for loop (no break), we got all members
205 # If we finish the for loop (no break), we got all members
205 found = 1
206 found = 1
206 ospace = nsname
207 ospace = nsname
207 if ns == alias_ns:
208 if ns == alias_ns:
208 isalias = 1
209 isalias = 1
209 break # namespace loop
210 break # namespace loop
210
211
211 # Try to see if it's magic
212 # Try to see if it's magic
212 if not found:
213 if not found:
213 if oname.startswith(self.shell.ESC_MAGIC):
214 if oname.startswith(self.shell.ESC_MAGIC):
214 oname = oname[1:]
215 oname = oname[1:]
215 obj = getattr(self,'magic_'+oname,None)
216 obj = getattr(self,'magic_'+oname,None)
216 if obj is not None:
217 if obj is not None:
217 found = 1
218 found = 1
218 ospace = 'IPython internal'
219 ospace = 'IPython internal'
219 ismagic = 1
220 ismagic = 1
220
221
221 # Last try: special-case some literals like '', [], {}, etc:
222 # Last try: special-case some literals like '', [], {}, etc:
222 if not found and oname_head in ["''",'""','[]','{}','()']:
223 if not found and oname_head in ["''",'""','[]','{}','()']:
223 obj = eval(oname_head)
224 obj = eval(oname_head)
224 found = 1
225 found = 1
225 ospace = 'Interactive'
226 ospace = 'Interactive'
226
227
227 return {'found':found, 'obj':obj, 'namespace':ospace,
228 return {'found':found, 'obj':obj, 'namespace':ospace,
228 'ismagic':ismagic, 'isalias':isalias}
229 'ismagic':ismagic, 'isalias':isalias}
229
230
230 def arg_err(self,func):
231 def arg_err(self,func):
231 """Print docstring if incorrect arguments were passed"""
232 """Print docstring if incorrect arguments were passed"""
232 print 'Error in arguments:'
233 print 'Error in arguments:'
233 print OInspect.getdoc(func)
234 print OInspect.getdoc(func)
234
235
235 def format_latex(self,strng):
236 def format_latex(self,strng):
236 """Format a string for latex inclusion."""
237 """Format a string for latex inclusion."""
237
238
238 # Characters that need to be escaped for latex:
239 # Characters that need to be escaped for latex:
239 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
240 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
240 # Magic command names as headers:
241 # Magic command names as headers:
241 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
242 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
242 re.MULTILINE)
243 re.MULTILINE)
243 # Magic commands
244 # Magic commands
244 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
245 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
245 re.MULTILINE)
246 re.MULTILINE)
246 # Paragraph continue
247 # Paragraph continue
247 par_re = re.compile(r'\\$',re.MULTILINE)
248 par_re = re.compile(r'\\$',re.MULTILINE)
248
249
249 # The "\n" symbol
250 # The "\n" symbol
250 newline_re = re.compile(r'\\n')
251 newline_re = re.compile(r'\\n')
251
252
252 # Now build the string for output:
253 # Now build the string for output:
253 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
254 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
254 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
255 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
255 strng)
256 strng)
256 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
257 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
257 strng = par_re.sub(r'\\\\',strng)
258 strng = par_re.sub(r'\\\\',strng)
258 strng = escape_re.sub(r'\\\1',strng)
259 strng = escape_re.sub(r'\\\1',strng)
259 strng = newline_re.sub(r'\\textbackslash{}n',strng)
260 strng = newline_re.sub(r'\\textbackslash{}n',strng)
260 return strng
261 return strng
261
262
262 def format_screen(self,strng):
263 def format_screen(self,strng):
263 """Format a string for screen printing.
264 """Format a string for screen printing.
264
265
265 This removes some latex-type format codes."""
266 This removes some latex-type format codes."""
266 # Paragraph continue
267 # Paragraph continue
267 par_re = re.compile(r'\\$',re.MULTILINE)
268 par_re = re.compile(r'\\$',re.MULTILINE)
268 strng = par_re.sub('',strng)
269 strng = par_re.sub('',strng)
269 return strng
270 return strng
270
271
271 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
272 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
272 """Parse options passed to an argument string.
273 """Parse options passed to an argument string.
273
274
274 The interface is similar to that of getopt(), but it returns back a
275 The interface is similar to that of getopt(), but it returns back a
275 Struct with the options as keys and the stripped argument string still
276 Struct with the options as keys and the stripped argument string still
276 as a string.
277 as a string.
277
278
278 arg_str is quoted as a true sys.argv vector by using shlex.split.
279 arg_str is quoted as a true sys.argv vector by using shlex.split.
279 This allows us to easily expand variables, glob files, quote
280 This allows us to easily expand variables, glob files, quote
280 arguments, etc.
281 arguments, etc.
281
282
282 Options:
283 Options:
283 -mode: default 'string'. If given as 'list', the argument string is
284 -mode: default 'string'. If given as 'list', the argument string is
284 returned as a list (split on whitespace) instead of a string.
285 returned as a list (split on whitespace) instead of a string.
285
286
286 -list_all: put all option values in lists. Normally only options
287 -list_all: put all option values in lists. Normally only options
287 appearing more than once are put in a list."""
288 appearing more than once are put in a list."""
288
289
289 # inject default options at the beginning of the input line
290 # inject default options at the beginning of the input line
290 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
291 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
291 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
292 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
292
293
293 mode = kw.get('mode','string')
294 mode = kw.get('mode','string')
294 if mode not in ['string','list']:
295 if mode not in ['string','list']:
295 raise ValueError,'incorrect mode given: %s' % mode
296 raise ValueError,'incorrect mode given: %s' % mode
296 # Get options
297 # Get options
297 list_all = kw.get('list_all',0)
298 list_all = kw.get('list_all',0)
298
299
299 # Check if we have more than one argument to warrant extra processing:
300 # Check if we have more than one argument to warrant extra processing:
300 odict = {} # Dictionary with options
301 odict = {} # Dictionary with options
301 args = arg_str.split()
302 args = arg_str.split()
302 if len(args) >= 1:
303 if len(args) >= 1:
303 # If the list of inputs only has 0 or 1 thing in it, there's no
304 # If the list of inputs only has 0 or 1 thing in it, there's no
304 # need to look for options
305 # need to look for options
305 argv = shlex_split(arg_str)
306 argv = shlex_split(arg_str)
306 # Do regular option processing
307 # Do regular option processing
307 opts,args = getopt(argv,opt_str,*long_opts)
308 opts,args = getopt(argv,opt_str,*long_opts)
308 for o,a in opts:
309 for o,a in opts:
309 if o.startswith('--'):
310 if o.startswith('--'):
310 o = o[2:]
311 o = o[2:]
311 else:
312 else:
312 o = o[1:]
313 o = o[1:]
313 try:
314 try:
314 odict[o].append(a)
315 odict[o].append(a)
315 except AttributeError:
316 except AttributeError:
316 odict[o] = [odict[o],a]
317 odict[o] = [odict[o],a]
317 except KeyError:
318 except KeyError:
318 if list_all:
319 if list_all:
319 odict[o] = [a]
320 odict[o] = [a]
320 else:
321 else:
321 odict[o] = a
322 odict[o] = a
322
323
323 # Prepare opts,args for return
324 # Prepare opts,args for return
324 opts = Struct(odict)
325 opts = Struct(odict)
325 if mode == 'string':
326 if mode == 'string':
326 args = ' '.join(args)
327 args = ' '.join(args)
327
328
328 return opts,args
329 return opts,args
329
330
330 #......................................................................
331 #......................................................................
331 # And now the actual magic functions
332 # And now the actual magic functions
332
333
333 # Functions for IPython shell work (vars,funcs, config, etc)
334 # Functions for IPython shell work (vars,funcs, config, etc)
334 def magic_lsmagic(self, parameter_s = ''):
335 def magic_lsmagic(self, parameter_s = ''):
335 """List currently available magic functions."""
336 """List currently available magic functions."""
336 mesc = self.shell.ESC_MAGIC
337 mesc = self.shell.ESC_MAGIC
337 print 'Available magic functions:\n'+mesc+\
338 print 'Available magic functions:\n'+mesc+\
338 (' '+mesc).join(self.lsmagic())
339 (' '+mesc).join(self.lsmagic())
339 print '\n' + Magic.auto_status[self.shell.rc.automagic]
340 print '\n' + Magic.auto_status[self.shell.rc.automagic]
340 return None
341 return None
341
342
342 def magic_magic(self, parameter_s = ''):
343 def magic_magic(self, parameter_s = ''):
343 """Print information about the magic function system."""
344 """Print information about the magic function system."""
344
345
345 mode = ''
346 mode = ''
346 try:
347 try:
347 if parameter_s.split()[0] == '-latex':
348 if parameter_s.split()[0] == '-latex':
348 mode = 'latex'
349 mode = 'latex'
349 except:
350 except:
350 pass
351 pass
351
352
352 magic_docs = []
353 magic_docs = []
353 for fname in self.lsmagic():
354 for fname in self.lsmagic():
354 mname = 'magic_' + fname
355 mname = 'magic_' + fname
355 for space in (Magic,self,self.__class__):
356 for space in (Magic,self,self.__class__):
356 try:
357 try:
357 fn = space.__dict__[mname]
358 fn = space.__dict__[mname]
358 except KeyError:
359 except KeyError:
359 pass
360 pass
360 else:
361 else:
361 break
362 break
362 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
363 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
363 fname,fn.__doc__))
364 fname,fn.__doc__))
364 magic_docs = ''.join(magic_docs)
365 magic_docs = ''.join(magic_docs)
365
366
366 if mode == 'latex':
367 if mode == 'latex':
367 print self.format_latex(magic_docs)
368 print self.format_latex(magic_docs)
368 return
369 return
369 else:
370 else:
370 magic_docs = self.format_screen(magic_docs)
371 magic_docs = self.format_screen(magic_docs)
371
372
372 outmsg = """
373 outmsg = """
373 IPython's 'magic' functions
374 IPython's 'magic' functions
374 ===========================
375 ===========================
375
376
376 The magic function system provides a series of functions which allow you to
377 The magic function system provides a series of functions which allow you to
377 control the behavior of IPython itself, plus a lot of system-type
378 control the behavior of IPython itself, plus a lot of system-type
378 features. All these functions are prefixed with a % character, but parameters
379 features. All these functions are prefixed with a % character, but parameters
379 are given without parentheses or quotes.
380 are given without parentheses or quotes.
380
381
381 NOTE: If you have 'automagic' enabled (via the command line option or with the
382 NOTE: If you have 'automagic' enabled (via the command line option or with the
382 %automagic function), you don't need to type in the % explicitly. By default,
383 %automagic function), you don't need to type in the % explicitly. By default,
383 IPython ships with automagic on, so you should only rarely need the % escape.
384 IPython ships with automagic on, so you should only rarely need the % escape.
384
385
385 Example: typing '%cd mydir' (without the quotes) changes you working directory
386 Example: typing '%cd mydir' (without the quotes) changes you working directory
386 to 'mydir', if it exists.
387 to 'mydir', if it exists.
387
388
388 You can define your own magic functions to extend the system. See the supplied
389 You can define your own magic functions to extend the system. See the supplied
389 ipythonrc and example-magic.py files for details (in your ipython
390 ipythonrc and example-magic.py files for details (in your ipython
390 configuration directory, typically $HOME/.ipython/).
391 configuration directory, typically $HOME/.ipython/).
391
392
392 You can also define your own aliased names for magic functions. In your
393 You can also define your own aliased names for magic functions. In your
393 ipythonrc file, placing a line like:
394 ipythonrc file, placing a line like:
394
395
395 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
396 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
396
397
397 will define %pf as a new name for %profile.
398 will define %pf as a new name for %profile.
398
399
399 You can also call magics in code using the ipmagic() function, which IPython
400 You can also call magics in code using the ipmagic() function, which IPython
400 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
401 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
401
402
402 For a list of the available magic functions, use %lsmagic. For a description
403 For a list of the available magic functions, use %lsmagic. For a description
403 of any of them, type %magic_name?, e.g. '%cd?'.
404 of any of them, type %magic_name?, e.g. '%cd?'.
404
405
405 Currently the magic system has the following functions:\n"""
406 Currently the magic system has the following functions:\n"""
406
407
407 mesc = self.shell.ESC_MAGIC
408 mesc = self.shell.ESC_MAGIC
408 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
409 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
409 "\n\n%s%s\n\n%s" % (outmsg,
410 "\n\n%s%s\n\n%s" % (outmsg,
410 magic_docs,mesc,mesc,
411 magic_docs,mesc,mesc,
411 (' '+mesc).join(self.lsmagic()),
412 (' '+mesc).join(self.lsmagic()),
412 Magic.auto_status[self.shell.rc.automagic] ) )
413 Magic.auto_status[self.shell.rc.automagic] ) )
413
414
414 page(outmsg,screen_lines=self.shell.rc.screen_length)
415 page(outmsg,screen_lines=self.shell.rc.screen_length)
415
416
416 def magic_automagic(self, parameter_s = ''):
417 def magic_automagic(self, parameter_s = ''):
417 """Make magic functions callable without having to type the initial %.
418 """Make magic functions callable without having to type the initial %.
418
419
419 Toggles on/off (when off, you must call it as %automagic, of
420 Toggles on/off (when off, you must call it as %automagic, of
420 course). Note that magic functions have lowest priority, so if there's
421 course). Note that magic functions have lowest priority, so if there's
421 a variable whose name collides with that of a magic fn, automagic
422 a variable whose name collides with that of a magic fn, automagic
422 won't work for that function (you get the variable instead). However,
423 won't work for that function (you get the variable instead). However,
423 if you delete the variable (del var), the previously shadowed magic
424 if you delete the variable (del var), the previously shadowed magic
424 function becomes visible to automagic again."""
425 function becomes visible to automagic again."""
425
426
426 rc = self.shell.rc
427 rc = self.shell.rc
427 rc.automagic = not rc.automagic
428 rc.automagic = not rc.automagic
428 print '\n' + Magic.auto_status[rc.automagic]
429 print '\n' + Magic.auto_status[rc.automagic]
429
430
430 def magic_autocall(self, parameter_s = ''):
431 def magic_autocall(self, parameter_s = ''):
431 """Make functions callable without having to type parentheses.
432 """Make functions callable without having to type parentheses.
432
433
433 Usage:
434 Usage:
434
435
435 %autocall [mode]
436 %autocall [mode]
436
437
437 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
438 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
438 value is toggled on and off (remembering the previous state)."""
439 value is toggled on and off (remembering the previous state)."""
439
440
440 rc = self.shell.rc
441 rc = self.shell.rc
441
442
442 if parameter_s:
443 if parameter_s:
443 arg = int(parameter_s)
444 arg = int(parameter_s)
444 else:
445 else:
445 arg = 'toggle'
446 arg = 'toggle'
446
447
447 if not arg in (0,1,2,'toggle'):
448 if not arg in (0,1,2,'toggle'):
448 error('Valid modes: (0->Off, 1->Smart, 2->Full')
449 error('Valid modes: (0->Off, 1->Smart, 2->Full')
449 return
450 return
450
451
451 if arg in (0,1,2):
452 if arg in (0,1,2):
452 rc.autocall = arg
453 rc.autocall = arg
453 else: # toggle
454 else: # toggle
454 if rc.autocall:
455 if rc.autocall:
455 self._magic_state.autocall_save = rc.autocall
456 self._magic_state.autocall_save = rc.autocall
456 rc.autocall = 0
457 rc.autocall = 0
457 else:
458 else:
458 try:
459 try:
459 rc.autocall = self._magic_state.autocall_save
460 rc.autocall = self._magic_state.autocall_save
460 except AttributeError:
461 except AttributeError:
461 rc.autocall = self._magic_state.autocall_save = 1
462 rc.autocall = self._magic_state.autocall_save = 1
462
463
463 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
464 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
464
465
465 def magic_autoindent(self, parameter_s = ''):
466 def magic_autoindent(self, parameter_s = ''):
466 """Toggle autoindent on/off (if available)."""
467 """Toggle autoindent on/off (if available)."""
467
468
468 self.shell.set_autoindent()
469 self.shell.set_autoindent()
469 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
470 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
470
471
471 def magic_system_verbose(self, parameter_s = ''):
472 def magic_system_verbose(self, parameter_s = ''):
472 """Toggle verbose printing of system calls on/off."""
473 """Toggle verbose printing of system calls on/off."""
473
474
474 self.shell.rc_set_toggle('system_verbose')
475 self.shell.rc_set_toggle('system_verbose')
475 print "System verbose printing is:",\
476 print "System verbose printing is:",\
476 ['OFF','ON'][self.shell.rc.system_verbose]
477 ['OFF','ON'][self.shell.rc.system_verbose]
477
478
478 def magic_history(self, parameter_s = ''):
479 def magic_history(self, parameter_s = ''):
479 """Print input history (_i<n> variables), with most recent last.
480 """Print input history (_i<n> variables), with most recent last.
480
481
481 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
482 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
482 %history [-n] n -> print at most n inputs\\
483 %history [-n] n -> print at most n inputs\\
483 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
484 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
484
485
485 Each input's number <n> is shown, and is accessible as the
486 Each input's number <n> is shown, and is accessible as the
486 automatically generated variable _i<n>. Multi-line statements are
487 automatically generated variable _i<n>. Multi-line statements are
487 printed starting at a new line for easy copy/paste.
488 printed starting at a new line for easy copy/paste.
488
489
489 If option -n is used, input numbers are not printed. This is useful if
490 If option -n is used, input numbers are not printed. This is useful if
490 you want to get a printout of many lines which can be directly pasted
491 you want to get a printout of many lines which can be directly pasted
491 into a text editor.
492 into a text editor.
492
493
493 This feature is only available if numbered prompts are in use."""
494 This feature is only available if numbered prompts are in use."""
494
495
495 shell = self.shell
496 shell = self.shell
496 if not shell.outputcache.do_full_cache:
497 if not shell.outputcache.do_full_cache:
497 print 'This feature is only available if numbered prompts are in use.'
498 print 'This feature is only available if numbered prompts are in use.'
498 return
499 return
499 opts,args = self.parse_options(parameter_s,'n',mode='list')
500 opts,args = self.parse_options(parameter_s,'n',mode='list')
500
501
501 input_hist = shell.input_hist
502 input_hist = shell.input_hist
502 default_length = 40
503 default_length = 40
503 if len(args) == 0:
504 if len(args) == 0:
504 final = len(input_hist)
505 final = len(input_hist)
505 init = max(1,final-default_length)
506 init = max(1,final-default_length)
506 elif len(args) == 1:
507 elif len(args) == 1:
507 final = len(input_hist)
508 final = len(input_hist)
508 init = max(1,final-int(args[0]))
509 init = max(1,final-int(args[0]))
509 elif len(args) == 2:
510 elif len(args) == 2:
510 init,final = map(int,args)
511 init,final = map(int,args)
511 else:
512 else:
512 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
513 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
513 print self.magic_hist.__doc__
514 print self.magic_hist.__doc__
514 return
515 return
515 width = len(str(final))
516 width = len(str(final))
516 line_sep = ['','\n']
517 line_sep = ['','\n']
517 print_nums = not opts.has_key('n')
518 print_nums = not opts.has_key('n')
518 for in_num in range(init,final):
519 for in_num in range(init,final):
519 inline = input_hist[in_num]
520 inline = input_hist[in_num]
520 multiline = int(inline.count('\n') > 1)
521 multiline = int(inline.count('\n') > 1)
521 if print_nums:
522 if print_nums:
522 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
523 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
523 print inline,
524 print inline,
524
525
525 def magic_hist(self, parameter_s=''):
526 def magic_hist(self, parameter_s=''):
526 """Alternate name for %history."""
527 """Alternate name for %history."""
527 return self.magic_history(parameter_s)
528 return self.magic_history(parameter_s)
528
529
529 def magic_p(self, parameter_s=''):
530 def magic_p(self, parameter_s=''):
530 """Just a short alias for Python's 'print'."""
531 """Just a short alias for Python's 'print'."""
531 exec 'print ' + parameter_s in self.shell.user_ns
532 exec 'print ' + parameter_s in self.shell.user_ns
532
533
533 def magic_r(self, parameter_s=''):
534 def magic_r(self, parameter_s=''):
534 """Repeat previous input.
535 """Repeat previous input.
535
536
536 If given an argument, repeats the previous command which starts with
537 If given an argument, repeats the previous command which starts with
537 the same string, otherwise it just repeats the previous input.
538 the same string, otherwise it just repeats the previous input.
538
539
539 Shell escaped commands (with ! as first character) are not recognized
540 Shell escaped commands (with ! as first character) are not recognized
540 by this system, only pure python code and magic commands.
541 by this system, only pure python code and magic commands.
541 """
542 """
542
543
543 start = parameter_s.strip()
544 start = parameter_s.strip()
544 esc_magic = self.shell.ESC_MAGIC
545 esc_magic = self.shell.ESC_MAGIC
545 # Identify magic commands even if automagic is on (which means
546 # Identify magic commands even if automagic is on (which means
546 # the in-memory version is different from that typed by the user).
547 # the in-memory version is different from that typed by the user).
547 if self.shell.rc.automagic:
548 if self.shell.rc.automagic:
548 start_magic = esc_magic+start
549 start_magic = esc_magic+start
549 else:
550 else:
550 start_magic = start
551 start_magic = start
551 # Look through the input history in reverse
552 # Look through the input history in reverse
552 for n in range(len(self.shell.input_hist)-2,0,-1):
553 for n in range(len(self.shell.input_hist)-2,0,-1):
553 input = self.shell.input_hist[n]
554 input = self.shell.input_hist[n]
554 # skip plain 'r' lines so we don't recurse to infinity
555 # skip plain 'r' lines so we don't recurse to infinity
555 if input != 'ipmagic("r")\n' and \
556 if input != 'ipmagic("r")\n' and \
556 (input.startswith(start) or input.startswith(start_magic)):
557 (input.startswith(start) or input.startswith(start_magic)):
557 #print 'match',`input` # dbg
558 #print 'match',`input` # dbg
558 print 'Executing:',input,
559 print 'Executing:',input,
559 self.shell.runlines(input)
560 self.shell.runlines(input)
560 return
561 return
561 print 'No previous input matching `%s` found.' % start
562 print 'No previous input matching `%s` found.' % start
562
563
563 def magic_page(self, parameter_s=''):
564 def magic_page(self, parameter_s=''):
564 """Pretty print the object and display it through a pager.
565 """Pretty print the object and display it through a pager.
565
566
566 If no parameter is given, use _ (last output)."""
567 If no parameter is given, use _ (last output)."""
567 # After a function contributed by Olivier Aubert, slightly modified.
568 # After a function contributed by Olivier Aubert, slightly modified.
568
569
569 oname = parameter_s and parameter_s or '_'
570 oname = parameter_s and parameter_s or '_'
570 info = self._ofind(oname)
571 info = self._ofind(oname)
571 if info['found']:
572 if info['found']:
572 page(pformat(info['obj']))
573 page(pformat(info['obj']))
573 else:
574 else:
574 print 'Object `%s` not found' % oname
575 print 'Object `%s` not found' % oname
575
576
576 def magic_profile(self, parameter_s=''):
577 def magic_profile(self, parameter_s=''):
577 """Print your currently active IPyhton profile."""
578 """Print your currently active IPyhton profile."""
578 if self.shell.rc.profile:
579 if self.shell.rc.profile:
579 printpl('Current IPython profile: $self.shell.rc.profile.')
580 printpl('Current IPython profile: $self.shell.rc.profile.')
580 else:
581 else:
581 print 'No profile active.'
582 print 'No profile active.'
582
583
583 def _inspect(self,meth,oname,**kw):
584 def _inspect(self,meth,oname,**kw):
584 """Generic interface to the inspector system.
585 """Generic interface to the inspector system.
585
586
586 This function is meant to be called by pdef, pdoc & friends."""
587 This function is meant to be called by pdef, pdoc & friends."""
587
588
588 oname = oname.strip()
589 oname = oname.strip()
589 info = Struct(self._ofind(oname))
590 info = Struct(self._ofind(oname))
590 if info.found:
591 if info.found:
591 pmethod = getattr(self.shell.inspector,meth)
592 pmethod = getattr(self.shell.inspector,meth)
592 formatter = info.ismagic and self.format_screen or None
593 formatter = info.ismagic and self.format_screen or None
593 if meth == 'pdoc':
594 if meth == 'pdoc':
594 pmethod(info.obj,oname,formatter)
595 pmethod(info.obj,oname,formatter)
595 elif meth == 'pinfo':
596 elif meth == 'pinfo':
596 pmethod(info.obj,oname,formatter,info,**kw)
597 pmethod(info.obj,oname,formatter,info,**kw)
597 else:
598 else:
598 pmethod(info.obj,oname)
599 pmethod(info.obj,oname)
599 else:
600 else:
600 print 'Object `%s` not found.' % oname
601 print 'Object `%s` not found.' % oname
601 return 'not found' # so callers can take other action
602 return 'not found' # so callers can take other action
602
603
603 def magic_pdef(self, parameter_s=''):
604 def magic_pdef(self, parameter_s=''):
604 """Print the definition header for any callable object.
605 """Print the definition header for any callable object.
605
606
606 If the object is a class, print the constructor information."""
607 If the object is a class, print the constructor information."""
607 self._inspect('pdef',parameter_s)
608 self._inspect('pdef',parameter_s)
608
609
609 def magic_pdoc(self, parameter_s=''):
610 def magic_pdoc(self, parameter_s=''):
610 """Print the docstring for an object.
611 """Print the docstring for an object.
611
612
612 If the given object is a class, it will print both the class and the
613 If the given object is a class, it will print both the class and the
613 constructor docstrings."""
614 constructor docstrings."""
614 self._inspect('pdoc',parameter_s)
615 self._inspect('pdoc',parameter_s)
615
616
616 def magic_psource(self, parameter_s=''):
617 def magic_psource(self, parameter_s=''):
617 """Print (or run through pager) the source code for an object."""
618 """Print (or run through pager) the source code for an object."""
618 self._inspect('psource',parameter_s)
619 self._inspect('psource',parameter_s)
619
620
620 def magic_pfile(self, parameter_s=''):
621 def magic_pfile(self, parameter_s=''):
621 """Print (or run through pager) the file where an object is defined.
622 """Print (or run through pager) the file where an object is defined.
622
623
623 The file opens at the line where the object definition begins. IPython
624 The file opens at the line where the object definition begins. IPython
624 will honor the environment variable PAGER if set, and otherwise will
625 will honor the environment variable PAGER if set, and otherwise will
625 do its best to print the file in a convenient form.
626 do its best to print the file in a convenient form.
626
627
627 If the given argument is not an object currently defined, IPython will
628 If the given argument is not an object currently defined, IPython will
628 try to interpret it as a filename (automatically adding a .py extension
629 try to interpret it as a filename (automatically adding a .py extension
629 if needed). You can thus use %pfile as a syntax highlighting code
630 if needed). You can thus use %pfile as a syntax highlighting code
630 viewer."""
631 viewer."""
631
632
632 # first interpret argument as an object name
633 # first interpret argument as an object name
633 out = self._inspect('pfile',parameter_s)
634 out = self._inspect('pfile',parameter_s)
634 # if not, try the input as a filename
635 # if not, try the input as a filename
635 if out == 'not found':
636 if out == 'not found':
636 try:
637 try:
637 filename = get_py_filename(parameter_s)
638 filename = get_py_filename(parameter_s)
638 except IOError,msg:
639 except IOError,msg:
639 print msg
640 print msg
640 return
641 return
641 page(self.shell.inspector.format(file(filename).read()))
642 page(self.shell.inspector.format(file(filename).read()))
642
643
643 def magic_pinfo(self, parameter_s=''):
644 def magic_pinfo(self, parameter_s=''):
644 """Provide detailed information about an object.
645 """Provide detailed information about an object.
645
646
646 '%pinfo object' is just a synonym for object? or ?object."""
647 '%pinfo object' is just a synonym for object? or ?object."""
647
648
648 #print 'pinfo par: <%s>' % parameter_s # dbg
649 #print 'pinfo par: <%s>' % parameter_s # dbg
649
650
650 # detail_level: 0 -> obj? , 1 -> obj??
651 # detail_level: 0 -> obj? , 1 -> obj??
651 detail_level = 0
652 detail_level = 0
652 # We need to detect if we got called as 'pinfo pinfo foo', which can
653 # We need to detect if we got called as 'pinfo pinfo foo', which can
653 # happen if the user types 'pinfo foo?' at the cmd line.
654 # happen if the user types 'pinfo foo?' at the cmd line.
654 pinfo,qmark1,oname,qmark2 = \
655 pinfo,qmark1,oname,qmark2 = \
655 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
656 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
656 if pinfo or qmark1 or qmark2:
657 if pinfo or qmark1 or qmark2:
657 detail_level = 1
658 detail_level = 1
658 if "*" in oname:
659 if "*" in oname:
659 self.magic_psearch(oname)
660 self.magic_psearch(oname)
660 else:
661 else:
661 self._inspect('pinfo',oname,detail_level=detail_level)
662 self._inspect('pinfo',oname,detail_level=detail_level)
662
663
663 def magic_psearch(self, parameter_s=''):
664 def magic_psearch(self, parameter_s=''):
664 """Search for object in namespaces by wildcard.
665 """Search for object in namespaces by wildcard.
665
666
666 %psearch [options] PATTERN [OBJECT TYPE]
667 %psearch [options] PATTERN [OBJECT TYPE]
667
668
668 Note: ? can be used as a synonym for %psearch, at the beginning or at
669 Note: ? can be used as a synonym for %psearch, at the beginning or at
669 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
670 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
670 rest of the command line must be unchanged (options come first), so
671 rest of the command line must be unchanged (options come first), so
671 for example the following forms are equivalent
672 for example the following forms are equivalent
672
673
673 %psearch -i a* function
674 %psearch -i a* function
674 -i a* function?
675 -i a* function?
675 ?-i a* function
676 ?-i a* function
676
677
677 Arguments:
678 Arguments:
678
679
679 PATTERN
680 PATTERN
680
681
681 where PATTERN is a string containing * as a wildcard similar to its
682 where PATTERN is a string containing * as a wildcard similar to its
682 use in a shell. The pattern is matched in all namespaces on the
683 use in a shell. The pattern is matched in all namespaces on the
683 search path. By default objects starting with a single _ are not
684 search path. By default objects starting with a single _ are not
684 matched, many IPython generated objects have a single
685 matched, many IPython generated objects have a single
685 underscore. The default is case insensitive matching. Matching is
686 underscore. The default is case insensitive matching. Matching is
686 also done on the attributes of objects and not only on the objects
687 also done on the attributes of objects and not only on the objects
687 in a module.
688 in a module.
688
689
689 [OBJECT TYPE]
690 [OBJECT TYPE]
690
691
691 Is the name of a python type from the types module. The name is
692 Is the name of a python type from the types module. The name is
692 given in lowercase without the ending type, ex. StringType is
693 given in lowercase without the ending type, ex. StringType is
693 written string. By adding a type here only objects matching the
694 written string. By adding a type here only objects matching the
694 given type are matched. Using all here makes the pattern match all
695 given type are matched. Using all here makes the pattern match all
695 types (this is the default).
696 types (this is the default).
696
697
697 Options:
698 Options:
698
699
699 -a: makes the pattern match even objects whose names start with a
700 -a: makes the pattern match even objects whose names start with a
700 single underscore. These names are normally ommitted from the
701 single underscore. These names are normally ommitted from the
701 search.
702 search.
702
703
703 -i/-c: make the pattern case insensitive/sensitive. If neither of
704 -i/-c: make the pattern case insensitive/sensitive. If neither of
704 these options is given, the default is read from your ipythonrc
705 these options is given, the default is read from your ipythonrc
705 file. The option name which sets this value is
706 file. The option name which sets this value is
706 'wildcards_case_sensitive'. If this option is not specified in your
707 'wildcards_case_sensitive'. If this option is not specified in your
707 ipythonrc file, IPython's internal default is to do a case sensitive
708 ipythonrc file, IPython's internal default is to do a case sensitive
708 search.
709 search.
709
710
710 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
711 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
711 specifiy can be searched in any of the following namespaces:
712 specifiy can be searched in any of the following namespaces:
712 'builtin', 'user', 'user_global','internal', 'alias', where
713 'builtin', 'user', 'user_global','internal', 'alias', where
713 'builtin' and 'user' are the search defaults. Note that you should
714 'builtin' and 'user' are the search defaults. Note that you should
714 not use quotes when specifying namespaces.
715 not use quotes when specifying namespaces.
715
716
716 'Builtin' contains the python module builtin, 'user' contains all
717 'Builtin' contains the python module builtin, 'user' contains all
717 user data, 'alias' only contain the shell aliases and no python
718 user data, 'alias' only contain the shell aliases and no python
718 objects, 'internal' contains objects used by IPython. The
719 objects, 'internal' contains objects used by IPython. The
719 'user_global' namespace is only used by embedded IPython instances,
720 'user_global' namespace is only used by embedded IPython instances,
720 and it contains module-level globals. You can add namespaces to the
721 and it contains module-level globals. You can add namespaces to the
721 search with -s or exclude them with -e (these options can be given
722 search with -s or exclude them with -e (these options can be given
722 more than once).
723 more than once).
723
724
724 Examples:
725 Examples:
725
726
726 %psearch a* -> objects beginning with an a
727 %psearch a* -> objects beginning with an a
727 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
728 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
728 %psearch a* function -> all functions beginning with an a
729 %psearch a* function -> all functions beginning with an a
729 %psearch re.e* -> objects beginning with an e in module re
730 %psearch re.e* -> objects beginning with an e in module re
730 %psearch r*.e* -> objects that start with e in modules starting in r
731 %psearch r*.e* -> objects that start with e in modules starting in r
731 %psearch r*.* string -> all strings in modules beginning with r
732 %psearch r*.* string -> all strings in modules beginning with r
732
733
733 Case sensitve search:
734 Case sensitve search:
734
735
735 %psearch -c a* list all object beginning with lower case a
736 %psearch -c a* list all object beginning with lower case a
736
737
737 Show objects beginning with a single _:
738 Show objects beginning with a single _:
738
739
739 %psearch -a _* list objects beginning with a single underscore"""
740 %psearch -a _* list objects beginning with a single underscore"""
740
741
741 # default namespaces to be searched
742 # default namespaces to be searched
742 def_search = ['user','builtin']
743 def_search = ['user','builtin']
743
744
744 # Process options/args
745 # Process options/args
745 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
746 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
746 opt = opts.get
747 opt = opts.get
747 shell = self.shell
748 shell = self.shell
748 psearch = shell.inspector.psearch
749 psearch = shell.inspector.psearch
749
750
750 # select case options
751 # select case options
751 if opts.has_key('i'):
752 if opts.has_key('i'):
752 ignore_case = True
753 ignore_case = True
753 elif opts.has_key('c'):
754 elif opts.has_key('c'):
754 ignore_case = False
755 ignore_case = False
755 else:
756 else:
756 ignore_case = not shell.rc.wildcards_case_sensitive
757 ignore_case = not shell.rc.wildcards_case_sensitive
757
758
758 # Build list of namespaces to search from user options
759 # Build list of namespaces to search from user options
759 def_search.extend(opt('s',[]))
760 def_search.extend(opt('s',[]))
760 ns_exclude = ns_exclude=opt('e',[])
761 ns_exclude = ns_exclude=opt('e',[])
761 ns_search = [nm for nm in def_search if nm not in ns_exclude]
762 ns_search = [nm for nm in def_search if nm not in ns_exclude]
762
763
763 # Call the actual search
764 # Call the actual search
764 try:
765 try:
765 psearch(args,shell.ns_table,ns_search,
766 psearch(args,shell.ns_table,ns_search,
766 show_all=opt('a'),ignore_case=ignore_case)
767 show_all=opt('a'),ignore_case=ignore_case)
767 except:
768 except:
768 shell.showtraceback()
769 shell.showtraceback()
769
770
770 def magic_who_ls(self, parameter_s=''):
771 def magic_who_ls(self, parameter_s=''):
771 """Return a sorted list of all interactive variables.
772 """Return a sorted list of all interactive variables.
772
773
773 If arguments are given, only variables of types matching these
774 If arguments are given, only variables of types matching these
774 arguments are returned."""
775 arguments are returned."""
775
776
776 user_ns = self.shell.user_ns
777 user_ns = self.shell.user_ns
777 internal_ns = self.shell.internal_ns
778 internal_ns = self.shell.internal_ns
778 user_config_ns = self.shell.user_config_ns
779 user_config_ns = self.shell.user_config_ns
779 out = []
780 out = []
780 typelist = parameter_s.split()
781 typelist = parameter_s.split()
781
782
782 for i in user_ns:
783 for i in user_ns:
783 if not (i.startswith('_') or i.startswith('_i')) \
784 if not (i.startswith('_') or i.startswith('_i')) \
784 and not (i in internal_ns or i in user_config_ns):
785 and not (i in internal_ns or i in user_config_ns):
785 if typelist:
786 if typelist:
786 if type(user_ns[i]).__name__ in typelist:
787 if type(user_ns[i]).__name__ in typelist:
787 out.append(i)
788 out.append(i)
788 else:
789 else:
789 out.append(i)
790 out.append(i)
790 out.sort()
791 out.sort()
791 return out
792 return out
792
793
793 def magic_who(self, parameter_s=''):
794 def magic_who(self, parameter_s=''):
794 """Print all interactive variables, with some minimal formatting.
795 """Print all interactive variables, with some minimal formatting.
795
796
796 If any arguments are given, only variables whose type matches one of
797 If any arguments are given, only variables whose type matches one of
797 these are printed. For example:
798 these are printed. For example:
798
799
799 %who function str
800 %who function str
800
801
801 will only list functions and strings, excluding all other types of
802 will only list functions and strings, excluding all other types of
802 variables. To find the proper type names, simply use type(var) at a
803 variables. To find the proper type names, simply use type(var) at a
803 command line to see how python prints type names. For example:
804 command line to see how python prints type names. For example:
804
805
805 In [1]: type('hello')\\
806 In [1]: type('hello')\\
806 Out[1]: <type 'str'>
807 Out[1]: <type 'str'>
807
808
808 indicates that the type name for strings is 'str'.
809 indicates that the type name for strings is 'str'.
809
810
810 %who always excludes executed names loaded through your configuration
811 %who always excludes executed names loaded through your configuration
811 file and things which are internal to IPython.
812 file and things which are internal to IPython.
812
813
813 This is deliberate, as typically you may load many modules and the
814 This is deliberate, as typically you may load many modules and the
814 purpose of %who is to show you only what you've manually defined."""
815 purpose of %who is to show you only what you've manually defined."""
815
816
816 varlist = self.magic_who_ls(parameter_s)
817 varlist = self.magic_who_ls(parameter_s)
817 if not varlist:
818 if not varlist:
818 print 'Interactive namespace is empty.'
819 print 'Interactive namespace is empty.'
819 return
820 return
820
821
821 # if we have variables, move on...
822 # if we have variables, move on...
822
823
823 # stupid flushing problem: when prompts have no separators, stdout is
824 # stupid flushing problem: when prompts have no separators, stdout is
824 # getting lost. I'm starting to think this is a python bug. I'm having
825 # getting lost. I'm starting to think this is a python bug. I'm having
825 # to force a flush with a print because even a sys.stdout.flush
826 # to force a flush with a print because even a sys.stdout.flush
826 # doesn't seem to do anything!
827 # doesn't seem to do anything!
827
828
828 count = 0
829 count = 0
829 for i in varlist:
830 for i in varlist:
830 print i+'\t',
831 print i+'\t',
831 count += 1
832 count += 1
832 if count > 8:
833 if count > 8:
833 count = 0
834 count = 0
834 print
835 print
835 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
836 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
836
837
837 print # well, this does force a flush at the expense of an extra \n
838 print # well, this does force a flush at the expense of an extra \n
838
839
839 def magic_whos(self, parameter_s=''):
840 def magic_whos(self, parameter_s=''):
840 """Like %who, but gives some extra information about each variable.
841 """Like %who, but gives some extra information about each variable.
841
842
842 The same type filtering of %who can be applied here.
843 The same type filtering of %who can be applied here.
843
844
844 For all variables, the type is printed. Additionally it prints:
845 For all variables, the type is printed. Additionally it prints:
845
846
846 - For {},[],(): their length.
847 - For {},[],(): their length.
847
848
848 - For Numeric arrays, a summary with shape, number of elements,
849 - For Numeric arrays, a summary with shape, number of elements,
849 typecode and size in memory.
850 typecode and size in memory.
850
851
851 - Everything else: a string representation, snipping their middle if
852 - Everything else: a string representation, snipping their middle if
852 too long."""
853 too long."""
853
854
854 varnames = self.magic_who_ls(parameter_s)
855 varnames = self.magic_who_ls(parameter_s)
855 if not varnames:
856 if not varnames:
856 print 'Interactive namespace is empty.'
857 print 'Interactive namespace is empty.'
857 return
858 return
858
859
859 # if we have variables, move on...
860 # if we have variables, move on...
860
861
861 # for these types, show len() instead of data:
862 # for these types, show len() instead of data:
862 seq_types = [types.DictType,types.ListType,types.TupleType]
863 seq_types = [types.DictType,types.ListType,types.TupleType]
863
864
864 # for Numeric arrays, display summary info
865 # for Numeric arrays, display summary info
865 try:
866 try:
866 import Numeric
867 import Numeric
867 except ImportError:
868 except ImportError:
868 array_type = None
869 array_type = None
869 else:
870 else:
870 array_type = Numeric.ArrayType.__name__
871 array_type = Numeric.ArrayType.__name__
871
872
872 # Find all variable names and types so we can figure out column sizes
873 # Find all variable names and types so we can figure out column sizes
873 get_vars = lambda i: self.shell.user_ns[i]
874 get_vars = lambda i: self.shell.user_ns[i]
874 type_name = lambda v: type(v).__name__
875 type_name = lambda v: type(v).__name__
875 varlist = map(get_vars,varnames)
876 varlist = map(get_vars,varnames)
876
877
877 typelist = []
878 typelist = []
878 for vv in varlist:
879 for vv in varlist:
879 tt = type_name(vv)
880 tt = type_name(vv)
880 if tt=='instance':
881 if tt=='instance':
881 typelist.append(str(vv.__class__))
882 typelist.append(str(vv.__class__))
882 else:
883 else:
883 typelist.append(tt)
884 typelist.append(tt)
884
885
885 # column labels and # of spaces as separator
886 # column labels and # of spaces as separator
886 varlabel = 'Variable'
887 varlabel = 'Variable'
887 typelabel = 'Type'
888 typelabel = 'Type'
888 datalabel = 'Data/Info'
889 datalabel = 'Data/Info'
889 colsep = 3
890 colsep = 3
890 # variable format strings
891 # variable format strings
891 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
892 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
892 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
893 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
893 aformat = "%s: %s elems, type `%s`, %s bytes"
894 aformat = "%s: %s elems, type `%s`, %s bytes"
894 # find the size of the columns to format the output nicely
895 # find the size of the columns to format the output nicely
895 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
896 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
896 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
897 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
897 # table header
898 # table header
898 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
899 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
899 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
900 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
900 # and the table itself
901 # and the table itself
901 kb = 1024
902 kb = 1024
902 Mb = 1048576 # kb**2
903 Mb = 1048576 # kb**2
903 for vname,var,vtype in zip(varnames,varlist,typelist):
904 for vname,var,vtype in zip(varnames,varlist,typelist):
904 print itpl(vformat),
905 print itpl(vformat),
905 if vtype in seq_types:
906 if vtype in seq_types:
906 print len(var)
907 print len(var)
907 elif vtype==array_type:
908 elif vtype==array_type:
908 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
909 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
909 vsize = Numeric.size(var)
910 vsize = Numeric.size(var)
910 vbytes = vsize*var.itemsize()
911 vbytes = vsize*var.itemsize()
911 if vbytes < 100000:
912 if vbytes < 100000:
912 print aformat % (vshape,vsize,var.typecode(),vbytes)
913 print aformat % (vshape,vsize,var.typecode(),vbytes)
913 else:
914 else:
914 print aformat % (vshape,vsize,var.typecode(),vbytes),
915 print aformat % (vshape,vsize,var.typecode(),vbytes),
915 if vbytes < Mb:
916 if vbytes < Mb:
916 print '(%s kb)' % (vbytes/kb,)
917 print '(%s kb)' % (vbytes/kb,)
917 else:
918 else:
918 print '(%s Mb)' % (vbytes/Mb,)
919 print '(%s Mb)' % (vbytes/Mb,)
919 else:
920 else:
920 vstr = str(var).replace('\n','\\n')
921 vstr = str(var).replace('\n','\\n')
921 if len(vstr) < 50:
922 if len(vstr) < 50:
922 print vstr
923 print vstr
923 else:
924 else:
924 printpl(vfmt_short)
925 printpl(vfmt_short)
925
926
926 def magic_reset(self, parameter_s=''):
927 def magic_reset(self, parameter_s=''):
927 """Resets the namespace by removing all names defined by the user.
928 """Resets the namespace by removing all names defined by the user.
928
929
929 Input/Output history are left around in case you need them."""
930 Input/Output history are left around in case you need them."""
930
931
931 ans = raw_input(
932 ans = raw_input(
932 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
933 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
933 if not ans.lower() == 'y':
934 if not ans.lower() == 'y':
934 print 'Nothing done.'
935 print 'Nothing done.'
935 return
936 return
936 user_ns = self.shell.user_ns
937 user_ns = self.shell.user_ns
937 for i in self.magic_who_ls():
938 for i in self.magic_who_ls():
938 del(user_ns[i])
939 del(user_ns[i])
939
940
940 def magic_config(self,parameter_s=''):
941 def magic_config(self,parameter_s=''):
941 """Show IPython's internal configuration."""
942 """Show IPython's internal configuration."""
942
943
943 page('Current configuration structure:\n'+
944 page('Current configuration structure:\n'+
944 pformat(self.shell.rc.dict()))
945 pformat(self.shell.rc.dict()))
945
946
946 def magic_logstart(self,parameter_s=''):
947 def magic_logstart(self,parameter_s=''):
947 """Start logging anywhere in a session.
948 """Start logging anywhere in a session.
948
949
949 %logstart [-o|-t] [log_name [log_mode]]
950 %logstart [-o|-t] [log_name [log_mode]]
950
951
951 If no name is given, it defaults to a file named 'ipython_log.py' in your
952 If no name is given, it defaults to a file named 'ipython_log.py' in your
952 current directory, in 'rotate' mode (see below).
953 current directory, in 'rotate' mode (see below).
953
954
954 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
955 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
955 history up to that point and then continues logging.
956 history up to that point and then continues logging.
956
957
957 %logstart takes a second optional parameter: logging mode. This can be one
958 %logstart takes a second optional parameter: logging mode. This can be one
958 of (note that the modes are given unquoted):\\
959 of (note that the modes are given unquoted):\\
959 append: well, that says it.\\
960 append: well, that says it.\\
960 backup: rename (if exists) to name~ and start name.\\
961 backup: rename (if exists) to name~ and start name.\\
961 global: single logfile in your home dir, appended to.\\
962 global: single logfile in your home dir, appended to.\\
962 over : overwrite existing log.\\
963 over : overwrite existing log.\\
963 rotate: create rotating logs name.1~, name.2~, etc.
964 rotate: create rotating logs name.1~, name.2~, etc.
964
965
965 Options:
966 Options:
966
967
967 -o: log also IPython's output. In this mode, all commands which
968 -o: log also IPython's output. In this mode, all commands which
968 generate an Out[NN] prompt are recorded to the logfile, right after
969 generate an Out[NN] prompt are recorded to the logfile, right after
969 their corresponding input line. The output lines are always
970 their corresponding input line. The output lines are always
970 prepended with a '#[Out]# ' marker, so that the log remains valid
971 prepended with a '#[Out]# ' marker, so that the log remains valid
971 Python code.
972 Python code.
972
973
973 Since this marker is always the same, filtering only the output from
974 Since this marker is always the same, filtering only the output from
974 a log is very easy, using for example a simple awk call:
975 a log is very easy, using for example a simple awk call:
975
976
976 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
977 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
977
978
978 -t: put timestamps before each input line logged (these are put in
979 -t: put timestamps before each input line logged (these are put in
979 comments)."""
980 comments)."""
980
981
981 opts,par = self.parse_options(parameter_s,'ot')
982 opts,par = self.parse_options(parameter_s,'ot')
982 log_output = 'o' in opts
983 log_output = 'o' in opts
983 timestamp = 't' in opts
984 timestamp = 't' in opts
984
985
985 rc = self.shell.rc
986 rc = self.shell.rc
986 logger = self.shell.logger
987 logger = self.shell.logger
987
988
988 # if no args are given, the defaults set in the logger constructor by
989 # if no args are given, the defaults set in the logger constructor by
989 # ipytohn remain valid
990 # ipytohn remain valid
990 if par:
991 if par:
991 try:
992 try:
992 logfname,logmode = par.split()
993 logfname,logmode = par.split()
993 except:
994 except:
994 logfname = par
995 logfname = par
995 logmode = 'backup'
996 logmode = 'backup'
996 else:
997 else:
997 logfname = logger.logfname
998 logfname = logger.logfname
998 logmode = logger.logmode
999 logmode = logger.logmode
999 # put logfname into rc struct as if it had been called on the command
1000 # put logfname into rc struct as if it had been called on the command
1000 # line, so it ends up saved in the log header Save it in case we need
1001 # line, so it ends up saved in the log header Save it in case we need
1001 # to restore it...
1002 # to restore it...
1002 old_logfile = rc.opts.get('logfile','')
1003 old_logfile = rc.opts.get('logfile','')
1003 if logfname:
1004 if logfname:
1004 logfname = os.path.expanduser(logfname)
1005 logfname = os.path.expanduser(logfname)
1005 rc.opts.logfile = logfname
1006 rc.opts.logfile = logfname
1006 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1007 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1007 try:
1008 try:
1008 started = logger.logstart(logfname,loghead,logmode,
1009 started = logger.logstart(logfname,loghead,logmode,
1009 log_output,timestamp)
1010 log_output,timestamp)
1010 except:
1011 except:
1011 rc.opts.logfile = old_logfile
1012 rc.opts.logfile = old_logfile
1012 warn("Couldn't start log: %s" % sys.exc_info()[1])
1013 warn("Couldn't start log: %s" % sys.exc_info()[1])
1013 else:
1014 else:
1014 # log input history up to this point, optionally interleaving
1015 # log input history up to this point, optionally interleaving
1015 # output if requested
1016 # output if requested
1016
1017
1017 if timestamp:
1018 if timestamp:
1018 # disable timestamping for the previous history, since we've
1019 # disable timestamping for the previous history, since we've
1019 # lost those already (no time machine here).
1020 # lost those already (no time machine here).
1020 logger.timestamp = False
1021 logger.timestamp = False
1021 if log_output:
1022 if log_output:
1022 log_write = logger.log_write
1023 log_write = logger.log_write
1023 input_hist = self.shell.input_hist
1024 input_hist = self.shell.input_hist
1024 output_hist = self.shell.output_hist
1025 output_hist = self.shell.output_hist
1025 for n in range(1,len(input_hist)-1):
1026 for n in range(1,len(input_hist)-1):
1026 log_write(input_hist[n].rstrip())
1027 log_write(input_hist[n].rstrip())
1027 if n in output_hist:
1028 if n in output_hist:
1028 log_write(repr(output_hist[n]),'output')
1029 log_write(repr(output_hist[n]),'output')
1029 else:
1030 else:
1030 logger.log_write(self.shell.input_hist[1:])
1031 logger.log_write(self.shell.input_hist[1:])
1031 if timestamp:
1032 if timestamp:
1032 # re-enable timestamping
1033 # re-enable timestamping
1033 logger.timestamp = True
1034 logger.timestamp = True
1034
1035
1035 print ('Activating auto-logging. '
1036 print ('Activating auto-logging. '
1036 'Current session state plus future input saved.')
1037 'Current session state plus future input saved.')
1037 logger.logstate()
1038 logger.logstate()
1038
1039
1039 def magic_logoff(self,parameter_s=''):
1040 def magic_logoff(self,parameter_s=''):
1040 """Temporarily stop logging.
1041 """Temporarily stop logging.
1041
1042
1042 You must have previously started logging."""
1043 You must have previously started logging."""
1043 self.shell.logger.switch_log(0)
1044 self.shell.logger.switch_log(0)
1044
1045
1045 def magic_logon(self,parameter_s=''):
1046 def magic_logon(self,parameter_s=''):
1046 """Restart logging.
1047 """Restart logging.
1047
1048
1048 This function is for restarting logging which you've temporarily
1049 This function is for restarting logging which you've temporarily
1049 stopped with %logoff. For starting logging for the first time, you
1050 stopped with %logoff. For starting logging for the first time, you
1050 must use the %logstart function, which allows you to specify an
1051 must use the %logstart function, which allows you to specify an
1051 optional log filename."""
1052 optional log filename."""
1052
1053
1053 self.shell.logger.switch_log(1)
1054 self.shell.logger.switch_log(1)
1054
1055
1055 def magic_logstate(self,parameter_s=''):
1056 def magic_logstate(self,parameter_s=''):
1056 """Print the status of the logging system."""
1057 """Print the status of the logging system."""
1057
1058
1058 self.shell.logger.logstate()
1059 self.shell.logger.logstate()
1059
1060
1060 def magic_pdb(self, parameter_s=''):
1061 def magic_pdb(self, parameter_s=''):
1061 """Control the calling of the pdb interactive debugger.
1062 """Control the calling of the pdb interactive debugger.
1062
1063
1063 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1064 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1064 argument it works as a toggle.
1065 argument it works as a toggle.
1065
1066
1066 When an exception is triggered, IPython can optionally call the
1067 When an exception is triggered, IPython can optionally call the
1067 interactive pdb debugger after the traceback printout. %pdb toggles
1068 interactive pdb debugger after the traceback printout. %pdb toggles
1068 this feature on and off."""
1069 this feature on and off."""
1069
1070
1070 par = parameter_s.strip().lower()
1071 par = parameter_s.strip().lower()
1071
1072
1072 if par:
1073 if par:
1073 try:
1074 try:
1074 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1075 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1075 except KeyError:
1076 except KeyError:
1076 print ('Incorrect argument. Use on/1, off/0, '
1077 print ('Incorrect argument. Use on/1, off/0, '
1077 'or nothing for a toggle.')
1078 'or nothing for a toggle.')
1078 return
1079 return
1079 else:
1080 else:
1080 # toggle
1081 # toggle
1081 new_pdb = not self.shell.InteractiveTB.call_pdb
1082 new_pdb = not self.shell.InteractiveTB.call_pdb
1082
1083
1083 # set on the shell
1084 # set on the shell
1084 self.shell.call_pdb = new_pdb
1085 self.shell.call_pdb = new_pdb
1085 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1086 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1086
1087
1087 def magic_prun(self, parameter_s ='',user_mode=1,
1088 def magic_prun(self, parameter_s ='',user_mode=1,
1088 opts=None,arg_lst=None,prog_ns=None):
1089 opts=None,arg_lst=None,prog_ns=None):
1089
1090
1090 """Run a statement through the python code profiler.
1091 """Run a statement through the python code profiler.
1091
1092
1092 Usage:\\
1093 Usage:\\
1093 %prun [options] statement
1094 %prun [options] statement
1094
1095
1095 The given statement (which doesn't require quote marks) is run via the
1096 The given statement (which doesn't require quote marks) is run via the
1096 python profiler in a manner similar to the profile.run() function.
1097 python profiler in a manner similar to the profile.run() function.
1097 Namespaces are internally managed to work correctly; profile.run
1098 Namespaces are internally managed to work correctly; profile.run
1098 cannot be used in IPython because it makes certain assumptions about
1099 cannot be used in IPython because it makes certain assumptions about
1099 namespaces which do not hold under IPython.
1100 namespaces which do not hold under IPython.
1100
1101
1101 Options:
1102 Options:
1102
1103
1103 -l <limit>: you can place restrictions on what or how much of the
1104 -l <limit>: you can place restrictions on what or how much of the
1104 profile gets printed. The limit value can be:
1105 profile gets printed. The limit value can be:
1105
1106
1106 * A string: only information for function names containing this string
1107 * A string: only information for function names containing this string
1107 is printed.
1108 is printed.
1108
1109
1109 * An integer: only these many lines are printed.
1110 * An integer: only these many lines are printed.
1110
1111
1111 * A float (between 0 and 1): this fraction of the report is printed
1112 * A float (between 0 and 1): this fraction of the report is printed
1112 (for example, use a limit of 0.4 to see the topmost 40% only).
1113 (for example, use a limit of 0.4 to see the topmost 40% only).
1113
1114
1114 You can combine several limits with repeated use of the option. For
1115 You can combine several limits with repeated use of the option. For
1115 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1116 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1116 information about class constructors.
1117 information about class constructors.
1117
1118
1118 -r: return the pstats.Stats object generated by the profiling. This
1119 -r: return the pstats.Stats object generated by the profiling. This
1119 object has all the information about the profile in it, and you can
1120 object has all the information about the profile in it, and you can
1120 later use it for further analysis or in other functions.
1121 later use it for further analysis or in other functions.
1121
1122
1122 Since magic functions have a particular form of calling which prevents
1123 Since magic functions have a particular form of calling which prevents
1123 you from writing something like:\\
1124 you from writing something like:\\
1124 In [1]: p = %prun -r print 4 # invalid!\\
1125 In [1]: p = %prun -r print 4 # invalid!\\
1125 you must instead use IPython's automatic variables to assign this:\\
1126 you must instead use IPython's automatic variables to assign this:\\
1126 In [1]: %prun -r print 4 \\
1127 In [1]: %prun -r print 4 \\
1127 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1128 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1128 In [2]: stats = _
1129 In [2]: stats = _
1129
1130
1130 If you really need to assign this value via an explicit function call,
1131 If you really need to assign this value via an explicit function call,
1131 you can always tap directly into the true name of the magic function
1132 you can always tap directly into the true name of the magic function
1132 by using the ipmagic function (which IPython automatically adds to the
1133 by using the ipmagic function (which IPython automatically adds to the
1133 builtins):\\
1134 builtins):\\
1134 In [3]: stats = ipmagic('prun','-r print 4')
1135 In [3]: stats = ipmagic('prun','-r print 4')
1135
1136
1136 You can type ipmagic? for more details on ipmagic.
1137 You can type ipmagic? for more details on ipmagic.
1137
1138
1138 -s <key>: sort profile by given key. You can provide more than one key
1139 -s <key>: sort profile by given key. You can provide more than one key
1139 by using the option several times: '-s key1 -s key2 -s key3...'. The
1140 by using the option several times: '-s key1 -s key2 -s key3...'. The
1140 default sorting key is 'time'.
1141 default sorting key is 'time'.
1141
1142
1142 The following is copied verbatim from the profile documentation
1143 The following is copied verbatim from the profile documentation
1143 referenced below:
1144 referenced below:
1144
1145
1145 When more than one key is provided, additional keys are used as
1146 When more than one key is provided, additional keys are used as
1146 secondary criteria when the there is equality in all keys selected
1147 secondary criteria when the there is equality in all keys selected
1147 before them.
1148 before them.
1148
1149
1149 Abbreviations can be used for any key names, as long as the
1150 Abbreviations can be used for any key names, as long as the
1150 abbreviation is unambiguous. The following are the keys currently
1151 abbreviation is unambiguous. The following are the keys currently
1151 defined:
1152 defined:
1152
1153
1153 Valid Arg Meaning\\
1154 Valid Arg Meaning\\
1154 "calls" call count\\
1155 "calls" call count\\
1155 "cumulative" cumulative time\\
1156 "cumulative" cumulative time\\
1156 "file" file name\\
1157 "file" file name\\
1157 "module" file name\\
1158 "module" file name\\
1158 "pcalls" primitive call count\\
1159 "pcalls" primitive call count\\
1159 "line" line number\\
1160 "line" line number\\
1160 "name" function name\\
1161 "name" function name\\
1161 "nfl" name/file/line\\
1162 "nfl" name/file/line\\
1162 "stdname" standard name\\
1163 "stdname" standard name\\
1163 "time" internal time
1164 "time" internal time
1164
1165
1165 Note that all sorts on statistics are in descending order (placing
1166 Note that all sorts on statistics are in descending order (placing
1166 most time consuming items first), where as name, file, and line number
1167 most time consuming items first), where as name, file, and line number
1167 searches are in ascending order (i.e., alphabetical). The subtle
1168 searches are in ascending order (i.e., alphabetical). The subtle
1168 distinction between "nfl" and "stdname" is that the standard name is a
1169 distinction between "nfl" and "stdname" is that the standard name is a
1169 sort of the name as printed, which means that the embedded line
1170 sort of the name as printed, which means that the embedded line
1170 numbers get compared in an odd way. For example, lines 3, 20, and 40
1171 numbers get compared in an odd way. For example, lines 3, 20, and 40
1171 would (if the file names were the same) appear in the string order
1172 would (if the file names were the same) appear in the string order
1172 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1173 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1173 line numbers. In fact, sort_stats("nfl") is the same as
1174 line numbers. In fact, sort_stats("nfl") is the same as
1174 sort_stats("name", "file", "line").
1175 sort_stats("name", "file", "line").
1175
1176
1176 -T <filename>: save profile results as shown on screen to a text
1177 -T <filename>: save profile results as shown on screen to a text
1177 file. The profile is still shown on screen.
1178 file. The profile is still shown on screen.
1178
1179
1179 -D <filename>: save (via dump_stats) profile statistics to given
1180 -D <filename>: save (via dump_stats) profile statistics to given
1180 filename. This data is in a format understod by the pstats module, and
1181 filename. This data is in a format understod by the pstats module, and
1181 is generated by a call to the dump_stats() method of profile
1182 is generated by a call to the dump_stats() method of profile
1182 objects. The profile is still shown on screen.
1183 objects. The profile is still shown on screen.
1183
1184
1184 If you want to run complete programs under the profiler's control, use
1185 If you want to run complete programs under the profiler's control, use
1185 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1186 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1186 contains profiler specific options as described here.
1187 contains profiler specific options as described here.
1187
1188
1188 You can read the complete documentation for the profile module with:\\
1189 You can read the complete documentation for the profile module with:\\
1189 In [1]: import profile; profile.help() """
1190 In [1]: import profile; profile.help() """
1190
1191
1191 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1192 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1192 # protect user quote marks
1193 # protect user quote marks
1193 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1194 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1194
1195
1195 if user_mode: # regular user call
1196 if user_mode: # regular user call
1196 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1197 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1197 list_all=1)
1198 list_all=1)
1198 namespace = self.shell.user_ns
1199 namespace = self.shell.user_ns
1199 else: # called to run a program by %run -p
1200 else: # called to run a program by %run -p
1200 try:
1201 try:
1201 filename = get_py_filename(arg_lst[0])
1202 filename = get_py_filename(arg_lst[0])
1202 except IOError,msg:
1203 except IOError,msg:
1203 error(msg)
1204 error(msg)
1204 return
1205 return
1205
1206
1206 arg_str = 'execfile(filename,prog_ns)'
1207 arg_str = 'execfile(filename,prog_ns)'
1207 namespace = locals()
1208 namespace = locals()
1208
1209
1209 opts.merge(opts_def)
1210 opts.merge(opts_def)
1210
1211
1211 prof = profile.Profile()
1212 prof = profile.Profile()
1212 try:
1213 try:
1213 prof = prof.runctx(arg_str,namespace,namespace)
1214 prof = prof.runctx(arg_str,namespace,namespace)
1214 sys_exit = ''
1215 sys_exit = ''
1215 except SystemExit:
1216 except SystemExit:
1216 sys_exit = """*** SystemExit exception caught in code being profiled."""
1217 sys_exit = """*** SystemExit exception caught in code being profiled."""
1217
1218
1218 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1219 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1219
1220
1220 lims = opts.l
1221 lims = opts.l
1221 if lims:
1222 if lims:
1222 lims = [] # rebuild lims with ints/floats/strings
1223 lims = [] # rebuild lims with ints/floats/strings
1223 for lim in opts.l:
1224 for lim in opts.l:
1224 try:
1225 try:
1225 lims.append(int(lim))
1226 lims.append(int(lim))
1226 except ValueError:
1227 except ValueError:
1227 try:
1228 try:
1228 lims.append(float(lim))
1229 lims.append(float(lim))
1229 except ValueError:
1230 except ValueError:
1230 lims.append(lim)
1231 lims.append(lim)
1231
1232
1232 # trap output
1233 # trap output
1233 sys_stdout = sys.stdout
1234 sys_stdout = sys.stdout
1234 stdout_trap = StringIO()
1235 stdout_trap = StringIO()
1235 try:
1236 try:
1236 sys.stdout = stdout_trap
1237 sys.stdout = stdout_trap
1237 stats.print_stats(*lims)
1238 stats.print_stats(*lims)
1238 finally:
1239 finally:
1239 sys.stdout = sys_stdout
1240 sys.stdout = sys_stdout
1240 output = stdout_trap.getvalue()
1241 output = stdout_trap.getvalue()
1241 output = output.rstrip()
1242 output = output.rstrip()
1242
1243
1243 page(output,screen_lines=self.shell.rc.screen_length)
1244 page(output,screen_lines=self.shell.rc.screen_length)
1244 print sys_exit,
1245 print sys_exit,
1245
1246
1246 dump_file = opts.D[0]
1247 dump_file = opts.D[0]
1247 text_file = opts.T[0]
1248 text_file = opts.T[0]
1248 if dump_file:
1249 if dump_file:
1249 prof.dump_stats(dump_file)
1250 prof.dump_stats(dump_file)
1250 print '\n*** Profile stats marshalled to file',\
1251 print '\n*** Profile stats marshalled to file',\
1251 `dump_file`+'.',sys_exit
1252 `dump_file`+'.',sys_exit
1252 if text_file:
1253 if text_file:
1253 file(text_file,'w').write(output)
1254 file(text_file,'w').write(output)
1254 print '\n*** Profile printout saved to text file',\
1255 print '\n*** Profile printout saved to text file',\
1255 `text_file`+'.',sys_exit
1256 `text_file`+'.',sys_exit
1256
1257
1257 if opts.has_key('r'):
1258 if opts.has_key('r'):
1258 return stats
1259 return stats
1259 else:
1260 else:
1260 return None
1261 return None
1261
1262
1262 def magic_run(self, parameter_s ='',runner=None):
1263 def magic_run(self, parameter_s ='',runner=None):
1263 """Run the named file inside IPython as a program.
1264 """Run the named file inside IPython as a program.
1264
1265
1265 Usage:\\
1266 Usage:\\
1266 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1267 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1267
1268
1268 Parameters after the filename are passed as command-line arguments to
1269 Parameters after the filename are passed as command-line arguments to
1269 the program (put in sys.argv). Then, control returns to IPython's
1270 the program (put in sys.argv). Then, control returns to IPython's
1270 prompt.
1271 prompt.
1271
1272
1272 This is similar to running at a system prompt:\\
1273 This is similar to running at a system prompt:\\
1273 $ python file args\\
1274 $ python file args\\
1274 but with the advantage of giving you IPython's tracebacks, and of
1275 but with the advantage of giving you IPython's tracebacks, and of
1275 loading all variables into your interactive namespace for further use
1276 loading all variables into your interactive namespace for further use
1276 (unless -p is used, see below).
1277 (unless -p is used, see below).
1277
1278
1278 The file is executed in a namespace initially consisting only of
1279 The file is executed in a namespace initially consisting only of
1279 __name__=='__main__' and sys.argv constructed as indicated. It thus
1280 __name__=='__main__' and sys.argv constructed as indicated. It thus
1280 sees its environment as if it were being run as a stand-alone
1281 sees its environment as if it were being run as a stand-alone
1281 program. But after execution, the IPython interactive namespace gets
1282 program. But after execution, the IPython interactive namespace gets
1282 updated with all variables defined in the program (except for __name__
1283 updated with all variables defined in the program (except for __name__
1283 and sys.argv). This allows for very convenient loading of code for
1284 and sys.argv). This allows for very convenient loading of code for
1284 interactive work, while giving each program a 'clean sheet' to run in.
1285 interactive work, while giving each program a 'clean sheet' to run in.
1285
1286
1286 Options:
1287 Options:
1287
1288
1288 -n: __name__ is NOT set to '__main__', but to the running file's name
1289 -n: __name__ is NOT set to '__main__', but to the running file's name
1289 without extension (as python does under import). This allows running
1290 without extension (as python does under import). This allows running
1290 scripts and reloading the definitions in them without calling code
1291 scripts and reloading the definitions in them without calling code
1291 protected by an ' if __name__ == "__main__" ' clause.
1292 protected by an ' if __name__ == "__main__" ' clause.
1292
1293
1293 -i: run the file in IPython's namespace instead of an empty one. This
1294 -i: run the file in IPython's namespace instead of an empty one. This
1294 is useful if you are experimenting with code written in a text editor
1295 is useful if you are experimenting with code written in a text editor
1295 which depends on variables defined interactively.
1296 which depends on variables defined interactively.
1296
1297
1297 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1298 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1298 being run. This is particularly useful if IPython is being used to
1299 being run. This is particularly useful if IPython is being used to
1299 run unittests, which always exit with a sys.exit() call. In such
1300 run unittests, which always exit with a sys.exit() call. In such
1300 cases you are interested in the output of the test results, not in
1301 cases you are interested in the output of the test results, not in
1301 seeing a traceback of the unittest module.
1302 seeing a traceback of the unittest module.
1302
1303
1303 -t: print timing information at the end of the run. IPython will give
1304 -t: print timing information at the end of the run. IPython will give
1304 you an estimated CPU time consumption for your script, which under
1305 you an estimated CPU time consumption for your script, which under
1305 Unix uses the resource module to avoid the wraparound problems of
1306 Unix uses the resource module to avoid the wraparound problems of
1306 time.clock(). Under Unix, an estimate of time spent on system tasks
1307 time.clock(). Under Unix, an estimate of time spent on system tasks
1307 is also given (for Windows platforms this is reported as 0.0).
1308 is also given (for Windows platforms this is reported as 0.0).
1308
1309
1309 If -t is given, an additional -N<N> option can be given, where <N>
1310 If -t is given, an additional -N<N> option can be given, where <N>
1310 must be an integer indicating how many times you want the script to
1311 must be an integer indicating how many times you want the script to
1311 run. The final timing report will include total and per run results.
1312 run. The final timing report will include total and per run results.
1312
1313
1313 For example (testing the script uniq_stable.py):
1314 For example (testing the script uniq_stable.py):
1314
1315
1315 In [1]: run -t uniq_stable
1316 In [1]: run -t uniq_stable
1316
1317
1317 IPython CPU timings (estimated):\\
1318 IPython CPU timings (estimated):\\
1318 User : 0.19597 s.\\
1319 User : 0.19597 s.\\
1319 System: 0.0 s.\\
1320 System: 0.0 s.\\
1320
1321
1321 In [2]: run -t -N5 uniq_stable
1322 In [2]: run -t -N5 uniq_stable
1322
1323
1323 IPython CPU timings (estimated):\\
1324 IPython CPU timings (estimated):\\
1324 Total runs performed: 5\\
1325 Total runs performed: 5\\
1325 Times : Total Per run\\
1326 Times : Total Per run\\
1326 User : 0.910862 s, 0.1821724 s.\\
1327 User : 0.910862 s, 0.1821724 s.\\
1327 System: 0.0 s, 0.0 s.
1328 System: 0.0 s, 0.0 s.
1328
1329
1329 -d: run your program under the control of pdb, the Python debugger.
1330 -d: run your program under the control of pdb, the Python debugger.
1330 This allows you to execute your program step by step, watch variables,
1331 This allows you to execute your program step by step, watch variables,
1331 etc. Internally, what IPython does is similar to calling:
1332 etc. Internally, what IPython does is similar to calling:
1332
1333
1333 pdb.run('execfile("YOURFILENAME")')
1334 pdb.run('execfile("YOURFILENAME")')
1334
1335
1335 with a breakpoint set on line 1 of your file. You can change the line
1336 with a breakpoint set on line 1 of your file. You can change the line
1336 number for this automatic breakpoint to be <N> by using the -bN option
1337 number for this automatic breakpoint to be <N> by using the -bN option
1337 (where N must be an integer). For example:
1338 (where N must be an integer). For example:
1338
1339
1339 %run -d -b40 myscript
1340 %run -d -b40 myscript
1340
1341
1341 will set the first breakpoint at line 40 in myscript.py. Note that
1342 will set the first breakpoint at line 40 in myscript.py. Note that
1342 the first breakpoint must be set on a line which actually does
1343 the first breakpoint must be set on a line which actually does
1343 something (not a comment or docstring) for it to stop execution.
1344 something (not a comment or docstring) for it to stop execution.
1344
1345
1345 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1346 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1346 first enter 'c' (without qoutes) to start execution up to the first
1347 first enter 'c' (without qoutes) to start execution up to the first
1347 breakpoint.
1348 breakpoint.
1348
1349
1349 Entering 'help' gives information about the use of the debugger. You
1350 Entering 'help' gives information about the use of the debugger. You
1350 can easily see pdb's full documentation with "import pdb;pdb.help()"
1351 can easily see pdb's full documentation with "import pdb;pdb.help()"
1351 at a prompt.
1352 at a prompt.
1352
1353
1353 -p: run program under the control of the Python profiler module (which
1354 -p: run program under the control of the Python profiler module (which
1354 prints a detailed report of execution times, function calls, etc).
1355 prints a detailed report of execution times, function calls, etc).
1355
1356
1356 You can pass other options after -p which affect the behavior of the
1357 You can pass other options after -p which affect the behavior of the
1357 profiler itself. See the docs for %prun for details.
1358 profiler itself. See the docs for %prun for details.
1358
1359
1359 In this mode, the program's variables do NOT propagate back to the
1360 In this mode, the program's variables do NOT propagate back to the
1360 IPython interactive namespace (because they remain in the namespace
1361 IPython interactive namespace (because they remain in the namespace
1361 where the profiler executes them).
1362 where the profiler executes them).
1362
1363
1363 Internally this triggers a call to %prun, see its documentation for
1364 Internally this triggers a call to %prun, see its documentation for
1364 details on the options available specifically for profiling."""
1365 details on the options available specifically for profiling."""
1365
1366
1366 # get arguments and set sys.argv for program to be run.
1367 # get arguments and set sys.argv for program to be run.
1367 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1368 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1368 mode='list',list_all=1)
1369 mode='list',list_all=1)
1369
1370
1370 try:
1371 try:
1371 filename = get_py_filename(arg_lst[0])
1372 filename = get_py_filename(arg_lst[0])
1372 except IndexError:
1373 except IndexError:
1373 warn('you must provide at least a filename.')
1374 warn('you must provide at least a filename.')
1374 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1375 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1375 return
1376 return
1376 except IOError,msg:
1377 except IOError,msg:
1377 error(msg)
1378 error(msg)
1378 return
1379 return
1379
1380
1380 # Control the response to exit() calls made by the script being run
1381 # Control the response to exit() calls made by the script being run
1381 exit_ignore = opts.has_key('e')
1382 exit_ignore = opts.has_key('e')
1382
1383
1383 # Make sure that the running script gets a proper sys.argv as if it
1384 # Make sure that the running script gets a proper sys.argv as if it
1384 # were run from a system shell.
1385 # were run from a system shell.
1385 save_argv = sys.argv # save it for later restoring
1386 save_argv = sys.argv # save it for later restoring
1386 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1387 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1387
1388
1388 if opts.has_key('i'):
1389 if opts.has_key('i'):
1389 prog_ns = self.shell.user_ns
1390 prog_ns = self.shell.user_ns
1390 __name__save = self.shell.user_ns['__name__']
1391 __name__save = self.shell.user_ns['__name__']
1391 prog_ns['__name__'] = '__main__'
1392 prog_ns['__name__'] = '__main__'
1392 else:
1393 else:
1393 if opts.has_key('n'):
1394 if opts.has_key('n'):
1394 name = os.path.splitext(os.path.basename(filename))[0]
1395 name = os.path.splitext(os.path.basename(filename))[0]
1395 else:
1396 else:
1396 name = '__main__'
1397 name = '__main__'
1397 prog_ns = {'__name__':name}
1398 prog_ns = {'__name__':name}
1398
1399
1399 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1400 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1400 # set the __file__ global in the script's namespace
1401 # set the __file__ global in the script's namespace
1401 prog_ns['__file__'] = filename
1402 prog_ns['__file__'] = filename
1402
1403
1403 # pickle fix. See iplib for an explanation. But we need to make sure
1404 # pickle fix. See iplib for an explanation. But we need to make sure
1404 # that, if we overwrite __main__, we replace it at the end
1405 # that, if we overwrite __main__, we replace it at the end
1405 if prog_ns['__name__'] == '__main__':
1406 if prog_ns['__name__'] == '__main__':
1406 restore_main = sys.modules['__main__']
1407 restore_main = sys.modules['__main__']
1407 else:
1408 else:
1408 restore_main = False
1409 restore_main = False
1409
1410
1410 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1411 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1411
1412
1412 stats = None
1413 stats = None
1413 try:
1414 try:
1414 if opts.has_key('p'):
1415 if opts.has_key('p'):
1415 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1416 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1416 else:
1417 else:
1417 if opts.has_key('d'):
1418 if opts.has_key('d'):
1418 deb = Debugger.Pdb(self.shell.rc.colors)
1419 deb = Debugger.Pdb(self.shell.rc.colors)
1419 # reset Breakpoint state, which is moronically kept
1420 # reset Breakpoint state, which is moronically kept
1420 # in a class
1421 # in a class
1421 bdb.Breakpoint.next = 1
1422 bdb.Breakpoint.next = 1
1422 bdb.Breakpoint.bplist = {}
1423 bdb.Breakpoint.bplist = {}
1423 bdb.Breakpoint.bpbynumber = [None]
1424 bdb.Breakpoint.bpbynumber = [None]
1424 # Set an initial breakpoint to stop execution
1425 # Set an initial breakpoint to stop execution
1425 maxtries = 10
1426 maxtries = 10
1426 bp = int(opts.get('b',[1])[0])
1427 bp = int(opts.get('b',[1])[0])
1427 checkline = deb.checkline(filename,bp)
1428 checkline = deb.checkline(filename,bp)
1428 if not checkline:
1429 if not checkline:
1429 for bp in range(bp+1,bp+maxtries+1):
1430 for bp in range(bp+1,bp+maxtries+1):
1430 if deb.checkline(filename,bp):
1431 if deb.checkline(filename,bp):
1431 break
1432 break
1432 else:
1433 else:
1433 msg = ("\nI failed to find a valid line to set "
1434 msg = ("\nI failed to find a valid line to set "
1434 "a breakpoint\n"
1435 "a breakpoint\n"
1435 "after trying up to line: %s.\n"
1436 "after trying up to line: %s.\n"
1436 "Please set a valid breakpoint manually "
1437 "Please set a valid breakpoint manually "
1437 "with the -b option." % bp)
1438 "with the -b option." % bp)
1438 error(msg)
1439 error(msg)
1439 return
1440 return
1440 # if we find a good linenumber, set the breakpoint
1441 # if we find a good linenumber, set the breakpoint
1441 deb.do_break('%s:%s' % (filename,bp))
1442 deb.do_break('%s:%s' % (filename,bp))
1442 # Start file run
1443 # Start file run
1443 print "NOTE: Enter 'c' at the",
1444 print "NOTE: Enter 'c' at the",
1444 print "ipdb> prompt to start your script."
1445 print "ipdb> prompt to start your script."
1445 try:
1446 try:
1446 deb.run('execfile("%s")' % filename,prog_ns)
1447 deb.run('execfile("%s")' % filename,prog_ns)
1447 except:
1448 except:
1448 etype, value, tb = sys.exc_info()
1449 etype, value, tb = sys.exc_info()
1449 # Skip three frames in the traceback: the %run one,
1450 # Skip three frames in the traceback: the %run one,
1450 # one inside bdb.py, and the command-line typed by the
1451 # one inside bdb.py, and the command-line typed by the
1451 # user (run by exec in pdb itself).
1452 # user (run by exec in pdb itself).
1452 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1453 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1453 else:
1454 else:
1454 if runner is None:
1455 if runner is None:
1455 runner = self.shell.safe_execfile
1456 runner = self.shell.safe_execfile
1456 if opts.has_key('t'):
1457 if opts.has_key('t'):
1457 try:
1458 try:
1458 nruns = int(opts['N'][0])
1459 nruns = int(opts['N'][0])
1459 if nruns < 1:
1460 if nruns < 1:
1460 error('Number of runs must be >=1')
1461 error('Number of runs must be >=1')
1461 return
1462 return
1462 except (KeyError):
1463 except (KeyError):
1463 nruns = 1
1464 nruns = 1
1464 if nruns == 1:
1465 if nruns == 1:
1465 t0 = clock2()
1466 t0 = clock2()
1466 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1467 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1467 t1 = clock2()
1468 t1 = clock2()
1468 t_usr = t1[0]-t0[0]
1469 t_usr = t1[0]-t0[0]
1469 t_sys = t1[1]-t1[1]
1470 t_sys = t1[1]-t1[1]
1470 print "\nIPython CPU timings (estimated):"
1471 print "\nIPython CPU timings (estimated):"
1471 print " User : %10s s." % t_usr
1472 print " User : %10s s." % t_usr
1472 print " System: %10s s." % t_sys
1473 print " System: %10s s." % t_sys
1473 else:
1474 else:
1474 runs = range(nruns)
1475 runs = range(nruns)
1475 t0 = clock2()
1476 t0 = clock2()
1476 for nr in runs:
1477 for nr in runs:
1477 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1478 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1478 t1 = clock2()
1479 t1 = clock2()
1479 t_usr = t1[0]-t0[0]
1480 t_usr = t1[0]-t0[0]
1480 t_sys = t1[1]-t1[1]
1481 t_sys = t1[1]-t1[1]
1481 print "\nIPython CPU timings (estimated):"
1482 print "\nIPython CPU timings (estimated):"
1482 print "Total runs performed:",nruns
1483 print "Total runs performed:",nruns
1483 print " Times : %10s %10s" % ('Total','Per run')
1484 print " Times : %10s %10s" % ('Total','Per run')
1484 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1485 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1485 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1486 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1486
1487
1487 else:
1488 else:
1488 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1489 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1489 if opts.has_key('i'):
1490 if opts.has_key('i'):
1490 self.shell.user_ns['__name__'] = __name__save
1491 self.shell.user_ns['__name__'] = __name__save
1491 else:
1492 else:
1492 # update IPython interactive namespace
1493 # update IPython interactive namespace
1493 del prog_ns['__name__']
1494 del prog_ns['__name__']
1494 self.shell.user_ns.update(prog_ns)
1495 self.shell.user_ns.update(prog_ns)
1495 finally:
1496 finally:
1496 sys.argv = save_argv
1497 sys.argv = save_argv
1497 if restore_main:
1498 if restore_main:
1498 sys.modules['__main__'] = restore_main
1499 sys.modules['__main__'] = restore_main
1499 return stats
1500 return stats
1500
1501
1501 def magic_runlog(self, parameter_s =''):
1502 def magic_runlog(self, parameter_s =''):
1502 """Run files as logs.
1503 """Run files as logs.
1503
1504
1504 Usage:\\
1505 Usage:\\
1505 %runlog file1 file2 ...
1506 %runlog file1 file2 ...
1506
1507
1507 Run the named files (treating them as log files) in sequence inside
1508 Run the named files (treating them as log files) in sequence inside
1508 the interpreter, and return to the prompt. This is much slower than
1509 the interpreter, and return to the prompt. This is much slower than
1509 %run because each line is executed in a try/except block, but it
1510 %run because each line is executed in a try/except block, but it
1510 allows running files with syntax errors in them.
1511 allows running files with syntax errors in them.
1511
1512
1512 Normally IPython will guess when a file is one of its own logfiles, so
1513 Normally IPython will guess when a file is one of its own logfiles, so
1513 you can typically use %run even for logs. This shorthand allows you to
1514 you can typically use %run even for logs. This shorthand allows you to
1514 force any file to be treated as a log file."""
1515 force any file to be treated as a log file."""
1515
1516
1516 for f in parameter_s.split():
1517 for f in parameter_s.split():
1517 self.shell.safe_execfile(f,self.shell.user_ns,
1518 self.shell.safe_execfile(f,self.shell.user_ns,
1518 self.shell.user_ns,islog=1)
1519 self.shell.user_ns,islog=1)
1519
1520
1520 def magic_time(self,parameter_s = ''):
1521 def magic_time(self,parameter_s = ''):
1521 """Time execution of a Python statement or expression.
1522 """Time execution of a Python statement or expression.
1522
1523
1523 The CPU and wall clock times are printed, and the value of the
1524 The CPU and wall clock times are printed, and the value of the
1524 expression (if any) is returned. Note that under Win32, system time
1525 expression (if any) is returned. Note that under Win32, system time
1525 is always reported as 0, since it can not be measured.
1526 is always reported as 0, since it can not be measured.
1526
1527
1527 This function provides very basic timing functionality. In Python
1528 This function provides very basic timing functionality. In Python
1528 2.3, the timeit module offers more control and sophistication, but for
1529 2.3, the timeit module offers more control and sophistication, but for
1529 now IPython supports Python 2.2, so we can not rely on timeit being
1530 now IPython supports Python 2.2, so we can not rely on timeit being
1530 present.
1531 present.
1531
1532
1532 Some examples:
1533 Some examples:
1533
1534
1534 In [1]: time 2**128
1535 In [1]: time 2**128
1535 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1536 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1536 Wall time: 0.00
1537 Wall time: 0.00
1537 Out[1]: 340282366920938463463374607431768211456L
1538 Out[1]: 340282366920938463463374607431768211456L
1538
1539
1539 In [2]: n = 1000000
1540 In [2]: n = 1000000
1540
1541
1541 In [3]: time sum(range(n))
1542 In [3]: time sum(range(n))
1542 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1543 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1543 Wall time: 1.37
1544 Wall time: 1.37
1544 Out[3]: 499999500000L
1545 Out[3]: 499999500000L
1545
1546
1546 In [4]: time print 'hello world'
1547 In [4]: time print 'hello world'
1547 hello world
1548 hello world
1548 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1549 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1549 Wall time: 0.00
1550 Wall time: 0.00
1550 """
1551 """
1551
1552
1552 # fail immediately if the given expression can't be compiled
1553 # fail immediately if the given expression can't be compiled
1553 try:
1554 try:
1554 mode = 'eval'
1555 mode = 'eval'
1555 code = compile(parameter_s,'<timed eval>',mode)
1556 code = compile(parameter_s,'<timed eval>',mode)
1556 except SyntaxError:
1557 except SyntaxError:
1557 mode = 'exec'
1558 mode = 'exec'
1558 code = compile(parameter_s,'<timed exec>',mode)
1559 code = compile(parameter_s,'<timed exec>',mode)
1559 # skew measurement as little as possible
1560 # skew measurement as little as possible
1560 glob = self.shell.user_ns
1561 glob = self.shell.user_ns
1561 clk = clock2
1562 clk = clock2
1562 wtime = time.time
1563 wtime = time.time
1563 # time execution
1564 # time execution
1564 wall_st = wtime()
1565 wall_st = wtime()
1565 if mode=='eval':
1566 if mode=='eval':
1566 st = clk()
1567 st = clk()
1567 out = eval(code,glob)
1568 out = eval(code,glob)
1568 end = clk()
1569 end = clk()
1569 else:
1570 else:
1570 st = clk()
1571 st = clk()
1571 exec code in glob
1572 exec code in glob
1572 end = clk()
1573 end = clk()
1573 out = None
1574 out = None
1574 wall_end = wtime()
1575 wall_end = wtime()
1575 # Compute actual times and report
1576 # Compute actual times and report
1576 wall_time = wall_end-wall_st
1577 wall_time = wall_end-wall_st
1577 cpu_user = end[0]-st[0]
1578 cpu_user = end[0]-st[0]
1578 cpu_sys = end[1]-st[1]
1579 cpu_sys = end[1]-st[1]
1579 cpu_tot = cpu_user+cpu_sys
1580 cpu_tot = cpu_user+cpu_sys
1580 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1581 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1581 (cpu_user,cpu_sys,cpu_tot)
1582 (cpu_user,cpu_sys,cpu_tot)
1582 print "Wall time: %.2f" % wall_time
1583 print "Wall time: %.2f" % wall_time
1583 return out
1584 return out
1584
1585
1585 def magic_macro(self,parameter_s = ''):
1586 def magic_macro(self,parameter_s = ''):
1586 """Define a set of input lines as a macro for future re-execution.
1587 """Define a set of input lines as a macro for future re-execution.
1587
1588
1588 Usage:\\
1589 Usage:\\
1589 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1590 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1590
1591
1591 This will define a global variable called `name` which is a string
1592 This will define a global variable called `name` which is a string
1592 made of joining the slices and lines you specify (n1,n2,... numbers
1593 made of joining the slices and lines you specify (n1,n2,... numbers
1593 above) from your input history into a single string. This variable
1594 above) from your input history into a single string. This variable
1594 acts like an automatic function which re-executes those lines as if
1595 acts like an automatic function which re-executes those lines as if
1595 you had typed them. You just type 'name' at the prompt and the code
1596 you had typed them. You just type 'name' at the prompt and the code
1596 executes.
1597 executes.
1597
1598
1598 The notation for indicating number ranges is: n1-n2 means 'use line
1599 The notation for indicating number ranges is: n1-n2 means 'use line
1599 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1600 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1600 using the lines numbered 5,6 and 7.
1601 using the lines numbered 5,6 and 7.
1601
1602
1602 Note: as a 'hidden' feature, you can also use traditional python slice
1603 Note: as a 'hidden' feature, you can also use traditional python slice
1603 notation, where N:M means numbers N through M-1.
1604 notation, where N:M means numbers N through M-1.
1604
1605
1605 For example, if your history contains (%hist prints it):
1606 For example, if your history contains (%hist prints it):
1606
1607
1607 44: x=1\\
1608 44: x=1\\
1608 45: y=3\\
1609 45: y=3\\
1609 46: z=x+y\\
1610 46: z=x+y\\
1610 47: print x\\
1611 47: print x\\
1611 48: a=5\\
1612 48: a=5\\
1612 49: print 'x',x,'y',y\\
1613 49: print 'x',x,'y',y\\
1613
1614
1614 you can create a macro with lines 44 through 47 (included) and line 49
1615 you can create a macro with lines 44 through 47 (included) and line 49
1615 called my_macro with:
1616 called my_macro with:
1616
1617
1617 In [51]: %macro my_macro 44-47 49
1618 In [51]: %macro my_macro 44-47 49
1618
1619
1619 Now, typing `my_macro` (without quotes) will re-execute all this code
1620 Now, typing `my_macro` (without quotes) will re-execute all this code
1620 in one pass.
1621 in one pass.
1621
1622
1622 You don't need to give the line-numbers in order, and any given line
1623 You don't need to give the line-numbers in order, and any given line
1623 number can appear multiple times. You can assemble macros with any
1624 number can appear multiple times. You can assemble macros with any
1624 lines from your input history in any order.
1625 lines from your input history in any order.
1625
1626
1626 The macro is a simple object which holds its value in an attribute,
1627 The macro is a simple object which holds its value in an attribute,
1627 but IPython's display system checks for macros and executes them as
1628 but IPython's display system checks for macros and executes them as
1628 code instead of printing them when you type their name.
1629 code instead of printing them when you type their name.
1629
1630
1630 You can view a macro's contents by explicitly printing it with:
1631 You can view a macro's contents by explicitly printing it with:
1631
1632
1632 'print macro_name'.
1633 'print macro_name'.
1633
1634
1634 For one-off cases which DON'T contain magic function calls in them you
1635 For one-off cases which DON'T contain magic function calls in them you
1635 can obtain similar results by explicitly executing slices from your
1636 can obtain similar results by explicitly executing slices from your
1636 input history with:
1637 input history with:
1637
1638
1638 In [60]: exec In[44:48]+In[49]"""
1639 In [60]: exec In[44:48]+In[49]"""
1639
1640
1640 args = parameter_s.split()
1641 args = parameter_s.split()
1641 name,ranges = args[0], args[1:]
1642 name,ranges = args[0], args[1:]
1642 #print 'rng',ranges # dbg
1643 #print 'rng',ranges # dbg
1643 lines = self.extract_input_slices(ranges)
1644 lines = self.extract_input_slices(ranges)
1644 macro = Macro(lines)
1645 macro = Macro(lines)
1645 self.shell.user_ns.update({name:macro})
1646 self.shell.user_ns.update({name:macro})
1646 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1647 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1647 print 'Macro contents:'
1648 print 'Macro contents:'
1648 print macro,
1649 print macro,
1649
1650
1650 def magic_save(self,parameter_s = ''):
1651 def magic_save(self,parameter_s = ''):
1651 """Save a set of lines to a given filename.
1652 """Save a set of lines to a given filename.
1652
1653
1653 Usage:\\
1654 Usage:\\
1654 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1655 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1655
1656
1656 This function uses the same syntax as %macro for line extraction, but
1657 This function uses the same syntax as %macro for line extraction, but
1657 instead of creating a macro it saves the resulting string to the
1658 instead of creating a macro it saves the resulting string to the
1658 filename you specify.
1659 filename you specify.
1659
1660
1660 It adds a '.py' extension to the file if you don't do so yourself, and
1661 It adds a '.py' extension to the file if you don't do so yourself, and
1661 it asks for confirmation before overwriting existing files."""
1662 it asks for confirmation before overwriting existing files."""
1662
1663
1663 args = parameter_s.split()
1664 args = parameter_s.split()
1664 fname,ranges = args[0], args[1:]
1665 fname,ranges = args[0], args[1:]
1665 if not fname.endswith('.py'):
1666 if not fname.endswith('.py'):
1666 fname += '.py'
1667 fname += '.py'
1667 if os.path.isfile(fname):
1668 if os.path.isfile(fname):
1668 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1669 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1669 if ans.lower() not in ['y','yes']:
1670 if ans.lower() not in ['y','yes']:
1670 print 'Operation cancelled.'
1671 print 'Operation cancelled.'
1671 return
1672 return
1672 cmds = ''.join(self.extract_input_slices(ranges))
1673 cmds = ''.join(self.extract_input_slices(ranges))
1673 f = file(fname,'w')
1674 f = file(fname,'w')
1674 f.write(cmds)
1675 f.write(cmds)
1675 f.close()
1676 f.close()
1676 print 'The following commands were written to file `%s`:' % fname
1677 print 'The following commands were written to file `%s`:' % fname
1677 print cmds
1678 print cmds
1678
1679
1679 def _edit_macro(self,mname,macro):
1680 def _edit_macro(self,mname,macro):
1680 """open an editor with the macro data in a file"""
1681 """open an editor with the macro data in a file"""
1681 filename = self.shell.mktempfile(macro.value)
1682 filename = self.shell.mktempfile(macro.value)
1682 self.shell.hooks.editor(filename)
1683 self.shell.hooks.editor(filename)
1683
1684
1684 # and make a new macro object, to replace the old one
1685 # and make a new macro object, to replace the old one
1685 mfile = open(filename)
1686 mfile = open(filename)
1686 mvalue = mfile.read()
1687 mvalue = mfile.read()
1687 mfile.close()
1688 mfile.close()
1688 self.shell.user_ns[mname] = Macro(mvalue)
1689 self.shell.user_ns[mname] = Macro(mvalue)
1689
1690
1690 def magic_ed(self,parameter_s=''):
1691 def magic_ed(self,parameter_s=''):
1691 """Alias to %edit."""
1692 """Alias to %edit."""
1692 return self.magic_edit(parameter_s)
1693 return self.magic_edit(parameter_s)
1693
1694
1694 def magic_edit(self,parameter_s='',last_call=['','']):
1695 def magic_edit(self,parameter_s='',last_call=['','']):
1695 """Bring up an editor and execute the resulting code.
1696 """Bring up an editor and execute the resulting code.
1696
1697
1697 Usage:
1698 Usage:
1698 %edit [options] [args]
1699 %edit [options] [args]
1699
1700
1700 %edit runs IPython's editor hook. The default version of this hook is
1701 %edit runs IPython's editor hook. The default version of this hook is
1701 set to call the __IPYTHON__.rc.editor command. This is read from your
1702 set to call the __IPYTHON__.rc.editor command. This is read from your
1702 environment variable $EDITOR. If this isn't found, it will default to
1703 environment variable $EDITOR. If this isn't found, it will default to
1703 vi under Linux/Unix and to notepad under Windows. See the end of this
1704 vi under Linux/Unix and to notepad under Windows. See the end of this
1704 docstring for how to change the editor hook.
1705 docstring for how to change the editor hook.
1705
1706
1706 You can also set the value of this editor via the command line option
1707 You can also set the value of this editor via the command line option
1707 '-editor' or in your ipythonrc file. This is useful if you wish to use
1708 '-editor' or in your ipythonrc file. This is useful if you wish to use
1708 specifically for IPython an editor different from your typical default
1709 specifically for IPython an editor different from your typical default
1709 (and for Windows users who typically don't set environment variables).
1710 (and for Windows users who typically don't set environment variables).
1710
1711
1711 This command allows you to conveniently edit multi-line code right in
1712 This command allows you to conveniently edit multi-line code right in
1712 your IPython session.
1713 your IPython session.
1713
1714
1714 If called without arguments, %edit opens up an empty editor with a
1715 If called without arguments, %edit opens up an empty editor with a
1715 temporary file and will execute the contents of this file when you
1716 temporary file and will execute the contents of this file when you
1716 close it (don't forget to save it!).
1717 close it (don't forget to save it!).
1717
1718
1718
1719
1719 Options:
1720 Options:
1720
1721
1721 -p: this will call the editor with the same data as the previous time
1722 -p: this will call the editor with the same data as the previous time
1722 it was used, regardless of how long ago (in your current session) it
1723 it was used, regardless of how long ago (in your current session) it
1723 was.
1724 was.
1724
1725
1725 -x: do not execute the edited code immediately upon exit. This is
1726 -x: do not execute the edited code immediately upon exit. This is
1726 mainly useful if you are editing programs which need to be called with
1727 mainly useful if you are editing programs which need to be called with
1727 command line arguments, which you can then do using %run.
1728 command line arguments, which you can then do using %run.
1728
1729
1729
1730
1730 Arguments:
1731 Arguments:
1731
1732
1732 If arguments are given, the following possibilites exist:
1733 If arguments are given, the following possibilites exist:
1733
1734
1734 - The arguments are numbers or pairs of colon-separated numbers (like
1735 - The arguments are numbers or pairs of colon-separated numbers (like
1735 1 4:8 9). These are interpreted as lines of previous input to be
1736 1 4:8 9). These are interpreted as lines of previous input to be
1736 loaded into the editor. The syntax is the same of the %macro command.
1737 loaded into the editor. The syntax is the same of the %macro command.
1737
1738
1738 - If the argument doesn't start with a number, it is evaluated as a
1739 - If the argument doesn't start with a number, it is evaluated as a
1739 variable and its contents loaded into the editor. You can thus edit
1740 variable and its contents loaded into the editor. You can thus edit
1740 any string which contains python code (including the result of
1741 any string which contains python code (including the result of
1741 previous edits).
1742 previous edits).
1742
1743
1743 - If the argument is the name of an object (other than a string),
1744 - If the argument is the name of an object (other than a string),
1744 IPython will try to locate the file where it was defined and open the
1745 IPython will try to locate the file where it was defined and open the
1745 editor at the point where it is defined. You can use `%edit function`
1746 editor at the point where it is defined. You can use `%edit function`
1746 to load an editor exactly at the point where 'function' is defined,
1747 to load an editor exactly at the point where 'function' is defined,
1747 edit it and have the file be executed automatically.
1748 edit it and have the file be executed automatically.
1748
1749
1749 If the object is a macro (see %macro for details), this opens up your
1750 If the object is a macro (see %macro for details), this opens up your
1750 specified editor with a temporary file containing the macro's data.
1751 specified editor with a temporary file containing the macro's data.
1751 Upon exit, the macro is reloaded with the contents of the file.
1752 Upon exit, the macro is reloaded with the contents of the file.
1752
1753
1753 Note: opening at an exact line is only supported under Unix, and some
1754 Note: opening at an exact line is only supported under Unix, and some
1754 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1755 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1755 '+NUMBER' parameter necessary for this feature. Good editors like
1756 '+NUMBER' parameter necessary for this feature. Good editors like
1756 (X)Emacs, vi, jed, pico and joe all do.
1757 (X)Emacs, vi, jed, pico and joe all do.
1757
1758
1758 - If the argument is not found as a variable, IPython will look for a
1759 - If the argument is not found as a variable, IPython will look for a
1759 file with that name (adding .py if necessary) and load it into the
1760 file with that name (adding .py if necessary) and load it into the
1760 editor. It will execute its contents with execfile() when you exit,
1761 editor. It will execute its contents with execfile() when you exit,
1761 loading any code in the file into your interactive namespace.
1762 loading any code in the file into your interactive namespace.
1762
1763
1763 After executing your code, %edit will return as output the code you
1764 After executing your code, %edit will return as output the code you
1764 typed in the editor (except when it was an existing file). This way
1765 typed in the editor (except when it was an existing file). This way
1765 you can reload the code in further invocations of %edit as a variable,
1766 you can reload the code in further invocations of %edit as a variable,
1766 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1767 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1767 the output.
1768 the output.
1768
1769
1769 Note that %edit is also available through the alias %ed.
1770 Note that %edit is also available through the alias %ed.
1770
1771
1771 This is an example of creating a simple function inside the editor and
1772 This is an example of creating a simple function inside the editor and
1772 then modifying it. First, start up the editor:
1773 then modifying it. First, start up the editor:
1773
1774
1774 In [1]: ed\\
1775 In [1]: ed\\
1775 Editing... done. Executing edited code...\\
1776 Editing... done. Executing edited code...\\
1776 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1777 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1777
1778
1778 We can then call the function foo():
1779 We can then call the function foo():
1779
1780
1780 In [2]: foo()\\
1781 In [2]: foo()\\
1781 foo() was defined in an editing session
1782 foo() was defined in an editing session
1782
1783
1783 Now we edit foo. IPython automatically loads the editor with the
1784 Now we edit foo. IPython automatically loads the editor with the
1784 (temporary) file where foo() was previously defined:
1785 (temporary) file where foo() was previously defined:
1785
1786
1786 In [3]: ed foo\\
1787 In [3]: ed foo\\
1787 Editing... done. Executing edited code...
1788 Editing... done. Executing edited code...
1788
1789
1789 And if we call foo() again we get the modified version:
1790 And if we call foo() again we get the modified version:
1790
1791
1791 In [4]: foo()\\
1792 In [4]: foo()\\
1792 foo() has now been changed!
1793 foo() has now been changed!
1793
1794
1794 Here is an example of how to edit a code snippet successive
1795 Here is an example of how to edit a code snippet successive
1795 times. First we call the editor:
1796 times. First we call the editor:
1796
1797
1797 In [8]: ed\\
1798 In [8]: ed\\
1798 Editing... done. Executing edited code...\\
1799 Editing... done. Executing edited code...\\
1799 hello\\
1800 hello\\
1800 Out[8]: "print 'hello'\\n"
1801 Out[8]: "print 'hello'\\n"
1801
1802
1802 Now we call it again with the previous output (stored in _):
1803 Now we call it again with the previous output (stored in _):
1803
1804
1804 In [9]: ed _\\
1805 In [9]: ed _\\
1805 Editing... done. Executing edited code...\\
1806 Editing... done. Executing edited code...\\
1806 hello world\\
1807 hello world\\
1807 Out[9]: "print 'hello world'\\n"
1808 Out[9]: "print 'hello world'\\n"
1808
1809
1809 Now we call it with the output #8 (stored in _8, also as Out[8]):
1810 Now we call it with the output #8 (stored in _8, also as Out[8]):
1810
1811
1811 In [10]: ed _8\\
1812 In [10]: ed _8\\
1812 Editing... done. Executing edited code...\\
1813 Editing... done. Executing edited code...\\
1813 hello again\\
1814 hello again\\
1814 Out[10]: "print 'hello again'\\n"
1815 Out[10]: "print 'hello again'\\n"
1815
1816
1816
1817
1817 Changing the default editor hook:
1818 Changing the default editor hook:
1818
1819
1819 If you wish to write your own editor hook, you can put it in a
1820 If you wish to write your own editor hook, you can put it in a
1820 configuration file which you load at startup time. The default hook
1821 configuration file which you load at startup time. The default hook
1821 is defined in the IPython.hooks module, and you can use that as a
1822 is defined in the IPython.hooks module, and you can use that as a
1822 starting example for further modifications. That file also has
1823 starting example for further modifications. That file also has
1823 general instructions on how to set a new hook for use once you've
1824 general instructions on how to set a new hook for use once you've
1824 defined it."""
1825 defined it."""
1825
1826
1826 # FIXME: This function has become a convoluted mess. It needs a
1827 # FIXME: This function has become a convoluted mess. It needs a
1827 # ground-up rewrite with clean, simple logic.
1828 # ground-up rewrite with clean, simple logic.
1828
1829
1829 def make_filename(arg):
1830 def make_filename(arg):
1830 "Make a filename from the given args"
1831 "Make a filename from the given args"
1831 try:
1832 try:
1832 filename = get_py_filename(arg)
1833 filename = get_py_filename(arg)
1833 except IOError:
1834 except IOError:
1834 if args.endswith('.py'):
1835 if args.endswith('.py'):
1835 filename = arg
1836 filename = arg
1836 else:
1837 else:
1837 filename = None
1838 filename = None
1838 return filename
1839 return filename
1839
1840
1840 # custom exceptions
1841 # custom exceptions
1841 class DataIsObject(Exception): pass
1842 class DataIsObject(Exception): pass
1842
1843
1843 opts,args = self.parse_options(parameter_s,'px')
1844 opts,args = self.parse_options(parameter_s,'px')
1844
1845
1845 # Default line number value
1846 # Default line number value
1846 lineno = None
1847 lineno = None
1847 if opts.has_key('p'):
1848 if opts.has_key('p'):
1848 args = '_%s' % last_call[0]
1849 args = '_%s' % last_call[0]
1849 if not self.shell.user_ns.has_key(args):
1850 if not self.shell.user_ns.has_key(args):
1850 args = last_call[1]
1851 args = last_call[1]
1851
1852
1852 # use last_call to remember the state of the previous call, but don't
1853 # use last_call to remember the state of the previous call, but don't
1853 # let it be clobbered by successive '-p' calls.
1854 # let it be clobbered by successive '-p' calls.
1854 try:
1855 try:
1855 last_call[0] = self.shell.outputcache.prompt_count
1856 last_call[0] = self.shell.outputcache.prompt_count
1856 if not opts.has_key('p'):
1857 if not opts.has_key('p'):
1857 last_call[1] = parameter_s
1858 last_call[1] = parameter_s
1858 except:
1859 except:
1859 pass
1860 pass
1860
1861
1861 # by default this is done with temp files, except when the given
1862 # by default this is done with temp files, except when the given
1862 # arg is a filename
1863 # arg is a filename
1863 use_temp = 1
1864 use_temp = 1
1864
1865
1865 if re.match(r'\d',args):
1866 if re.match(r'\d',args):
1866 # Mode where user specifies ranges of lines, like in %macro.
1867 # Mode where user specifies ranges of lines, like in %macro.
1867 # This means that you can't edit files whose names begin with
1868 # This means that you can't edit files whose names begin with
1868 # numbers this way. Tough.
1869 # numbers this way. Tough.
1869 ranges = args.split()
1870 ranges = args.split()
1870 data = ''.join(self.extract_input_slices(ranges))
1871 data = ''.join(self.extract_input_slices(ranges))
1871 elif args.endswith('.py'):
1872 elif args.endswith('.py'):
1872 filename = make_filename(args)
1873 filename = make_filename(args)
1873 data = ''
1874 data = ''
1874 use_temp = 0
1875 use_temp = 0
1875 elif args:
1876 elif args:
1876 try:
1877 try:
1877 # Load the parameter given as a variable. If not a string,
1878 # Load the parameter given as a variable. If not a string,
1878 # process it as an object instead (below)
1879 # process it as an object instead (below)
1879
1880
1880 #print '*** args',args,'type',type(args) # dbg
1881 #print '*** args',args,'type',type(args) # dbg
1881 data = eval(args,self.shell.user_ns)
1882 data = eval(args,self.shell.user_ns)
1882 if not type(data) in StringTypes:
1883 if not type(data) in StringTypes:
1883 raise DataIsObject
1884 raise DataIsObject
1884
1885
1885 except (NameError,SyntaxError):
1886 except (NameError,SyntaxError):
1886 # given argument is not a variable, try as a filename
1887 # given argument is not a variable, try as a filename
1887 filename = make_filename(args)
1888 filename = make_filename(args)
1888 if filename is None:
1889 if filename is None:
1889 warn("Argument given (%s) can't be found as a variable "
1890 warn("Argument given (%s) can't be found as a variable "
1890 "or as a filename." % args)
1891 "or as a filename." % args)
1891 return
1892 return
1892
1893
1893 data = ''
1894 data = ''
1894 use_temp = 0
1895 use_temp = 0
1895 except DataIsObject:
1896 except DataIsObject:
1896
1897
1897 # macros have a special edit function
1898 # macros have a special edit function
1898 if isinstance(data,Macro):
1899 if isinstance(data,Macro):
1899 self._edit_macro(args,data)
1900 self._edit_macro(args,data)
1900 return
1901 return
1901
1902
1902 # For objects, try to edit the file where they are defined
1903 # For objects, try to edit the file where they are defined
1903 try:
1904 try:
1904 filename = inspect.getabsfile(data)
1905 filename = inspect.getabsfile(data)
1905 datafile = 1
1906 datafile = 1
1906 except TypeError:
1907 except TypeError:
1907 filename = make_filename(args)
1908 filename = make_filename(args)
1908 datafile = 1
1909 datafile = 1
1909 warn('Could not find file where `%s` is defined.\n'
1910 warn('Could not find file where `%s` is defined.\n'
1910 'Opening a file named `%s`' % (args,filename))
1911 'Opening a file named `%s`' % (args,filename))
1911 # Now, make sure we can actually read the source (if it was in
1912 # Now, make sure we can actually read the source (if it was in
1912 # a temp file it's gone by now).
1913 # a temp file it's gone by now).
1913 if datafile:
1914 if datafile:
1914 try:
1915 try:
1915 lineno = inspect.getsourcelines(data)[1]
1916 lineno = inspect.getsourcelines(data)[1]
1916 except IOError:
1917 except IOError:
1917 filename = make_filename(args)
1918 filename = make_filename(args)
1918 if filename is None:
1919 if filename is None:
1919 warn('The file `%s` where `%s` was defined cannot '
1920 warn('The file `%s` where `%s` was defined cannot '
1920 'be read.' % (filename,data))
1921 'be read.' % (filename,data))
1921 return
1922 return
1922 use_temp = 0
1923 use_temp = 0
1923 else:
1924 else:
1924 data = ''
1925 data = ''
1925
1926
1926 if use_temp:
1927 if use_temp:
1927 filename = self.shell.mktempfile(data)
1928 filename = self.shell.mktempfile(data)
1928 print 'IPython will make a temporary file named:',filename
1929 print 'IPython will make a temporary file named:',filename
1929
1930
1930 # do actual editing here
1931 # do actual editing here
1931 print 'Editing...',
1932 print 'Editing...',
1932 sys.stdout.flush()
1933 sys.stdout.flush()
1933 self.shell.hooks.editor(filename,lineno)
1934 self.shell.hooks.editor(filename,lineno)
1934 if opts.has_key('x'): # -x prevents actual execution
1935 if opts.has_key('x'): # -x prevents actual execution
1935 print
1936 print
1936 else:
1937 else:
1937 print 'done. Executing edited code...'
1938 print 'done. Executing edited code...'
1938 self.shell.safe_execfile(filename,self.shell.user_ns)
1939 self.shell.safe_execfile(filename,self.shell.user_ns)
1939 if use_temp:
1940 if use_temp:
1940 try:
1941 try:
1941 return open(filename).read()
1942 return open(filename).read()
1942 except IOError,msg:
1943 except IOError,msg:
1943 if msg.filename == filename:
1944 if msg.filename == filename:
1944 warn('File not found. Did you forget to save?')
1945 warn('File not found. Did you forget to save?')
1945 return
1946 return
1946 else:
1947 else:
1947 self.shell.showtraceback()
1948 self.shell.showtraceback()
1948
1949
1949 def magic_xmode(self,parameter_s = ''):
1950 def magic_xmode(self,parameter_s = ''):
1950 """Switch modes for the exception handlers.
1951 """Switch modes for the exception handlers.
1951
1952
1952 Valid modes: Plain, Context and Verbose.
1953 Valid modes: Plain, Context and Verbose.
1953
1954
1954 If called without arguments, acts as a toggle."""
1955 If called without arguments, acts as a toggle."""
1955
1956
1956 def xmode_switch_err(name):
1957 def xmode_switch_err(name):
1957 warn('Error changing %s exception modes.\n%s' %
1958 warn('Error changing %s exception modes.\n%s' %
1958 (name,sys.exc_info()[1]))
1959 (name,sys.exc_info()[1]))
1959
1960
1960 shell = self.shell
1961 shell = self.shell
1961 new_mode = parameter_s.strip().capitalize()
1962 new_mode = parameter_s.strip().capitalize()
1962 try:
1963 try:
1963 shell.InteractiveTB.set_mode(mode=new_mode)
1964 shell.InteractiveTB.set_mode(mode=new_mode)
1964 print 'Exception reporting mode:',shell.InteractiveTB.mode
1965 print 'Exception reporting mode:',shell.InteractiveTB.mode
1965 except:
1966 except:
1966 xmode_switch_err('user')
1967 xmode_switch_err('user')
1967
1968
1968 # threaded shells use a special handler in sys.excepthook
1969 # threaded shells use a special handler in sys.excepthook
1969 if shell.isthreaded:
1970 if shell.isthreaded:
1970 try:
1971 try:
1971 shell.sys_excepthook.set_mode(mode=new_mode)
1972 shell.sys_excepthook.set_mode(mode=new_mode)
1972 except:
1973 except:
1973 xmode_switch_err('threaded')
1974 xmode_switch_err('threaded')
1974
1975
1975 def magic_colors(self,parameter_s = ''):
1976 def magic_colors(self,parameter_s = ''):
1976 """Switch color scheme for prompts, info system and exception handlers.
1977 """Switch color scheme for prompts, info system and exception handlers.
1977
1978
1978 Currently implemented schemes: NoColor, Linux, LightBG.
1979 Currently implemented schemes: NoColor, Linux, LightBG.
1979
1980
1980 Color scheme names are not case-sensitive."""
1981 Color scheme names are not case-sensitive."""
1981
1982
1982 def color_switch_err(name):
1983 def color_switch_err(name):
1983 warn('Error changing %s color schemes.\n%s' %
1984 warn('Error changing %s color schemes.\n%s' %
1984 (name,sys.exc_info()[1]))
1985 (name,sys.exc_info()[1]))
1985
1986
1986
1987
1987 new_scheme = parameter_s.strip()
1988 new_scheme = parameter_s.strip()
1988 if not new_scheme:
1989 if not new_scheme:
1989 print 'You must specify a color scheme.'
1990 print 'You must specify a color scheme.'
1990 return
1991 return
1991 # Under Windows, check for Gary Bishop's readline, which is necessary
1992 # Under Windows, check for Gary Bishop's readline, which is necessary
1992 # for ANSI coloring
1993 # for ANSI coloring
1993 if os.name in ['nt','dos']:
1994 if os.name in ['nt','dos']:
1994 try:
1995 try:
1995 import readline
1996 import readline
1996 except ImportError:
1997 except ImportError:
1997 has_readline = 0
1998 has_readline = 0
1998 else:
1999 else:
1999 try:
2000 try:
2000 readline.GetOutputFile()
2001 readline.GetOutputFile()
2001 except AttributeError:
2002 except AttributeError:
2002 has_readline = 0
2003 has_readline = 0
2003 else:
2004 else:
2004 has_readline = 1
2005 has_readline = 1
2005 if not has_readline:
2006 if not has_readline:
2006 msg = """\
2007 msg = """\
2007 Proper color support under MS Windows requires Gary Bishop's readline library.
2008 Proper color support under MS Windows requires Gary Bishop's readline library.
2008 You can find it at:
2009 You can find it at:
2009 http://sourceforge.net/projects/uncpythontools
2010 http://sourceforge.net/projects/uncpythontools
2010 Gary's readline needs the ctypes module, from:
2011 Gary's readline needs the ctypes module, from:
2011 http://starship.python.net/crew/theller/ctypes
2012 http://starship.python.net/crew/theller/ctypes
2012
2013
2013 Defaulting color scheme to 'NoColor'"""
2014 Defaulting color scheme to 'NoColor'"""
2014 new_scheme = 'NoColor'
2015 new_scheme = 'NoColor'
2015 warn(msg)
2016 warn(msg)
2016 # local shortcut
2017 # local shortcut
2017 shell = self.shell
2018 shell = self.shell
2018
2019
2019 # Set prompt colors
2020 # Set prompt colors
2020 try:
2021 try:
2021 shell.outputcache.set_colors(new_scheme)
2022 shell.outputcache.set_colors(new_scheme)
2022 except:
2023 except:
2023 color_switch_err('prompt')
2024 color_switch_err('prompt')
2024 else:
2025 else:
2025 shell.rc.colors = \
2026 shell.rc.colors = \
2026 shell.outputcache.color_table.active_scheme_name
2027 shell.outputcache.color_table.active_scheme_name
2027 # Set exception colors
2028 # Set exception colors
2028 try:
2029 try:
2029 shell.InteractiveTB.set_colors(scheme = new_scheme)
2030 shell.InteractiveTB.set_colors(scheme = new_scheme)
2030 shell.SyntaxTB.set_colors(scheme = new_scheme)
2031 shell.SyntaxTB.set_colors(scheme = new_scheme)
2031 except:
2032 except:
2032 color_switch_err('exception')
2033 color_switch_err('exception')
2033
2034
2034 # threaded shells use a verbose traceback in sys.excepthook
2035 # threaded shells use a verbose traceback in sys.excepthook
2035 if shell.isthreaded:
2036 if shell.isthreaded:
2036 try:
2037 try:
2037 shell.sys_excepthook.set_colors(scheme=new_scheme)
2038 shell.sys_excepthook.set_colors(scheme=new_scheme)
2038 except:
2039 except:
2039 color_switch_err('system exception handler')
2040 color_switch_err('system exception handler')
2040
2041
2041 # Set info (for 'object?') colors
2042 # Set info (for 'object?') colors
2042 if shell.rc.color_info:
2043 if shell.rc.color_info:
2043 try:
2044 try:
2044 shell.inspector.set_active_scheme(new_scheme)
2045 shell.inspector.set_active_scheme(new_scheme)
2045 except:
2046 except:
2046 color_switch_err('object inspector')
2047 color_switch_err('object inspector')
2047 else:
2048 else:
2048 shell.inspector.set_active_scheme('NoColor')
2049 shell.inspector.set_active_scheme('NoColor')
2049
2050
2050 def magic_color_info(self,parameter_s = ''):
2051 def magic_color_info(self,parameter_s = ''):
2051 """Toggle color_info.
2052 """Toggle color_info.
2052
2053
2053 The color_info configuration parameter controls whether colors are
2054 The color_info configuration parameter controls whether colors are
2054 used for displaying object details (by things like %psource, %pfile or
2055 used for displaying object details (by things like %psource, %pfile or
2055 the '?' system). This function toggles this value with each call.
2056 the '?' system). This function toggles this value with each call.
2056
2057
2057 Note that unless you have a fairly recent pager (less works better
2058 Note that unless you have a fairly recent pager (less works better
2058 than more) in your system, using colored object information displays
2059 than more) in your system, using colored object information displays
2059 will not work properly. Test it and see."""
2060 will not work properly. Test it and see."""
2060
2061
2061 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2062 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2062 self.magic_colors(self.shell.rc.colors)
2063 self.magic_colors(self.shell.rc.colors)
2063 print 'Object introspection functions have now coloring:',
2064 print 'Object introspection functions have now coloring:',
2064 print ['OFF','ON'][self.shell.rc.color_info]
2065 print ['OFF','ON'][self.shell.rc.color_info]
2065
2066
2066 def magic_Pprint(self, parameter_s=''):
2067 def magic_Pprint(self, parameter_s=''):
2067 """Toggle pretty printing on/off."""
2068 """Toggle pretty printing on/off."""
2068
2069
2069 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2070 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2070 print 'Pretty printing has been turned', \
2071 print 'Pretty printing has been turned', \
2071 ['OFF','ON'][self.shell.outputcache.Pprint]
2072 ['OFF','ON'][self.shell.outputcache.Pprint]
2072
2073
2073 def magic_exit(self, parameter_s=''):
2074 def magic_exit(self, parameter_s=''):
2074 """Exit IPython, confirming if configured to do so.
2075 """Exit IPython, confirming if configured to do so.
2075
2076
2076 You can configure whether IPython asks for confirmation upon exit by
2077 You can configure whether IPython asks for confirmation upon exit by
2077 setting the confirm_exit flag in the ipythonrc file."""
2078 setting the confirm_exit flag in the ipythonrc file."""
2078
2079
2079 self.shell.exit()
2080 self.shell.exit()
2080
2081
2081 def magic_quit(self, parameter_s=''):
2082 def magic_quit(self, parameter_s=''):
2082 """Exit IPython, confirming if configured to do so (like %exit)"""
2083 """Exit IPython, confirming if configured to do so (like %exit)"""
2083
2084
2084 self.shell.exit()
2085 self.shell.exit()
2085
2086
2086 def magic_Exit(self, parameter_s=''):
2087 def magic_Exit(self, parameter_s=''):
2087 """Exit IPython without confirmation."""
2088 """Exit IPython without confirmation."""
2088
2089
2089 self.shell.exit_now = True
2090 self.shell.exit_now = True
2090
2091
2091 def magic_Quit(self, parameter_s=''):
2092 def magic_Quit(self, parameter_s=''):
2092 """Exit IPython without confirmation (like %Exit)."""
2093 """Exit IPython without confirmation (like %Exit)."""
2093
2094
2094 self.shell.exit_now = True
2095 self.shell.exit_now = True
2095
2096
2096 #......................................................................
2097 #......................................................................
2097 # Functions to implement unix shell-type things
2098 # Functions to implement unix shell-type things
2098
2099
2099 def magic_alias(self, parameter_s = ''):
2100 def magic_alias(self, parameter_s = ''):
2100 """Define an alias for a system command.
2101 """Define an alias for a system command.
2101
2102
2102 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2103 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2103
2104
2104 Then, typing 'alias_name params' will execute the system command 'cmd
2105 Then, typing 'alias_name params' will execute the system command 'cmd
2105 params' (from your underlying operating system).
2106 params' (from your underlying operating system).
2106
2107
2107 Aliases have lower precedence than magic functions and Python normal
2108 Aliases have lower precedence than magic functions and Python normal
2108 variables, so if 'foo' is both a Python variable and an alias, the
2109 variables, so if 'foo' is both a Python variable and an alias, the
2109 alias can not be executed until 'del foo' removes the Python variable.
2110 alias can not be executed until 'del foo' removes the Python variable.
2110
2111
2111 You can use the %l specifier in an alias definition to represent the
2112 You can use the %l specifier in an alias definition to represent the
2112 whole line when the alias is called. For example:
2113 whole line when the alias is called. For example:
2113
2114
2114 In [2]: alias all echo "Input in brackets: <%l>"\\
2115 In [2]: alias all echo "Input in brackets: <%l>"\\
2115 In [3]: all hello world\\
2116 In [3]: all hello world\\
2116 Input in brackets: <hello world>
2117 Input in brackets: <hello world>
2117
2118
2118 You can also define aliases with parameters using %s specifiers (one
2119 You can also define aliases with parameters using %s specifiers (one
2119 per parameter):
2120 per parameter):
2120
2121
2121 In [1]: alias parts echo first %s second %s\\
2122 In [1]: alias parts echo first %s second %s\\
2122 In [2]: %parts A B\\
2123 In [2]: %parts A B\\
2123 first A second B\\
2124 first A second B\\
2124 In [3]: %parts A\\
2125 In [3]: %parts A\\
2125 Incorrect number of arguments: 2 expected.\\
2126 Incorrect number of arguments: 2 expected.\\
2126 parts is an alias to: 'echo first %s second %s'
2127 parts is an alias to: 'echo first %s second %s'
2127
2128
2128 Note that %l and %s are mutually exclusive. You can only use one or
2129 Note that %l and %s are mutually exclusive. You can only use one or
2129 the other in your aliases.
2130 the other in your aliases.
2130
2131
2131 Aliases expand Python variables just like system calls using ! or !!
2132 Aliases expand Python variables just like system calls using ! or !!
2132 do: all expressions prefixed with '$' get expanded. For details of
2133 do: all expressions prefixed with '$' get expanded. For details of
2133 the semantic rules, see PEP-215:
2134 the semantic rules, see PEP-215:
2134 http://www.python.org/peps/pep-0215.html. This is the library used by
2135 http://www.python.org/peps/pep-0215.html. This is the library used by
2135 IPython for variable expansion. If you want to access a true shell
2136 IPython for variable expansion. If you want to access a true shell
2136 variable, an extra $ is necessary to prevent its expansion by IPython:
2137 variable, an extra $ is necessary to prevent its expansion by IPython:
2137
2138
2138 In [6]: alias show echo\\
2139 In [6]: alias show echo\\
2139 In [7]: PATH='A Python string'\\
2140 In [7]: PATH='A Python string'\\
2140 In [8]: show $PATH\\
2141 In [8]: show $PATH\\
2141 A Python string\\
2142 A Python string\\
2142 In [9]: show $$PATH\\
2143 In [9]: show $$PATH\\
2143 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2144 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2144
2145
2145 You can use the alias facility to acess all of $PATH. See the %rehash
2146 You can use the alias facility to acess all of $PATH. See the %rehash
2146 and %rehashx functions, which automatically create aliases for the
2147 and %rehashx functions, which automatically create aliases for the
2147 contents of your $PATH.
2148 contents of your $PATH.
2148
2149
2149 If called with no parameters, %alias prints the current alias table."""
2150 If called with no parameters, %alias prints the current alias table."""
2150
2151
2151 par = parameter_s.strip()
2152 par = parameter_s.strip()
2152 if not par:
2153 if not par:
2153 if self.shell.rc.automagic:
2154 if self.shell.rc.automagic:
2154 prechar = ''
2155 prechar = ''
2155 else:
2156 else:
2156 prechar = self.shell.ESC_MAGIC
2157 prechar = self.shell.ESC_MAGIC
2157 print 'Alias\t\tSystem Command\n'+'-'*30
2158 print 'Alias\t\tSystem Command\n'+'-'*30
2158 atab = self.shell.alias_table
2159 atab = self.shell.alias_table
2159 aliases = atab.keys()
2160 aliases = atab.keys()
2160 aliases.sort()
2161 aliases.sort()
2161 for alias in aliases:
2162 for alias in aliases:
2162 print prechar+alias+'\t\t'+atab[alias][1]
2163 print prechar+alias+'\t\t'+atab[alias][1]
2163 print '-'*30+'\nTotal number of aliases:',len(aliases)
2164 print '-'*30+'\nTotal number of aliases:',len(aliases)
2164 return
2165 return
2165 try:
2166 try:
2166 alias,cmd = par.split(None,1)
2167 alias,cmd = par.split(None,1)
2167 except:
2168 except:
2168 print OInspect.getdoc(self.magic_alias)
2169 print OInspect.getdoc(self.magic_alias)
2169 else:
2170 else:
2170 nargs = cmd.count('%s')
2171 nargs = cmd.count('%s')
2171 if nargs>0 and cmd.find('%l')>=0:
2172 if nargs>0 and cmd.find('%l')>=0:
2172 error('The %s and %l specifiers are mutually exclusive '
2173 error('The %s and %l specifiers are mutually exclusive '
2173 'in alias definitions.')
2174 'in alias definitions.')
2174 else: # all looks OK
2175 else: # all looks OK
2175 self.shell.alias_table[alias] = (nargs,cmd)
2176 self.shell.alias_table[alias] = (nargs,cmd)
2176 self.shell.alias_table_validate(verbose=1)
2177 self.shell.alias_table_validate(verbose=1)
2177 # end magic_alias
2178 # end magic_alias
2178
2179
2179 def magic_unalias(self, parameter_s = ''):
2180 def magic_unalias(self, parameter_s = ''):
2180 """Remove an alias"""
2181 """Remove an alias"""
2181
2182
2182 aname = parameter_s.strip()
2183 aname = parameter_s.strip()
2183 if aname in self.shell.alias_table:
2184 if aname in self.shell.alias_table:
2184 del self.shell.alias_table[aname]
2185 del self.shell.alias_table[aname]
2185
2186
2186 def magic_rehash(self, parameter_s = ''):
2187 def magic_rehash(self, parameter_s = ''):
2187 """Update the alias table with all entries in $PATH.
2188 """Update the alias table with all entries in $PATH.
2188
2189
2189 This version does no checks on execute permissions or whether the
2190 This version does no checks on execute permissions or whether the
2190 contents of $PATH are truly files (instead of directories or something
2191 contents of $PATH are truly files (instead of directories or something
2191 else). For such a safer (but slower) version, use %rehashx."""
2192 else). For such a safer (but slower) version, use %rehashx."""
2192
2193
2193 # This function (and rehashx) manipulate the alias_table directly
2194 # This function (and rehashx) manipulate the alias_table directly
2194 # rather than calling magic_alias, for speed reasons. A rehash on a
2195 # rather than calling magic_alias, for speed reasons. A rehash on a
2195 # typical Linux box involves several thousand entries, so efficiency
2196 # typical Linux box involves several thousand entries, so efficiency
2196 # here is a top concern.
2197 # here is a top concern.
2197
2198
2198 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2199 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2199 alias_table = self.shell.alias_table
2200 alias_table = self.shell.alias_table
2200 for pdir in path:
2201 for pdir in path:
2201 for ff in os.listdir(pdir):
2202 for ff in os.listdir(pdir):
2202 # each entry in the alias table must be (N,name), where
2203 # each entry in the alias table must be (N,name), where
2203 # N is the number of positional arguments of the alias.
2204 # N is the number of positional arguments of the alias.
2204 alias_table[ff] = (0,ff)
2205 alias_table[ff] = (0,ff)
2205 # Make sure the alias table doesn't contain keywords or builtins
2206 # Make sure the alias table doesn't contain keywords or builtins
2206 self.shell.alias_table_validate()
2207 self.shell.alias_table_validate()
2207 # Call again init_auto_alias() so we get 'rm -i' and other modified
2208 # Call again init_auto_alias() so we get 'rm -i' and other modified
2208 # aliases since %rehash will probably clobber them
2209 # aliases since %rehash will probably clobber them
2209 self.shell.init_auto_alias()
2210 self.shell.init_auto_alias()
2210
2211
2211 def magic_rehashx(self, parameter_s = ''):
2212 def magic_rehashx(self, parameter_s = ''):
2212 """Update the alias table with all executable files in $PATH.
2213 """Update the alias table with all executable files in $PATH.
2213
2214
2214 This version explicitly checks that every entry in $PATH is a file
2215 This version explicitly checks that every entry in $PATH is a file
2215 with execute access (os.X_OK), so it is much slower than %rehash.
2216 with execute access (os.X_OK), so it is much slower than %rehash.
2216
2217
2217 Under Windows, it checks executability as a match agains a
2218 Under Windows, it checks executability as a match agains a
2218 '|'-separated string of extensions, stored in the IPython config
2219 '|'-separated string of extensions, stored in the IPython config
2219 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2220 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2220
2221
2221 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2222 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2222 alias_table = self.shell.alias_table
2223 alias_table = self.shell.alias_table
2223
2224
2224 if os.name == 'posix':
2225 if os.name == 'posix':
2225 isexec = lambda fname:os.path.isfile(fname) and \
2226 isexec = lambda fname:os.path.isfile(fname) and \
2226 os.access(fname,os.X_OK)
2227 os.access(fname,os.X_OK)
2227 else:
2228 else:
2228
2229
2229 try:
2230 try:
2230 winext = os.environ['pathext'].replace(';','|').replace('.','')
2231 winext = os.environ['pathext'].replace(';','|').replace('.','')
2231 except KeyError:
2232 except KeyError:
2232 winext = 'exe|com|bat'
2233 winext = 'exe|com|bat'
2233
2234
2234 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2235 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2235 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2236 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2236 savedir = os.getcwd()
2237 savedir = os.getcwd()
2237 try:
2238 try:
2238 # write the whole loop for posix/Windows so we don't have an if in
2239 # write the whole loop for posix/Windows so we don't have an if in
2239 # the innermost part
2240 # the innermost part
2240 if os.name == 'posix':
2241 if os.name == 'posix':
2241 for pdir in path:
2242 for pdir in path:
2242 os.chdir(pdir)
2243 os.chdir(pdir)
2243 for ff in os.listdir(pdir):
2244 for ff in os.listdir(pdir):
2244 if isexec(ff):
2245 if isexec(ff):
2245 # each entry in the alias table must be (N,name),
2246 # each entry in the alias table must be (N,name),
2246 # where N is the number of positional arguments of the
2247 # where N is the number of positional arguments of the
2247 # alias.
2248 # alias.
2248 alias_table[ff] = (0,ff)
2249 alias_table[ff] = (0,ff)
2249 else:
2250 else:
2250 for pdir in path:
2251 for pdir in path:
2251 os.chdir(pdir)
2252 os.chdir(pdir)
2252 for ff in os.listdir(pdir):
2253 for ff in os.listdir(pdir):
2253 if isexec(ff):
2254 if isexec(ff):
2254 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2255 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2255 # Make sure the alias table doesn't contain keywords or builtins
2256 # Make sure the alias table doesn't contain keywords or builtins
2256 self.shell.alias_table_validate()
2257 self.shell.alias_table_validate()
2257 # Call again init_auto_alias() so we get 'rm -i' and other
2258 # Call again init_auto_alias() so we get 'rm -i' and other
2258 # modified aliases since %rehashx will probably clobber them
2259 # modified aliases since %rehashx will probably clobber them
2259 self.shell.init_auto_alias()
2260 self.shell.init_auto_alias()
2260 finally:
2261 finally:
2261 os.chdir(savedir)
2262 os.chdir(savedir)
2262
2263
2263 def magic_pwd(self, parameter_s = ''):
2264 def magic_pwd(self, parameter_s = ''):
2264 """Return the current working directory path."""
2265 """Return the current working directory path."""
2265 return os.getcwd()
2266 return os.getcwd()
2266
2267
2267 def magic_cd(self, parameter_s=''):
2268 def magic_cd(self, parameter_s=''):
2268 """Change the current working directory.
2269 """Change the current working directory.
2269
2270
2270 This command automatically maintains an internal list of directories
2271 This command automatically maintains an internal list of directories
2271 you visit during your IPython session, in the variable _dh. The
2272 you visit during your IPython session, in the variable _dh. The
2272 command %dhist shows this history nicely formatted.
2273 command %dhist shows this history nicely formatted.
2273
2274
2274 Usage:
2275 Usage:
2275
2276
2276 cd 'dir': changes to directory 'dir'.
2277 cd 'dir': changes to directory 'dir'.
2277
2278
2278 cd -: changes to the last visited directory.
2279 cd -: changes to the last visited directory.
2279
2280
2280 cd -<n>: changes to the n-th directory in the directory history.
2281 cd -<n>: changes to the n-th directory in the directory history.
2281
2282
2282 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2283 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2283 (note: cd <bookmark_name> is enough if there is no
2284 (note: cd <bookmark_name> is enough if there is no
2284 directory <bookmark_name>, but a bookmark with the name exists.)
2285 directory <bookmark_name>, but a bookmark with the name exists.)
2285
2286
2286 Options:
2287 Options:
2287
2288
2288 -q: quiet. Do not print the working directory after the cd command is
2289 -q: quiet. Do not print the working directory after the cd command is
2289 executed. By default IPython's cd command does print this directory,
2290 executed. By default IPython's cd command does print this directory,
2290 since the default prompts do not display path information.
2291 since the default prompts do not display path information.
2291
2292
2292 Note that !cd doesn't work for this purpose because the shell where
2293 Note that !cd doesn't work for this purpose because the shell where
2293 !command runs is immediately discarded after executing 'command'."""
2294 !command runs is immediately discarded after executing 'command'."""
2294
2295
2295 parameter_s = parameter_s.strip()
2296 parameter_s = parameter_s.strip()
2296 bkms = self.shell.persist.get("bookmarks",{})
2297 bkms = self.shell.persist.get("bookmarks",{})
2297
2298
2298 numcd = re.match(r'(-)(\d+)$',parameter_s)
2299 numcd = re.match(r'(-)(\d+)$',parameter_s)
2299 # jump in directory history by number
2300 # jump in directory history by number
2300 if numcd:
2301 if numcd:
2301 nn = int(numcd.group(2))
2302 nn = int(numcd.group(2))
2302 try:
2303 try:
2303 ps = self.shell.user_ns['_dh'][nn]
2304 ps = self.shell.user_ns['_dh'][nn]
2304 except IndexError:
2305 except IndexError:
2305 print 'The requested directory does not exist in history.'
2306 print 'The requested directory does not exist in history.'
2306 return
2307 return
2307 else:
2308 else:
2308 opts = {}
2309 opts = {}
2309 else:
2310 else:
2310 #turn all non-space-escaping backslashes to slashes,
2311 #turn all non-space-escaping backslashes to slashes,
2311 # for c:\windows\directory\names\
2312 # for c:\windows\directory\names\
2312 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2313 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2313 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2314 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2314 # jump to previous
2315 # jump to previous
2315 if ps == '-':
2316 if ps == '-':
2316 try:
2317 try:
2317 ps = self.shell.user_ns['_dh'][-2]
2318 ps = self.shell.user_ns['_dh'][-2]
2318 except IndexError:
2319 except IndexError:
2319 print 'No previous directory to change to.'
2320 print 'No previous directory to change to.'
2320 return
2321 return
2321 # jump to bookmark
2322 # jump to bookmark
2322 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2323 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2323 if bkms.has_key(ps):
2324 if bkms.has_key(ps):
2324 target = bkms[ps]
2325 target = bkms[ps]
2325 print '(bookmark:%s) -> %s' % (ps,target)
2326 print '(bookmark:%s) -> %s' % (ps,target)
2326 ps = target
2327 ps = target
2327 else:
2328 else:
2328 if bkms:
2329 if bkms:
2329 error("Bookmark '%s' not found. "
2330 error("Bookmark '%s' not found. "
2330 "Use '%%bookmark -l' to see your bookmarks." % ps)
2331 "Use '%%bookmark -l' to see your bookmarks." % ps)
2331 else:
2332 else:
2332 print "Bookmarks not set - use %bookmark <bookmarkname>"
2333 print "Bookmarks not set - use %bookmark <bookmarkname>"
2333 return
2334 return
2334
2335
2335 # at this point ps should point to the target dir
2336 # at this point ps should point to the target dir
2336 if ps:
2337 if ps:
2337 try:
2338 try:
2338 os.chdir(os.path.expanduser(ps))
2339 os.chdir(os.path.expanduser(ps))
2339 ttitle = ("IPy:" + (
2340 ttitle = ("IPy:" + (
2340 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2341 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2341 platutils.set_term_title(ttitle)
2342 platutils.set_term_title(ttitle)
2342 except OSError:
2343 except OSError:
2343 print sys.exc_info()[1]
2344 print sys.exc_info()[1]
2344 else:
2345 else:
2345 self.shell.user_ns['_dh'].append(os.getcwd())
2346 self.shell.user_ns['_dh'].append(os.getcwd())
2346 else:
2347 else:
2347 os.chdir(self.shell.home_dir)
2348 os.chdir(self.shell.home_dir)
2348 platutils.set_term_title("IPy:~")
2349 platutils.set_term_title("IPy:~")
2349 self.shell.user_ns['_dh'].append(os.getcwd())
2350 self.shell.user_ns['_dh'].append(os.getcwd())
2350 if not 'q' in opts:
2351 if not 'q' in opts:
2351 print self.shell.user_ns['_dh'][-1]
2352 print self.shell.user_ns['_dh'][-1]
2352
2353
2353 def magic_dhist(self, parameter_s=''):
2354 def magic_dhist(self, parameter_s=''):
2354 """Print your history of visited directories.
2355 """Print your history of visited directories.
2355
2356
2356 %dhist -> print full history\\
2357 %dhist -> print full history\\
2357 %dhist n -> print last n entries only\\
2358 %dhist n -> print last n entries only\\
2358 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2359 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2359
2360
2360 This history is automatically maintained by the %cd command, and
2361 This history is automatically maintained by the %cd command, and
2361 always available as the global list variable _dh. You can use %cd -<n>
2362 always available as the global list variable _dh. You can use %cd -<n>
2362 to go to directory number <n>."""
2363 to go to directory number <n>."""
2363
2364
2364 dh = self.shell.user_ns['_dh']
2365 dh = self.shell.user_ns['_dh']
2365 if parameter_s:
2366 if parameter_s:
2366 try:
2367 try:
2367 args = map(int,parameter_s.split())
2368 args = map(int,parameter_s.split())
2368 except:
2369 except:
2369 self.arg_err(Magic.magic_dhist)
2370 self.arg_err(Magic.magic_dhist)
2370 return
2371 return
2371 if len(args) == 1:
2372 if len(args) == 1:
2372 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2373 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2373 elif len(args) == 2:
2374 elif len(args) == 2:
2374 ini,fin = args
2375 ini,fin = args
2375 else:
2376 else:
2376 self.arg_err(Magic.magic_dhist)
2377 self.arg_err(Magic.magic_dhist)
2377 return
2378 return
2378 else:
2379 else:
2379 ini,fin = 0,len(dh)
2380 ini,fin = 0,len(dh)
2380 nlprint(dh,
2381 nlprint(dh,
2381 header = 'Directory history (kept in _dh)',
2382 header = 'Directory history (kept in _dh)',
2382 start=ini,stop=fin)
2383 start=ini,stop=fin)
2383
2384
2384 def magic_env(self, parameter_s=''):
2385 def magic_env(self, parameter_s=''):
2385 """List environment variables."""
2386 """List environment variables."""
2386
2387
2387 return os.environ.data
2388 return os.environ.data
2388
2389
2389 def magic_pushd(self, parameter_s=''):
2390 def magic_pushd(self, parameter_s=''):
2390 """Place the current dir on stack and change directory.
2391 """Place the current dir on stack and change directory.
2391
2392
2392 Usage:\\
2393 Usage:\\
2393 %pushd ['dirname']
2394 %pushd ['dirname']
2394
2395
2395 %pushd with no arguments does a %pushd to your home directory.
2396 %pushd with no arguments does a %pushd to your home directory.
2396 """
2397 """
2397 if parameter_s == '': parameter_s = '~'
2398 if parameter_s == '': parameter_s = '~'
2398 dir_s = self.shell.dir_stack
2399 dir_s = self.shell.dir_stack
2399 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2400 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2400 os.path.expanduser(self.shell.dir_stack[0]):
2401 os.path.expanduser(self.shell.dir_stack[0]):
2401 try:
2402 try:
2402 self.magic_cd(parameter_s)
2403 self.magic_cd(parameter_s)
2403 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2404 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2404 self.magic_dirs()
2405 self.magic_dirs()
2405 except:
2406 except:
2406 print 'Invalid directory'
2407 print 'Invalid directory'
2407 else:
2408 else:
2408 print 'You are already there!'
2409 print 'You are already there!'
2409
2410
2410 def magic_popd(self, parameter_s=''):
2411 def magic_popd(self, parameter_s=''):
2411 """Change to directory popped off the top of the stack.
2412 """Change to directory popped off the top of the stack.
2412 """
2413 """
2413 if len (self.shell.dir_stack) > 1:
2414 if len (self.shell.dir_stack) > 1:
2414 self.shell.dir_stack.pop(0)
2415 self.shell.dir_stack.pop(0)
2415 self.magic_cd(self.shell.dir_stack[0])
2416 self.magic_cd(self.shell.dir_stack[0])
2416 print self.shell.dir_stack[0]
2417 print self.shell.dir_stack[0]
2417 else:
2418 else:
2418 print "You can't remove the starting directory from the stack:",\
2419 print "You can't remove the starting directory from the stack:",\
2419 self.shell.dir_stack
2420 self.shell.dir_stack
2420
2421
2421 def magic_dirs(self, parameter_s=''):
2422 def magic_dirs(self, parameter_s=''):
2422 """Return the current directory stack."""
2423 """Return the current directory stack."""
2423
2424
2424 return self.shell.dir_stack[:]
2425 return self.shell.dir_stack[:]
2425
2426
2426 def magic_sc(self, parameter_s=''):
2427 def magic_sc(self, parameter_s=''):
2427 """Shell capture - execute a shell command and capture its output.
2428 """Shell capture - execute a shell command and capture its output.
2428
2429
2429 %sc [options] varname=command
2430 %sc [options] varname=command
2430
2431
2431 IPython will run the given command using commands.getoutput(), and
2432 IPython will run the given command using commands.getoutput(), and
2432 will then update the user's interactive namespace with a variable
2433 will then update the user's interactive namespace with a variable
2433 called varname, containing the value of the call. Your command can
2434 called varname, containing the value of the call. Your command can
2434 contain shell wildcards, pipes, etc.
2435 contain shell wildcards, pipes, etc.
2435
2436
2436 The '=' sign in the syntax is mandatory, and the variable name you
2437 The '=' sign in the syntax is mandatory, and the variable name you
2437 supply must follow Python's standard conventions for valid names.
2438 supply must follow Python's standard conventions for valid names.
2438
2439
2439 Options:
2440 Options:
2440
2441
2441 -l: list output. Split the output on newlines into a list before
2442 -l: list output. Split the output on newlines into a list before
2442 assigning it to the given variable. By default the output is stored
2443 assigning it to the given variable. By default the output is stored
2443 as a single string.
2444 as a single string.
2444
2445
2445 -v: verbose. Print the contents of the variable.
2446 -v: verbose. Print the contents of the variable.
2446
2447
2447 In most cases you should not need to split as a list, because the
2448 In most cases you should not need to split as a list, because the
2448 returned value is a special type of string which can automatically
2449 returned value is a special type of string which can automatically
2449 provide its contents either as a list (split on newlines) or as a
2450 provide its contents either as a list (split on newlines) or as a
2450 space-separated string. These are convenient, respectively, either
2451 space-separated string. These are convenient, respectively, either
2451 for sequential processing or to be passed to a shell command.
2452 for sequential processing or to be passed to a shell command.
2452
2453
2453 For example:
2454 For example:
2454
2455
2455 # Capture into variable a
2456 # Capture into variable a
2456 In [9]: sc a=ls *py
2457 In [9]: sc a=ls *py
2457
2458
2458 # a is a string with embedded newlines
2459 # a is a string with embedded newlines
2459 In [10]: a
2460 In [10]: a
2460 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2461 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2461
2462
2462 # which can be seen as a list:
2463 # which can be seen as a list:
2463 In [11]: a.l
2464 In [11]: a.l
2464 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2465 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2465
2466
2466 # or as a whitespace-separated string:
2467 # or as a whitespace-separated string:
2467 In [12]: a.s
2468 In [12]: a.s
2468 Out[12]: 'setup.py win32_manual_post_install.py'
2469 Out[12]: 'setup.py win32_manual_post_install.py'
2469
2470
2470 # a.s is useful to pass as a single command line:
2471 # a.s is useful to pass as a single command line:
2471 In [13]: !wc -l $a.s
2472 In [13]: !wc -l $a.s
2472 146 setup.py
2473 146 setup.py
2473 130 win32_manual_post_install.py
2474 130 win32_manual_post_install.py
2474 276 total
2475 276 total
2475
2476
2476 # while the list form is useful to loop over:
2477 # while the list form is useful to loop over:
2477 In [14]: for f in a.l:
2478 In [14]: for f in a.l:
2478 ....: !wc -l $f
2479 ....: !wc -l $f
2479 ....:
2480 ....:
2480 146 setup.py
2481 146 setup.py
2481 130 win32_manual_post_install.py
2482 130 win32_manual_post_install.py
2482
2483
2483 Similiarly, the lists returned by the -l option are also special, in
2484 Similiarly, the lists returned by the -l option are also special, in
2484 the sense that you can equally invoke the .s attribute on them to
2485 the sense that you can equally invoke the .s attribute on them to
2485 automatically get a whitespace-separated string from their contents:
2486 automatically get a whitespace-separated string from their contents:
2486
2487
2487 In [1]: sc -l b=ls *py
2488 In [1]: sc -l b=ls *py
2488
2489
2489 In [2]: b
2490 In [2]: b
2490 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2491 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2491
2492
2492 In [3]: b.s
2493 In [3]: b.s
2493 Out[3]: 'setup.py win32_manual_post_install.py'
2494 Out[3]: 'setup.py win32_manual_post_install.py'
2494
2495
2495 In summary, both the lists and strings used for ouptut capture have
2496 In summary, both the lists and strings used for ouptut capture have
2496 the following special attributes:
2497 the following special attributes:
2497
2498
2498 .l (or .list) : value as list.
2499 .l (or .list) : value as list.
2499 .n (or .nlstr): value as newline-separated string.
2500 .n (or .nlstr): value as newline-separated string.
2500 .s (or .spstr): value as space-separated string.
2501 .s (or .spstr): value as space-separated string.
2501 """
2502 """
2502
2503
2503 opts,args = self.parse_options(parameter_s,'lv')
2504 opts,args = self.parse_options(parameter_s,'lv')
2504 # Try to get a variable name and command to run
2505 # Try to get a variable name and command to run
2505 try:
2506 try:
2506 # the variable name must be obtained from the parse_options
2507 # the variable name must be obtained from the parse_options
2507 # output, which uses shlex.split to strip options out.
2508 # output, which uses shlex.split to strip options out.
2508 var,_ = args.split('=',1)
2509 var,_ = args.split('=',1)
2509 var = var.strip()
2510 var = var.strip()
2510 # But the the command has to be extracted from the original input
2511 # But the the command has to be extracted from the original input
2511 # parameter_s, not on what parse_options returns, to avoid the
2512 # parameter_s, not on what parse_options returns, to avoid the
2512 # quote stripping which shlex.split performs on it.
2513 # quote stripping which shlex.split performs on it.
2513 _,cmd = parameter_s.split('=',1)
2514 _,cmd = parameter_s.split('=',1)
2514 except ValueError:
2515 except ValueError:
2515 var,cmd = '',''
2516 var,cmd = '',''
2516 if not var:
2517 if not var:
2517 error('you must specify a variable to assign the command to.')
2518 error('you must specify a variable to assign the command to.')
2518 return
2519 return
2519 # If all looks ok, proceed
2520 # If all looks ok, proceed
2520 out,err = self.shell.getoutputerror(cmd)
2521 out,err = self.shell.getoutputerror(cmd)
2521 if err:
2522 if err:
2522 print >> Term.cerr,err
2523 print >> Term.cerr,err
2523 if opts.has_key('l'):
2524 if opts.has_key('l'):
2524 out = SList(out.split('\n'))
2525 out = SList(out.split('\n'))
2525 else:
2526 else:
2526 out = LSString(out)
2527 out = LSString(out)
2527 if opts.has_key('v'):
2528 if opts.has_key('v'):
2528 print '%s ==\n%s' % (var,pformat(out))
2529 print '%s ==\n%s' % (var,pformat(out))
2529 self.shell.user_ns.update({var:out})
2530 self.shell.user_ns.update({var:out})
2530
2531
2531 def magic_sx(self, parameter_s=''):
2532 def magic_sx(self, parameter_s=''):
2532 """Shell execute - run a shell command and capture its output.
2533 """Shell execute - run a shell command and capture its output.
2533
2534
2534 %sx command
2535 %sx command
2535
2536
2536 IPython will run the given command using commands.getoutput(), and
2537 IPython will run the given command using commands.getoutput(), and
2537 return the result formatted as a list (split on '\\n'). Since the
2538 return the result formatted as a list (split on '\\n'). Since the
2538 output is _returned_, it will be stored in ipython's regular output
2539 output is _returned_, it will be stored in ipython's regular output
2539 cache Out[N] and in the '_N' automatic variables.
2540 cache Out[N] and in the '_N' automatic variables.
2540
2541
2541 Notes:
2542 Notes:
2542
2543
2543 1) If an input line begins with '!!', then %sx is automatically
2544 1) If an input line begins with '!!', then %sx is automatically
2544 invoked. That is, while:
2545 invoked. That is, while:
2545 !ls
2546 !ls
2546 causes ipython to simply issue system('ls'), typing
2547 causes ipython to simply issue system('ls'), typing
2547 !!ls
2548 !!ls
2548 is a shorthand equivalent to:
2549 is a shorthand equivalent to:
2549 %sx ls
2550 %sx ls
2550
2551
2551 2) %sx differs from %sc in that %sx automatically splits into a list,
2552 2) %sx differs from %sc in that %sx automatically splits into a list,
2552 like '%sc -l'. The reason for this is to make it as easy as possible
2553 like '%sc -l'. The reason for this is to make it as easy as possible
2553 to process line-oriented shell output via further python commands.
2554 to process line-oriented shell output via further python commands.
2554 %sc is meant to provide much finer control, but requires more
2555 %sc is meant to provide much finer control, but requires more
2555 typing.
2556 typing.
2556
2557
2557 3) Just like %sc -l, this is a list with special attributes:
2558 3) Just like %sc -l, this is a list with special attributes:
2558
2559
2559 .l (or .list) : value as list.
2560 .l (or .list) : value as list.
2560 .n (or .nlstr): value as newline-separated string.
2561 .n (or .nlstr): value as newline-separated string.
2561 .s (or .spstr): value as whitespace-separated string.
2562 .s (or .spstr): value as whitespace-separated string.
2562
2563
2563 This is very useful when trying to use such lists as arguments to
2564 This is very useful when trying to use such lists as arguments to
2564 system commands."""
2565 system commands."""
2565
2566
2566 if parameter_s:
2567 if parameter_s:
2567 out,err = self.shell.getoutputerror(parameter_s)
2568 out,err = self.shell.getoutputerror(parameter_s)
2568 if err:
2569 if err:
2569 print >> Term.cerr,err
2570 print >> Term.cerr,err
2570 return SList(out.split('\n'))
2571 return SList(out.split('\n'))
2571
2572
2572 def magic_bg(self, parameter_s=''):
2573 def magic_bg(self, parameter_s=''):
2573 """Run a job in the background, in a separate thread.
2574 """Run a job in the background, in a separate thread.
2574
2575
2575 For example,
2576 For example,
2576
2577
2577 %bg myfunc(x,y,z=1)
2578 %bg myfunc(x,y,z=1)
2578
2579
2579 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2580 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2580 execution starts, a message will be printed indicating the job
2581 execution starts, a message will be printed indicating the job
2581 number. If your job number is 5, you can use
2582 number. If your job number is 5, you can use
2582
2583
2583 myvar = jobs.result(5) or myvar = jobs[5].result
2584 myvar = jobs.result(5) or myvar = jobs[5].result
2584
2585
2585 to assign this result to variable 'myvar'.
2586 to assign this result to variable 'myvar'.
2586
2587
2587 IPython has a job manager, accessible via the 'jobs' object. You can
2588 IPython has a job manager, accessible via the 'jobs' object. You can
2588 type jobs? to get more information about it, and use jobs.<TAB> to see
2589 type jobs? to get more information about it, and use jobs.<TAB> to see
2589 its attributes. All attributes not starting with an underscore are
2590 its attributes. All attributes not starting with an underscore are
2590 meant for public use.
2591 meant for public use.
2591
2592
2592 In particular, look at the jobs.new() method, which is used to create
2593 In particular, look at the jobs.new() method, which is used to create
2593 new jobs. This magic %bg function is just a convenience wrapper
2594 new jobs. This magic %bg function is just a convenience wrapper
2594 around jobs.new(), for expression-based jobs. If you want to create a
2595 around jobs.new(), for expression-based jobs. If you want to create a
2595 new job with an explicit function object and arguments, you must call
2596 new job with an explicit function object and arguments, you must call
2596 jobs.new() directly.
2597 jobs.new() directly.
2597
2598
2598 The jobs.new docstring also describes in detail several important
2599 The jobs.new docstring also describes in detail several important
2599 caveats associated with a thread-based model for background job
2600 caveats associated with a thread-based model for background job
2600 execution. Type jobs.new? for details.
2601 execution. Type jobs.new? for details.
2601
2602
2602 You can check the status of all jobs with jobs.status().
2603 You can check the status of all jobs with jobs.status().
2603
2604
2604 The jobs variable is set by IPython into the Python builtin namespace.
2605 The jobs variable is set by IPython into the Python builtin namespace.
2605 If you ever declare a variable named 'jobs', you will shadow this
2606 If you ever declare a variable named 'jobs', you will shadow this
2606 name. You can either delete your global jobs variable to regain
2607 name. You can either delete your global jobs variable to regain
2607 access to the job manager, or make a new name and assign it manually
2608 access to the job manager, or make a new name and assign it manually
2608 to the manager (stored in IPython's namespace). For example, to
2609 to the manager (stored in IPython's namespace). For example, to
2609 assign the job manager to the Jobs name, use:
2610 assign the job manager to the Jobs name, use:
2610
2611
2611 Jobs = __builtins__.jobs"""
2612 Jobs = __builtins__.jobs"""
2612
2613
2613 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2614 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2614
2615
2615 def magic_store(self, parameter_s=''):
2616 def magic_store(self, parameter_s=''):
2616 """Lightweight persistence for python variables.
2617 """Lightweight persistence for python variables.
2617
2618
2618 Example:
2619 Example:
2619
2620
2620 ville@badger[~]|1> A = ['hello',10,'world']\\
2621 ville@badger[~]|1> A = ['hello',10,'world']\\
2621 ville@badger[~]|2> %store A\\
2622 ville@badger[~]|2> %store A\\
2622 ville@badger[~]|3> Exit
2623 ville@badger[~]|3> Exit
2623
2624
2624 (IPython session is closed and started again...)
2625 (IPython session is closed and started again...)
2625
2626
2626 ville@badger:~$ ipython -p pysh\\
2627 ville@badger:~$ ipython -p pysh\\
2627 ville@badger[~]|1> print A
2628 ville@badger[~]|1> print A
2628
2629
2629 ['hello', 10, 'world']
2630 ['hello', 10, 'world']
2630
2631
2631 Usage:
2632 Usage:
2632
2633
2633 %store - Show list of all variables and their current values\\
2634 %store - Show list of all variables and their current values\\
2634 %store <var> - Store the *current* value of the variable to disk\\
2635 %store <var> - Store the *current* value of the variable to disk\\
2635 %store -d <var> - Remove the variable and its value from storage\\
2636 %store -d <var> - Remove the variable and its value from storage\\
2636 %store -r - Remove all variables from storage
2637 %store -r - Remove all variables from storage
2637
2638
2638 It should be noted that if you change the value of a variable, you
2639 It should be noted that if you change the value of a variable, you
2639 need to %store it again if you want to persist the new value.
2640 need to %store it again if you want to persist the new value.
2640
2641
2641 Note also that the variables will need to be pickleable; most basic
2642 Note also that the variables will need to be pickleable; most basic
2642 python types can be safely %stored.
2643 python types can be safely %stored.
2643 """
2644 """
2644
2645
2645 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2646 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2646 # delete
2647 # delete
2647 if opts.has_key('d'):
2648 if opts.has_key('d'):
2648 try:
2649 try:
2649 todel = args[0]
2650 todel = args[0]
2650 except IndexError:
2651 except IndexError:
2651 error('You must provide the variable to forget')
2652 error('You must provide the variable to forget')
2652 else:
2653 else:
2653 try:
2654 try:
2654 del self.shell.persist['S:' + todel]
2655 del self.shell.persist['S:' + todel]
2655 except:
2656 except:
2656 error("Can't delete variable '%s'" % todel)
2657 error("Can't delete variable '%s'" % todel)
2657 # reset
2658 # reset
2658 elif opts.has_key('r'):
2659 elif opts.has_key('r'):
2659 for k in self.shell.persist.keys():
2660 for k in self.shell.persist.keys():
2660 if k.startswith('S:'):
2661 if k.startswith('S:'):
2661 del self.shell.persist[k]
2662 del self.shell.persist[k]
2662
2663
2663 # run without arguments -> list variables & values
2664 # run without arguments -> list variables & values
2664 elif not args:
2665 elif not args:
2665 vars = [v[2:] for v in self.shell.persist.keys()
2666 vars = [v[2:] for v in self.shell.persist.keys()
2666 if v.startswith('S:')]
2667 if v.startswith('S:')]
2667 vars.sort()
2668 vars.sort()
2668 if vars:
2669 if vars:
2669 size = max(map(len,vars))
2670 size = max(map(len,vars))
2670 else:
2671 else:
2671 size = 0
2672 size = 0
2672
2673
2673 print 'Stored variables and their in-memory values:'
2674 print 'Stored variables and their in-memory values:'
2674 fmt = '%-'+str(size)+'s -> %s'
2675 fmt = '%-'+str(size)+'s -> %s'
2675 get = self.shell.user_ns.get
2676 get = self.shell.user_ns.get
2676 for var in vars:
2677 for var in vars:
2677 # print 30 first characters from every var
2678 # print 30 first characters from every var
2678 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2679 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2679
2680
2680 # default action - store the variable
2681 # default action - store the variable
2681 else:
2682 else:
2682 pickled = pickle.dumps(self.shell.user_ns[args[0] ])
2683 obj = self.shell.user_ns[args[0] ]
2684 if isinstance(inspect.getmodule(obj), FakeModule):
2685 print textwrap.dedent("""\
2686 Warning:%s is %s
2687 Proper storage of interactively declared classes (or instances
2688 of those classes) is not possible! Only instances
2689 of classes in real modules on file system can be %%store'd.
2690 """ % (args[0], obj) )
2691 return
2692 pickled = pickle.dumps(obj)
2683 self.shell.persist[ 'S:' + args[0] ] = pickled
2693 self.shell.persist[ 'S:' + args[0] ] = pickled
2684 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2694 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2685
2695
2686 def magic_bookmark(self, parameter_s=''):
2696 def magic_bookmark(self, parameter_s=''):
2687 """Manage IPython's bookmark system.
2697 """Manage IPython's bookmark system.
2688
2698
2689 %bookmark <name> - set bookmark to current dir
2699 %bookmark <name> - set bookmark to current dir
2690 %bookmark <name> <dir> - set bookmark to <dir>
2700 %bookmark <name> <dir> - set bookmark to <dir>
2691 %bookmark -l - list all bookmarks
2701 %bookmark -l - list all bookmarks
2692 %bookmark -d <name> - remove bookmark
2702 %bookmark -d <name> - remove bookmark
2693 %bookmark -r - remove all bookmarks
2703 %bookmark -r - remove all bookmarks
2694
2704
2695 You can later on access a bookmarked folder with:
2705 You can later on access a bookmarked folder with:
2696 %cd -b <name>
2706 %cd -b <name>
2697 or simply '%cd <name>' if there is no directory called <name> AND
2707 or simply '%cd <name>' if there is no directory called <name> AND
2698 there is such a bookmark defined.
2708 there is such a bookmark defined.
2699
2709
2700 Your bookmarks persist through IPython sessions, but they are
2710 Your bookmarks persist through IPython sessions, but they are
2701 associated with each profile."""
2711 associated with each profile."""
2702
2712
2703 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2713 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2704 if len(args) > 2:
2714 if len(args) > 2:
2705 error('You can only give at most two arguments')
2715 error('You can only give at most two arguments')
2706 return
2716 return
2707
2717
2708 bkms = self.shell.persist.get('bookmarks',{})
2718 bkms = self.shell.persist.get('bookmarks',{})
2709
2719
2710 if opts.has_key('d'):
2720 if opts.has_key('d'):
2711 try:
2721 try:
2712 todel = args[0]
2722 todel = args[0]
2713 except IndexError:
2723 except IndexError:
2714 error('You must provide a bookmark to delete')
2724 error('You must provide a bookmark to delete')
2715 else:
2725 else:
2716 try:
2726 try:
2717 del bkms[todel]
2727 del bkms[todel]
2718 except:
2728 except:
2719 error("Can't delete bookmark '%s'" % todel)
2729 error("Can't delete bookmark '%s'" % todel)
2720 elif opts.has_key('r'):
2730 elif opts.has_key('r'):
2721 bkms = {}
2731 bkms = {}
2722 elif opts.has_key('l'):
2732 elif opts.has_key('l'):
2723 bks = bkms.keys()
2733 bks = bkms.keys()
2724 bks.sort()
2734 bks.sort()
2725 if bks:
2735 if bks:
2726 size = max(map(len,bks))
2736 size = max(map(len,bks))
2727 else:
2737 else:
2728 size = 0
2738 size = 0
2729 fmt = '%-'+str(size)+'s -> %s'
2739 fmt = '%-'+str(size)+'s -> %s'
2730 print 'Current bookmarks:'
2740 print 'Current bookmarks:'
2731 for bk in bks:
2741 for bk in bks:
2732 print fmt % (bk,bkms[bk])
2742 print fmt % (bk,bkms[bk])
2733 else:
2743 else:
2734 if not args:
2744 if not args:
2735 error("You must specify the bookmark name")
2745 error("You must specify the bookmark name")
2736 elif len(args)==1:
2746 elif len(args)==1:
2737 bkms[args[0]] = os.getcwd()
2747 bkms[args[0]] = os.getcwd()
2738 elif len(args)==2:
2748 elif len(args)==2:
2739 bkms[args[0]] = args[1]
2749 bkms[args[0]] = args[1]
2740 self.shell.persist['bookmarks'] = bkms
2750 self.shell.persist['bookmarks'] = bkms
2741
2751
2742 def magic_pycat(self, parameter_s=''):
2752 def magic_pycat(self, parameter_s=''):
2743 """Show a syntax-highlighted file through a pager.
2753 """Show a syntax-highlighted file through a pager.
2744
2754
2745 This magic is similar to the cat utility, but it will assume the file
2755 This magic is similar to the cat utility, but it will assume the file
2746 to be Python source and will show it with syntax highlighting. """
2756 to be Python source and will show it with syntax highlighting. """
2747
2757
2748 filename = get_py_filename(parameter_s)
2758 filename = get_py_filename(parameter_s)
2749 page(self.shell.pycolorize(file_read(filename)),
2759 page(self.shell.pycolorize(file_read(filename)),
2750 screen_lines=self.shell.rc.screen_length)
2760 screen_lines=self.shell.rc.screen_length)
2751
2761
2752 # end Magic
2762 # end Magic
@@ -1,4971 +1,4974 b''
1 2006-01-20 Ville Vainio <vivainio@gmail.com>
1 2006-01-20 Ville Vainio <vivainio@gmail.com>
2
2
3 * Ipython/Extensions/rehash_dir.py: Created a usable example
3 * Ipython/Extensions/rehash_dir.py: Created a usable example
4 of how to extend ipython with new magics. Also added Extensions
4 of how to extend ipython with new magics. Also added Extensions
5 dir to pythonpath to make executing extensions easy.
5 dir to pythonpath to make executing extensions easy.
6
7 * %store now complains when trying to store interactively declared
8 classes / instances of those classes.
6
9
7 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
10 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
8
11
9 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
12 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
10 multiline code with autoindent on working. But I am really not
13 multiline code with autoindent on working. But I am really not
11 sure, so this needs more testing. Will commit a debug-enabled
14 sure, so this needs more testing. Will commit a debug-enabled
12 version for now, while I test it some more, so that Ville and
15 version for now, while I test it some more, so that Ville and
13 others may also catch any problems. Also made
16 others may also catch any problems. Also made
14 self.indent_current_str() a method, to ensure that there's no
17 self.indent_current_str() a method, to ensure that there's no
15 chance of the indent space count and the corresponding string
18 chance of the indent space count and the corresponding string
16 falling out of sync. All code needing the string should just call
19 falling out of sync. All code needing the string should just call
17 the method.
20 the method.
18
21
19 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
22 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
20
23
21 * IPython/Magic.py (magic_edit): fix check for when users don't
24 * IPython/Magic.py (magic_edit): fix check for when users don't
22 save their output files, the try/except was in the wrong section.
25 save their output files, the try/except was in the wrong section.
23
26
24 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
27 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
25
28
26 * IPython/Magic.py (magic_run): fix __file__ global missing from
29 * IPython/Magic.py (magic_run): fix __file__ global missing from
27 script's namespace when executed via %run. After a report by
30 script's namespace when executed via %run. After a report by
28 Vivian.
31 Vivian.
29
32
30 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
33 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
31 when using python 2.4. The parent constructor changed in 2.4, and
34 when using python 2.4. The parent constructor changed in 2.4, and
32 we need to track it directly (we can't call it, as it messes up
35 we need to track it directly (we can't call it, as it messes up
33 readline and tab-completion inside our pdb would stop working).
36 readline and tab-completion inside our pdb would stop working).
34 After a bug report by R. Bernstein <rocky-AT-panix.com>.
37 After a bug report by R. Bernstein <rocky-AT-panix.com>.
35
38
36 2006-01-16 Ville Vainio <vivainio@gmail.com>
39 2006-01-16 Ville Vainio <vivainio@gmail.com>
37
40
38 * Ipython/magic.py:Reverted back to old %edit functionality
41 * Ipython/magic.py:Reverted back to old %edit functionality
39 that returns file contents on exit.
42 that returns file contents on exit.
40
43
41 * IPython/path.py: Added Jason Orendorff's "path" module to
44 * IPython/path.py: Added Jason Orendorff's "path" module to
42 IPython tree, http://www.jorendorff.com/articles/python/path/.
45 IPython tree, http://www.jorendorff.com/articles/python/path/.
43 You can get path objects conveniently through %sc, and !!, e.g.:
46 You can get path objects conveniently through %sc, and !!, e.g.:
44 sc files=ls
47 sc files=ls
45 for p in files.paths: # or files.p
48 for p in files.paths: # or files.p
46 print p,p.mtime
49 print p,p.mtime
47
50
48 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
51 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
49 now work again without considering the exclusion regexp -
52 now work again without considering the exclusion regexp -
50 hence, things like ',foo my/path' turn to 'foo("my/path")'
53 hence, things like ',foo my/path' turn to 'foo("my/path")'
51 instead of syntax error.
54 instead of syntax error.
52
55
53
56
54 2006-01-14 Ville Vainio <vivainio@gmail.com>
57 2006-01-14 Ville Vainio <vivainio@gmail.com>
55
58
56 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
59 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
57 ipapi decorators for python 2.4 users, options() provides access to rc
60 ipapi decorators for python 2.4 users, options() provides access to rc
58 data.
61 data.
59
62
60 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
63 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
61 as path separators (even on Linux ;-). Space character after
64 as path separators (even on Linux ;-). Space character after
62 backslash (as yielded by tab completer) is still space;
65 backslash (as yielded by tab completer) is still space;
63 "%cd long\ name" works as expected.
66 "%cd long\ name" works as expected.
64
67
65 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
68 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
66 as "chain of command", with priority. API stays the same,
69 as "chain of command", with priority. API stays the same,
67 TryNext exception raised by a hook function signals that
70 TryNext exception raised by a hook function signals that
68 current hook failed and next hook should try handling it, as
71 current hook failed and next hook should try handling it, as
69 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
72 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
70 requested configurable display hook, which is now implemented.
73 requested configurable display hook, which is now implemented.
71
74
72 2006-01-13 Ville Vainio <vivainio@gmail.com>
75 2006-01-13 Ville Vainio <vivainio@gmail.com>
73
76
74 * IPython/platutils*.py: platform specific utility functions,
77 * IPython/platutils*.py: platform specific utility functions,
75 so far only set_term_title is implemented (change terminal
78 so far only set_term_title is implemented (change terminal
76 label in windowing systems). %cd now changes the title to
79 label in windowing systems). %cd now changes the title to
77 current dir.
80 current dir.
78
81
79 * IPython/Release.py: Added myself to "authors" list,
82 * IPython/Release.py: Added myself to "authors" list,
80 had to create new files.
83 had to create new files.
81
84
82 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
85 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
83 shell escape; not a known bug but had potential to be one in the
86 shell escape; not a known bug but had potential to be one in the
84 future.
87 future.
85
88
86 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
89 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
87 extension API for IPython! See the module for usage example. Fix
90 extension API for IPython! See the module for usage example. Fix
88 OInspect for docstring-less magic functions.
91 OInspect for docstring-less magic functions.
89
92
90
93
91 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
94 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
92
95
93 * IPython/iplib.py (raw_input): temporarily deactivate all
96 * IPython/iplib.py (raw_input): temporarily deactivate all
94 attempts at allowing pasting of code with autoindent on. It
97 attempts at allowing pasting of code with autoindent on. It
95 introduced bugs (reported by Prabhu) and I can't seem to find a
98 introduced bugs (reported by Prabhu) and I can't seem to find a
96 robust combination which works in all cases. Will have to revisit
99 robust combination which works in all cases. Will have to revisit
97 later.
100 later.
98
101
99 * IPython/genutils.py: remove isspace() function. We've dropped
102 * IPython/genutils.py: remove isspace() function. We've dropped
100 2.2 compatibility, so it's OK to use the string method.
103 2.2 compatibility, so it's OK to use the string method.
101
104
102 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
105 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
103
106
104 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
107 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
105 matching what NOT to autocall on, to include all python binary
108 matching what NOT to autocall on, to include all python binary
106 operators (including things like 'and', 'or', 'is' and 'in').
109 operators (including things like 'and', 'or', 'is' and 'in').
107 Prompted by a bug report on 'foo & bar', but I realized we had
110 Prompted by a bug report on 'foo & bar', but I realized we had
108 many more potential bug cases with other operators. The regexp is
111 many more potential bug cases with other operators. The regexp is
109 self.re_exclude_auto, it's fairly commented.
112 self.re_exclude_auto, it's fairly commented.
110
113
111 2006-01-12 Ville Vainio <vivainio@gmail.com>
114 2006-01-12 Ville Vainio <vivainio@gmail.com>
112
115
113 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
116 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
114 Prettified and hardened string/backslash quoting with ipsystem(),
117 Prettified and hardened string/backslash quoting with ipsystem(),
115 ipalias() and ipmagic(). Now even \ characters are passed to
118 ipalias() and ipmagic(). Now even \ characters are passed to
116 %magics, !shell escapes and aliases exactly as they are in the
119 %magics, !shell escapes and aliases exactly as they are in the
117 ipython command line. Should improve backslash experience,
120 ipython command line. Should improve backslash experience,
118 particularly in Windows (path delimiter for some commands that
121 particularly in Windows (path delimiter for some commands that
119 won't understand '/'), but Unix benefits as well (regexps). %cd
122 won't understand '/'), but Unix benefits as well (regexps). %cd
120 magic still doesn't support backslash path delimiters, though. Also
123 magic still doesn't support backslash path delimiters, though. Also
121 deleted all pretense of supporting multiline command strings in
124 deleted all pretense of supporting multiline command strings in
122 !system or %magic commands. Thanks to Jerry McRae for suggestions.
125 !system or %magic commands. Thanks to Jerry McRae for suggestions.
123
126
124 * doc/build_doc_instructions.txt added. Documentation on how to
127 * doc/build_doc_instructions.txt added. Documentation on how to
125 use doc/update_manual.py, added yesterday. Both files contributed
128 use doc/update_manual.py, added yesterday. Both files contributed
126 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
129 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
127 doc/*.sh for deprecation at a later date.
130 doc/*.sh for deprecation at a later date.
128
131
129 * /ipython.py Added ipython.py to root directory for
132 * /ipython.py Added ipython.py to root directory for
130 zero-installation (tar xzvf ipython.tgz; cd ipython; python
133 zero-installation (tar xzvf ipython.tgz; cd ipython; python
131 ipython.py) and development convenience (no need to kee doing
134 ipython.py) and development convenience (no need to kee doing
132 "setup.py install" between changes).
135 "setup.py install" between changes).
133
136
134 * Made ! and !! shell escapes work (again) in multiline expressions:
137 * Made ! and !! shell escapes work (again) in multiline expressions:
135 if 1:
138 if 1:
136 !ls
139 !ls
137 !!ls
140 !!ls
138
141
139 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
142 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
140
143
141 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
144 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
142 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
145 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
143 module in case-insensitive installation. Was causing crashes
146 module in case-insensitive installation. Was causing crashes
144 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
147 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
145
148
146 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
149 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
147 <marienz-AT-gentoo.org>, closes
150 <marienz-AT-gentoo.org>, closes
148 http://www.scipy.net/roundup/ipython/issue51.
151 http://www.scipy.net/roundup/ipython/issue51.
149
152
150 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
153 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
151
154
152 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
155 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
153 problem of excessive CPU usage under *nix and keyboard lag under
156 problem of excessive CPU usage under *nix and keyboard lag under
154 win32.
157 win32.
155
158
156 2006-01-10 *** Released version 0.7.0
159 2006-01-10 *** Released version 0.7.0
157
160
158 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
161 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
159
162
160 * IPython/Release.py (revision): tag version number to 0.7.0,
163 * IPython/Release.py (revision): tag version number to 0.7.0,
161 ready for release.
164 ready for release.
162
165
163 * IPython/Magic.py (magic_edit): Add print statement to %edit so
166 * IPython/Magic.py (magic_edit): Add print statement to %edit so
164 it informs the user of the name of the temp. file used. This can
167 it informs the user of the name of the temp. file used. This can
165 help if you decide later to reuse that same file, so you know
168 help if you decide later to reuse that same file, so you know
166 where to copy the info from.
169 where to copy the info from.
167
170
168 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
171 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
169
172
170 * setup_bdist_egg.py: little script to build an egg. Added
173 * setup_bdist_egg.py: little script to build an egg. Added
171 support in the release tools as well.
174 support in the release tools as well.
172
175
173 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
176 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
174
177
175 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
178 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
176 version selection (new -wxversion command line and ipythonrc
179 version selection (new -wxversion command line and ipythonrc
177 parameter). Patch contributed by Arnd Baecker
180 parameter). Patch contributed by Arnd Baecker
178 <arnd.baecker-AT-web.de>.
181 <arnd.baecker-AT-web.de>.
179
182
180 * IPython/iplib.py (embed_mainloop): fix tab-completion in
183 * IPython/iplib.py (embed_mainloop): fix tab-completion in
181 embedded instances, for variables defined at the interactive
184 embedded instances, for variables defined at the interactive
182 prompt of the embedded ipython. Reported by Arnd.
185 prompt of the embedded ipython. Reported by Arnd.
183
186
184 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
187 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
185 it can be used as a (stateful) toggle, or with a direct parameter.
188 it can be used as a (stateful) toggle, or with a direct parameter.
186
189
187 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
190 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
188 could be triggered in certain cases and cause the traceback
191 could be triggered in certain cases and cause the traceback
189 printer not to work.
192 printer not to work.
190
193
191 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
194 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
192
195
193 * IPython/iplib.py (_should_recompile): Small fix, closes
196 * IPython/iplib.py (_should_recompile): Small fix, closes
194 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
197 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
195
198
196 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
199 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
197
200
198 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
201 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
199 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
202 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
200 Moad for help with tracking it down.
203 Moad for help with tracking it down.
201
204
202 * IPython/iplib.py (handle_auto): fix autocall handling for
205 * IPython/iplib.py (handle_auto): fix autocall handling for
203 objects which support BOTH __getitem__ and __call__ (so that f [x]
206 objects which support BOTH __getitem__ and __call__ (so that f [x]
204 is left alone, instead of becoming f([x]) automatically).
207 is left alone, instead of becoming f([x]) automatically).
205
208
206 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
209 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
207 Ville's patch.
210 Ville's patch.
208
211
209 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
212 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
210
213
211 * IPython/iplib.py (handle_auto): changed autocall semantics to
214 * IPython/iplib.py (handle_auto): changed autocall semantics to
212 include 'smart' mode, where the autocall transformation is NOT
215 include 'smart' mode, where the autocall transformation is NOT
213 applied if there are no arguments on the line. This allows you to
216 applied if there are no arguments on the line. This allows you to
214 just type 'foo' if foo is a callable to see its internal form,
217 just type 'foo' if foo is a callable to see its internal form,
215 instead of having it called with no arguments (typically a
218 instead of having it called with no arguments (typically a
216 mistake). The old 'full' autocall still exists: for that, you
219 mistake). The old 'full' autocall still exists: for that, you
217 need to set the 'autocall' parameter to 2 in your ipythonrc file.
220 need to set the 'autocall' parameter to 2 in your ipythonrc file.
218
221
219 * IPython/completer.py (Completer.attr_matches): add
222 * IPython/completer.py (Completer.attr_matches): add
220 tab-completion support for Enthoughts' traits. After a report by
223 tab-completion support for Enthoughts' traits. After a report by
221 Arnd and a patch by Prabhu.
224 Arnd and a patch by Prabhu.
222
225
223 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
226 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
224
227
225 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
228 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
226 Schmolck's patch to fix inspect.getinnerframes().
229 Schmolck's patch to fix inspect.getinnerframes().
227
230
228 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
231 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
229 for embedded instances, regarding handling of namespaces and items
232 for embedded instances, regarding handling of namespaces and items
230 added to the __builtin__ one. Multiple embedded instances and
233 added to the __builtin__ one. Multiple embedded instances and
231 recursive embeddings should work better now (though I'm not sure
234 recursive embeddings should work better now (though I'm not sure
232 I've got all the corner cases fixed, that code is a bit of a brain
235 I've got all the corner cases fixed, that code is a bit of a brain
233 twister).
236 twister).
234
237
235 * IPython/Magic.py (magic_edit): added support to edit in-memory
238 * IPython/Magic.py (magic_edit): added support to edit in-memory
236 macros (automatically creates the necessary temp files). %edit
239 macros (automatically creates the necessary temp files). %edit
237 also doesn't return the file contents anymore, it's just noise.
240 also doesn't return the file contents anymore, it's just noise.
238
241
239 * IPython/completer.py (Completer.attr_matches): revert change to
242 * IPython/completer.py (Completer.attr_matches): revert change to
240 complete only on attributes listed in __all__. I realized it
243 complete only on attributes listed in __all__. I realized it
241 cripples the tab-completion system as a tool for exploring the
244 cripples the tab-completion system as a tool for exploring the
242 internals of unknown libraries (it renders any non-__all__
245 internals of unknown libraries (it renders any non-__all__
243 attribute off-limits). I got bit by this when trying to see
246 attribute off-limits). I got bit by this when trying to see
244 something inside the dis module.
247 something inside the dis module.
245
248
246 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
249 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
247
250
248 * IPython/iplib.py (InteractiveShell.__init__): add .meta
251 * IPython/iplib.py (InteractiveShell.__init__): add .meta
249 namespace for users and extension writers to hold data in. This
252 namespace for users and extension writers to hold data in. This
250 follows the discussion in
253 follows the discussion in
251 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
254 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
252
255
253 * IPython/completer.py (IPCompleter.complete): small patch to help
256 * IPython/completer.py (IPCompleter.complete): small patch to help
254 tab-completion under Emacs, after a suggestion by John Barnard
257 tab-completion under Emacs, after a suggestion by John Barnard
255 <barnarj-AT-ccf.org>.
258 <barnarj-AT-ccf.org>.
256
259
257 * IPython/Magic.py (Magic.extract_input_slices): added support for
260 * IPython/Magic.py (Magic.extract_input_slices): added support for
258 the slice notation in magics to use N-M to represent numbers N...M
261 the slice notation in magics to use N-M to represent numbers N...M
259 (closed endpoints). This is used by %macro and %save.
262 (closed endpoints). This is used by %macro and %save.
260
263
261 * IPython/completer.py (Completer.attr_matches): for modules which
264 * IPython/completer.py (Completer.attr_matches): for modules which
262 define __all__, complete only on those. After a patch by Jeffrey
265 define __all__, complete only on those. After a patch by Jeffrey
263 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
266 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
264 speed up this routine.
267 speed up this routine.
265
268
266 * IPython/Logger.py (Logger.log): fix a history handling bug. I
269 * IPython/Logger.py (Logger.log): fix a history handling bug. I
267 don't know if this is the end of it, but the behavior now is
270 don't know if this is the end of it, but the behavior now is
268 certainly much more correct. Note that coupled with macros,
271 certainly much more correct. Note that coupled with macros,
269 slightly surprising (at first) behavior may occur: a macro will in
272 slightly surprising (at first) behavior may occur: a macro will in
270 general expand to multiple lines of input, so upon exiting, the
273 general expand to multiple lines of input, so upon exiting, the
271 in/out counters will both be bumped by the corresponding amount
274 in/out counters will both be bumped by the corresponding amount
272 (as if the macro's contents had been typed interactively). Typing
275 (as if the macro's contents had been typed interactively). Typing
273 %hist will reveal the intermediate (silently processed) lines.
276 %hist will reveal the intermediate (silently processed) lines.
274
277
275 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
278 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
276 pickle to fail (%run was overwriting __main__ and not restoring
279 pickle to fail (%run was overwriting __main__ and not restoring
277 it, but pickle relies on __main__ to operate).
280 it, but pickle relies on __main__ to operate).
278
281
279 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
282 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
280 using properties, but forgot to make the main InteractiveShell
283 using properties, but forgot to make the main InteractiveShell
281 class a new-style class. Properties fail silently, and
284 class a new-style class. Properties fail silently, and
282 misteriously, with old-style class (getters work, but
285 misteriously, with old-style class (getters work, but
283 setters don't do anything).
286 setters don't do anything).
284
287
285 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
288 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
286
289
287 * IPython/Magic.py (magic_history): fix history reporting bug (I
290 * IPython/Magic.py (magic_history): fix history reporting bug (I
288 know some nasties are still there, I just can't seem to find a
291 know some nasties are still there, I just can't seem to find a
289 reproducible test case to track them down; the input history is
292 reproducible test case to track them down; the input history is
290 falling out of sync...)
293 falling out of sync...)
291
294
292 * IPython/iplib.py (handle_shell_escape): fix bug where both
295 * IPython/iplib.py (handle_shell_escape): fix bug where both
293 aliases and system accesses where broken for indented code (such
296 aliases and system accesses where broken for indented code (such
294 as loops).
297 as loops).
295
298
296 * IPython/genutils.py (shell): fix small but critical bug for
299 * IPython/genutils.py (shell): fix small but critical bug for
297 win32 system access.
300 win32 system access.
298
301
299 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
302 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
300
303
301 * IPython/iplib.py (showtraceback): remove use of the
304 * IPython/iplib.py (showtraceback): remove use of the
302 sys.last_{type/value/traceback} structures, which are non
305 sys.last_{type/value/traceback} structures, which are non
303 thread-safe.
306 thread-safe.
304 (_prefilter): change control flow to ensure that we NEVER
307 (_prefilter): change control flow to ensure that we NEVER
305 introspect objects when autocall is off. This will guarantee that
308 introspect objects when autocall is off. This will guarantee that
306 having an input line of the form 'x.y', where access to attribute
309 having an input line of the form 'x.y', where access to attribute
307 'y' has side effects, doesn't trigger the side effect TWICE. It
310 'y' has side effects, doesn't trigger the side effect TWICE. It
308 is important to note that, with autocall on, these side effects
311 is important to note that, with autocall on, these side effects
309 can still happen.
312 can still happen.
310 (ipsystem): new builtin, to complete the ip{magic/alias/system}
313 (ipsystem): new builtin, to complete the ip{magic/alias/system}
311 trio. IPython offers these three kinds of special calls which are
314 trio. IPython offers these three kinds of special calls which are
312 not python code, and it's a good thing to have their call method
315 not python code, and it's a good thing to have their call method
313 be accessible as pure python functions (not just special syntax at
316 be accessible as pure python functions (not just special syntax at
314 the command line). It gives us a better internal implementation
317 the command line). It gives us a better internal implementation
315 structure, as well as exposing these for user scripting more
318 structure, as well as exposing these for user scripting more
316 cleanly.
319 cleanly.
317
320
318 * IPython/macro.py (Macro.__init__): moved macros to a standalone
321 * IPython/macro.py (Macro.__init__): moved macros to a standalone
319 file. Now that they'll be more likely to be used with the
322 file. Now that they'll be more likely to be used with the
320 persistance system (%store), I want to make sure their module path
323 persistance system (%store), I want to make sure their module path
321 doesn't change in the future, so that we don't break things for
324 doesn't change in the future, so that we don't break things for
322 users' persisted data.
325 users' persisted data.
323
326
324 * IPython/iplib.py (autoindent_update): move indentation
327 * IPython/iplib.py (autoindent_update): move indentation
325 management into the _text_ processing loop, not the keyboard
328 management into the _text_ processing loop, not the keyboard
326 interactive one. This is necessary to correctly process non-typed
329 interactive one. This is necessary to correctly process non-typed
327 multiline input (such as macros).
330 multiline input (such as macros).
328
331
329 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
332 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
330 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
333 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
331 which was producing problems in the resulting manual.
334 which was producing problems in the resulting manual.
332 (magic_whos): improve reporting of instances (show their class,
335 (magic_whos): improve reporting of instances (show their class,
333 instead of simply printing 'instance' which isn't terribly
336 instead of simply printing 'instance' which isn't terribly
334 informative).
337 informative).
335
338
336 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
339 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
337 (minor mods) to support network shares under win32.
340 (minor mods) to support network shares under win32.
338
341
339 * IPython/winconsole.py (get_console_size): add new winconsole
342 * IPython/winconsole.py (get_console_size): add new winconsole
340 module and fixes to page_dumb() to improve its behavior under
343 module and fixes to page_dumb() to improve its behavior under
341 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
344 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
342
345
343 * IPython/Magic.py (Macro): simplified Macro class to just
346 * IPython/Magic.py (Macro): simplified Macro class to just
344 subclass list. We've had only 2.2 compatibility for a very long
347 subclass list. We've had only 2.2 compatibility for a very long
345 time, yet I was still avoiding subclassing the builtin types. No
348 time, yet I was still avoiding subclassing the builtin types. No
346 more (I'm also starting to use properties, though I won't shift to
349 more (I'm also starting to use properties, though I won't shift to
347 2.3-specific features quite yet).
350 2.3-specific features quite yet).
348 (magic_store): added Ville's patch for lightweight variable
351 (magic_store): added Ville's patch for lightweight variable
349 persistence, after a request on the user list by Matt Wilkie
352 persistence, after a request on the user list by Matt Wilkie
350 <maphew-AT-gmail.com>. The new %store magic's docstring has full
353 <maphew-AT-gmail.com>. The new %store magic's docstring has full
351 details.
354 details.
352
355
353 * IPython/iplib.py (InteractiveShell.post_config_initialization):
356 * IPython/iplib.py (InteractiveShell.post_config_initialization):
354 changed the default logfile name from 'ipython.log' to
357 changed the default logfile name from 'ipython.log' to
355 'ipython_log.py'. These logs are real python files, and now that
358 'ipython_log.py'. These logs are real python files, and now that
356 we have much better multiline support, people are more likely to
359 we have much better multiline support, people are more likely to
357 want to use them as such. Might as well name them correctly.
360 want to use them as such. Might as well name them correctly.
358
361
359 * IPython/Magic.py: substantial cleanup. While we can't stop
362 * IPython/Magic.py: substantial cleanup. While we can't stop
360 using magics as mixins, due to the existing customizations 'out
363 using magics as mixins, due to the existing customizations 'out
361 there' which rely on the mixin naming conventions, at least I
364 there' which rely on the mixin naming conventions, at least I
362 cleaned out all cross-class name usage. So once we are OK with
365 cleaned out all cross-class name usage. So once we are OK with
363 breaking compatibility, the two systems can be separated.
366 breaking compatibility, the two systems can be separated.
364
367
365 * IPython/Logger.py: major cleanup. This one is NOT a mixin
368 * IPython/Logger.py: major cleanup. This one is NOT a mixin
366 anymore, and the class is a fair bit less hideous as well. New
369 anymore, and the class is a fair bit less hideous as well. New
367 features were also introduced: timestamping of input, and logging
370 features were also introduced: timestamping of input, and logging
368 of output results. These are user-visible with the -t and -o
371 of output results. These are user-visible with the -t and -o
369 options to %logstart. Closes
372 options to %logstart. Closes
370 http://www.scipy.net/roundup/ipython/issue11 and a request by
373 http://www.scipy.net/roundup/ipython/issue11 and a request by
371 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
374 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
372
375
373 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
376 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
374
377
375 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
378 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
376 better hadnle backslashes in paths. See the thread 'More Windows
379 better hadnle backslashes in paths. See the thread 'More Windows
377 questions part 2 - \/ characters revisited' on the iypthon user
380 questions part 2 - \/ characters revisited' on the iypthon user
378 list:
381 list:
379 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
382 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
380
383
381 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
384 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
382
385
383 (InteractiveShell.__init__): change threaded shells to not use the
386 (InteractiveShell.__init__): change threaded shells to not use the
384 ipython crash handler. This was causing more problems than not,
387 ipython crash handler. This was causing more problems than not,
385 as exceptions in the main thread (GUI code, typically) would
388 as exceptions in the main thread (GUI code, typically) would
386 always show up as a 'crash', when they really weren't.
389 always show up as a 'crash', when they really weren't.
387
390
388 The colors and exception mode commands (%colors/%xmode) have been
391 The colors and exception mode commands (%colors/%xmode) have been
389 synchronized to also take this into account, so users can get
392 synchronized to also take this into account, so users can get
390 verbose exceptions for their threaded code as well. I also added
393 verbose exceptions for their threaded code as well. I also added
391 support for activating pdb inside this exception handler as well,
394 support for activating pdb inside this exception handler as well,
392 so now GUI authors can use IPython's enhanced pdb at runtime.
395 so now GUI authors can use IPython's enhanced pdb at runtime.
393
396
394 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
397 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
395 true by default, and add it to the shipped ipythonrc file. Since
398 true by default, and add it to the shipped ipythonrc file. Since
396 this asks the user before proceeding, I think it's OK to make it
399 this asks the user before proceeding, I think it's OK to make it
397 true by default.
400 true by default.
398
401
399 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
402 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
400 of the previous special-casing of input in the eval loop. I think
403 of the previous special-casing of input in the eval loop. I think
401 this is cleaner, as they really are commands and shouldn't have
404 this is cleaner, as they really are commands and shouldn't have
402 a special role in the middle of the core code.
405 a special role in the middle of the core code.
403
406
404 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
407 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
405
408
406 * IPython/iplib.py (edit_syntax_error): added support for
409 * IPython/iplib.py (edit_syntax_error): added support for
407 automatically reopening the editor if the file had a syntax error
410 automatically reopening the editor if the file had a syntax error
408 in it. Thanks to scottt who provided the patch at:
411 in it. Thanks to scottt who provided the patch at:
409 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
412 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
410 version committed).
413 version committed).
411
414
412 * IPython/iplib.py (handle_normal): add suport for multi-line
415 * IPython/iplib.py (handle_normal): add suport for multi-line
413 input with emtpy lines. This fixes
416 input with emtpy lines. This fixes
414 http://www.scipy.net/roundup/ipython/issue43 and a similar
417 http://www.scipy.net/roundup/ipython/issue43 and a similar
415 discussion on the user list.
418 discussion on the user list.
416
419
417 WARNING: a behavior change is necessarily introduced to support
420 WARNING: a behavior change is necessarily introduced to support
418 blank lines: now a single blank line with whitespace does NOT
421 blank lines: now a single blank line with whitespace does NOT
419 break the input loop, which means that when autoindent is on, by
422 break the input loop, which means that when autoindent is on, by
420 default hitting return on the next (indented) line does NOT exit.
423 default hitting return on the next (indented) line does NOT exit.
421
424
422 Instead, to exit a multiline input you can either have:
425 Instead, to exit a multiline input you can either have:
423
426
424 - TWO whitespace lines (just hit return again), or
427 - TWO whitespace lines (just hit return again), or
425 - a single whitespace line of a different length than provided
428 - a single whitespace line of a different length than provided
426 by the autoindent (add or remove a space).
429 by the autoindent (add or remove a space).
427
430
428 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
431 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
429 module to better organize all readline-related functionality.
432 module to better organize all readline-related functionality.
430 I've deleted FlexCompleter and put all completion clases here.
433 I've deleted FlexCompleter and put all completion clases here.
431
434
432 * IPython/iplib.py (raw_input): improve indentation management.
435 * IPython/iplib.py (raw_input): improve indentation management.
433 It is now possible to paste indented code with autoindent on, and
436 It is now possible to paste indented code with autoindent on, and
434 the code is interpreted correctly (though it still looks bad on
437 the code is interpreted correctly (though it still looks bad on
435 screen, due to the line-oriented nature of ipython).
438 screen, due to the line-oriented nature of ipython).
436 (MagicCompleter.complete): change behavior so that a TAB key on an
439 (MagicCompleter.complete): change behavior so that a TAB key on an
437 otherwise empty line actually inserts a tab, instead of completing
440 otherwise empty line actually inserts a tab, instead of completing
438 on the entire global namespace. This makes it easier to use the
441 on the entire global namespace. This makes it easier to use the
439 TAB key for indentation. After a request by Hans Meine
442 TAB key for indentation. After a request by Hans Meine
440 <hans_meine-AT-gmx.net>
443 <hans_meine-AT-gmx.net>
441 (_prefilter): add support so that typing plain 'exit' or 'quit'
444 (_prefilter): add support so that typing plain 'exit' or 'quit'
442 does a sensible thing. Originally I tried to deviate as little as
445 does a sensible thing. Originally I tried to deviate as little as
443 possible from the default python behavior, but even that one may
446 possible from the default python behavior, but even that one may
444 change in this direction (thread on python-dev to that effect).
447 change in this direction (thread on python-dev to that effect).
445 Regardless, ipython should do the right thing even if CPython's
448 Regardless, ipython should do the right thing even if CPython's
446 '>>>' prompt doesn't.
449 '>>>' prompt doesn't.
447 (InteractiveShell): removed subclassing code.InteractiveConsole
450 (InteractiveShell): removed subclassing code.InteractiveConsole
448 class. By now we'd overridden just about all of its methods: I've
451 class. By now we'd overridden just about all of its methods: I've
449 copied the remaining two over, and now ipython is a standalone
452 copied the remaining two over, and now ipython is a standalone
450 class. This will provide a clearer picture for the chainsaw
453 class. This will provide a clearer picture for the chainsaw
451 branch refactoring.
454 branch refactoring.
452
455
453 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
456 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
454
457
455 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
458 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
456 failures for objects which break when dir() is called on them.
459 failures for objects which break when dir() is called on them.
457
460
458 * IPython/FlexCompleter.py (Completer.__init__): Added support for
461 * IPython/FlexCompleter.py (Completer.__init__): Added support for
459 distinct local and global namespaces in the completer API. This
462 distinct local and global namespaces in the completer API. This
460 change allows us top properly handle completion with distinct
463 change allows us top properly handle completion with distinct
461 scopes, including in embedded instances (this had never really
464 scopes, including in embedded instances (this had never really
462 worked correctly).
465 worked correctly).
463
466
464 Note: this introduces a change in the constructor for
467 Note: this introduces a change in the constructor for
465 MagicCompleter, as a new global_namespace parameter is now the
468 MagicCompleter, as a new global_namespace parameter is now the
466 second argument (the others were bumped one position).
469 second argument (the others were bumped one position).
467
470
468 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
471 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
469
472
470 * IPython/iplib.py (embed_mainloop): fix tab-completion in
473 * IPython/iplib.py (embed_mainloop): fix tab-completion in
471 embedded instances (which can be done now thanks to Vivian's
474 embedded instances (which can be done now thanks to Vivian's
472 frame-handling fixes for pdb).
475 frame-handling fixes for pdb).
473 (InteractiveShell.__init__): Fix namespace handling problem in
476 (InteractiveShell.__init__): Fix namespace handling problem in
474 embedded instances. We were overwriting __main__ unconditionally,
477 embedded instances. We were overwriting __main__ unconditionally,
475 and this should only be done for 'full' (non-embedded) IPython;
478 and this should only be done for 'full' (non-embedded) IPython;
476 embedded instances must respect the caller's __main__. Thanks to
479 embedded instances must respect the caller's __main__. Thanks to
477 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
480 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
478
481
479 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
482 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
480
483
481 * setup.py: added download_url to setup(). This registers the
484 * setup.py: added download_url to setup(). This registers the
482 download address at PyPI, which is not only useful to humans
485 download address at PyPI, which is not only useful to humans
483 browsing the site, but is also picked up by setuptools (the Eggs
486 browsing the site, but is also picked up by setuptools (the Eggs
484 machinery). Thanks to Ville and R. Kern for the info/discussion
487 machinery). Thanks to Ville and R. Kern for the info/discussion
485 on this.
488 on this.
486
489
487 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
490 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
488
491
489 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
492 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
490 This brings a lot of nice functionality to the pdb mode, which now
493 This brings a lot of nice functionality to the pdb mode, which now
491 has tab-completion, syntax highlighting, and better stack handling
494 has tab-completion, syntax highlighting, and better stack handling
492 than before. Many thanks to Vivian De Smedt
495 than before. Many thanks to Vivian De Smedt
493 <vivian-AT-vdesmedt.com> for the original patches.
496 <vivian-AT-vdesmedt.com> for the original patches.
494
497
495 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
498 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
496
499
497 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
500 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
498 sequence to consistently accept the banner argument. The
501 sequence to consistently accept the banner argument. The
499 inconsistency was tripping SAGE, thanks to Gary Zablackis
502 inconsistency was tripping SAGE, thanks to Gary Zablackis
500 <gzabl-AT-yahoo.com> for the report.
503 <gzabl-AT-yahoo.com> for the report.
501
504
502 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
505 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
503
506
504 * IPython/iplib.py (InteractiveShell.post_config_initialization):
507 * IPython/iplib.py (InteractiveShell.post_config_initialization):
505 Fix bug where a naked 'alias' call in the ipythonrc file would
508 Fix bug where a naked 'alias' call in the ipythonrc file would
506 cause a crash. Bug reported by Jorgen Stenarson.
509 cause a crash. Bug reported by Jorgen Stenarson.
507
510
508 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
511 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
509
512
510 * IPython/ipmaker.py (make_IPython): cleanups which should improve
513 * IPython/ipmaker.py (make_IPython): cleanups which should improve
511 startup time.
514 startup time.
512
515
513 * IPython/iplib.py (runcode): my globals 'fix' for embedded
516 * IPython/iplib.py (runcode): my globals 'fix' for embedded
514 instances had introduced a bug with globals in normal code. Now
517 instances had introduced a bug with globals in normal code. Now
515 it's working in all cases.
518 it's working in all cases.
516
519
517 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
520 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
518 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
521 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
519 has been introduced to set the default case sensitivity of the
522 has been introduced to set the default case sensitivity of the
520 searches. Users can still select either mode at runtime on a
523 searches. Users can still select either mode at runtime on a
521 per-search basis.
524 per-search basis.
522
525
523 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
526 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
524
527
525 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
528 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
526 attributes in wildcard searches for subclasses. Modified version
529 attributes in wildcard searches for subclasses. Modified version
527 of a patch by Jorgen.
530 of a patch by Jorgen.
528
531
529 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
532 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
530
533
531 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
534 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
532 embedded instances. I added a user_global_ns attribute to the
535 embedded instances. I added a user_global_ns attribute to the
533 InteractiveShell class to handle this.
536 InteractiveShell class to handle this.
534
537
535 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
538 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
536
539
537 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
540 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
538 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
541 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
539 (reported under win32, but may happen also in other platforms).
542 (reported under win32, but may happen also in other platforms).
540 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
543 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
541
544
542 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
545 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
543
546
544 * IPython/Magic.py (magic_psearch): new support for wildcard
547 * IPython/Magic.py (magic_psearch): new support for wildcard
545 patterns. Now, typing ?a*b will list all names which begin with a
548 patterns. Now, typing ?a*b will list all names which begin with a
546 and end in b, for example. The %psearch magic has full
549 and end in b, for example. The %psearch magic has full
547 docstrings. Many thanks to JΓΆrgen Stenarson
550 docstrings. Many thanks to JΓΆrgen Stenarson
548 <jorgen.stenarson-AT-bostream.nu>, author of the patches
551 <jorgen.stenarson-AT-bostream.nu>, author of the patches
549 implementing this functionality.
552 implementing this functionality.
550
553
551 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
554 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
552
555
553 * Manual: fixed long-standing annoyance of double-dashes (as in
556 * Manual: fixed long-standing annoyance of double-dashes (as in
554 --prefix=~, for example) being stripped in the HTML version. This
557 --prefix=~, for example) being stripped in the HTML version. This
555 is a latex2html bug, but a workaround was provided. Many thanks
558 is a latex2html bug, but a workaround was provided. Many thanks
556 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
559 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
557 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
560 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
558 rolling. This seemingly small issue had tripped a number of users
561 rolling. This seemingly small issue had tripped a number of users
559 when first installing, so I'm glad to see it gone.
562 when first installing, so I'm glad to see it gone.
560
563
561 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
564 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
562
565
563 * IPython/Extensions/numeric_formats.py: fix missing import,
566 * IPython/Extensions/numeric_formats.py: fix missing import,
564 reported by Stephen Walton.
567 reported by Stephen Walton.
565
568
566 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
569 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
567
570
568 * IPython/demo.py: finish demo module, fully documented now.
571 * IPython/demo.py: finish demo module, fully documented now.
569
572
570 * IPython/genutils.py (file_read): simple little utility to read a
573 * IPython/genutils.py (file_read): simple little utility to read a
571 file and ensure it's closed afterwards.
574 file and ensure it's closed afterwards.
572
575
573 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
576 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
574
577
575 * IPython/demo.py (Demo.__init__): added support for individually
578 * IPython/demo.py (Demo.__init__): added support for individually
576 tagging blocks for automatic execution.
579 tagging blocks for automatic execution.
577
580
578 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
581 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
579 syntax-highlighted python sources, requested by John.
582 syntax-highlighted python sources, requested by John.
580
583
581 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
584 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
582
585
583 * IPython/demo.py (Demo.again): fix bug where again() blocks after
586 * IPython/demo.py (Demo.again): fix bug where again() blocks after
584 finishing.
587 finishing.
585
588
586 * IPython/genutils.py (shlex_split): moved from Magic to here,
589 * IPython/genutils.py (shlex_split): moved from Magic to here,
587 where all 2.2 compatibility stuff lives. I needed it for demo.py.
590 where all 2.2 compatibility stuff lives. I needed it for demo.py.
588
591
589 * IPython/demo.py (Demo.__init__): added support for silent
592 * IPython/demo.py (Demo.__init__): added support for silent
590 blocks, improved marks as regexps, docstrings written.
593 blocks, improved marks as regexps, docstrings written.
591 (Demo.__init__): better docstring, added support for sys.argv.
594 (Demo.__init__): better docstring, added support for sys.argv.
592
595
593 * IPython/genutils.py (marquee): little utility used by the demo
596 * IPython/genutils.py (marquee): little utility used by the demo
594 code, handy in general.
597 code, handy in general.
595
598
596 * IPython/demo.py (Demo.__init__): new class for interactive
599 * IPython/demo.py (Demo.__init__): new class for interactive
597 demos. Not documented yet, I just wrote it in a hurry for
600 demos. Not documented yet, I just wrote it in a hurry for
598 scipy'05. Will docstring later.
601 scipy'05. Will docstring later.
599
602
600 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
603 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
601
604
602 * IPython/Shell.py (sigint_handler): Drastic simplification which
605 * IPython/Shell.py (sigint_handler): Drastic simplification which
603 also seems to make Ctrl-C work correctly across threads! This is
606 also seems to make Ctrl-C work correctly across threads! This is
604 so simple, that I can't beleive I'd missed it before. Needs more
607 so simple, that I can't beleive I'd missed it before. Needs more
605 testing, though.
608 testing, though.
606 (KBINT): Never mind, revert changes. I'm sure I'd tried something
609 (KBINT): Never mind, revert changes. I'm sure I'd tried something
607 like this before...
610 like this before...
608
611
609 * IPython/genutils.py (get_home_dir): add protection against
612 * IPython/genutils.py (get_home_dir): add protection against
610 non-dirs in win32 registry.
613 non-dirs in win32 registry.
611
614
612 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
615 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
613 bug where dict was mutated while iterating (pysh crash).
616 bug where dict was mutated while iterating (pysh crash).
614
617
615 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
618 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
616
619
617 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
620 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
618 spurious newlines added by this routine. After a report by
621 spurious newlines added by this routine. After a report by
619 F. Mantegazza.
622 F. Mantegazza.
620
623
621 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
624 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
622
625
623 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
626 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
624 calls. These were a leftover from the GTK 1.x days, and can cause
627 calls. These were a leftover from the GTK 1.x days, and can cause
625 problems in certain cases (after a report by John Hunter).
628 problems in certain cases (after a report by John Hunter).
626
629
627 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
630 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
628 os.getcwd() fails at init time. Thanks to patch from David Remahl
631 os.getcwd() fails at init time. Thanks to patch from David Remahl
629 <chmod007-AT-mac.com>.
632 <chmod007-AT-mac.com>.
630 (InteractiveShell.__init__): prevent certain special magics from
633 (InteractiveShell.__init__): prevent certain special magics from
631 being shadowed by aliases. Closes
634 being shadowed by aliases. Closes
632 http://www.scipy.net/roundup/ipython/issue41.
635 http://www.scipy.net/roundup/ipython/issue41.
633
636
634 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
637 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
635
638
636 * IPython/iplib.py (InteractiveShell.complete): Added new
639 * IPython/iplib.py (InteractiveShell.complete): Added new
637 top-level completion method to expose the completion mechanism
640 top-level completion method to expose the completion mechanism
638 beyond readline-based environments.
641 beyond readline-based environments.
639
642
640 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
643 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
641
644
642 * tools/ipsvnc (svnversion): fix svnversion capture.
645 * tools/ipsvnc (svnversion): fix svnversion capture.
643
646
644 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
647 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
645 attribute to self, which was missing. Before, it was set by a
648 attribute to self, which was missing. Before, it was set by a
646 routine which in certain cases wasn't being called, so the
649 routine which in certain cases wasn't being called, so the
647 instance could end up missing the attribute. This caused a crash.
650 instance could end up missing the attribute. This caused a crash.
648 Closes http://www.scipy.net/roundup/ipython/issue40.
651 Closes http://www.scipy.net/roundup/ipython/issue40.
649
652
650 2005-08-16 Fernando Perez <fperez@colorado.edu>
653 2005-08-16 Fernando Perez <fperez@colorado.edu>
651
654
652 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
655 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
653 contains non-string attribute. Closes
656 contains non-string attribute. Closes
654 http://www.scipy.net/roundup/ipython/issue38.
657 http://www.scipy.net/roundup/ipython/issue38.
655
658
656 2005-08-14 Fernando Perez <fperez@colorado.edu>
659 2005-08-14 Fernando Perez <fperez@colorado.edu>
657
660
658 * tools/ipsvnc: Minor improvements, to add changeset info.
661 * tools/ipsvnc: Minor improvements, to add changeset info.
659
662
660 2005-08-12 Fernando Perez <fperez@colorado.edu>
663 2005-08-12 Fernando Perez <fperez@colorado.edu>
661
664
662 * IPython/iplib.py (runsource): remove self.code_to_run_src
665 * IPython/iplib.py (runsource): remove self.code_to_run_src
663 attribute. I realized this is nothing more than
666 attribute. I realized this is nothing more than
664 '\n'.join(self.buffer), and having the same data in two different
667 '\n'.join(self.buffer), and having the same data in two different
665 places is just asking for synchronization bugs. This may impact
668 places is just asking for synchronization bugs. This may impact
666 people who have custom exception handlers, so I need to warn
669 people who have custom exception handlers, so I need to warn
667 ipython-dev about it (F. Mantegazza may use them).
670 ipython-dev about it (F. Mantegazza may use them).
668
671
669 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
672 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
670
673
671 * IPython/genutils.py: fix 2.2 compatibility (generators)
674 * IPython/genutils.py: fix 2.2 compatibility (generators)
672
675
673 2005-07-18 Fernando Perez <fperez@colorado.edu>
676 2005-07-18 Fernando Perez <fperez@colorado.edu>
674
677
675 * IPython/genutils.py (get_home_dir): fix to help users with
678 * IPython/genutils.py (get_home_dir): fix to help users with
676 invalid $HOME under win32.
679 invalid $HOME under win32.
677
680
678 2005-07-17 Fernando Perez <fperez@colorado.edu>
681 2005-07-17 Fernando Perez <fperez@colorado.edu>
679
682
680 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
683 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
681 some old hacks and clean up a bit other routines; code should be
684 some old hacks and clean up a bit other routines; code should be
682 simpler and a bit faster.
685 simpler and a bit faster.
683
686
684 * IPython/iplib.py (interact): removed some last-resort attempts
687 * IPython/iplib.py (interact): removed some last-resort attempts
685 to survive broken stdout/stderr. That code was only making it
688 to survive broken stdout/stderr. That code was only making it
686 harder to abstract out the i/o (necessary for gui integration),
689 harder to abstract out the i/o (necessary for gui integration),
687 and the crashes it could prevent were extremely rare in practice
690 and the crashes it could prevent were extremely rare in practice
688 (besides being fully user-induced in a pretty violent manner).
691 (besides being fully user-induced in a pretty violent manner).
689
692
690 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
693 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
691 Nothing major yet, but the code is simpler to read; this should
694 Nothing major yet, but the code is simpler to read; this should
692 make it easier to do more serious modifications in the future.
695 make it easier to do more serious modifications in the future.
693
696
694 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
697 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
695 which broke in .15 (thanks to a report by Ville).
698 which broke in .15 (thanks to a report by Ville).
696
699
697 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
700 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
698 be quite correct, I know next to nothing about unicode). This
701 be quite correct, I know next to nothing about unicode). This
699 will allow unicode strings to be used in prompts, amongst other
702 will allow unicode strings to be used in prompts, amongst other
700 cases. It also will prevent ipython from crashing when unicode
703 cases. It also will prevent ipython from crashing when unicode
701 shows up unexpectedly in many places. If ascii encoding fails, we
704 shows up unexpectedly in many places. If ascii encoding fails, we
702 assume utf_8. Currently the encoding is not a user-visible
705 assume utf_8. Currently the encoding is not a user-visible
703 setting, though it could be made so if there is demand for it.
706 setting, though it could be made so if there is demand for it.
704
707
705 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
708 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
706
709
707 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
710 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
708
711
709 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
712 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
710
713
711 * IPython/genutils.py: Add 2.2 compatibility here, so all other
714 * IPython/genutils.py: Add 2.2 compatibility here, so all other
712 code can work transparently for 2.2/2.3.
715 code can work transparently for 2.2/2.3.
713
716
714 2005-07-16 Fernando Perez <fperez@colorado.edu>
717 2005-07-16 Fernando Perez <fperez@colorado.edu>
715
718
716 * IPython/ultraTB.py (ExceptionColors): Make a global variable
719 * IPython/ultraTB.py (ExceptionColors): Make a global variable
717 out of the color scheme table used for coloring exception
720 out of the color scheme table used for coloring exception
718 tracebacks. This allows user code to add new schemes at runtime.
721 tracebacks. This allows user code to add new schemes at runtime.
719 This is a minimally modified version of the patch at
722 This is a minimally modified version of the patch at
720 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
723 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
721 for the contribution.
724 for the contribution.
722
725
723 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
726 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
724 slightly modified version of the patch in
727 slightly modified version of the patch in
725 http://www.scipy.net/roundup/ipython/issue34, which also allows me
728 http://www.scipy.net/roundup/ipython/issue34, which also allows me
726 to remove the previous try/except solution (which was costlier).
729 to remove the previous try/except solution (which was costlier).
727 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
730 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
728
731
729 2005-06-08 Fernando Perez <fperez@colorado.edu>
732 2005-06-08 Fernando Perez <fperez@colorado.edu>
730
733
731 * IPython/iplib.py (write/write_err): Add methods to abstract all
734 * IPython/iplib.py (write/write_err): Add methods to abstract all
732 I/O a bit more.
735 I/O a bit more.
733
736
734 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
737 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
735 warning, reported by Aric Hagberg, fix by JD Hunter.
738 warning, reported by Aric Hagberg, fix by JD Hunter.
736
739
737 2005-06-02 *** Released version 0.6.15
740 2005-06-02 *** Released version 0.6.15
738
741
739 2005-06-01 Fernando Perez <fperez@colorado.edu>
742 2005-06-01 Fernando Perez <fperez@colorado.edu>
740
743
741 * IPython/iplib.py (MagicCompleter.file_matches): Fix
744 * IPython/iplib.py (MagicCompleter.file_matches): Fix
742 tab-completion of filenames within open-quoted strings. Note that
745 tab-completion of filenames within open-quoted strings. Note that
743 this requires that in ~/.ipython/ipythonrc, users change the
746 this requires that in ~/.ipython/ipythonrc, users change the
744 readline delimiters configuration to read:
747 readline delimiters configuration to read:
745
748
746 readline_remove_delims -/~
749 readline_remove_delims -/~
747
750
748
751
749 2005-05-31 *** Released version 0.6.14
752 2005-05-31 *** Released version 0.6.14
750
753
751 2005-05-29 Fernando Perez <fperez@colorado.edu>
754 2005-05-29 Fernando Perez <fperez@colorado.edu>
752
755
753 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
756 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
754 with files not on the filesystem. Reported by Eliyahu Sandler
757 with files not on the filesystem. Reported by Eliyahu Sandler
755 <eli@gondolin.net>
758 <eli@gondolin.net>
756
759
757 2005-05-22 Fernando Perez <fperez@colorado.edu>
760 2005-05-22 Fernando Perez <fperez@colorado.edu>
758
761
759 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
762 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
760 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
763 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
761
764
762 2005-05-19 Fernando Perez <fperez@colorado.edu>
765 2005-05-19 Fernando Perez <fperez@colorado.edu>
763
766
764 * IPython/iplib.py (safe_execfile): close a file which could be
767 * IPython/iplib.py (safe_execfile): close a file which could be
765 left open (causing problems in win32, which locks open files).
768 left open (causing problems in win32, which locks open files).
766 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
769 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
767
770
768 2005-05-18 Fernando Perez <fperez@colorado.edu>
771 2005-05-18 Fernando Perez <fperez@colorado.edu>
769
772
770 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
773 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
771 keyword arguments correctly to safe_execfile().
774 keyword arguments correctly to safe_execfile().
772
775
773 2005-05-13 Fernando Perez <fperez@colorado.edu>
776 2005-05-13 Fernando Perez <fperez@colorado.edu>
774
777
775 * ipython.1: Added info about Qt to manpage, and threads warning
778 * ipython.1: Added info about Qt to manpage, and threads warning
776 to usage page (invoked with --help).
779 to usage page (invoked with --help).
777
780
778 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
781 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
779 new matcher (it goes at the end of the priority list) to do
782 new matcher (it goes at the end of the priority list) to do
780 tab-completion on named function arguments. Submitted by George
783 tab-completion on named function arguments. Submitted by George
781 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
784 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
782 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
785 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
783 for more details.
786 for more details.
784
787
785 * IPython/Magic.py (magic_run): Added new -e flag to ignore
788 * IPython/Magic.py (magic_run): Added new -e flag to ignore
786 SystemExit exceptions in the script being run. Thanks to a report
789 SystemExit exceptions in the script being run. Thanks to a report
787 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
790 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
788 producing very annoying behavior when running unit tests.
791 producing very annoying behavior when running unit tests.
789
792
790 2005-05-12 Fernando Perez <fperez@colorado.edu>
793 2005-05-12 Fernando Perez <fperez@colorado.edu>
791
794
792 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
795 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
793 which I'd broken (again) due to a changed regexp. In the process,
796 which I'd broken (again) due to a changed regexp. In the process,
794 added ';' as an escape to auto-quote the whole line without
797 added ';' as an escape to auto-quote the whole line without
795 splitting its arguments. Thanks to a report by Jerry McRae
798 splitting its arguments. Thanks to a report by Jerry McRae
796 <qrs0xyc02-AT-sneakemail.com>.
799 <qrs0xyc02-AT-sneakemail.com>.
797
800
798 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
801 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
799 possible crashes caused by a TokenError. Reported by Ed Schofield
802 possible crashes caused by a TokenError. Reported by Ed Schofield
800 <schofield-AT-ftw.at>.
803 <schofield-AT-ftw.at>.
801
804
802 2005-05-06 Fernando Perez <fperez@colorado.edu>
805 2005-05-06 Fernando Perez <fperez@colorado.edu>
803
806
804 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
807 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
805
808
806 2005-04-29 Fernando Perez <fperez@colorado.edu>
809 2005-04-29 Fernando Perez <fperez@colorado.edu>
807
810
808 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
811 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
809 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
812 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
810 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
813 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
811 which provides support for Qt interactive usage (similar to the
814 which provides support for Qt interactive usage (similar to the
812 existing one for WX and GTK). This had been often requested.
815 existing one for WX and GTK). This had been often requested.
813
816
814 2005-04-14 *** Released version 0.6.13
817 2005-04-14 *** Released version 0.6.13
815
818
816 2005-04-08 Fernando Perez <fperez@colorado.edu>
819 2005-04-08 Fernando Perez <fperez@colorado.edu>
817
820
818 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
821 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
819 from _ofind, which gets called on almost every input line. Now,
822 from _ofind, which gets called on almost every input line. Now,
820 we only try to get docstrings if they are actually going to be
823 we only try to get docstrings if they are actually going to be
821 used (the overhead of fetching unnecessary docstrings can be
824 used (the overhead of fetching unnecessary docstrings can be
822 noticeable for certain objects, such as Pyro proxies).
825 noticeable for certain objects, such as Pyro proxies).
823
826
824 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
827 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
825 for completers. For some reason I had been passing them the state
828 for completers. For some reason I had been passing them the state
826 variable, which completers never actually need, and was in
829 variable, which completers never actually need, and was in
827 conflict with the rlcompleter API. Custom completers ONLY need to
830 conflict with the rlcompleter API. Custom completers ONLY need to
828 take the text parameter.
831 take the text parameter.
829
832
830 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
833 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
831 work correctly in pysh. I've also moved all the logic which used
834 work correctly in pysh. I've also moved all the logic which used
832 to be in pysh.py here, which will prevent problems with future
835 to be in pysh.py here, which will prevent problems with future
833 upgrades. However, this time I must warn users to update their
836 upgrades. However, this time I must warn users to update their
834 pysh profile to include the line
837 pysh profile to include the line
835
838
836 import_all IPython.Extensions.InterpreterExec
839 import_all IPython.Extensions.InterpreterExec
837
840
838 because otherwise things won't work for them. They MUST also
841 because otherwise things won't work for them. They MUST also
839 delete pysh.py and the line
842 delete pysh.py and the line
840
843
841 execfile pysh.py
844 execfile pysh.py
842
845
843 from their ipythonrc-pysh.
846 from their ipythonrc-pysh.
844
847
845 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
848 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
846 robust in the face of objects whose dir() returns non-strings
849 robust in the face of objects whose dir() returns non-strings
847 (which it shouldn't, but some broken libs like ITK do). Thanks to
850 (which it shouldn't, but some broken libs like ITK do). Thanks to
848 a patch by John Hunter (implemented differently, though). Also
851 a patch by John Hunter (implemented differently, though). Also
849 minor improvements by using .extend instead of + on lists.
852 minor improvements by using .extend instead of + on lists.
850
853
851 * pysh.py:
854 * pysh.py:
852
855
853 2005-04-06 Fernando Perez <fperez@colorado.edu>
856 2005-04-06 Fernando Perez <fperez@colorado.edu>
854
857
855 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
858 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
856 by default, so that all users benefit from it. Those who don't
859 by default, so that all users benefit from it. Those who don't
857 want it can still turn it off.
860 want it can still turn it off.
858
861
859 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
862 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
860 config file, I'd forgotten about this, so users were getting it
863 config file, I'd forgotten about this, so users were getting it
861 off by default.
864 off by default.
862
865
863 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
866 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
864 consistency. Now magics can be called in multiline statements,
867 consistency. Now magics can be called in multiline statements,
865 and python variables can be expanded in magic calls via $var.
868 and python variables can be expanded in magic calls via $var.
866 This makes the magic system behave just like aliases or !system
869 This makes the magic system behave just like aliases or !system
867 calls.
870 calls.
868
871
869 2005-03-28 Fernando Perez <fperez@colorado.edu>
872 2005-03-28 Fernando Perez <fperez@colorado.edu>
870
873
871 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
874 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
872 expensive string additions for building command. Add support for
875 expensive string additions for building command. Add support for
873 trailing ';' when autocall is used.
876 trailing ';' when autocall is used.
874
877
875 2005-03-26 Fernando Perez <fperez@colorado.edu>
878 2005-03-26 Fernando Perez <fperez@colorado.edu>
876
879
877 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
880 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
878 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
881 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
879 ipython.el robust against prompts with any number of spaces
882 ipython.el robust against prompts with any number of spaces
880 (including 0) after the ':' character.
883 (including 0) after the ':' character.
881
884
882 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
885 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
883 continuation prompt, which misled users to think the line was
886 continuation prompt, which misled users to think the line was
884 already indented. Closes debian Bug#300847, reported to me by
887 already indented. Closes debian Bug#300847, reported to me by
885 Norbert Tretkowski <tretkowski-AT-inittab.de>.
888 Norbert Tretkowski <tretkowski-AT-inittab.de>.
886
889
887 2005-03-23 Fernando Perez <fperez@colorado.edu>
890 2005-03-23 Fernando Perez <fperez@colorado.edu>
888
891
889 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
892 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
890 properly aligned if they have embedded newlines.
893 properly aligned if they have embedded newlines.
891
894
892 * IPython/iplib.py (runlines): Add a public method to expose
895 * IPython/iplib.py (runlines): Add a public method to expose
893 IPython's code execution machinery, so that users can run strings
896 IPython's code execution machinery, so that users can run strings
894 as if they had been typed at the prompt interactively.
897 as if they had been typed at the prompt interactively.
895 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
898 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
896 methods which can call the system shell, but with python variable
899 methods which can call the system shell, but with python variable
897 expansion. The three such methods are: __IPYTHON__.system,
900 expansion. The three such methods are: __IPYTHON__.system,
898 .getoutput and .getoutputerror. These need to be documented in a
901 .getoutput and .getoutputerror. These need to be documented in a
899 'public API' section (to be written) of the manual.
902 'public API' section (to be written) of the manual.
900
903
901 2005-03-20 Fernando Perez <fperez@colorado.edu>
904 2005-03-20 Fernando Perez <fperez@colorado.edu>
902
905
903 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
906 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
904 for custom exception handling. This is quite powerful, and it
907 for custom exception handling. This is quite powerful, and it
905 allows for user-installable exception handlers which can trap
908 allows for user-installable exception handlers which can trap
906 custom exceptions at runtime and treat them separately from
909 custom exceptions at runtime and treat them separately from
907 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
910 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
908 Mantegazza <mantegazza-AT-ill.fr>.
911 Mantegazza <mantegazza-AT-ill.fr>.
909 (InteractiveShell.set_custom_completer): public API function to
912 (InteractiveShell.set_custom_completer): public API function to
910 add new completers at runtime.
913 add new completers at runtime.
911
914
912 2005-03-19 Fernando Perez <fperez@colorado.edu>
915 2005-03-19 Fernando Perez <fperez@colorado.edu>
913
916
914 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
917 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
915 allow objects which provide their docstrings via non-standard
918 allow objects which provide their docstrings via non-standard
916 mechanisms (like Pyro proxies) to still be inspected by ipython's
919 mechanisms (like Pyro proxies) to still be inspected by ipython's
917 ? system.
920 ? system.
918
921
919 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
922 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
920 automatic capture system. I tried quite hard to make it work
923 automatic capture system. I tried quite hard to make it work
921 reliably, and simply failed. I tried many combinations with the
924 reliably, and simply failed. I tried many combinations with the
922 subprocess module, but eventually nothing worked in all needed
925 subprocess module, but eventually nothing worked in all needed
923 cases (not blocking stdin for the child, duplicating stdout
926 cases (not blocking stdin for the child, duplicating stdout
924 without blocking, etc). The new %sc/%sx still do capture to these
927 without blocking, etc). The new %sc/%sx still do capture to these
925 magical list/string objects which make shell use much more
928 magical list/string objects which make shell use much more
926 conveninent, so not all is lost.
929 conveninent, so not all is lost.
927
930
928 XXX - FIX MANUAL for the change above!
931 XXX - FIX MANUAL for the change above!
929
932
930 (runsource): I copied code.py's runsource() into ipython to modify
933 (runsource): I copied code.py's runsource() into ipython to modify
931 it a bit. Now the code object and source to be executed are
934 it a bit. Now the code object and source to be executed are
932 stored in ipython. This makes this info accessible to third-party
935 stored in ipython. This makes this info accessible to third-party
933 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
936 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
934 Mantegazza <mantegazza-AT-ill.fr>.
937 Mantegazza <mantegazza-AT-ill.fr>.
935
938
936 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
939 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
937 history-search via readline (like C-p/C-n). I'd wanted this for a
940 history-search via readline (like C-p/C-n). I'd wanted this for a
938 long time, but only recently found out how to do it. For users
941 long time, but only recently found out how to do it. For users
939 who already have their ipythonrc files made and want this, just
942 who already have their ipythonrc files made and want this, just
940 add:
943 add:
941
944
942 readline_parse_and_bind "\e[A": history-search-backward
945 readline_parse_and_bind "\e[A": history-search-backward
943 readline_parse_and_bind "\e[B": history-search-forward
946 readline_parse_and_bind "\e[B": history-search-forward
944
947
945 2005-03-18 Fernando Perez <fperez@colorado.edu>
948 2005-03-18 Fernando Perez <fperez@colorado.edu>
946
949
947 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
950 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
948 LSString and SList classes which allow transparent conversions
951 LSString and SList classes which allow transparent conversions
949 between list mode and whitespace-separated string.
952 between list mode and whitespace-separated string.
950 (magic_r): Fix recursion problem in %r.
953 (magic_r): Fix recursion problem in %r.
951
954
952 * IPython/genutils.py (LSString): New class to be used for
955 * IPython/genutils.py (LSString): New class to be used for
953 automatic storage of the results of all alias/system calls in _o
956 automatic storage of the results of all alias/system calls in _o
954 and _e (stdout/err). These provide a .l/.list attribute which
957 and _e (stdout/err). These provide a .l/.list attribute which
955 does automatic splitting on newlines. This means that for most
958 does automatic splitting on newlines. This means that for most
956 uses, you'll never need to do capturing of output with %sc/%sx
959 uses, you'll never need to do capturing of output with %sc/%sx
957 anymore, since ipython keeps this always done for you. Note that
960 anymore, since ipython keeps this always done for you. Note that
958 only the LAST results are stored, the _o/e variables are
961 only the LAST results are stored, the _o/e variables are
959 overwritten on each call. If you need to save their contents
962 overwritten on each call. If you need to save their contents
960 further, simply bind them to any other name.
963 further, simply bind them to any other name.
961
964
962 2005-03-17 Fernando Perez <fperez@colorado.edu>
965 2005-03-17 Fernando Perez <fperez@colorado.edu>
963
966
964 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
967 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
965 prompt namespace handling.
968 prompt namespace handling.
966
969
967 2005-03-16 Fernando Perez <fperez@colorado.edu>
970 2005-03-16 Fernando Perez <fperez@colorado.edu>
968
971
969 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
972 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
970 classic prompts to be '>>> ' (final space was missing, and it
973 classic prompts to be '>>> ' (final space was missing, and it
971 trips the emacs python mode).
974 trips the emacs python mode).
972 (BasePrompt.__str__): Added safe support for dynamic prompt
975 (BasePrompt.__str__): Added safe support for dynamic prompt
973 strings. Now you can set your prompt string to be '$x', and the
976 strings. Now you can set your prompt string to be '$x', and the
974 value of x will be printed from your interactive namespace. The
977 value of x will be printed from your interactive namespace. The
975 interpolation syntax includes the full Itpl support, so
978 interpolation syntax includes the full Itpl support, so
976 ${foo()+x+bar()} is a valid prompt string now, and the function
979 ${foo()+x+bar()} is a valid prompt string now, and the function
977 calls will be made at runtime.
980 calls will be made at runtime.
978
981
979 2005-03-15 Fernando Perez <fperez@colorado.edu>
982 2005-03-15 Fernando Perez <fperez@colorado.edu>
980
983
981 * IPython/Magic.py (magic_history): renamed %hist to %history, to
984 * IPython/Magic.py (magic_history): renamed %hist to %history, to
982 avoid name clashes in pylab. %hist still works, it just forwards
985 avoid name clashes in pylab. %hist still works, it just forwards
983 the call to %history.
986 the call to %history.
984
987
985 2005-03-02 *** Released version 0.6.12
988 2005-03-02 *** Released version 0.6.12
986
989
987 2005-03-02 Fernando Perez <fperez@colorado.edu>
990 2005-03-02 Fernando Perez <fperez@colorado.edu>
988
991
989 * IPython/iplib.py (handle_magic): log magic calls properly as
992 * IPython/iplib.py (handle_magic): log magic calls properly as
990 ipmagic() function calls.
993 ipmagic() function calls.
991
994
992 * IPython/Magic.py (magic_time): Improved %time to support
995 * IPython/Magic.py (magic_time): Improved %time to support
993 statements and provide wall-clock as well as CPU time.
996 statements and provide wall-clock as well as CPU time.
994
997
995 2005-02-27 Fernando Perez <fperez@colorado.edu>
998 2005-02-27 Fernando Perez <fperez@colorado.edu>
996
999
997 * IPython/hooks.py: New hooks module, to expose user-modifiable
1000 * IPython/hooks.py: New hooks module, to expose user-modifiable
998 IPython functionality in a clean manner. For now only the editor
1001 IPython functionality in a clean manner. For now only the editor
999 hook is actually written, and other thigns which I intend to turn
1002 hook is actually written, and other thigns which I intend to turn
1000 into proper hooks aren't yet there. The display and prefilter
1003 into proper hooks aren't yet there. The display and prefilter
1001 stuff, for example, should be hooks. But at least now the
1004 stuff, for example, should be hooks. But at least now the
1002 framework is in place, and the rest can be moved here with more
1005 framework is in place, and the rest can be moved here with more
1003 time later. IPython had had a .hooks variable for a long time for
1006 time later. IPython had had a .hooks variable for a long time for
1004 this purpose, but I'd never actually used it for anything.
1007 this purpose, but I'd never actually used it for anything.
1005
1008
1006 2005-02-26 Fernando Perez <fperez@colorado.edu>
1009 2005-02-26 Fernando Perez <fperez@colorado.edu>
1007
1010
1008 * IPython/ipmaker.py (make_IPython): make the default ipython
1011 * IPython/ipmaker.py (make_IPython): make the default ipython
1009 directory be called _ipython under win32, to follow more the
1012 directory be called _ipython under win32, to follow more the
1010 naming peculiarities of that platform (where buggy software like
1013 naming peculiarities of that platform (where buggy software like
1011 Visual Sourcesafe breaks with .named directories). Reported by
1014 Visual Sourcesafe breaks with .named directories). Reported by
1012 Ville Vainio.
1015 Ville Vainio.
1013
1016
1014 2005-02-23 Fernando Perez <fperez@colorado.edu>
1017 2005-02-23 Fernando Perez <fperez@colorado.edu>
1015
1018
1016 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1019 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1017 auto_aliases for win32 which were causing problems. Users can
1020 auto_aliases for win32 which were causing problems. Users can
1018 define the ones they personally like.
1021 define the ones they personally like.
1019
1022
1020 2005-02-21 Fernando Perez <fperez@colorado.edu>
1023 2005-02-21 Fernando Perez <fperez@colorado.edu>
1021
1024
1022 * IPython/Magic.py (magic_time): new magic to time execution of
1025 * IPython/Magic.py (magic_time): new magic to time execution of
1023 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1026 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1024
1027
1025 2005-02-19 Fernando Perez <fperez@colorado.edu>
1028 2005-02-19 Fernando Perez <fperez@colorado.edu>
1026
1029
1027 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1030 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1028 into keys (for prompts, for example).
1031 into keys (for prompts, for example).
1029
1032
1030 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1033 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1031 prompts in case users want them. This introduces a small behavior
1034 prompts in case users want them. This introduces a small behavior
1032 change: ipython does not automatically add a space to all prompts
1035 change: ipython does not automatically add a space to all prompts
1033 anymore. To get the old prompts with a space, users should add it
1036 anymore. To get the old prompts with a space, users should add it
1034 manually to their ipythonrc file, so for example prompt_in1 should
1037 manually to their ipythonrc file, so for example prompt_in1 should
1035 now read 'In [\#]: ' instead of 'In [\#]:'.
1038 now read 'In [\#]: ' instead of 'In [\#]:'.
1036 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1039 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1037 file) to control left-padding of secondary prompts.
1040 file) to control left-padding of secondary prompts.
1038
1041
1039 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1042 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1040 the profiler can't be imported. Fix for Debian, which removed
1043 the profiler can't be imported. Fix for Debian, which removed
1041 profile.py because of License issues. I applied a slightly
1044 profile.py because of License issues. I applied a slightly
1042 modified version of the original Debian patch at
1045 modified version of the original Debian patch at
1043 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1046 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1044
1047
1045 2005-02-17 Fernando Perez <fperez@colorado.edu>
1048 2005-02-17 Fernando Perez <fperez@colorado.edu>
1046
1049
1047 * IPython/genutils.py (native_line_ends): Fix bug which would
1050 * IPython/genutils.py (native_line_ends): Fix bug which would
1048 cause improper line-ends under win32 b/c I was not opening files
1051 cause improper line-ends under win32 b/c I was not opening files
1049 in binary mode. Bug report and fix thanks to Ville.
1052 in binary mode. Bug report and fix thanks to Ville.
1050
1053
1051 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1054 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1052 trying to catch spurious foo[1] autocalls. My fix actually broke
1055 trying to catch spurious foo[1] autocalls. My fix actually broke
1053 ',/' autoquote/call with explicit escape (bad regexp).
1056 ',/' autoquote/call with explicit escape (bad regexp).
1054
1057
1055 2005-02-15 *** Released version 0.6.11
1058 2005-02-15 *** Released version 0.6.11
1056
1059
1057 2005-02-14 Fernando Perez <fperez@colorado.edu>
1060 2005-02-14 Fernando Perez <fperez@colorado.edu>
1058
1061
1059 * IPython/background_jobs.py: New background job management
1062 * IPython/background_jobs.py: New background job management
1060 subsystem. This is implemented via a new set of classes, and
1063 subsystem. This is implemented via a new set of classes, and
1061 IPython now provides a builtin 'jobs' object for background job
1064 IPython now provides a builtin 'jobs' object for background job
1062 execution. A convenience %bg magic serves as a lightweight
1065 execution. A convenience %bg magic serves as a lightweight
1063 frontend for starting the more common type of calls. This was
1066 frontend for starting the more common type of calls. This was
1064 inspired by discussions with B. Granger and the BackgroundCommand
1067 inspired by discussions with B. Granger and the BackgroundCommand
1065 class described in the book Python Scripting for Computational
1068 class described in the book Python Scripting for Computational
1066 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1069 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1067 (although ultimately no code from this text was used, as IPython's
1070 (although ultimately no code from this text was used, as IPython's
1068 system is a separate implementation).
1071 system is a separate implementation).
1069
1072
1070 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1073 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1071 to control the completion of single/double underscore names
1074 to control the completion of single/double underscore names
1072 separately. As documented in the example ipytonrc file, the
1075 separately. As documented in the example ipytonrc file, the
1073 readline_omit__names variable can now be set to 2, to omit even
1076 readline_omit__names variable can now be set to 2, to omit even
1074 single underscore names. Thanks to a patch by Brian Wong
1077 single underscore names. Thanks to a patch by Brian Wong
1075 <BrianWong-AT-AirgoNetworks.Com>.
1078 <BrianWong-AT-AirgoNetworks.Com>.
1076 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1079 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1077 be autocalled as foo([1]) if foo were callable. A problem for
1080 be autocalled as foo([1]) if foo were callable. A problem for
1078 things which are both callable and implement __getitem__.
1081 things which are both callable and implement __getitem__.
1079 (init_readline): Fix autoindentation for win32. Thanks to a patch
1082 (init_readline): Fix autoindentation for win32. Thanks to a patch
1080 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1083 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1081
1084
1082 2005-02-12 Fernando Perez <fperez@colorado.edu>
1085 2005-02-12 Fernando Perez <fperez@colorado.edu>
1083
1086
1084 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1087 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1085 which I had written long ago to sort out user error messages which
1088 which I had written long ago to sort out user error messages which
1086 may occur during startup. This seemed like a good idea initially,
1089 may occur during startup. This seemed like a good idea initially,
1087 but it has proven a disaster in retrospect. I don't want to
1090 but it has proven a disaster in retrospect. I don't want to
1088 change much code for now, so my fix is to set the internal 'debug'
1091 change much code for now, so my fix is to set the internal 'debug'
1089 flag to true everywhere, whose only job was precisely to control
1092 flag to true everywhere, whose only job was precisely to control
1090 this subsystem. This closes issue 28 (as well as avoiding all
1093 this subsystem. This closes issue 28 (as well as avoiding all
1091 sorts of strange hangups which occur from time to time).
1094 sorts of strange hangups which occur from time to time).
1092
1095
1093 2005-02-07 Fernando Perez <fperez@colorado.edu>
1096 2005-02-07 Fernando Perez <fperez@colorado.edu>
1094
1097
1095 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1098 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1096 previous call produced a syntax error.
1099 previous call produced a syntax error.
1097
1100
1098 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1101 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1099 classes without constructor.
1102 classes without constructor.
1100
1103
1101 2005-02-06 Fernando Perez <fperez@colorado.edu>
1104 2005-02-06 Fernando Perez <fperez@colorado.edu>
1102
1105
1103 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1106 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1104 completions with the results of each matcher, so we return results
1107 completions with the results of each matcher, so we return results
1105 to the user from all namespaces. This breaks with ipython
1108 to the user from all namespaces. This breaks with ipython
1106 tradition, but I think it's a nicer behavior. Now you get all
1109 tradition, but I think it's a nicer behavior. Now you get all
1107 possible completions listed, from all possible namespaces (python,
1110 possible completions listed, from all possible namespaces (python,
1108 filesystem, magics...) After a request by John Hunter
1111 filesystem, magics...) After a request by John Hunter
1109 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1112 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1110
1113
1111 2005-02-05 Fernando Perez <fperez@colorado.edu>
1114 2005-02-05 Fernando Perez <fperez@colorado.edu>
1112
1115
1113 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1116 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1114 the call had quote characters in it (the quotes were stripped).
1117 the call had quote characters in it (the quotes were stripped).
1115
1118
1116 2005-01-31 Fernando Perez <fperez@colorado.edu>
1119 2005-01-31 Fernando Perez <fperez@colorado.edu>
1117
1120
1118 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1121 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1119 Itpl.itpl() to make the code more robust against psyco
1122 Itpl.itpl() to make the code more robust against psyco
1120 optimizations.
1123 optimizations.
1121
1124
1122 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1125 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1123 of causing an exception. Quicker, cleaner.
1126 of causing an exception. Quicker, cleaner.
1124
1127
1125 2005-01-28 Fernando Perez <fperez@colorado.edu>
1128 2005-01-28 Fernando Perez <fperez@colorado.edu>
1126
1129
1127 * scripts/ipython_win_post_install.py (install): hardcode
1130 * scripts/ipython_win_post_install.py (install): hardcode
1128 sys.prefix+'python.exe' as the executable path. It turns out that
1131 sys.prefix+'python.exe' as the executable path. It turns out that
1129 during the post-installation run, sys.executable resolves to the
1132 during the post-installation run, sys.executable resolves to the
1130 name of the binary installer! I should report this as a distutils
1133 name of the binary installer! I should report this as a distutils
1131 bug, I think. I updated the .10 release with this tiny fix, to
1134 bug, I think. I updated the .10 release with this tiny fix, to
1132 avoid annoying the lists further.
1135 avoid annoying the lists further.
1133
1136
1134 2005-01-27 *** Released version 0.6.10
1137 2005-01-27 *** Released version 0.6.10
1135
1138
1136 2005-01-27 Fernando Perez <fperez@colorado.edu>
1139 2005-01-27 Fernando Perez <fperez@colorado.edu>
1137
1140
1138 * IPython/numutils.py (norm): Added 'inf' as optional name for
1141 * IPython/numutils.py (norm): Added 'inf' as optional name for
1139 L-infinity norm, included references to mathworld.com for vector
1142 L-infinity norm, included references to mathworld.com for vector
1140 norm definitions.
1143 norm definitions.
1141 (amin/amax): added amin/amax for array min/max. Similar to what
1144 (amin/amax): added amin/amax for array min/max. Similar to what
1142 pylab ships with after the recent reorganization of names.
1145 pylab ships with after the recent reorganization of names.
1143 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1146 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1144
1147
1145 * ipython.el: committed Alex's recent fixes and improvements.
1148 * ipython.el: committed Alex's recent fixes and improvements.
1146 Tested with python-mode from CVS, and it looks excellent. Since
1149 Tested with python-mode from CVS, and it looks excellent. Since
1147 python-mode hasn't released anything in a while, I'm temporarily
1150 python-mode hasn't released anything in a while, I'm temporarily
1148 putting a copy of today's CVS (v 4.70) of python-mode in:
1151 putting a copy of today's CVS (v 4.70) of python-mode in:
1149 http://ipython.scipy.org/tmp/python-mode.el
1152 http://ipython.scipy.org/tmp/python-mode.el
1150
1153
1151 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1154 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1152 sys.executable for the executable name, instead of assuming it's
1155 sys.executable for the executable name, instead of assuming it's
1153 called 'python.exe' (the post-installer would have produced broken
1156 called 'python.exe' (the post-installer would have produced broken
1154 setups on systems with a differently named python binary).
1157 setups on systems with a differently named python binary).
1155
1158
1156 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1159 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1157 references to os.linesep, to make the code more
1160 references to os.linesep, to make the code more
1158 platform-independent. This is also part of the win32 coloring
1161 platform-independent. This is also part of the win32 coloring
1159 fixes.
1162 fixes.
1160
1163
1161 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1164 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1162 lines, which actually cause coloring bugs because the length of
1165 lines, which actually cause coloring bugs because the length of
1163 the line is very difficult to correctly compute with embedded
1166 the line is very difficult to correctly compute with embedded
1164 escapes. This was the source of all the coloring problems under
1167 escapes. This was the source of all the coloring problems under
1165 Win32. I think that _finally_, Win32 users have a properly
1168 Win32. I think that _finally_, Win32 users have a properly
1166 working ipython in all respects. This would never have happened
1169 working ipython in all respects. This would never have happened
1167 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1170 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1168
1171
1169 2005-01-26 *** Released version 0.6.9
1172 2005-01-26 *** Released version 0.6.9
1170
1173
1171 2005-01-25 Fernando Perez <fperez@colorado.edu>
1174 2005-01-25 Fernando Perez <fperez@colorado.edu>
1172
1175
1173 * setup.py: finally, we have a true Windows installer, thanks to
1176 * setup.py: finally, we have a true Windows installer, thanks to
1174 the excellent work of Viktor Ransmayr
1177 the excellent work of Viktor Ransmayr
1175 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1178 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1176 Windows users. The setup routine is quite a bit cleaner thanks to
1179 Windows users. The setup routine is quite a bit cleaner thanks to
1177 this, and the post-install script uses the proper functions to
1180 this, and the post-install script uses the proper functions to
1178 allow a clean de-installation using the standard Windows Control
1181 allow a clean de-installation using the standard Windows Control
1179 Panel.
1182 Panel.
1180
1183
1181 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1184 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1182 environment variable under all OSes (including win32) if
1185 environment variable under all OSes (including win32) if
1183 available. This will give consistency to win32 users who have set
1186 available. This will give consistency to win32 users who have set
1184 this variable for any reason. If os.environ['HOME'] fails, the
1187 this variable for any reason. If os.environ['HOME'] fails, the
1185 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1188 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1186
1189
1187 2005-01-24 Fernando Perez <fperez@colorado.edu>
1190 2005-01-24 Fernando Perez <fperez@colorado.edu>
1188
1191
1189 * IPython/numutils.py (empty_like): add empty_like(), similar to
1192 * IPython/numutils.py (empty_like): add empty_like(), similar to
1190 zeros_like() but taking advantage of the new empty() Numeric routine.
1193 zeros_like() but taking advantage of the new empty() Numeric routine.
1191
1194
1192 2005-01-23 *** Released version 0.6.8
1195 2005-01-23 *** Released version 0.6.8
1193
1196
1194 2005-01-22 Fernando Perez <fperez@colorado.edu>
1197 2005-01-22 Fernando Perez <fperez@colorado.edu>
1195
1198
1196 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1199 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1197 automatic show() calls. After discussing things with JDH, it
1200 automatic show() calls. After discussing things with JDH, it
1198 turns out there are too many corner cases where this can go wrong.
1201 turns out there are too many corner cases where this can go wrong.
1199 It's best not to try to be 'too smart', and simply have ipython
1202 It's best not to try to be 'too smart', and simply have ipython
1200 reproduce as much as possible the default behavior of a normal
1203 reproduce as much as possible the default behavior of a normal
1201 python shell.
1204 python shell.
1202
1205
1203 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1206 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1204 line-splitting regexp and _prefilter() to avoid calling getattr()
1207 line-splitting regexp and _prefilter() to avoid calling getattr()
1205 on assignments. This closes
1208 on assignments. This closes
1206 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1209 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1207 readline uses getattr(), so a simple <TAB> keypress is still
1210 readline uses getattr(), so a simple <TAB> keypress is still
1208 enough to trigger getattr() calls on an object.
1211 enough to trigger getattr() calls on an object.
1209
1212
1210 2005-01-21 Fernando Perez <fperez@colorado.edu>
1213 2005-01-21 Fernando Perez <fperez@colorado.edu>
1211
1214
1212 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1215 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1213 docstring under pylab so it doesn't mask the original.
1216 docstring under pylab so it doesn't mask the original.
1214
1217
1215 2005-01-21 *** Released version 0.6.7
1218 2005-01-21 *** Released version 0.6.7
1216
1219
1217 2005-01-21 Fernando Perez <fperez@colorado.edu>
1220 2005-01-21 Fernando Perez <fperez@colorado.edu>
1218
1221
1219 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1222 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1220 signal handling for win32 users in multithreaded mode.
1223 signal handling for win32 users in multithreaded mode.
1221
1224
1222 2005-01-17 Fernando Perez <fperez@colorado.edu>
1225 2005-01-17 Fernando Perez <fperez@colorado.edu>
1223
1226
1224 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1227 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1225 instances with no __init__. After a crash report by Norbert Nemec
1228 instances with no __init__. After a crash report by Norbert Nemec
1226 <Norbert-AT-nemec-online.de>.
1229 <Norbert-AT-nemec-online.de>.
1227
1230
1228 2005-01-14 Fernando Perez <fperez@colorado.edu>
1231 2005-01-14 Fernando Perez <fperez@colorado.edu>
1229
1232
1230 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1233 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1231 names for verbose exceptions, when multiple dotted names and the
1234 names for verbose exceptions, when multiple dotted names and the
1232 'parent' object were present on the same line.
1235 'parent' object were present on the same line.
1233
1236
1234 2005-01-11 Fernando Perez <fperez@colorado.edu>
1237 2005-01-11 Fernando Perez <fperez@colorado.edu>
1235
1238
1236 * IPython/genutils.py (flag_calls): new utility to trap and flag
1239 * IPython/genutils.py (flag_calls): new utility to trap and flag
1237 calls in functions. I need it to clean up matplotlib support.
1240 calls in functions. I need it to clean up matplotlib support.
1238 Also removed some deprecated code in genutils.
1241 Also removed some deprecated code in genutils.
1239
1242
1240 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1243 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1241 that matplotlib scripts called with %run, which don't call show()
1244 that matplotlib scripts called with %run, which don't call show()
1242 themselves, still have their plotting windows open.
1245 themselves, still have their plotting windows open.
1243
1246
1244 2005-01-05 Fernando Perez <fperez@colorado.edu>
1247 2005-01-05 Fernando Perez <fperez@colorado.edu>
1245
1248
1246 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1249 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1247 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1250 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1248
1251
1249 2004-12-19 Fernando Perez <fperez@colorado.edu>
1252 2004-12-19 Fernando Perez <fperez@colorado.edu>
1250
1253
1251 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1254 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1252 parent_runcode, which was an eyesore. The same result can be
1255 parent_runcode, which was an eyesore. The same result can be
1253 obtained with Python's regular superclass mechanisms.
1256 obtained with Python's regular superclass mechanisms.
1254
1257
1255 2004-12-17 Fernando Perez <fperez@colorado.edu>
1258 2004-12-17 Fernando Perez <fperez@colorado.edu>
1256
1259
1257 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1260 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1258 reported by Prabhu.
1261 reported by Prabhu.
1259 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1262 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1260 sys.stderr) instead of explicitly calling sys.stderr. This helps
1263 sys.stderr) instead of explicitly calling sys.stderr. This helps
1261 maintain our I/O abstractions clean, for future GUI embeddings.
1264 maintain our I/O abstractions clean, for future GUI embeddings.
1262
1265
1263 * IPython/genutils.py (info): added new utility for sys.stderr
1266 * IPython/genutils.py (info): added new utility for sys.stderr
1264 unified info message handling (thin wrapper around warn()).
1267 unified info message handling (thin wrapper around warn()).
1265
1268
1266 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1269 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1267 composite (dotted) names on verbose exceptions.
1270 composite (dotted) names on verbose exceptions.
1268 (VerboseTB.nullrepr): harden against another kind of errors which
1271 (VerboseTB.nullrepr): harden against another kind of errors which
1269 Python's inspect module can trigger, and which were crashing
1272 Python's inspect module can trigger, and which were crashing
1270 IPython. Thanks to a report by Marco Lombardi
1273 IPython. Thanks to a report by Marco Lombardi
1271 <mlombard-AT-ma010192.hq.eso.org>.
1274 <mlombard-AT-ma010192.hq.eso.org>.
1272
1275
1273 2004-12-13 *** Released version 0.6.6
1276 2004-12-13 *** Released version 0.6.6
1274
1277
1275 2004-12-12 Fernando Perez <fperez@colorado.edu>
1278 2004-12-12 Fernando Perez <fperez@colorado.edu>
1276
1279
1277 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1280 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1278 generated by pygtk upon initialization if it was built without
1281 generated by pygtk upon initialization if it was built without
1279 threads (for matplotlib users). After a crash reported by
1282 threads (for matplotlib users). After a crash reported by
1280 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1283 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1281
1284
1282 * IPython/ipmaker.py (make_IPython): fix small bug in the
1285 * IPython/ipmaker.py (make_IPython): fix small bug in the
1283 import_some parameter for multiple imports.
1286 import_some parameter for multiple imports.
1284
1287
1285 * IPython/iplib.py (ipmagic): simplified the interface of
1288 * IPython/iplib.py (ipmagic): simplified the interface of
1286 ipmagic() to take a single string argument, just as it would be
1289 ipmagic() to take a single string argument, just as it would be
1287 typed at the IPython cmd line.
1290 typed at the IPython cmd line.
1288 (ipalias): Added new ipalias() with an interface identical to
1291 (ipalias): Added new ipalias() with an interface identical to
1289 ipmagic(). This completes exposing a pure python interface to the
1292 ipmagic(). This completes exposing a pure python interface to the
1290 alias and magic system, which can be used in loops or more complex
1293 alias and magic system, which can be used in loops or more complex
1291 code where IPython's automatic line mangling is not active.
1294 code where IPython's automatic line mangling is not active.
1292
1295
1293 * IPython/genutils.py (timing): changed interface of timing to
1296 * IPython/genutils.py (timing): changed interface of timing to
1294 simply run code once, which is the most common case. timings()
1297 simply run code once, which is the most common case. timings()
1295 remains unchanged, for the cases where you want multiple runs.
1298 remains unchanged, for the cases where you want multiple runs.
1296
1299
1297 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1300 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1298 bug where Python2.2 crashes with exec'ing code which does not end
1301 bug where Python2.2 crashes with exec'ing code which does not end
1299 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1302 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1300 before.
1303 before.
1301
1304
1302 2004-12-10 Fernando Perez <fperez@colorado.edu>
1305 2004-12-10 Fernando Perez <fperez@colorado.edu>
1303
1306
1304 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1307 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1305 -t to -T, to accomodate the new -t flag in %run (the %run and
1308 -t to -T, to accomodate the new -t flag in %run (the %run and
1306 %prun options are kind of intermixed, and it's not easy to change
1309 %prun options are kind of intermixed, and it's not easy to change
1307 this with the limitations of python's getopt).
1310 this with the limitations of python's getopt).
1308
1311
1309 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1312 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1310 the execution of scripts. It's not as fine-tuned as timeit.py,
1313 the execution of scripts. It's not as fine-tuned as timeit.py,
1311 but it works from inside ipython (and under 2.2, which lacks
1314 but it works from inside ipython (and under 2.2, which lacks
1312 timeit.py). Optionally a number of runs > 1 can be given for
1315 timeit.py). Optionally a number of runs > 1 can be given for
1313 timing very short-running code.
1316 timing very short-running code.
1314
1317
1315 * IPython/genutils.py (uniq_stable): new routine which returns a
1318 * IPython/genutils.py (uniq_stable): new routine which returns a
1316 list of unique elements in any iterable, but in stable order of
1319 list of unique elements in any iterable, but in stable order of
1317 appearance. I needed this for the ultraTB fixes, and it's a handy
1320 appearance. I needed this for the ultraTB fixes, and it's a handy
1318 utility.
1321 utility.
1319
1322
1320 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1323 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1321 dotted names in Verbose exceptions. This had been broken since
1324 dotted names in Verbose exceptions. This had been broken since
1322 the very start, now x.y will properly be printed in a Verbose
1325 the very start, now x.y will properly be printed in a Verbose
1323 traceback, instead of x being shown and y appearing always as an
1326 traceback, instead of x being shown and y appearing always as an
1324 'undefined global'. Getting this to work was a bit tricky,
1327 'undefined global'. Getting this to work was a bit tricky,
1325 because by default python tokenizers are stateless. Saved by
1328 because by default python tokenizers are stateless. Saved by
1326 python's ability to easily add a bit of state to an arbitrary
1329 python's ability to easily add a bit of state to an arbitrary
1327 function (without needing to build a full-blown callable object).
1330 function (without needing to build a full-blown callable object).
1328
1331
1329 Also big cleanup of this code, which had horrendous runtime
1332 Also big cleanup of this code, which had horrendous runtime
1330 lookups of zillions of attributes for colorization. Moved all
1333 lookups of zillions of attributes for colorization. Moved all
1331 this code into a few templates, which make it cleaner and quicker.
1334 this code into a few templates, which make it cleaner and quicker.
1332
1335
1333 Printout quality was also improved for Verbose exceptions: one
1336 Printout quality was also improved for Verbose exceptions: one
1334 variable per line, and memory addresses are printed (this can be
1337 variable per line, and memory addresses are printed (this can be
1335 quite handy in nasty debugging situations, which is what Verbose
1338 quite handy in nasty debugging situations, which is what Verbose
1336 is for).
1339 is for).
1337
1340
1338 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1341 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1339 the command line as scripts to be loaded by embedded instances.
1342 the command line as scripts to be loaded by embedded instances.
1340 Doing so has the potential for an infinite recursion if there are
1343 Doing so has the potential for an infinite recursion if there are
1341 exceptions thrown in the process. This fixes a strange crash
1344 exceptions thrown in the process. This fixes a strange crash
1342 reported by Philippe MULLER <muller-AT-irit.fr>.
1345 reported by Philippe MULLER <muller-AT-irit.fr>.
1343
1346
1344 2004-12-09 Fernando Perez <fperez@colorado.edu>
1347 2004-12-09 Fernando Perez <fperez@colorado.edu>
1345
1348
1346 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1349 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1347 to reflect new names in matplotlib, which now expose the
1350 to reflect new names in matplotlib, which now expose the
1348 matlab-compatible interface via a pylab module instead of the
1351 matlab-compatible interface via a pylab module instead of the
1349 'matlab' name. The new code is backwards compatible, so users of
1352 'matlab' name. The new code is backwards compatible, so users of
1350 all matplotlib versions are OK. Patch by J. Hunter.
1353 all matplotlib versions are OK. Patch by J. Hunter.
1351
1354
1352 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1355 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1353 of __init__ docstrings for instances (class docstrings are already
1356 of __init__ docstrings for instances (class docstrings are already
1354 automatically printed). Instances with customized docstrings
1357 automatically printed). Instances with customized docstrings
1355 (indep. of the class) are also recognized and all 3 separate
1358 (indep. of the class) are also recognized and all 3 separate
1356 docstrings are printed (instance, class, constructor). After some
1359 docstrings are printed (instance, class, constructor). After some
1357 comments/suggestions by J. Hunter.
1360 comments/suggestions by J. Hunter.
1358
1361
1359 2004-12-05 Fernando Perez <fperez@colorado.edu>
1362 2004-12-05 Fernando Perez <fperez@colorado.edu>
1360
1363
1361 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1364 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1362 warnings when tab-completion fails and triggers an exception.
1365 warnings when tab-completion fails and triggers an exception.
1363
1366
1364 2004-12-03 Fernando Perez <fperez@colorado.edu>
1367 2004-12-03 Fernando Perez <fperez@colorado.edu>
1365
1368
1366 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1369 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1367 be triggered when using 'run -p'. An incorrect option flag was
1370 be triggered when using 'run -p'. An incorrect option flag was
1368 being set ('d' instead of 'D').
1371 being set ('d' instead of 'D').
1369 (manpage): fix missing escaped \- sign.
1372 (manpage): fix missing escaped \- sign.
1370
1373
1371 2004-11-30 *** Released version 0.6.5
1374 2004-11-30 *** Released version 0.6.5
1372
1375
1373 2004-11-30 Fernando Perez <fperez@colorado.edu>
1376 2004-11-30 Fernando Perez <fperez@colorado.edu>
1374
1377
1375 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1378 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1376 setting with -d option.
1379 setting with -d option.
1377
1380
1378 * setup.py (docfiles): Fix problem where the doc glob I was using
1381 * setup.py (docfiles): Fix problem where the doc glob I was using
1379 was COMPLETELY BROKEN. It was giving the right files by pure
1382 was COMPLETELY BROKEN. It was giving the right files by pure
1380 accident, but failed once I tried to include ipython.el. Note:
1383 accident, but failed once I tried to include ipython.el. Note:
1381 glob() does NOT allow you to do exclusion on multiple endings!
1384 glob() does NOT allow you to do exclusion on multiple endings!
1382
1385
1383 2004-11-29 Fernando Perez <fperez@colorado.edu>
1386 2004-11-29 Fernando Perez <fperez@colorado.edu>
1384
1387
1385 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1388 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1386 the manpage as the source. Better formatting & consistency.
1389 the manpage as the source. Better formatting & consistency.
1387
1390
1388 * IPython/Magic.py (magic_run): Added new -d option, to run
1391 * IPython/Magic.py (magic_run): Added new -d option, to run
1389 scripts under the control of the python pdb debugger. Note that
1392 scripts under the control of the python pdb debugger. Note that
1390 this required changing the %prun option -d to -D, to avoid a clash
1393 this required changing the %prun option -d to -D, to avoid a clash
1391 (since %run must pass options to %prun, and getopt is too dumb to
1394 (since %run must pass options to %prun, and getopt is too dumb to
1392 handle options with string values with embedded spaces). Thanks
1395 handle options with string values with embedded spaces). Thanks
1393 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1396 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1394 (magic_who_ls): added type matching to %who and %whos, so that one
1397 (magic_who_ls): added type matching to %who and %whos, so that one
1395 can filter their output to only include variables of certain
1398 can filter their output to only include variables of certain
1396 types. Another suggestion by Matthew.
1399 types. Another suggestion by Matthew.
1397 (magic_whos): Added memory summaries in kb and Mb for arrays.
1400 (magic_whos): Added memory summaries in kb and Mb for arrays.
1398 (magic_who): Improve formatting (break lines every 9 vars).
1401 (magic_who): Improve formatting (break lines every 9 vars).
1399
1402
1400 2004-11-28 Fernando Perez <fperez@colorado.edu>
1403 2004-11-28 Fernando Perez <fperez@colorado.edu>
1401
1404
1402 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1405 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1403 cache when empty lines were present.
1406 cache when empty lines were present.
1404
1407
1405 2004-11-24 Fernando Perez <fperez@colorado.edu>
1408 2004-11-24 Fernando Perez <fperez@colorado.edu>
1406
1409
1407 * IPython/usage.py (__doc__): document the re-activated threading
1410 * IPython/usage.py (__doc__): document the re-activated threading
1408 options for WX and GTK.
1411 options for WX and GTK.
1409
1412
1410 2004-11-23 Fernando Perez <fperez@colorado.edu>
1413 2004-11-23 Fernando Perez <fperez@colorado.edu>
1411
1414
1412 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1415 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1413 the -wthread and -gthread options, along with a new -tk one to try
1416 the -wthread and -gthread options, along with a new -tk one to try
1414 and coordinate Tk threading with wx/gtk. The tk support is very
1417 and coordinate Tk threading with wx/gtk. The tk support is very
1415 platform dependent, since it seems to require Tcl and Tk to be
1418 platform dependent, since it seems to require Tcl and Tk to be
1416 built with threads (Fedora1/2 appears NOT to have it, but in
1419 built with threads (Fedora1/2 appears NOT to have it, but in
1417 Prabhu's Debian boxes it works OK). But even with some Tk
1420 Prabhu's Debian boxes it works OK). But even with some Tk
1418 limitations, this is a great improvement.
1421 limitations, this is a great improvement.
1419
1422
1420 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1423 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1421 info in user prompts. Patch by Prabhu.
1424 info in user prompts. Patch by Prabhu.
1422
1425
1423 2004-11-18 Fernando Perez <fperez@colorado.edu>
1426 2004-11-18 Fernando Perez <fperez@colorado.edu>
1424
1427
1425 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1428 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1426 EOFErrors and bail, to avoid infinite loops if a non-terminating
1429 EOFErrors and bail, to avoid infinite loops if a non-terminating
1427 file is fed into ipython. Patch submitted in issue 19 by user,
1430 file is fed into ipython. Patch submitted in issue 19 by user,
1428 many thanks.
1431 many thanks.
1429
1432
1430 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1433 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1431 autoquote/parens in continuation prompts, which can cause lots of
1434 autoquote/parens in continuation prompts, which can cause lots of
1432 problems. Closes roundup issue 20.
1435 problems. Closes roundup issue 20.
1433
1436
1434 2004-11-17 Fernando Perez <fperez@colorado.edu>
1437 2004-11-17 Fernando Perez <fperez@colorado.edu>
1435
1438
1436 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1439 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1437 reported as debian bug #280505. I'm not sure my local changelog
1440 reported as debian bug #280505. I'm not sure my local changelog
1438 entry has the proper debian format (Jack?).
1441 entry has the proper debian format (Jack?).
1439
1442
1440 2004-11-08 *** Released version 0.6.4
1443 2004-11-08 *** Released version 0.6.4
1441
1444
1442 2004-11-08 Fernando Perez <fperez@colorado.edu>
1445 2004-11-08 Fernando Perez <fperez@colorado.edu>
1443
1446
1444 * IPython/iplib.py (init_readline): Fix exit message for Windows
1447 * IPython/iplib.py (init_readline): Fix exit message for Windows
1445 when readline is active. Thanks to a report by Eric Jones
1448 when readline is active. Thanks to a report by Eric Jones
1446 <eric-AT-enthought.com>.
1449 <eric-AT-enthought.com>.
1447
1450
1448 2004-11-07 Fernando Perez <fperez@colorado.edu>
1451 2004-11-07 Fernando Perez <fperez@colorado.edu>
1449
1452
1450 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1453 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1451 sometimes seen by win2k/cygwin users.
1454 sometimes seen by win2k/cygwin users.
1452
1455
1453 2004-11-06 Fernando Perez <fperez@colorado.edu>
1456 2004-11-06 Fernando Perez <fperez@colorado.edu>
1454
1457
1455 * IPython/iplib.py (interact): Change the handling of %Exit from
1458 * IPython/iplib.py (interact): Change the handling of %Exit from
1456 trying to propagate a SystemExit to an internal ipython flag.
1459 trying to propagate a SystemExit to an internal ipython flag.
1457 This is less elegant than using Python's exception mechanism, but
1460 This is less elegant than using Python's exception mechanism, but
1458 I can't get that to work reliably with threads, so under -pylab
1461 I can't get that to work reliably with threads, so under -pylab
1459 %Exit was hanging IPython. Cross-thread exception handling is
1462 %Exit was hanging IPython. Cross-thread exception handling is
1460 really a bitch. Thaks to a bug report by Stephen Walton
1463 really a bitch. Thaks to a bug report by Stephen Walton
1461 <stephen.walton-AT-csun.edu>.
1464 <stephen.walton-AT-csun.edu>.
1462
1465
1463 2004-11-04 Fernando Perez <fperez@colorado.edu>
1466 2004-11-04 Fernando Perez <fperez@colorado.edu>
1464
1467
1465 * IPython/iplib.py (raw_input_original): store a pointer to the
1468 * IPython/iplib.py (raw_input_original): store a pointer to the
1466 true raw_input to harden against code which can modify it
1469 true raw_input to harden against code which can modify it
1467 (wx.py.PyShell does this and would otherwise crash ipython).
1470 (wx.py.PyShell does this and would otherwise crash ipython).
1468 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1471 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1469
1472
1470 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1473 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1471 Ctrl-C problem, which does not mess up the input line.
1474 Ctrl-C problem, which does not mess up the input line.
1472
1475
1473 2004-11-03 Fernando Perez <fperez@colorado.edu>
1476 2004-11-03 Fernando Perez <fperez@colorado.edu>
1474
1477
1475 * IPython/Release.py: Changed licensing to BSD, in all files.
1478 * IPython/Release.py: Changed licensing to BSD, in all files.
1476 (name): lowercase name for tarball/RPM release.
1479 (name): lowercase name for tarball/RPM release.
1477
1480
1478 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1481 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1479 use throughout ipython.
1482 use throughout ipython.
1480
1483
1481 * IPython/Magic.py (Magic._ofind): Switch to using the new
1484 * IPython/Magic.py (Magic._ofind): Switch to using the new
1482 OInspect.getdoc() function.
1485 OInspect.getdoc() function.
1483
1486
1484 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1487 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1485 of the line currently being canceled via Ctrl-C. It's extremely
1488 of the line currently being canceled via Ctrl-C. It's extremely
1486 ugly, but I don't know how to do it better (the problem is one of
1489 ugly, but I don't know how to do it better (the problem is one of
1487 handling cross-thread exceptions).
1490 handling cross-thread exceptions).
1488
1491
1489 2004-10-28 Fernando Perez <fperez@colorado.edu>
1492 2004-10-28 Fernando Perez <fperez@colorado.edu>
1490
1493
1491 * IPython/Shell.py (signal_handler): add signal handlers to trap
1494 * IPython/Shell.py (signal_handler): add signal handlers to trap
1492 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1495 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1493 report by Francesc Alted.
1496 report by Francesc Alted.
1494
1497
1495 2004-10-21 Fernando Perez <fperez@colorado.edu>
1498 2004-10-21 Fernando Perez <fperez@colorado.edu>
1496
1499
1497 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1500 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1498 to % for pysh syntax extensions.
1501 to % for pysh syntax extensions.
1499
1502
1500 2004-10-09 Fernando Perez <fperez@colorado.edu>
1503 2004-10-09 Fernando Perez <fperez@colorado.edu>
1501
1504
1502 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1505 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1503 arrays to print a more useful summary, without calling str(arr).
1506 arrays to print a more useful summary, without calling str(arr).
1504 This avoids the problem of extremely lengthy computations which
1507 This avoids the problem of extremely lengthy computations which
1505 occur if arr is large, and appear to the user as a system lockup
1508 occur if arr is large, and appear to the user as a system lockup
1506 with 100% cpu activity. After a suggestion by Kristian Sandberg
1509 with 100% cpu activity. After a suggestion by Kristian Sandberg
1507 <Kristian.Sandberg@colorado.edu>.
1510 <Kristian.Sandberg@colorado.edu>.
1508 (Magic.__init__): fix bug in global magic escapes not being
1511 (Magic.__init__): fix bug in global magic escapes not being
1509 correctly set.
1512 correctly set.
1510
1513
1511 2004-10-08 Fernando Perez <fperez@colorado.edu>
1514 2004-10-08 Fernando Perez <fperez@colorado.edu>
1512
1515
1513 * IPython/Magic.py (__license__): change to absolute imports of
1516 * IPython/Magic.py (__license__): change to absolute imports of
1514 ipython's own internal packages, to start adapting to the absolute
1517 ipython's own internal packages, to start adapting to the absolute
1515 import requirement of PEP-328.
1518 import requirement of PEP-328.
1516
1519
1517 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1520 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1518 files, and standardize author/license marks through the Release
1521 files, and standardize author/license marks through the Release
1519 module instead of having per/file stuff (except for files with
1522 module instead of having per/file stuff (except for files with
1520 particular licenses, like the MIT/PSF-licensed codes).
1523 particular licenses, like the MIT/PSF-licensed codes).
1521
1524
1522 * IPython/Debugger.py: remove dead code for python 2.1
1525 * IPython/Debugger.py: remove dead code for python 2.1
1523
1526
1524 2004-10-04 Fernando Perez <fperez@colorado.edu>
1527 2004-10-04 Fernando Perez <fperez@colorado.edu>
1525
1528
1526 * IPython/iplib.py (ipmagic): New function for accessing magics
1529 * IPython/iplib.py (ipmagic): New function for accessing magics
1527 via a normal python function call.
1530 via a normal python function call.
1528
1531
1529 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1532 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1530 from '@' to '%', to accomodate the new @decorator syntax of python
1533 from '@' to '%', to accomodate the new @decorator syntax of python
1531 2.4.
1534 2.4.
1532
1535
1533 2004-09-29 Fernando Perez <fperez@colorado.edu>
1536 2004-09-29 Fernando Perez <fperez@colorado.edu>
1534
1537
1535 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1538 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1536 matplotlib.use to prevent running scripts which try to switch
1539 matplotlib.use to prevent running scripts which try to switch
1537 interactive backends from within ipython. This will just crash
1540 interactive backends from within ipython. This will just crash
1538 the python interpreter, so we can't allow it (but a detailed error
1541 the python interpreter, so we can't allow it (but a detailed error
1539 is given to the user).
1542 is given to the user).
1540
1543
1541 2004-09-28 Fernando Perez <fperez@colorado.edu>
1544 2004-09-28 Fernando Perez <fperez@colorado.edu>
1542
1545
1543 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1546 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1544 matplotlib-related fixes so that using @run with non-matplotlib
1547 matplotlib-related fixes so that using @run with non-matplotlib
1545 scripts doesn't pop up spurious plot windows. This requires
1548 scripts doesn't pop up spurious plot windows. This requires
1546 matplotlib >= 0.63, where I had to make some changes as well.
1549 matplotlib >= 0.63, where I had to make some changes as well.
1547
1550
1548 * IPython/ipmaker.py (make_IPython): update version requirement to
1551 * IPython/ipmaker.py (make_IPython): update version requirement to
1549 python 2.2.
1552 python 2.2.
1550
1553
1551 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1554 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1552 banner arg for embedded customization.
1555 banner arg for embedded customization.
1553
1556
1554 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1557 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1555 explicit uses of __IP as the IPython's instance name. Now things
1558 explicit uses of __IP as the IPython's instance name. Now things
1556 are properly handled via the shell.name value. The actual code
1559 are properly handled via the shell.name value. The actual code
1557 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1560 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1558 is much better than before. I'll clean things completely when the
1561 is much better than before. I'll clean things completely when the
1559 magic stuff gets a real overhaul.
1562 magic stuff gets a real overhaul.
1560
1563
1561 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1564 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1562 minor changes to debian dir.
1565 minor changes to debian dir.
1563
1566
1564 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1567 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1565 pointer to the shell itself in the interactive namespace even when
1568 pointer to the shell itself in the interactive namespace even when
1566 a user-supplied dict is provided. This is needed for embedding
1569 a user-supplied dict is provided. This is needed for embedding
1567 purposes (found by tests with Michel Sanner).
1570 purposes (found by tests with Michel Sanner).
1568
1571
1569 2004-09-27 Fernando Perez <fperez@colorado.edu>
1572 2004-09-27 Fernando Perez <fperez@colorado.edu>
1570
1573
1571 * IPython/UserConfig/ipythonrc: remove []{} from
1574 * IPython/UserConfig/ipythonrc: remove []{} from
1572 readline_remove_delims, so that things like [modname.<TAB> do
1575 readline_remove_delims, so that things like [modname.<TAB> do
1573 proper completion. This disables [].TAB, but that's a less common
1576 proper completion. This disables [].TAB, but that's a less common
1574 case than module names in list comprehensions, for example.
1577 case than module names in list comprehensions, for example.
1575 Thanks to a report by Andrea Riciputi.
1578 Thanks to a report by Andrea Riciputi.
1576
1579
1577 2004-09-09 Fernando Perez <fperez@colorado.edu>
1580 2004-09-09 Fernando Perez <fperez@colorado.edu>
1578
1581
1579 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1582 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1580 blocking problems in win32 and osx. Fix by John.
1583 blocking problems in win32 and osx. Fix by John.
1581
1584
1582 2004-09-08 Fernando Perez <fperez@colorado.edu>
1585 2004-09-08 Fernando Perez <fperez@colorado.edu>
1583
1586
1584 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1587 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1585 for Win32 and OSX. Fix by John Hunter.
1588 for Win32 and OSX. Fix by John Hunter.
1586
1589
1587 2004-08-30 *** Released version 0.6.3
1590 2004-08-30 *** Released version 0.6.3
1588
1591
1589 2004-08-30 Fernando Perez <fperez@colorado.edu>
1592 2004-08-30 Fernando Perez <fperez@colorado.edu>
1590
1593
1591 * setup.py (isfile): Add manpages to list of dependent files to be
1594 * setup.py (isfile): Add manpages to list of dependent files to be
1592 updated.
1595 updated.
1593
1596
1594 2004-08-27 Fernando Perez <fperez@colorado.edu>
1597 2004-08-27 Fernando Perez <fperez@colorado.edu>
1595
1598
1596 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1599 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1597 for now. They don't really work with standalone WX/GTK code
1600 for now. They don't really work with standalone WX/GTK code
1598 (though matplotlib IS working fine with both of those backends).
1601 (though matplotlib IS working fine with both of those backends).
1599 This will neeed much more testing. I disabled most things with
1602 This will neeed much more testing. I disabled most things with
1600 comments, so turning it back on later should be pretty easy.
1603 comments, so turning it back on later should be pretty easy.
1601
1604
1602 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1605 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1603 autocalling of expressions like r'foo', by modifying the line
1606 autocalling of expressions like r'foo', by modifying the line
1604 split regexp. Closes
1607 split regexp. Closes
1605 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1608 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1606 Riley <ipythonbugs-AT-sabi.net>.
1609 Riley <ipythonbugs-AT-sabi.net>.
1607 (InteractiveShell.mainloop): honor --nobanner with banner
1610 (InteractiveShell.mainloop): honor --nobanner with banner
1608 extensions.
1611 extensions.
1609
1612
1610 * IPython/Shell.py: Significant refactoring of all classes, so
1613 * IPython/Shell.py: Significant refactoring of all classes, so
1611 that we can really support ALL matplotlib backends and threading
1614 that we can really support ALL matplotlib backends and threading
1612 models (John spotted a bug with Tk which required this). Now we
1615 models (John spotted a bug with Tk which required this). Now we
1613 should support single-threaded, WX-threads and GTK-threads, both
1616 should support single-threaded, WX-threads and GTK-threads, both
1614 for generic code and for matplotlib.
1617 for generic code and for matplotlib.
1615
1618
1616 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1619 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1617 -pylab, to simplify things for users. Will also remove the pylab
1620 -pylab, to simplify things for users. Will also remove the pylab
1618 profile, since now all of matplotlib configuration is directly
1621 profile, since now all of matplotlib configuration is directly
1619 handled here. This also reduces startup time.
1622 handled here. This also reduces startup time.
1620
1623
1621 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1624 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1622 shell wasn't being correctly called. Also in IPShellWX.
1625 shell wasn't being correctly called. Also in IPShellWX.
1623
1626
1624 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1627 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1625 fine-tune banner.
1628 fine-tune banner.
1626
1629
1627 * IPython/numutils.py (spike): Deprecate these spike functions,
1630 * IPython/numutils.py (spike): Deprecate these spike functions,
1628 delete (long deprecated) gnuplot_exec handler.
1631 delete (long deprecated) gnuplot_exec handler.
1629
1632
1630 2004-08-26 Fernando Perez <fperez@colorado.edu>
1633 2004-08-26 Fernando Perez <fperez@colorado.edu>
1631
1634
1632 * ipython.1: Update for threading options, plus some others which
1635 * ipython.1: Update for threading options, plus some others which
1633 were missing.
1636 were missing.
1634
1637
1635 * IPython/ipmaker.py (__call__): Added -wthread option for
1638 * IPython/ipmaker.py (__call__): Added -wthread option for
1636 wxpython thread handling. Make sure threading options are only
1639 wxpython thread handling. Make sure threading options are only
1637 valid at the command line.
1640 valid at the command line.
1638
1641
1639 * scripts/ipython: moved shell selection into a factory function
1642 * scripts/ipython: moved shell selection into a factory function
1640 in Shell.py, to keep the starter script to a minimum.
1643 in Shell.py, to keep the starter script to a minimum.
1641
1644
1642 2004-08-25 Fernando Perez <fperez@colorado.edu>
1645 2004-08-25 Fernando Perez <fperez@colorado.edu>
1643
1646
1644 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1647 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1645 John. Along with some recent changes he made to matplotlib, the
1648 John. Along with some recent changes he made to matplotlib, the
1646 next versions of both systems should work very well together.
1649 next versions of both systems should work very well together.
1647
1650
1648 2004-08-24 Fernando Perez <fperez@colorado.edu>
1651 2004-08-24 Fernando Perez <fperez@colorado.edu>
1649
1652
1650 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1653 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1651 tried to switch the profiling to using hotshot, but I'm getting
1654 tried to switch the profiling to using hotshot, but I'm getting
1652 strange errors from prof.runctx() there. I may be misreading the
1655 strange errors from prof.runctx() there. I may be misreading the
1653 docs, but it looks weird. For now the profiling code will
1656 docs, but it looks weird. For now the profiling code will
1654 continue to use the standard profiler.
1657 continue to use the standard profiler.
1655
1658
1656 2004-08-23 Fernando Perez <fperez@colorado.edu>
1659 2004-08-23 Fernando Perez <fperez@colorado.edu>
1657
1660
1658 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1661 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1659 threaded shell, by John Hunter. It's not quite ready yet, but
1662 threaded shell, by John Hunter. It's not quite ready yet, but
1660 close.
1663 close.
1661
1664
1662 2004-08-22 Fernando Perez <fperez@colorado.edu>
1665 2004-08-22 Fernando Perez <fperez@colorado.edu>
1663
1666
1664 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1667 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1665 in Magic and ultraTB.
1668 in Magic and ultraTB.
1666
1669
1667 * ipython.1: document threading options in manpage.
1670 * ipython.1: document threading options in manpage.
1668
1671
1669 * scripts/ipython: Changed name of -thread option to -gthread,
1672 * scripts/ipython: Changed name of -thread option to -gthread,
1670 since this is GTK specific. I want to leave the door open for a
1673 since this is GTK specific. I want to leave the door open for a
1671 -wthread option for WX, which will most likely be necessary. This
1674 -wthread option for WX, which will most likely be necessary. This
1672 change affects usage and ipmaker as well.
1675 change affects usage and ipmaker as well.
1673
1676
1674 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1677 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1675 handle the matplotlib shell issues. Code by John Hunter
1678 handle the matplotlib shell issues. Code by John Hunter
1676 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1679 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1677 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1680 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1678 broken (and disabled for end users) for now, but it puts the
1681 broken (and disabled for end users) for now, but it puts the
1679 infrastructure in place.
1682 infrastructure in place.
1680
1683
1681 2004-08-21 Fernando Perez <fperez@colorado.edu>
1684 2004-08-21 Fernando Perez <fperez@colorado.edu>
1682
1685
1683 * ipythonrc-pylab: Add matplotlib support.
1686 * ipythonrc-pylab: Add matplotlib support.
1684
1687
1685 * matplotlib_config.py: new files for matplotlib support, part of
1688 * matplotlib_config.py: new files for matplotlib support, part of
1686 the pylab profile.
1689 the pylab profile.
1687
1690
1688 * IPython/usage.py (__doc__): documented the threading options.
1691 * IPython/usage.py (__doc__): documented the threading options.
1689
1692
1690 2004-08-20 Fernando Perez <fperez@colorado.edu>
1693 2004-08-20 Fernando Perez <fperez@colorado.edu>
1691
1694
1692 * ipython: Modified the main calling routine to handle the -thread
1695 * ipython: Modified the main calling routine to handle the -thread
1693 and -mpthread options. This needs to be done as a top-level hack,
1696 and -mpthread options. This needs to be done as a top-level hack,
1694 because it determines which class to instantiate for IPython
1697 because it determines which class to instantiate for IPython
1695 itself.
1698 itself.
1696
1699
1697 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1700 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1698 classes to support multithreaded GTK operation without blocking,
1701 classes to support multithreaded GTK operation without blocking,
1699 and matplotlib with all backends. This is a lot of still very
1702 and matplotlib with all backends. This is a lot of still very
1700 experimental code, and threads are tricky. So it may still have a
1703 experimental code, and threads are tricky. So it may still have a
1701 few rough edges... This code owes a lot to
1704 few rough edges... This code owes a lot to
1702 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1705 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1703 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1706 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1704 to John Hunter for all the matplotlib work.
1707 to John Hunter for all the matplotlib work.
1705
1708
1706 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1709 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1707 options for gtk thread and matplotlib support.
1710 options for gtk thread and matplotlib support.
1708
1711
1709 2004-08-16 Fernando Perez <fperez@colorado.edu>
1712 2004-08-16 Fernando Perez <fperez@colorado.edu>
1710
1713
1711 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1714 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1712 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1715 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1713 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1716 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1714
1717
1715 2004-08-11 Fernando Perez <fperez@colorado.edu>
1718 2004-08-11 Fernando Perez <fperez@colorado.edu>
1716
1719
1717 * setup.py (isfile): Fix build so documentation gets updated for
1720 * setup.py (isfile): Fix build so documentation gets updated for
1718 rpms (it was only done for .tgz builds).
1721 rpms (it was only done for .tgz builds).
1719
1722
1720 2004-08-10 Fernando Perez <fperez@colorado.edu>
1723 2004-08-10 Fernando Perez <fperez@colorado.edu>
1721
1724
1722 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1725 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1723
1726
1724 * iplib.py : Silence syntax error exceptions in tab-completion.
1727 * iplib.py : Silence syntax error exceptions in tab-completion.
1725
1728
1726 2004-08-05 Fernando Perez <fperez@colorado.edu>
1729 2004-08-05 Fernando Perez <fperez@colorado.edu>
1727
1730
1728 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1731 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1729 'color off' mark for continuation prompts. This was causing long
1732 'color off' mark for continuation prompts. This was causing long
1730 continuation lines to mis-wrap.
1733 continuation lines to mis-wrap.
1731
1734
1732 2004-08-01 Fernando Perez <fperez@colorado.edu>
1735 2004-08-01 Fernando Perez <fperez@colorado.edu>
1733
1736
1734 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1737 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1735 for building ipython to be a parameter. All this is necessary
1738 for building ipython to be a parameter. All this is necessary
1736 right now to have a multithreaded version, but this insane
1739 right now to have a multithreaded version, but this insane
1737 non-design will be cleaned up soon. For now, it's a hack that
1740 non-design will be cleaned up soon. For now, it's a hack that
1738 works.
1741 works.
1739
1742
1740 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1743 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1741 args in various places. No bugs so far, but it's a dangerous
1744 args in various places. No bugs so far, but it's a dangerous
1742 practice.
1745 practice.
1743
1746
1744 2004-07-31 Fernando Perez <fperez@colorado.edu>
1747 2004-07-31 Fernando Perez <fperez@colorado.edu>
1745
1748
1746 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1749 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1747 fix completion of files with dots in their names under most
1750 fix completion of files with dots in their names under most
1748 profiles (pysh was OK because the completion order is different).
1751 profiles (pysh was OK because the completion order is different).
1749
1752
1750 2004-07-27 Fernando Perez <fperez@colorado.edu>
1753 2004-07-27 Fernando Perez <fperez@colorado.edu>
1751
1754
1752 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1755 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1753 keywords manually, b/c the one in keyword.py was removed in python
1756 keywords manually, b/c the one in keyword.py was removed in python
1754 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1757 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1755 This is NOT a bug under python 2.3 and earlier.
1758 This is NOT a bug under python 2.3 and earlier.
1756
1759
1757 2004-07-26 Fernando Perez <fperez@colorado.edu>
1760 2004-07-26 Fernando Perez <fperez@colorado.edu>
1758
1761
1759 * IPython/ultraTB.py (VerboseTB.text): Add another
1762 * IPython/ultraTB.py (VerboseTB.text): Add another
1760 linecache.checkcache() call to try to prevent inspect.py from
1763 linecache.checkcache() call to try to prevent inspect.py from
1761 crashing under python 2.3. I think this fixes
1764 crashing under python 2.3. I think this fixes
1762 http://www.scipy.net/roundup/ipython/issue17.
1765 http://www.scipy.net/roundup/ipython/issue17.
1763
1766
1764 2004-07-26 *** Released version 0.6.2
1767 2004-07-26 *** Released version 0.6.2
1765
1768
1766 2004-07-26 Fernando Perez <fperez@colorado.edu>
1769 2004-07-26 Fernando Perez <fperez@colorado.edu>
1767
1770
1768 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1771 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1769 fail for any number.
1772 fail for any number.
1770 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1773 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1771 empty bookmarks.
1774 empty bookmarks.
1772
1775
1773 2004-07-26 *** Released version 0.6.1
1776 2004-07-26 *** Released version 0.6.1
1774
1777
1775 2004-07-26 Fernando Perez <fperez@colorado.edu>
1778 2004-07-26 Fernando Perez <fperez@colorado.edu>
1776
1779
1777 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1780 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1778
1781
1779 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1782 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1780 escaping '()[]{}' in filenames.
1783 escaping '()[]{}' in filenames.
1781
1784
1782 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1785 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1783 Python 2.2 users who lack a proper shlex.split.
1786 Python 2.2 users who lack a proper shlex.split.
1784
1787
1785 2004-07-19 Fernando Perez <fperez@colorado.edu>
1788 2004-07-19 Fernando Perez <fperez@colorado.edu>
1786
1789
1787 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1790 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1788 for reading readline's init file. I follow the normal chain:
1791 for reading readline's init file. I follow the normal chain:
1789 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1792 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1790 report by Mike Heeter. This closes
1793 report by Mike Heeter. This closes
1791 http://www.scipy.net/roundup/ipython/issue16.
1794 http://www.scipy.net/roundup/ipython/issue16.
1792
1795
1793 2004-07-18 Fernando Perez <fperez@colorado.edu>
1796 2004-07-18 Fernando Perez <fperez@colorado.edu>
1794
1797
1795 * IPython/iplib.py (__init__): Add better handling of '\' under
1798 * IPython/iplib.py (__init__): Add better handling of '\' under
1796 Win32 for filenames. After a patch by Ville.
1799 Win32 for filenames. After a patch by Ville.
1797
1800
1798 2004-07-17 Fernando Perez <fperez@colorado.edu>
1801 2004-07-17 Fernando Perez <fperez@colorado.edu>
1799
1802
1800 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1803 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1801 autocalling would be triggered for 'foo is bar' if foo is
1804 autocalling would be triggered for 'foo is bar' if foo is
1802 callable. I also cleaned up the autocall detection code to use a
1805 callable. I also cleaned up the autocall detection code to use a
1803 regexp, which is faster. Bug reported by Alexander Schmolck.
1806 regexp, which is faster. Bug reported by Alexander Schmolck.
1804
1807
1805 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1808 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1806 '?' in them would confuse the help system. Reported by Alex
1809 '?' in them would confuse the help system. Reported by Alex
1807 Schmolck.
1810 Schmolck.
1808
1811
1809 2004-07-16 Fernando Perez <fperez@colorado.edu>
1812 2004-07-16 Fernando Perez <fperez@colorado.edu>
1810
1813
1811 * IPython/GnuplotInteractive.py (__all__): added plot2.
1814 * IPython/GnuplotInteractive.py (__all__): added plot2.
1812
1815
1813 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1816 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1814 plotting dictionaries, lists or tuples of 1d arrays.
1817 plotting dictionaries, lists or tuples of 1d arrays.
1815
1818
1816 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1819 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1817 optimizations.
1820 optimizations.
1818
1821
1819 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1822 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1820 the information which was there from Janko's original IPP code:
1823 the information which was there from Janko's original IPP code:
1821
1824
1822 03.05.99 20:53 porto.ifm.uni-kiel.de
1825 03.05.99 20:53 porto.ifm.uni-kiel.de
1823 --Started changelog.
1826 --Started changelog.
1824 --make clear do what it say it does
1827 --make clear do what it say it does
1825 --added pretty output of lines from inputcache
1828 --added pretty output of lines from inputcache
1826 --Made Logger a mixin class, simplifies handling of switches
1829 --Made Logger a mixin class, simplifies handling of switches
1827 --Added own completer class. .string<TAB> expands to last history
1830 --Added own completer class. .string<TAB> expands to last history
1828 line which starts with string. The new expansion is also present
1831 line which starts with string. The new expansion is also present
1829 with Ctrl-r from the readline library. But this shows, who this
1832 with Ctrl-r from the readline library. But this shows, who this
1830 can be done for other cases.
1833 can be done for other cases.
1831 --Added convention that all shell functions should accept a
1834 --Added convention that all shell functions should accept a
1832 parameter_string This opens the door for different behaviour for
1835 parameter_string This opens the door for different behaviour for
1833 each function. @cd is a good example of this.
1836 each function. @cd is a good example of this.
1834
1837
1835 04.05.99 12:12 porto.ifm.uni-kiel.de
1838 04.05.99 12:12 porto.ifm.uni-kiel.de
1836 --added logfile rotation
1839 --added logfile rotation
1837 --added new mainloop method which freezes first the namespace
1840 --added new mainloop method which freezes first the namespace
1838
1841
1839 07.05.99 21:24 porto.ifm.uni-kiel.de
1842 07.05.99 21:24 porto.ifm.uni-kiel.de
1840 --added the docreader classes. Now there is a help system.
1843 --added the docreader classes. Now there is a help system.
1841 -This is only a first try. Currently it's not easy to put new
1844 -This is only a first try. Currently it's not easy to put new
1842 stuff in the indices. But this is the way to go. Info would be
1845 stuff in the indices. But this is the way to go. Info would be
1843 better, but HTML is every where and not everybody has an info
1846 better, but HTML is every where and not everybody has an info
1844 system installed and it's not so easy to change html-docs to info.
1847 system installed and it's not so easy to change html-docs to info.
1845 --added global logfile option
1848 --added global logfile option
1846 --there is now a hook for object inspection method pinfo needs to
1849 --there is now a hook for object inspection method pinfo needs to
1847 be provided for this. Can be reached by two '??'.
1850 be provided for this. Can be reached by two '??'.
1848
1851
1849 08.05.99 20:51 porto.ifm.uni-kiel.de
1852 08.05.99 20:51 porto.ifm.uni-kiel.de
1850 --added a README
1853 --added a README
1851 --bug in rc file. Something has changed so functions in the rc
1854 --bug in rc file. Something has changed so functions in the rc
1852 file need to reference the shell and not self. Not clear if it's a
1855 file need to reference the shell and not self. Not clear if it's a
1853 bug or feature.
1856 bug or feature.
1854 --changed rc file for new behavior
1857 --changed rc file for new behavior
1855
1858
1856 2004-07-15 Fernando Perez <fperez@colorado.edu>
1859 2004-07-15 Fernando Perez <fperez@colorado.edu>
1857
1860
1858 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1861 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1859 cache was falling out of sync in bizarre manners when multi-line
1862 cache was falling out of sync in bizarre manners when multi-line
1860 input was present. Minor optimizations and cleanup.
1863 input was present. Minor optimizations and cleanup.
1861
1864
1862 (Logger): Remove old Changelog info for cleanup. This is the
1865 (Logger): Remove old Changelog info for cleanup. This is the
1863 information which was there from Janko's original code:
1866 information which was there from Janko's original code:
1864
1867
1865 Changes to Logger: - made the default log filename a parameter
1868 Changes to Logger: - made the default log filename a parameter
1866
1869
1867 - put a check for lines beginning with !@? in log(). Needed
1870 - put a check for lines beginning with !@? in log(). Needed
1868 (even if the handlers properly log their lines) for mid-session
1871 (even if the handlers properly log their lines) for mid-session
1869 logging activation to work properly. Without this, lines logged
1872 logging activation to work properly. Without this, lines logged
1870 in mid session, which get read from the cache, would end up
1873 in mid session, which get read from the cache, would end up
1871 'bare' (with !@? in the open) in the log. Now they are caught
1874 'bare' (with !@? in the open) in the log. Now they are caught
1872 and prepended with a #.
1875 and prepended with a #.
1873
1876
1874 * IPython/iplib.py (InteractiveShell.init_readline): added check
1877 * IPython/iplib.py (InteractiveShell.init_readline): added check
1875 in case MagicCompleter fails to be defined, so we don't crash.
1878 in case MagicCompleter fails to be defined, so we don't crash.
1876
1879
1877 2004-07-13 Fernando Perez <fperez@colorado.edu>
1880 2004-07-13 Fernando Perez <fperez@colorado.edu>
1878
1881
1879 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1882 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1880 of EPS if the requested filename ends in '.eps'.
1883 of EPS if the requested filename ends in '.eps'.
1881
1884
1882 2004-07-04 Fernando Perez <fperez@colorado.edu>
1885 2004-07-04 Fernando Perez <fperez@colorado.edu>
1883
1886
1884 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1887 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1885 escaping of quotes when calling the shell.
1888 escaping of quotes when calling the shell.
1886
1889
1887 2004-07-02 Fernando Perez <fperez@colorado.edu>
1890 2004-07-02 Fernando Perez <fperez@colorado.edu>
1888
1891
1889 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1892 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1890 gettext not working because we were clobbering '_'. Fixes
1893 gettext not working because we were clobbering '_'. Fixes
1891 http://www.scipy.net/roundup/ipython/issue6.
1894 http://www.scipy.net/roundup/ipython/issue6.
1892
1895
1893 2004-07-01 Fernando Perez <fperez@colorado.edu>
1896 2004-07-01 Fernando Perez <fperez@colorado.edu>
1894
1897
1895 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1898 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1896 into @cd. Patch by Ville.
1899 into @cd. Patch by Ville.
1897
1900
1898 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1901 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1899 new function to store things after ipmaker runs. Patch by Ville.
1902 new function to store things after ipmaker runs. Patch by Ville.
1900 Eventually this will go away once ipmaker is removed and the class
1903 Eventually this will go away once ipmaker is removed and the class
1901 gets cleaned up, but for now it's ok. Key functionality here is
1904 gets cleaned up, but for now it's ok. Key functionality here is
1902 the addition of the persistent storage mechanism, a dict for
1905 the addition of the persistent storage mechanism, a dict for
1903 keeping data across sessions (for now just bookmarks, but more can
1906 keeping data across sessions (for now just bookmarks, but more can
1904 be implemented later).
1907 be implemented later).
1905
1908
1906 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1909 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1907 persistent across sections. Patch by Ville, I modified it
1910 persistent across sections. Patch by Ville, I modified it
1908 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1911 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1909 added a '-l' option to list all bookmarks.
1912 added a '-l' option to list all bookmarks.
1910
1913
1911 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1914 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1912 center for cleanup. Registered with atexit.register(). I moved
1915 center for cleanup. Registered with atexit.register(). I moved
1913 here the old exit_cleanup(). After a patch by Ville.
1916 here the old exit_cleanup(). After a patch by Ville.
1914
1917
1915 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1918 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1916 characters in the hacked shlex_split for python 2.2.
1919 characters in the hacked shlex_split for python 2.2.
1917
1920
1918 * IPython/iplib.py (file_matches): more fixes to filenames with
1921 * IPython/iplib.py (file_matches): more fixes to filenames with
1919 whitespace in them. It's not perfect, but limitations in python's
1922 whitespace in them. It's not perfect, but limitations in python's
1920 readline make it impossible to go further.
1923 readline make it impossible to go further.
1921
1924
1922 2004-06-29 Fernando Perez <fperez@colorado.edu>
1925 2004-06-29 Fernando Perez <fperez@colorado.edu>
1923
1926
1924 * IPython/iplib.py (file_matches): escape whitespace correctly in
1927 * IPython/iplib.py (file_matches): escape whitespace correctly in
1925 filename completions. Bug reported by Ville.
1928 filename completions. Bug reported by Ville.
1926
1929
1927 2004-06-28 Fernando Perez <fperez@colorado.edu>
1930 2004-06-28 Fernando Perez <fperez@colorado.edu>
1928
1931
1929 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1932 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1930 the history file will be called 'history-PROFNAME' (or just
1933 the history file will be called 'history-PROFNAME' (or just
1931 'history' if no profile is loaded). I was getting annoyed at
1934 'history' if no profile is loaded). I was getting annoyed at
1932 getting my Numerical work history clobbered by pysh sessions.
1935 getting my Numerical work history clobbered by pysh sessions.
1933
1936
1934 * IPython/iplib.py (InteractiveShell.__init__): Internal
1937 * IPython/iplib.py (InteractiveShell.__init__): Internal
1935 getoutputerror() function so that we can honor the system_verbose
1938 getoutputerror() function so that we can honor the system_verbose
1936 flag for _all_ system calls. I also added escaping of #
1939 flag for _all_ system calls. I also added escaping of #
1937 characters here to avoid confusing Itpl.
1940 characters here to avoid confusing Itpl.
1938
1941
1939 * IPython/Magic.py (shlex_split): removed call to shell in
1942 * IPython/Magic.py (shlex_split): removed call to shell in
1940 parse_options and replaced it with shlex.split(). The annoying
1943 parse_options and replaced it with shlex.split(). The annoying
1941 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1944 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1942 to backport it from 2.3, with several frail hacks (the shlex
1945 to backport it from 2.3, with several frail hacks (the shlex
1943 module is rather limited in 2.2). Thanks to a suggestion by Ville
1946 module is rather limited in 2.2). Thanks to a suggestion by Ville
1944 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1947 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1945 problem.
1948 problem.
1946
1949
1947 (Magic.magic_system_verbose): new toggle to print the actual
1950 (Magic.magic_system_verbose): new toggle to print the actual
1948 system calls made by ipython. Mainly for debugging purposes.
1951 system calls made by ipython. Mainly for debugging purposes.
1949
1952
1950 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1953 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1951 doesn't support persistence. Reported (and fix suggested) by
1954 doesn't support persistence. Reported (and fix suggested) by
1952 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1955 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1953
1956
1954 2004-06-26 Fernando Perez <fperez@colorado.edu>
1957 2004-06-26 Fernando Perez <fperez@colorado.edu>
1955
1958
1956 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1959 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1957 continue prompts.
1960 continue prompts.
1958
1961
1959 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1962 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1960 function (basically a big docstring) and a few more things here to
1963 function (basically a big docstring) and a few more things here to
1961 speedup startup. pysh.py is now very lightweight. We want because
1964 speedup startup. pysh.py is now very lightweight. We want because
1962 it gets execfile'd, while InterpreterExec gets imported, so
1965 it gets execfile'd, while InterpreterExec gets imported, so
1963 byte-compilation saves time.
1966 byte-compilation saves time.
1964
1967
1965 2004-06-25 Fernando Perez <fperez@colorado.edu>
1968 2004-06-25 Fernando Perez <fperez@colorado.edu>
1966
1969
1967 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1970 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1968 -NUM', which was recently broken.
1971 -NUM', which was recently broken.
1969
1972
1970 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1973 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1971 in multi-line input (but not !!, which doesn't make sense there).
1974 in multi-line input (but not !!, which doesn't make sense there).
1972
1975
1973 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1976 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1974 It's just too useful, and people can turn it off in the less
1977 It's just too useful, and people can turn it off in the less
1975 common cases where it's a problem.
1978 common cases where it's a problem.
1976
1979
1977 2004-06-24 Fernando Perez <fperez@colorado.edu>
1980 2004-06-24 Fernando Perez <fperez@colorado.edu>
1978
1981
1979 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1982 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1980 special syntaxes (like alias calling) is now allied in multi-line
1983 special syntaxes (like alias calling) is now allied in multi-line
1981 input. This is still _very_ experimental, but it's necessary for
1984 input. This is still _very_ experimental, but it's necessary for
1982 efficient shell usage combining python looping syntax with system
1985 efficient shell usage combining python looping syntax with system
1983 calls. For now it's restricted to aliases, I don't think it
1986 calls. For now it's restricted to aliases, I don't think it
1984 really even makes sense to have this for magics.
1987 really even makes sense to have this for magics.
1985
1988
1986 2004-06-23 Fernando Perez <fperez@colorado.edu>
1989 2004-06-23 Fernando Perez <fperez@colorado.edu>
1987
1990
1988 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1991 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1989 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1992 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1990
1993
1991 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1994 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1992 extensions under Windows (after code sent by Gary Bishop). The
1995 extensions under Windows (after code sent by Gary Bishop). The
1993 extensions considered 'executable' are stored in IPython's rc
1996 extensions considered 'executable' are stored in IPython's rc
1994 structure as win_exec_ext.
1997 structure as win_exec_ext.
1995
1998
1996 * IPython/genutils.py (shell): new function, like system() but
1999 * IPython/genutils.py (shell): new function, like system() but
1997 without return value. Very useful for interactive shell work.
2000 without return value. Very useful for interactive shell work.
1998
2001
1999 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2002 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2000 delete aliases.
2003 delete aliases.
2001
2004
2002 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2005 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2003 sure that the alias table doesn't contain python keywords.
2006 sure that the alias table doesn't contain python keywords.
2004
2007
2005 2004-06-21 Fernando Perez <fperez@colorado.edu>
2008 2004-06-21 Fernando Perez <fperez@colorado.edu>
2006
2009
2007 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2010 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2008 non-existent items are found in $PATH. Reported by Thorsten.
2011 non-existent items are found in $PATH. Reported by Thorsten.
2009
2012
2010 2004-06-20 Fernando Perez <fperez@colorado.edu>
2013 2004-06-20 Fernando Perez <fperez@colorado.edu>
2011
2014
2012 * IPython/iplib.py (complete): modified the completer so that the
2015 * IPython/iplib.py (complete): modified the completer so that the
2013 order of priorities can be easily changed at runtime.
2016 order of priorities can be easily changed at runtime.
2014
2017
2015 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2018 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2016 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2019 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2017
2020
2018 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2021 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2019 expand Python variables prepended with $ in all system calls. The
2022 expand Python variables prepended with $ in all system calls. The
2020 same was done to InteractiveShell.handle_shell_escape. Now all
2023 same was done to InteractiveShell.handle_shell_escape. Now all
2021 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2024 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2022 expansion of python variables and expressions according to the
2025 expansion of python variables and expressions according to the
2023 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2026 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2024
2027
2025 Though PEP-215 has been rejected, a similar (but simpler) one
2028 Though PEP-215 has been rejected, a similar (but simpler) one
2026 seems like it will go into Python 2.4, PEP-292 -
2029 seems like it will go into Python 2.4, PEP-292 -
2027 http://www.python.org/peps/pep-0292.html.
2030 http://www.python.org/peps/pep-0292.html.
2028
2031
2029 I'll keep the full syntax of PEP-215, since IPython has since the
2032 I'll keep the full syntax of PEP-215, since IPython has since the
2030 start used Ka-Ping Yee's reference implementation discussed there
2033 start used Ka-Ping Yee's reference implementation discussed there
2031 (Itpl), and I actually like the powerful semantics it offers.
2034 (Itpl), and I actually like the powerful semantics it offers.
2032
2035
2033 In order to access normal shell variables, the $ has to be escaped
2036 In order to access normal shell variables, the $ has to be escaped
2034 via an extra $. For example:
2037 via an extra $. For example:
2035
2038
2036 In [7]: PATH='a python variable'
2039 In [7]: PATH='a python variable'
2037
2040
2038 In [8]: !echo $PATH
2041 In [8]: !echo $PATH
2039 a python variable
2042 a python variable
2040
2043
2041 In [9]: !echo $$PATH
2044 In [9]: !echo $$PATH
2042 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2045 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2043
2046
2044 (Magic.parse_options): escape $ so the shell doesn't evaluate
2047 (Magic.parse_options): escape $ so the shell doesn't evaluate
2045 things prematurely.
2048 things prematurely.
2046
2049
2047 * IPython/iplib.py (InteractiveShell.call_alias): added the
2050 * IPython/iplib.py (InteractiveShell.call_alias): added the
2048 ability for aliases to expand python variables via $.
2051 ability for aliases to expand python variables via $.
2049
2052
2050 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2053 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2051 system, now there's a @rehash/@rehashx pair of magics. These work
2054 system, now there's a @rehash/@rehashx pair of magics. These work
2052 like the csh rehash command, and can be invoked at any time. They
2055 like the csh rehash command, and can be invoked at any time. They
2053 build a table of aliases to everything in the user's $PATH
2056 build a table of aliases to everything in the user's $PATH
2054 (@rehash uses everything, @rehashx is slower but only adds
2057 (@rehash uses everything, @rehashx is slower but only adds
2055 executable files). With this, the pysh.py-based shell profile can
2058 executable files). With this, the pysh.py-based shell profile can
2056 now simply call rehash upon startup, and full access to all
2059 now simply call rehash upon startup, and full access to all
2057 programs in the user's path is obtained.
2060 programs in the user's path is obtained.
2058
2061
2059 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2062 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2060 functionality is now fully in place. I removed the old dynamic
2063 functionality is now fully in place. I removed the old dynamic
2061 code generation based approach, in favor of a much lighter one
2064 code generation based approach, in favor of a much lighter one
2062 based on a simple dict. The advantage is that this allows me to
2065 based on a simple dict. The advantage is that this allows me to
2063 now have thousands of aliases with negligible cost (unthinkable
2066 now have thousands of aliases with negligible cost (unthinkable
2064 with the old system).
2067 with the old system).
2065
2068
2066 2004-06-19 Fernando Perez <fperez@colorado.edu>
2069 2004-06-19 Fernando Perez <fperez@colorado.edu>
2067
2070
2068 * IPython/iplib.py (__init__): extended MagicCompleter class to
2071 * IPython/iplib.py (__init__): extended MagicCompleter class to
2069 also complete (last in priority) on user aliases.
2072 also complete (last in priority) on user aliases.
2070
2073
2071 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2074 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2072 call to eval.
2075 call to eval.
2073 (ItplNS.__init__): Added a new class which functions like Itpl,
2076 (ItplNS.__init__): Added a new class which functions like Itpl,
2074 but allows configuring the namespace for the evaluation to occur
2077 but allows configuring the namespace for the evaluation to occur
2075 in.
2078 in.
2076
2079
2077 2004-06-18 Fernando Perez <fperez@colorado.edu>
2080 2004-06-18 Fernando Perez <fperez@colorado.edu>
2078
2081
2079 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2082 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2080 better message when 'exit' or 'quit' are typed (a common newbie
2083 better message when 'exit' or 'quit' are typed (a common newbie
2081 confusion).
2084 confusion).
2082
2085
2083 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2086 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2084 check for Windows users.
2087 check for Windows users.
2085
2088
2086 * IPython/iplib.py (InteractiveShell.user_setup): removed
2089 * IPython/iplib.py (InteractiveShell.user_setup): removed
2087 disabling of colors for Windows. I'll test at runtime and issue a
2090 disabling of colors for Windows. I'll test at runtime and issue a
2088 warning if Gary's readline isn't found, as to nudge users to
2091 warning if Gary's readline isn't found, as to nudge users to
2089 download it.
2092 download it.
2090
2093
2091 2004-06-16 Fernando Perez <fperez@colorado.edu>
2094 2004-06-16 Fernando Perez <fperez@colorado.edu>
2092
2095
2093 * IPython/genutils.py (Stream.__init__): changed to print errors
2096 * IPython/genutils.py (Stream.__init__): changed to print errors
2094 to sys.stderr. I had a circular dependency here. Now it's
2097 to sys.stderr. I had a circular dependency here. Now it's
2095 possible to run ipython as IDLE's shell (consider this pre-alpha,
2098 possible to run ipython as IDLE's shell (consider this pre-alpha,
2096 since true stdout things end up in the starting terminal instead
2099 since true stdout things end up in the starting terminal instead
2097 of IDLE's out).
2100 of IDLE's out).
2098
2101
2099 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2102 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2100 users who haven't # updated their prompt_in2 definitions. Remove
2103 users who haven't # updated their prompt_in2 definitions. Remove
2101 eventually.
2104 eventually.
2102 (multiple_replace): added credit to original ASPN recipe.
2105 (multiple_replace): added credit to original ASPN recipe.
2103
2106
2104 2004-06-15 Fernando Perez <fperez@colorado.edu>
2107 2004-06-15 Fernando Perez <fperez@colorado.edu>
2105
2108
2106 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2109 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2107 list of auto-defined aliases.
2110 list of auto-defined aliases.
2108
2111
2109 2004-06-13 Fernando Perez <fperez@colorado.edu>
2112 2004-06-13 Fernando Perez <fperez@colorado.edu>
2110
2113
2111 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2114 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2112 install was really requested (so setup.py can be used for other
2115 install was really requested (so setup.py can be used for other
2113 things under Windows).
2116 things under Windows).
2114
2117
2115 2004-06-10 Fernando Perez <fperez@colorado.edu>
2118 2004-06-10 Fernando Perez <fperez@colorado.edu>
2116
2119
2117 * IPython/Logger.py (Logger.create_log): Manually remove any old
2120 * IPython/Logger.py (Logger.create_log): Manually remove any old
2118 backup, since os.remove may fail under Windows. Fixes bug
2121 backup, since os.remove may fail under Windows. Fixes bug
2119 reported by Thorsten.
2122 reported by Thorsten.
2120
2123
2121 2004-06-09 Fernando Perez <fperez@colorado.edu>
2124 2004-06-09 Fernando Perez <fperez@colorado.edu>
2122
2125
2123 * examples/example-embed.py: fixed all references to %n (replaced
2126 * examples/example-embed.py: fixed all references to %n (replaced
2124 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2127 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2125 for all examples and the manual as well.
2128 for all examples and the manual as well.
2126
2129
2127 2004-06-08 Fernando Perez <fperez@colorado.edu>
2130 2004-06-08 Fernando Perez <fperez@colorado.edu>
2128
2131
2129 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2132 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2130 alignment and color management. All 3 prompt subsystems now
2133 alignment and color management. All 3 prompt subsystems now
2131 inherit from BasePrompt.
2134 inherit from BasePrompt.
2132
2135
2133 * tools/release: updates for windows installer build and tag rpms
2136 * tools/release: updates for windows installer build and tag rpms
2134 with python version (since paths are fixed).
2137 with python version (since paths are fixed).
2135
2138
2136 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2139 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2137 which will become eventually obsolete. Also fixed the default
2140 which will become eventually obsolete. Also fixed the default
2138 prompt_in2 to use \D, so at least new users start with the correct
2141 prompt_in2 to use \D, so at least new users start with the correct
2139 defaults.
2142 defaults.
2140 WARNING: Users with existing ipythonrc files will need to apply
2143 WARNING: Users with existing ipythonrc files will need to apply
2141 this fix manually!
2144 this fix manually!
2142
2145
2143 * setup.py: make windows installer (.exe). This is finally the
2146 * setup.py: make windows installer (.exe). This is finally the
2144 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2147 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2145 which I hadn't included because it required Python 2.3 (or recent
2148 which I hadn't included because it required Python 2.3 (or recent
2146 distutils).
2149 distutils).
2147
2150
2148 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2151 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2149 usage of new '\D' escape.
2152 usage of new '\D' escape.
2150
2153
2151 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2154 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2152 lacks os.getuid())
2155 lacks os.getuid())
2153 (CachedOutput.set_colors): Added the ability to turn coloring
2156 (CachedOutput.set_colors): Added the ability to turn coloring
2154 on/off with @colors even for manually defined prompt colors. It
2157 on/off with @colors even for manually defined prompt colors. It
2155 uses a nasty global, but it works safely and via the generic color
2158 uses a nasty global, but it works safely and via the generic color
2156 handling mechanism.
2159 handling mechanism.
2157 (Prompt2.__init__): Introduced new escape '\D' for continuation
2160 (Prompt2.__init__): Introduced new escape '\D' for continuation
2158 prompts. It represents the counter ('\#') as dots.
2161 prompts. It represents the counter ('\#') as dots.
2159 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2162 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2160 need to update their ipythonrc files and replace '%n' with '\D' in
2163 need to update their ipythonrc files and replace '%n' with '\D' in
2161 their prompt_in2 settings everywhere. Sorry, but there's
2164 their prompt_in2 settings everywhere. Sorry, but there's
2162 otherwise no clean way to get all prompts to properly align. The
2165 otherwise no clean way to get all prompts to properly align. The
2163 ipythonrc shipped with IPython has been updated.
2166 ipythonrc shipped with IPython has been updated.
2164
2167
2165 2004-06-07 Fernando Perez <fperez@colorado.edu>
2168 2004-06-07 Fernando Perez <fperez@colorado.edu>
2166
2169
2167 * setup.py (isfile): Pass local_icons option to latex2html, so the
2170 * setup.py (isfile): Pass local_icons option to latex2html, so the
2168 resulting HTML file is self-contained. Thanks to
2171 resulting HTML file is self-contained. Thanks to
2169 dryice-AT-liu.com.cn for the tip.
2172 dryice-AT-liu.com.cn for the tip.
2170
2173
2171 * pysh.py: I created a new profile 'shell', which implements a
2174 * pysh.py: I created a new profile 'shell', which implements a
2172 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2175 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2173 system shell, nor will it become one anytime soon. It's mainly
2176 system shell, nor will it become one anytime soon. It's mainly
2174 meant to illustrate the use of the new flexible bash-like prompts.
2177 meant to illustrate the use of the new flexible bash-like prompts.
2175 I guess it could be used by hardy souls for true shell management,
2178 I guess it could be used by hardy souls for true shell management,
2176 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2179 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2177 profile. This uses the InterpreterExec extension provided by
2180 profile. This uses the InterpreterExec extension provided by
2178 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2181 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2179
2182
2180 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2183 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2181 auto-align itself with the length of the previous input prompt
2184 auto-align itself with the length of the previous input prompt
2182 (taking into account the invisible color escapes).
2185 (taking into account the invisible color escapes).
2183 (CachedOutput.__init__): Large restructuring of this class. Now
2186 (CachedOutput.__init__): Large restructuring of this class. Now
2184 all three prompts (primary1, primary2, output) are proper objects,
2187 all three prompts (primary1, primary2, output) are proper objects,
2185 managed by the 'parent' CachedOutput class. The code is still a
2188 managed by the 'parent' CachedOutput class. The code is still a
2186 bit hackish (all prompts share state via a pointer to the cache),
2189 bit hackish (all prompts share state via a pointer to the cache),
2187 but it's overall far cleaner than before.
2190 but it's overall far cleaner than before.
2188
2191
2189 * IPython/genutils.py (getoutputerror): modified to add verbose,
2192 * IPython/genutils.py (getoutputerror): modified to add verbose,
2190 debug and header options. This makes the interface of all getout*
2193 debug and header options. This makes the interface of all getout*
2191 functions uniform.
2194 functions uniform.
2192 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2195 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2193
2196
2194 * IPython/Magic.py (Magic.default_option): added a function to
2197 * IPython/Magic.py (Magic.default_option): added a function to
2195 allow registering default options for any magic command. This
2198 allow registering default options for any magic command. This
2196 makes it easy to have profiles which customize the magics globally
2199 makes it easy to have profiles which customize the magics globally
2197 for a certain use. The values set through this function are
2200 for a certain use. The values set through this function are
2198 picked up by the parse_options() method, which all magics should
2201 picked up by the parse_options() method, which all magics should
2199 use to parse their options.
2202 use to parse their options.
2200
2203
2201 * IPython/genutils.py (warn): modified the warnings framework to
2204 * IPython/genutils.py (warn): modified the warnings framework to
2202 use the Term I/O class. I'm trying to slowly unify all of
2205 use the Term I/O class. I'm trying to slowly unify all of
2203 IPython's I/O operations to pass through Term.
2206 IPython's I/O operations to pass through Term.
2204
2207
2205 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2208 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2206 the secondary prompt to correctly match the length of the primary
2209 the secondary prompt to correctly match the length of the primary
2207 one for any prompt. Now multi-line code will properly line up
2210 one for any prompt. Now multi-line code will properly line up
2208 even for path dependent prompts, such as the new ones available
2211 even for path dependent prompts, such as the new ones available
2209 via the prompt_specials.
2212 via the prompt_specials.
2210
2213
2211 2004-06-06 Fernando Perez <fperez@colorado.edu>
2214 2004-06-06 Fernando Perez <fperez@colorado.edu>
2212
2215
2213 * IPython/Prompts.py (prompt_specials): Added the ability to have
2216 * IPython/Prompts.py (prompt_specials): Added the ability to have
2214 bash-like special sequences in the prompts, which get
2217 bash-like special sequences in the prompts, which get
2215 automatically expanded. Things like hostname, current working
2218 automatically expanded. Things like hostname, current working
2216 directory and username are implemented already, but it's easy to
2219 directory and username are implemented already, but it's easy to
2217 add more in the future. Thanks to a patch by W.J. van der Laan
2220 add more in the future. Thanks to a patch by W.J. van der Laan
2218 <gnufnork-AT-hetdigitalegat.nl>
2221 <gnufnork-AT-hetdigitalegat.nl>
2219 (prompt_specials): Added color support for prompt strings, so
2222 (prompt_specials): Added color support for prompt strings, so
2220 users can define arbitrary color setups for their prompts.
2223 users can define arbitrary color setups for their prompts.
2221
2224
2222 2004-06-05 Fernando Perez <fperez@colorado.edu>
2225 2004-06-05 Fernando Perez <fperez@colorado.edu>
2223
2226
2224 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2227 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2225 code to load Gary Bishop's readline and configure it
2228 code to load Gary Bishop's readline and configure it
2226 automatically. Thanks to Gary for help on this.
2229 automatically. Thanks to Gary for help on this.
2227
2230
2228 2004-06-01 Fernando Perez <fperez@colorado.edu>
2231 2004-06-01 Fernando Perez <fperez@colorado.edu>
2229
2232
2230 * IPython/Logger.py (Logger.create_log): fix bug for logging
2233 * IPython/Logger.py (Logger.create_log): fix bug for logging
2231 with no filename (previous fix was incomplete).
2234 with no filename (previous fix was incomplete).
2232
2235
2233 2004-05-25 Fernando Perez <fperez@colorado.edu>
2236 2004-05-25 Fernando Perez <fperez@colorado.edu>
2234
2237
2235 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2238 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2236 parens would get passed to the shell.
2239 parens would get passed to the shell.
2237
2240
2238 2004-05-20 Fernando Perez <fperez@colorado.edu>
2241 2004-05-20 Fernando Perez <fperez@colorado.edu>
2239
2242
2240 * IPython/Magic.py (Magic.magic_prun): changed default profile
2243 * IPython/Magic.py (Magic.magic_prun): changed default profile
2241 sort order to 'time' (the more common profiling need).
2244 sort order to 'time' (the more common profiling need).
2242
2245
2243 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2246 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2244 so that source code shown is guaranteed in sync with the file on
2247 so that source code shown is guaranteed in sync with the file on
2245 disk (also changed in psource). Similar fix to the one for
2248 disk (also changed in psource). Similar fix to the one for
2246 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2249 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2247 <yann.ledu-AT-noos.fr>.
2250 <yann.ledu-AT-noos.fr>.
2248
2251
2249 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2252 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2250 with a single option would not be correctly parsed. Closes
2253 with a single option would not be correctly parsed. Closes
2251 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2254 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2252 introduced in 0.6.0 (on 2004-05-06).
2255 introduced in 0.6.0 (on 2004-05-06).
2253
2256
2254 2004-05-13 *** Released version 0.6.0
2257 2004-05-13 *** Released version 0.6.0
2255
2258
2256 2004-05-13 Fernando Perez <fperez@colorado.edu>
2259 2004-05-13 Fernando Perez <fperez@colorado.edu>
2257
2260
2258 * debian/: Added debian/ directory to CVS, so that debian support
2261 * debian/: Added debian/ directory to CVS, so that debian support
2259 is publicly accessible. The debian package is maintained by Jack
2262 is publicly accessible. The debian package is maintained by Jack
2260 Moffit <jack-AT-xiph.org>.
2263 Moffit <jack-AT-xiph.org>.
2261
2264
2262 * Documentation: included the notes about an ipython-based system
2265 * Documentation: included the notes about an ipython-based system
2263 shell (the hypothetical 'pysh') into the new_design.pdf document,
2266 shell (the hypothetical 'pysh') into the new_design.pdf document,
2264 so that these ideas get distributed to users along with the
2267 so that these ideas get distributed to users along with the
2265 official documentation.
2268 official documentation.
2266
2269
2267 2004-05-10 Fernando Perez <fperez@colorado.edu>
2270 2004-05-10 Fernando Perez <fperez@colorado.edu>
2268
2271
2269 * IPython/Logger.py (Logger.create_log): fix recently introduced
2272 * IPython/Logger.py (Logger.create_log): fix recently introduced
2270 bug (misindented line) where logstart would fail when not given an
2273 bug (misindented line) where logstart would fail when not given an
2271 explicit filename.
2274 explicit filename.
2272
2275
2273 2004-05-09 Fernando Perez <fperez@colorado.edu>
2276 2004-05-09 Fernando Perez <fperez@colorado.edu>
2274
2277
2275 * IPython/Magic.py (Magic.parse_options): skip system call when
2278 * IPython/Magic.py (Magic.parse_options): skip system call when
2276 there are no options to look for. Faster, cleaner for the common
2279 there are no options to look for. Faster, cleaner for the common
2277 case.
2280 case.
2278
2281
2279 * Documentation: many updates to the manual: describing Windows
2282 * Documentation: many updates to the manual: describing Windows
2280 support better, Gnuplot updates, credits, misc small stuff. Also
2283 support better, Gnuplot updates, credits, misc small stuff. Also
2281 updated the new_design doc a bit.
2284 updated the new_design doc a bit.
2282
2285
2283 2004-05-06 *** Released version 0.6.0.rc1
2286 2004-05-06 *** Released version 0.6.0.rc1
2284
2287
2285 2004-05-06 Fernando Perez <fperez@colorado.edu>
2288 2004-05-06 Fernando Perez <fperez@colorado.edu>
2286
2289
2287 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2290 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2288 operations to use the vastly more efficient list/''.join() method.
2291 operations to use the vastly more efficient list/''.join() method.
2289 (FormattedTB.text): Fix
2292 (FormattedTB.text): Fix
2290 http://www.scipy.net/roundup/ipython/issue12 - exception source
2293 http://www.scipy.net/roundup/ipython/issue12 - exception source
2291 extract not updated after reload. Thanks to Mike Salib
2294 extract not updated after reload. Thanks to Mike Salib
2292 <msalib-AT-mit.edu> for pinning the source of the problem.
2295 <msalib-AT-mit.edu> for pinning the source of the problem.
2293 Fortunately, the solution works inside ipython and doesn't require
2296 Fortunately, the solution works inside ipython and doesn't require
2294 any changes to python proper.
2297 any changes to python proper.
2295
2298
2296 * IPython/Magic.py (Magic.parse_options): Improved to process the
2299 * IPython/Magic.py (Magic.parse_options): Improved to process the
2297 argument list as a true shell would (by actually using the
2300 argument list as a true shell would (by actually using the
2298 underlying system shell). This way, all @magics automatically get
2301 underlying system shell). This way, all @magics automatically get
2299 shell expansion for variables. Thanks to a comment by Alex
2302 shell expansion for variables. Thanks to a comment by Alex
2300 Schmolck.
2303 Schmolck.
2301
2304
2302 2004-04-04 Fernando Perez <fperez@colorado.edu>
2305 2004-04-04 Fernando Perez <fperez@colorado.edu>
2303
2306
2304 * IPython/iplib.py (InteractiveShell.interact): Added a special
2307 * IPython/iplib.py (InteractiveShell.interact): Added a special
2305 trap for a debugger quit exception, which is basically impossible
2308 trap for a debugger quit exception, which is basically impossible
2306 to handle by normal mechanisms, given what pdb does to the stack.
2309 to handle by normal mechanisms, given what pdb does to the stack.
2307 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2310 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2308
2311
2309 2004-04-03 Fernando Perez <fperez@colorado.edu>
2312 2004-04-03 Fernando Perez <fperez@colorado.edu>
2310
2313
2311 * IPython/genutils.py (Term): Standardized the names of the Term
2314 * IPython/genutils.py (Term): Standardized the names of the Term
2312 class streams to cin/cout/cerr, following C++ naming conventions
2315 class streams to cin/cout/cerr, following C++ naming conventions
2313 (I can't use in/out/err because 'in' is not a valid attribute
2316 (I can't use in/out/err because 'in' is not a valid attribute
2314 name).
2317 name).
2315
2318
2316 * IPython/iplib.py (InteractiveShell.interact): don't increment
2319 * IPython/iplib.py (InteractiveShell.interact): don't increment
2317 the prompt if there's no user input. By Daniel 'Dang' Griffith
2320 the prompt if there's no user input. By Daniel 'Dang' Griffith
2318 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2321 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2319 Francois Pinard.
2322 Francois Pinard.
2320
2323
2321 2004-04-02 Fernando Perez <fperez@colorado.edu>
2324 2004-04-02 Fernando Perez <fperez@colorado.edu>
2322
2325
2323 * IPython/genutils.py (Stream.__init__): Modified to survive at
2326 * IPython/genutils.py (Stream.__init__): Modified to survive at
2324 least importing in contexts where stdin/out/err aren't true file
2327 least importing in contexts where stdin/out/err aren't true file
2325 objects, such as PyCrust (they lack fileno() and mode). However,
2328 objects, such as PyCrust (they lack fileno() and mode). However,
2326 the recovery facilities which rely on these things existing will
2329 the recovery facilities which rely on these things existing will
2327 not work.
2330 not work.
2328
2331
2329 2004-04-01 Fernando Perez <fperez@colorado.edu>
2332 2004-04-01 Fernando Perez <fperez@colorado.edu>
2330
2333
2331 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2334 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2332 use the new getoutputerror() function, so it properly
2335 use the new getoutputerror() function, so it properly
2333 distinguishes stdout/err.
2336 distinguishes stdout/err.
2334
2337
2335 * IPython/genutils.py (getoutputerror): added a function to
2338 * IPython/genutils.py (getoutputerror): added a function to
2336 capture separately the standard output and error of a command.
2339 capture separately the standard output and error of a command.
2337 After a comment from dang on the mailing lists. This code is
2340 After a comment from dang on the mailing lists. This code is
2338 basically a modified version of commands.getstatusoutput(), from
2341 basically a modified version of commands.getstatusoutput(), from
2339 the standard library.
2342 the standard library.
2340
2343
2341 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2344 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2342 '!!' as a special syntax (shorthand) to access @sx.
2345 '!!' as a special syntax (shorthand) to access @sx.
2343
2346
2344 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2347 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2345 command and return its output as a list split on '\n'.
2348 command and return its output as a list split on '\n'.
2346
2349
2347 2004-03-31 Fernando Perez <fperez@colorado.edu>
2350 2004-03-31 Fernando Perez <fperez@colorado.edu>
2348
2351
2349 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2352 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2350 method to dictionaries used as FakeModule instances if they lack
2353 method to dictionaries used as FakeModule instances if they lack
2351 it. At least pydoc in python2.3 breaks for runtime-defined
2354 it. At least pydoc in python2.3 breaks for runtime-defined
2352 functions without this hack. At some point I need to _really_
2355 functions without this hack. At some point I need to _really_
2353 understand what FakeModule is doing, because it's a gross hack.
2356 understand what FakeModule is doing, because it's a gross hack.
2354 But it solves Arnd's problem for now...
2357 But it solves Arnd's problem for now...
2355
2358
2356 2004-02-27 Fernando Perez <fperez@colorado.edu>
2359 2004-02-27 Fernando Perez <fperez@colorado.edu>
2357
2360
2358 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2361 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2359 mode would behave erratically. Also increased the number of
2362 mode would behave erratically. Also increased the number of
2360 possible logs in rotate mod to 999. Thanks to Rod Holland
2363 possible logs in rotate mod to 999. Thanks to Rod Holland
2361 <rhh@StructureLABS.com> for the report and fixes.
2364 <rhh@StructureLABS.com> for the report and fixes.
2362
2365
2363 2004-02-26 Fernando Perez <fperez@colorado.edu>
2366 2004-02-26 Fernando Perez <fperez@colorado.edu>
2364
2367
2365 * IPython/genutils.py (page): Check that the curses module really
2368 * IPython/genutils.py (page): Check that the curses module really
2366 has the initscr attribute before trying to use it. For some
2369 has the initscr attribute before trying to use it. For some
2367 reason, the Solaris curses module is missing this. I think this
2370 reason, the Solaris curses module is missing this. I think this
2368 should be considered a Solaris python bug, but I'm not sure.
2371 should be considered a Solaris python bug, but I'm not sure.
2369
2372
2370 2004-01-17 Fernando Perez <fperez@colorado.edu>
2373 2004-01-17 Fernando Perez <fperez@colorado.edu>
2371
2374
2372 * IPython/genutils.py (Stream.__init__): Changes to try to make
2375 * IPython/genutils.py (Stream.__init__): Changes to try to make
2373 ipython robust against stdin/out/err being closed by the user.
2376 ipython robust against stdin/out/err being closed by the user.
2374 This is 'user error' (and blocks a normal python session, at least
2377 This is 'user error' (and blocks a normal python session, at least
2375 the stdout case). However, Ipython should be able to survive such
2378 the stdout case). However, Ipython should be able to survive such
2376 instances of abuse as gracefully as possible. To simplify the
2379 instances of abuse as gracefully as possible. To simplify the
2377 coding and maintain compatibility with Gary Bishop's Term
2380 coding and maintain compatibility with Gary Bishop's Term
2378 contributions, I've made use of classmethods for this. I think
2381 contributions, I've made use of classmethods for this. I think
2379 this introduces a dependency on python 2.2.
2382 this introduces a dependency on python 2.2.
2380
2383
2381 2004-01-13 Fernando Perez <fperez@colorado.edu>
2384 2004-01-13 Fernando Perez <fperez@colorado.edu>
2382
2385
2383 * IPython/numutils.py (exp_safe): simplified the code a bit and
2386 * IPython/numutils.py (exp_safe): simplified the code a bit and
2384 removed the need for importing the kinds module altogether.
2387 removed the need for importing the kinds module altogether.
2385
2388
2386 2004-01-06 Fernando Perez <fperez@colorado.edu>
2389 2004-01-06 Fernando Perez <fperez@colorado.edu>
2387
2390
2388 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2391 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2389 a magic function instead, after some community feedback. No
2392 a magic function instead, after some community feedback. No
2390 special syntax will exist for it, but its name is deliberately
2393 special syntax will exist for it, but its name is deliberately
2391 very short.
2394 very short.
2392
2395
2393 2003-12-20 Fernando Perez <fperez@colorado.edu>
2396 2003-12-20 Fernando Perez <fperez@colorado.edu>
2394
2397
2395 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2398 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2396 new functionality, to automagically assign the result of a shell
2399 new functionality, to automagically assign the result of a shell
2397 command to a variable. I'll solicit some community feedback on
2400 command to a variable. I'll solicit some community feedback on
2398 this before making it permanent.
2401 this before making it permanent.
2399
2402
2400 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2403 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2401 requested about callables for which inspect couldn't obtain a
2404 requested about callables for which inspect couldn't obtain a
2402 proper argspec. Thanks to a crash report sent by Etienne
2405 proper argspec. Thanks to a crash report sent by Etienne
2403 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2406 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2404
2407
2405 2003-12-09 Fernando Perez <fperez@colorado.edu>
2408 2003-12-09 Fernando Perez <fperez@colorado.edu>
2406
2409
2407 * IPython/genutils.py (page): patch for the pager to work across
2410 * IPython/genutils.py (page): patch for the pager to work across
2408 various versions of Windows. By Gary Bishop.
2411 various versions of Windows. By Gary Bishop.
2409
2412
2410 2003-12-04 Fernando Perez <fperez@colorado.edu>
2413 2003-12-04 Fernando Perez <fperez@colorado.edu>
2411
2414
2412 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2415 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2413 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2416 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2414 While I tested this and it looks ok, there may still be corner
2417 While I tested this and it looks ok, there may still be corner
2415 cases I've missed.
2418 cases I've missed.
2416
2419
2417 2003-12-01 Fernando Perez <fperez@colorado.edu>
2420 2003-12-01 Fernando Perez <fperez@colorado.edu>
2418
2421
2419 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2422 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2420 where a line like 'p,q=1,2' would fail because the automagic
2423 where a line like 'p,q=1,2' would fail because the automagic
2421 system would be triggered for @p.
2424 system would be triggered for @p.
2422
2425
2423 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2426 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2424 cleanups, code unmodified.
2427 cleanups, code unmodified.
2425
2428
2426 * IPython/genutils.py (Term): added a class for IPython to handle
2429 * IPython/genutils.py (Term): added a class for IPython to handle
2427 output. In most cases it will just be a proxy for stdout/err, but
2430 output. In most cases it will just be a proxy for stdout/err, but
2428 having this allows modifications to be made for some platforms,
2431 having this allows modifications to be made for some platforms,
2429 such as handling color escapes under Windows. All of this code
2432 such as handling color escapes under Windows. All of this code
2430 was contributed by Gary Bishop, with minor modifications by me.
2433 was contributed by Gary Bishop, with minor modifications by me.
2431 The actual changes affect many files.
2434 The actual changes affect many files.
2432
2435
2433 2003-11-30 Fernando Perez <fperez@colorado.edu>
2436 2003-11-30 Fernando Perez <fperez@colorado.edu>
2434
2437
2435 * IPython/iplib.py (file_matches): new completion code, courtesy
2438 * IPython/iplib.py (file_matches): new completion code, courtesy
2436 of Jeff Collins. This enables filename completion again under
2439 of Jeff Collins. This enables filename completion again under
2437 python 2.3, which disabled it at the C level.
2440 python 2.3, which disabled it at the C level.
2438
2441
2439 2003-11-11 Fernando Perez <fperez@colorado.edu>
2442 2003-11-11 Fernando Perez <fperez@colorado.edu>
2440
2443
2441 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2444 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2442 for Numeric.array(map(...)), but often convenient.
2445 for Numeric.array(map(...)), but often convenient.
2443
2446
2444 2003-11-05 Fernando Perez <fperez@colorado.edu>
2447 2003-11-05 Fernando Perez <fperez@colorado.edu>
2445
2448
2446 * IPython/numutils.py (frange): Changed a call from int() to
2449 * IPython/numutils.py (frange): Changed a call from int() to
2447 int(round()) to prevent a problem reported with arange() in the
2450 int(round()) to prevent a problem reported with arange() in the
2448 numpy list.
2451 numpy list.
2449
2452
2450 2003-10-06 Fernando Perez <fperez@colorado.edu>
2453 2003-10-06 Fernando Perez <fperez@colorado.edu>
2451
2454
2452 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2455 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2453 prevent crashes if sys lacks an argv attribute (it happens with
2456 prevent crashes if sys lacks an argv attribute (it happens with
2454 embedded interpreters which build a bare-bones sys module).
2457 embedded interpreters which build a bare-bones sys module).
2455 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2458 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2456
2459
2457 2003-09-24 Fernando Perez <fperez@colorado.edu>
2460 2003-09-24 Fernando Perez <fperez@colorado.edu>
2458
2461
2459 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2462 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2460 to protect against poorly written user objects where __getattr__
2463 to protect against poorly written user objects where __getattr__
2461 raises exceptions other than AttributeError. Thanks to a bug
2464 raises exceptions other than AttributeError. Thanks to a bug
2462 report by Oliver Sander <osander-AT-gmx.de>.
2465 report by Oliver Sander <osander-AT-gmx.de>.
2463
2466
2464 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2467 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2465 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2468 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2466
2469
2467 2003-09-09 Fernando Perez <fperez@colorado.edu>
2470 2003-09-09 Fernando Perez <fperez@colorado.edu>
2468
2471
2469 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2472 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2470 unpacking a list whith a callable as first element would
2473 unpacking a list whith a callable as first element would
2471 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2474 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2472 Collins.
2475 Collins.
2473
2476
2474 2003-08-25 *** Released version 0.5.0
2477 2003-08-25 *** Released version 0.5.0
2475
2478
2476 2003-08-22 Fernando Perez <fperez@colorado.edu>
2479 2003-08-22 Fernando Perez <fperez@colorado.edu>
2477
2480
2478 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2481 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2479 improperly defined user exceptions. Thanks to feedback from Mark
2482 improperly defined user exceptions. Thanks to feedback from Mark
2480 Russell <mrussell-AT-verio.net>.
2483 Russell <mrussell-AT-verio.net>.
2481
2484
2482 2003-08-20 Fernando Perez <fperez@colorado.edu>
2485 2003-08-20 Fernando Perez <fperez@colorado.edu>
2483
2486
2484 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2487 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2485 printing so that it would print multi-line string forms starting
2488 printing so that it would print multi-line string forms starting
2486 with a new line. This way the formatting is better respected for
2489 with a new line. This way the formatting is better respected for
2487 objects which work hard to make nice string forms.
2490 objects which work hard to make nice string forms.
2488
2491
2489 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2492 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2490 autocall would overtake data access for objects with both
2493 autocall would overtake data access for objects with both
2491 __getitem__ and __call__.
2494 __getitem__ and __call__.
2492
2495
2493 2003-08-19 *** Released version 0.5.0-rc1
2496 2003-08-19 *** Released version 0.5.0-rc1
2494
2497
2495 2003-08-19 Fernando Perez <fperez@colorado.edu>
2498 2003-08-19 Fernando Perez <fperez@colorado.edu>
2496
2499
2497 * IPython/deep_reload.py (load_tail): single tiny change here
2500 * IPython/deep_reload.py (load_tail): single tiny change here
2498 seems to fix the long-standing bug of dreload() failing to work
2501 seems to fix the long-standing bug of dreload() failing to work
2499 for dotted names. But this module is pretty tricky, so I may have
2502 for dotted names. But this module is pretty tricky, so I may have
2500 missed some subtlety. Needs more testing!.
2503 missed some subtlety. Needs more testing!.
2501
2504
2502 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2505 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2503 exceptions which have badly implemented __str__ methods.
2506 exceptions which have badly implemented __str__ methods.
2504 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2507 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2505 which I've been getting reports about from Python 2.3 users. I
2508 which I've been getting reports about from Python 2.3 users. I
2506 wish I had a simple test case to reproduce the problem, so I could
2509 wish I had a simple test case to reproduce the problem, so I could
2507 either write a cleaner workaround or file a bug report if
2510 either write a cleaner workaround or file a bug report if
2508 necessary.
2511 necessary.
2509
2512
2510 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2513 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2511 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2514 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2512 a bug report by Tjabo Kloppenburg.
2515 a bug report by Tjabo Kloppenburg.
2513
2516
2514 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2517 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2515 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2518 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2516 seems rather unstable. Thanks to a bug report by Tjabo
2519 seems rather unstable. Thanks to a bug report by Tjabo
2517 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2520 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2518
2521
2519 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2522 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2520 this out soon because of the critical fixes in the inner loop for
2523 this out soon because of the critical fixes in the inner loop for
2521 generators.
2524 generators.
2522
2525
2523 * IPython/Magic.py (Magic.getargspec): removed. This (and
2526 * IPython/Magic.py (Magic.getargspec): removed. This (and
2524 _get_def) have been obsoleted by OInspect for a long time, I
2527 _get_def) have been obsoleted by OInspect for a long time, I
2525 hadn't noticed that they were dead code.
2528 hadn't noticed that they were dead code.
2526 (Magic._ofind): restored _ofind functionality for a few literals
2529 (Magic._ofind): restored _ofind functionality for a few literals
2527 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2530 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2528 for things like "hello".capitalize?, since that would require a
2531 for things like "hello".capitalize?, since that would require a
2529 potentially dangerous eval() again.
2532 potentially dangerous eval() again.
2530
2533
2531 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2534 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2532 logic a bit more to clean up the escapes handling and minimize the
2535 logic a bit more to clean up the escapes handling and minimize the
2533 use of _ofind to only necessary cases. The interactive 'feel' of
2536 use of _ofind to only necessary cases. The interactive 'feel' of
2534 IPython should have improved quite a bit with the changes in
2537 IPython should have improved quite a bit with the changes in
2535 _prefilter and _ofind (besides being far safer than before).
2538 _prefilter and _ofind (besides being far safer than before).
2536
2539
2537 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2540 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2538 obscure, never reported). Edit would fail to find the object to
2541 obscure, never reported). Edit would fail to find the object to
2539 edit under some circumstances.
2542 edit under some circumstances.
2540 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2543 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2541 which were causing double-calling of generators. Those eval calls
2544 which were causing double-calling of generators. Those eval calls
2542 were _very_ dangerous, since code with side effects could be
2545 were _very_ dangerous, since code with side effects could be
2543 triggered. As they say, 'eval is evil'... These were the
2546 triggered. As they say, 'eval is evil'... These were the
2544 nastiest evals in IPython. Besides, _ofind is now far simpler,
2547 nastiest evals in IPython. Besides, _ofind is now far simpler,
2545 and it should also be quite a bit faster. Its use of inspect is
2548 and it should also be quite a bit faster. Its use of inspect is
2546 also safer, so perhaps some of the inspect-related crashes I've
2549 also safer, so perhaps some of the inspect-related crashes I've
2547 seen lately with Python 2.3 might be taken care of. That will
2550 seen lately with Python 2.3 might be taken care of. That will
2548 need more testing.
2551 need more testing.
2549
2552
2550 2003-08-17 Fernando Perez <fperez@colorado.edu>
2553 2003-08-17 Fernando Perez <fperez@colorado.edu>
2551
2554
2552 * IPython/iplib.py (InteractiveShell._prefilter): significant
2555 * IPython/iplib.py (InteractiveShell._prefilter): significant
2553 simplifications to the logic for handling user escapes. Faster
2556 simplifications to the logic for handling user escapes. Faster
2554 and simpler code.
2557 and simpler code.
2555
2558
2556 2003-08-14 Fernando Perez <fperez@colorado.edu>
2559 2003-08-14 Fernando Perez <fperez@colorado.edu>
2557
2560
2558 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2561 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2559 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2562 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2560 but it should be quite a bit faster. And the recursive version
2563 but it should be quite a bit faster. And the recursive version
2561 generated O(log N) intermediate storage for all rank>1 arrays,
2564 generated O(log N) intermediate storage for all rank>1 arrays,
2562 even if they were contiguous.
2565 even if they were contiguous.
2563 (l1norm): Added this function.
2566 (l1norm): Added this function.
2564 (norm): Added this function for arbitrary norms (including
2567 (norm): Added this function for arbitrary norms (including
2565 l-infinity). l1 and l2 are still special cases for convenience
2568 l-infinity). l1 and l2 are still special cases for convenience
2566 and speed.
2569 and speed.
2567
2570
2568 2003-08-03 Fernando Perez <fperez@colorado.edu>
2571 2003-08-03 Fernando Perez <fperez@colorado.edu>
2569
2572
2570 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2573 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2571 exceptions, which now raise PendingDeprecationWarnings in Python
2574 exceptions, which now raise PendingDeprecationWarnings in Python
2572 2.3. There were some in Magic and some in Gnuplot2.
2575 2.3. There were some in Magic and some in Gnuplot2.
2573
2576
2574 2003-06-30 Fernando Perez <fperez@colorado.edu>
2577 2003-06-30 Fernando Perez <fperez@colorado.edu>
2575
2578
2576 * IPython/genutils.py (page): modified to call curses only for
2579 * IPython/genutils.py (page): modified to call curses only for
2577 terminals where TERM=='xterm'. After problems under many other
2580 terminals where TERM=='xterm'. After problems under many other
2578 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2581 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2579
2582
2580 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2583 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2581 would be triggered when readline was absent. This was just an old
2584 would be triggered when readline was absent. This was just an old
2582 debugging statement I'd forgotten to take out.
2585 debugging statement I'd forgotten to take out.
2583
2586
2584 2003-06-20 Fernando Perez <fperez@colorado.edu>
2587 2003-06-20 Fernando Perez <fperez@colorado.edu>
2585
2588
2586 * IPython/genutils.py (clock): modified to return only user time
2589 * IPython/genutils.py (clock): modified to return only user time
2587 (not counting system time), after a discussion on scipy. While
2590 (not counting system time), after a discussion on scipy. While
2588 system time may be a useful quantity occasionally, it may much
2591 system time may be a useful quantity occasionally, it may much
2589 more easily be skewed by occasional swapping or other similar
2592 more easily be skewed by occasional swapping or other similar
2590 activity.
2593 activity.
2591
2594
2592 2003-06-05 Fernando Perez <fperez@colorado.edu>
2595 2003-06-05 Fernando Perez <fperez@colorado.edu>
2593
2596
2594 * IPython/numutils.py (identity): new function, for building
2597 * IPython/numutils.py (identity): new function, for building
2595 arbitrary rank Kronecker deltas (mostly backwards compatible with
2598 arbitrary rank Kronecker deltas (mostly backwards compatible with
2596 Numeric.identity)
2599 Numeric.identity)
2597
2600
2598 2003-06-03 Fernando Perez <fperez@colorado.edu>
2601 2003-06-03 Fernando Perez <fperez@colorado.edu>
2599
2602
2600 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2603 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2601 arguments passed to magics with spaces, to allow trailing '\' to
2604 arguments passed to magics with spaces, to allow trailing '\' to
2602 work normally (mainly for Windows users).
2605 work normally (mainly for Windows users).
2603
2606
2604 2003-05-29 Fernando Perez <fperez@colorado.edu>
2607 2003-05-29 Fernando Perez <fperez@colorado.edu>
2605
2608
2606 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2609 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2607 instead of pydoc.help. This fixes a bizarre behavior where
2610 instead of pydoc.help. This fixes a bizarre behavior where
2608 printing '%s' % locals() would trigger the help system. Now
2611 printing '%s' % locals() would trigger the help system. Now
2609 ipython behaves like normal python does.
2612 ipython behaves like normal python does.
2610
2613
2611 Note that if one does 'from pydoc import help', the bizarre
2614 Note that if one does 'from pydoc import help', the bizarre
2612 behavior returns, but this will also happen in normal python, so
2615 behavior returns, but this will also happen in normal python, so
2613 it's not an ipython bug anymore (it has to do with how pydoc.help
2616 it's not an ipython bug anymore (it has to do with how pydoc.help
2614 is implemented).
2617 is implemented).
2615
2618
2616 2003-05-22 Fernando Perez <fperez@colorado.edu>
2619 2003-05-22 Fernando Perez <fperez@colorado.edu>
2617
2620
2618 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2621 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2619 return [] instead of None when nothing matches, also match to end
2622 return [] instead of None when nothing matches, also match to end
2620 of line. Patch by Gary Bishop.
2623 of line. Patch by Gary Bishop.
2621
2624
2622 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2625 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2623 protection as before, for files passed on the command line. This
2626 protection as before, for files passed on the command line. This
2624 prevents the CrashHandler from kicking in if user files call into
2627 prevents the CrashHandler from kicking in if user files call into
2625 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2628 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2626 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2629 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2627
2630
2628 2003-05-20 *** Released version 0.4.0
2631 2003-05-20 *** Released version 0.4.0
2629
2632
2630 2003-05-20 Fernando Perez <fperez@colorado.edu>
2633 2003-05-20 Fernando Perez <fperez@colorado.edu>
2631
2634
2632 * setup.py: added support for manpages. It's a bit hackish b/c of
2635 * setup.py: added support for manpages. It's a bit hackish b/c of
2633 a bug in the way the bdist_rpm distutils target handles gzipped
2636 a bug in the way the bdist_rpm distutils target handles gzipped
2634 manpages, but it works. After a patch by Jack.
2637 manpages, but it works. After a patch by Jack.
2635
2638
2636 2003-05-19 Fernando Perez <fperez@colorado.edu>
2639 2003-05-19 Fernando Perez <fperez@colorado.edu>
2637
2640
2638 * IPython/numutils.py: added a mockup of the kinds module, since
2641 * IPython/numutils.py: added a mockup of the kinds module, since
2639 it was recently removed from Numeric. This way, numutils will
2642 it was recently removed from Numeric. This way, numutils will
2640 work for all users even if they are missing kinds.
2643 work for all users even if they are missing kinds.
2641
2644
2642 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2645 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2643 failure, which can occur with SWIG-wrapped extensions. After a
2646 failure, which can occur with SWIG-wrapped extensions. After a
2644 crash report from Prabhu.
2647 crash report from Prabhu.
2645
2648
2646 2003-05-16 Fernando Perez <fperez@colorado.edu>
2649 2003-05-16 Fernando Perez <fperez@colorado.edu>
2647
2650
2648 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2651 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2649 protect ipython from user code which may call directly
2652 protect ipython from user code which may call directly
2650 sys.excepthook (this looks like an ipython crash to the user, even
2653 sys.excepthook (this looks like an ipython crash to the user, even
2651 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2654 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2652 This is especially important to help users of WxWindows, but may
2655 This is especially important to help users of WxWindows, but may
2653 also be useful in other cases.
2656 also be useful in other cases.
2654
2657
2655 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2658 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2656 an optional tb_offset to be specified, and to preserve exception
2659 an optional tb_offset to be specified, and to preserve exception
2657 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2660 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2658
2661
2659 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2662 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2660
2663
2661 2003-05-15 Fernando Perez <fperez@colorado.edu>
2664 2003-05-15 Fernando Perez <fperez@colorado.edu>
2662
2665
2663 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2666 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2664 installing for a new user under Windows.
2667 installing for a new user under Windows.
2665
2668
2666 2003-05-12 Fernando Perez <fperez@colorado.edu>
2669 2003-05-12 Fernando Perez <fperez@colorado.edu>
2667
2670
2668 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2671 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2669 handler for Emacs comint-based lines. Currently it doesn't do
2672 handler for Emacs comint-based lines. Currently it doesn't do
2670 much (but importantly, it doesn't update the history cache). In
2673 much (but importantly, it doesn't update the history cache). In
2671 the future it may be expanded if Alex needs more functionality
2674 the future it may be expanded if Alex needs more functionality
2672 there.
2675 there.
2673
2676
2674 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2677 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2675 info to crash reports.
2678 info to crash reports.
2676
2679
2677 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2680 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2678 just like Python's -c. Also fixed crash with invalid -color
2681 just like Python's -c. Also fixed crash with invalid -color
2679 option value at startup. Thanks to Will French
2682 option value at startup. Thanks to Will French
2680 <wfrench-AT-bestweb.net> for the bug report.
2683 <wfrench-AT-bestweb.net> for the bug report.
2681
2684
2682 2003-05-09 Fernando Perez <fperez@colorado.edu>
2685 2003-05-09 Fernando Perez <fperez@colorado.edu>
2683
2686
2684 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2687 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2685 to EvalDict (it's a mapping, after all) and simplified its code
2688 to EvalDict (it's a mapping, after all) and simplified its code
2686 quite a bit, after a nice discussion on c.l.py where Gustavo
2689 quite a bit, after a nice discussion on c.l.py where Gustavo
2687 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2690 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2688
2691
2689 2003-04-30 Fernando Perez <fperez@colorado.edu>
2692 2003-04-30 Fernando Perez <fperez@colorado.edu>
2690
2693
2691 * IPython/genutils.py (timings_out): modified it to reduce its
2694 * IPython/genutils.py (timings_out): modified it to reduce its
2692 overhead in the common reps==1 case.
2695 overhead in the common reps==1 case.
2693
2696
2694 2003-04-29 Fernando Perez <fperez@colorado.edu>
2697 2003-04-29 Fernando Perez <fperez@colorado.edu>
2695
2698
2696 * IPython/genutils.py (timings_out): Modified to use the resource
2699 * IPython/genutils.py (timings_out): Modified to use the resource
2697 module, which avoids the wraparound problems of time.clock().
2700 module, which avoids the wraparound problems of time.clock().
2698
2701
2699 2003-04-17 *** Released version 0.2.15pre4
2702 2003-04-17 *** Released version 0.2.15pre4
2700
2703
2701 2003-04-17 Fernando Perez <fperez@colorado.edu>
2704 2003-04-17 Fernando Perez <fperez@colorado.edu>
2702
2705
2703 * setup.py (scriptfiles): Split windows-specific stuff over to a
2706 * setup.py (scriptfiles): Split windows-specific stuff over to a
2704 separate file, in an attempt to have a Windows GUI installer.
2707 separate file, in an attempt to have a Windows GUI installer.
2705 That didn't work, but part of the groundwork is done.
2708 That didn't work, but part of the groundwork is done.
2706
2709
2707 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2710 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2708 indent/unindent with 4 spaces. Particularly useful in combination
2711 indent/unindent with 4 spaces. Particularly useful in combination
2709 with the new auto-indent option.
2712 with the new auto-indent option.
2710
2713
2711 2003-04-16 Fernando Perez <fperez@colorado.edu>
2714 2003-04-16 Fernando Perez <fperez@colorado.edu>
2712
2715
2713 * IPython/Magic.py: various replacements of self.rc for
2716 * IPython/Magic.py: various replacements of self.rc for
2714 self.shell.rc. A lot more remains to be done to fully disentangle
2717 self.shell.rc. A lot more remains to be done to fully disentangle
2715 this class from the main Shell class.
2718 this class from the main Shell class.
2716
2719
2717 * IPython/GnuplotRuntime.py: added checks for mouse support so
2720 * IPython/GnuplotRuntime.py: added checks for mouse support so
2718 that we don't try to enable it if the current gnuplot doesn't
2721 that we don't try to enable it if the current gnuplot doesn't
2719 really support it. Also added checks so that we don't try to
2722 really support it. Also added checks so that we don't try to
2720 enable persist under Windows (where Gnuplot doesn't recognize the
2723 enable persist under Windows (where Gnuplot doesn't recognize the
2721 option).
2724 option).
2722
2725
2723 * IPython/iplib.py (InteractiveShell.interact): Added optional
2726 * IPython/iplib.py (InteractiveShell.interact): Added optional
2724 auto-indenting code, after a patch by King C. Shu
2727 auto-indenting code, after a patch by King C. Shu
2725 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2728 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2726 get along well with pasting indented code. If I ever figure out
2729 get along well with pasting indented code. If I ever figure out
2727 how to make that part go well, it will become on by default.
2730 how to make that part go well, it will become on by default.
2728
2731
2729 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2732 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2730 crash ipython if there was an unmatched '%' in the user's prompt
2733 crash ipython if there was an unmatched '%' in the user's prompt
2731 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2734 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2732
2735
2733 * IPython/iplib.py (InteractiveShell.interact): removed the
2736 * IPython/iplib.py (InteractiveShell.interact): removed the
2734 ability to ask the user whether he wants to crash or not at the
2737 ability to ask the user whether he wants to crash or not at the
2735 'last line' exception handler. Calling functions at that point
2738 'last line' exception handler. Calling functions at that point
2736 changes the stack, and the error reports would have incorrect
2739 changes the stack, and the error reports would have incorrect
2737 tracebacks.
2740 tracebacks.
2738
2741
2739 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2742 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2740 pass through a peger a pretty-printed form of any object. After a
2743 pass through a peger a pretty-printed form of any object. After a
2741 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2744 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2742
2745
2743 2003-04-14 Fernando Perez <fperez@colorado.edu>
2746 2003-04-14 Fernando Perez <fperez@colorado.edu>
2744
2747
2745 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2748 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2746 all files in ~ would be modified at first install (instead of
2749 all files in ~ would be modified at first install (instead of
2747 ~/.ipython). This could be potentially disastrous, as the
2750 ~/.ipython). This could be potentially disastrous, as the
2748 modification (make line-endings native) could damage binary files.
2751 modification (make line-endings native) could damage binary files.
2749
2752
2750 2003-04-10 Fernando Perez <fperez@colorado.edu>
2753 2003-04-10 Fernando Perez <fperez@colorado.edu>
2751
2754
2752 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2755 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2753 handle only lines which are invalid python. This now means that
2756 handle only lines which are invalid python. This now means that
2754 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2757 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2755 for the bug report.
2758 for the bug report.
2756
2759
2757 2003-04-01 Fernando Perez <fperez@colorado.edu>
2760 2003-04-01 Fernando Perez <fperez@colorado.edu>
2758
2761
2759 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2762 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2760 where failing to set sys.last_traceback would crash pdb.pm().
2763 where failing to set sys.last_traceback would crash pdb.pm().
2761 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2764 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2762 report.
2765 report.
2763
2766
2764 2003-03-25 Fernando Perez <fperez@colorado.edu>
2767 2003-03-25 Fernando Perez <fperez@colorado.edu>
2765
2768
2766 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2769 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2767 before printing it (it had a lot of spurious blank lines at the
2770 before printing it (it had a lot of spurious blank lines at the
2768 end).
2771 end).
2769
2772
2770 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2773 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2771 output would be sent 21 times! Obviously people don't use this
2774 output would be sent 21 times! Obviously people don't use this
2772 too often, or I would have heard about it.
2775 too often, or I would have heard about it.
2773
2776
2774 2003-03-24 Fernando Perez <fperez@colorado.edu>
2777 2003-03-24 Fernando Perez <fperez@colorado.edu>
2775
2778
2776 * setup.py (scriptfiles): renamed the data_files parameter from
2779 * setup.py (scriptfiles): renamed the data_files parameter from
2777 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2780 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2778 for the patch.
2781 for the patch.
2779
2782
2780 2003-03-20 Fernando Perez <fperez@colorado.edu>
2783 2003-03-20 Fernando Perez <fperez@colorado.edu>
2781
2784
2782 * IPython/genutils.py (error): added error() and fatal()
2785 * IPython/genutils.py (error): added error() and fatal()
2783 functions.
2786 functions.
2784
2787
2785 2003-03-18 *** Released version 0.2.15pre3
2788 2003-03-18 *** Released version 0.2.15pre3
2786
2789
2787 2003-03-18 Fernando Perez <fperez@colorado.edu>
2790 2003-03-18 Fernando Perez <fperez@colorado.edu>
2788
2791
2789 * setupext/install_data_ext.py
2792 * setupext/install_data_ext.py
2790 (install_data_ext.initialize_options): Class contributed by Jack
2793 (install_data_ext.initialize_options): Class contributed by Jack
2791 Moffit for fixing the old distutils hack. He is sending this to
2794 Moffit for fixing the old distutils hack. He is sending this to
2792 the distutils folks so in the future we may not need it as a
2795 the distutils folks so in the future we may not need it as a
2793 private fix.
2796 private fix.
2794
2797
2795 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2798 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2796 changes for Debian packaging. See his patch for full details.
2799 changes for Debian packaging. See his patch for full details.
2797 The old distutils hack of making the ipythonrc* files carry a
2800 The old distutils hack of making the ipythonrc* files carry a
2798 bogus .py extension is gone, at last. Examples were moved to a
2801 bogus .py extension is gone, at last. Examples were moved to a
2799 separate subdir under doc/, and the separate executable scripts
2802 separate subdir under doc/, and the separate executable scripts
2800 now live in their own directory. Overall a great cleanup. The
2803 now live in their own directory. Overall a great cleanup. The
2801 manual was updated to use the new files, and setup.py has been
2804 manual was updated to use the new files, and setup.py has been
2802 fixed for this setup.
2805 fixed for this setup.
2803
2806
2804 * IPython/PyColorize.py (Parser.usage): made non-executable and
2807 * IPython/PyColorize.py (Parser.usage): made non-executable and
2805 created a pycolor wrapper around it to be included as a script.
2808 created a pycolor wrapper around it to be included as a script.
2806
2809
2807 2003-03-12 *** Released version 0.2.15pre2
2810 2003-03-12 *** Released version 0.2.15pre2
2808
2811
2809 2003-03-12 Fernando Perez <fperez@colorado.edu>
2812 2003-03-12 Fernando Perez <fperez@colorado.edu>
2810
2813
2811 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2814 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2812 long-standing problem with garbage characters in some terminals.
2815 long-standing problem with garbage characters in some terminals.
2813 The issue was really that the \001 and \002 escapes must _only_ be
2816 The issue was really that the \001 and \002 escapes must _only_ be
2814 passed to input prompts (which call readline), but _never_ to
2817 passed to input prompts (which call readline), but _never_ to
2815 normal text to be printed on screen. I changed ColorANSI to have
2818 normal text to be printed on screen. I changed ColorANSI to have
2816 two classes: TermColors and InputTermColors, each with the
2819 two classes: TermColors and InputTermColors, each with the
2817 appropriate escapes for input prompts or normal text. The code in
2820 appropriate escapes for input prompts or normal text. The code in
2818 Prompts.py got slightly more complicated, but this very old and
2821 Prompts.py got slightly more complicated, but this very old and
2819 annoying bug is finally fixed.
2822 annoying bug is finally fixed.
2820
2823
2821 All the credit for nailing down the real origin of this problem
2824 All the credit for nailing down the real origin of this problem
2822 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2825 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2823 *Many* thanks to him for spending quite a bit of effort on this.
2826 *Many* thanks to him for spending quite a bit of effort on this.
2824
2827
2825 2003-03-05 *** Released version 0.2.15pre1
2828 2003-03-05 *** Released version 0.2.15pre1
2826
2829
2827 2003-03-03 Fernando Perez <fperez@colorado.edu>
2830 2003-03-03 Fernando Perez <fperez@colorado.edu>
2828
2831
2829 * IPython/FakeModule.py: Moved the former _FakeModule to a
2832 * IPython/FakeModule.py: Moved the former _FakeModule to a
2830 separate file, because it's also needed by Magic (to fix a similar
2833 separate file, because it's also needed by Magic (to fix a similar
2831 pickle-related issue in @run).
2834 pickle-related issue in @run).
2832
2835
2833 2003-03-02 Fernando Perez <fperez@colorado.edu>
2836 2003-03-02 Fernando Perez <fperez@colorado.edu>
2834
2837
2835 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2838 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2836 the autocall option at runtime.
2839 the autocall option at runtime.
2837 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2840 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2838 across Magic.py to start separating Magic from InteractiveShell.
2841 across Magic.py to start separating Magic from InteractiveShell.
2839 (Magic._ofind): Fixed to return proper namespace for dotted
2842 (Magic._ofind): Fixed to return proper namespace for dotted
2840 names. Before, a dotted name would always return 'not currently
2843 names. Before, a dotted name would always return 'not currently
2841 defined', because it would find the 'parent'. s.x would be found,
2844 defined', because it would find the 'parent'. s.x would be found,
2842 but since 'x' isn't defined by itself, it would get confused.
2845 but since 'x' isn't defined by itself, it would get confused.
2843 (Magic.magic_run): Fixed pickling problems reported by Ralf
2846 (Magic.magic_run): Fixed pickling problems reported by Ralf
2844 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2847 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2845 that I'd used when Mike Heeter reported similar issues at the
2848 that I'd used when Mike Heeter reported similar issues at the
2846 top-level, but now for @run. It boils down to injecting the
2849 top-level, but now for @run. It boils down to injecting the
2847 namespace where code is being executed with something that looks
2850 namespace where code is being executed with something that looks
2848 enough like a module to fool pickle.dump(). Since a pickle stores
2851 enough like a module to fool pickle.dump(). Since a pickle stores
2849 a named reference to the importing module, we need this for
2852 a named reference to the importing module, we need this for
2850 pickles to save something sensible.
2853 pickles to save something sensible.
2851
2854
2852 * IPython/ipmaker.py (make_IPython): added an autocall option.
2855 * IPython/ipmaker.py (make_IPython): added an autocall option.
2853
2856
2854 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2857 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2855 the auto-eval code. Now autocalling is an option, and the code is
2858 the auto-eval code. Now autocalling is an option, and the code is
2856 also vastly safer. There is no more eval() involved at all.
2859 also vastly safer. There is no more eval() involved at all.
2857
2860
2858 2003-03-01 Fernando Perez <fperez@colorado.edu>
2861 2003-03-01 Fernando Perez <fperez@colorado.edu>
2859
2862
2860 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2863 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2861 dict with named keys instead of a tuple.
2864 dict with named keys instead of a tuple.
2862
2865
2863 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2866 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2864
2867
2865 * setup.py (make_shortcut): Fixed message about directories
2868 * setup.py (make_shortcut): Fixed message about directories
2866 created during Windows installation (the directories were ok, just
2869 created during Windows installation (the directories were ok, just
2867 the printed message was misleading). Thanks to Chris Liechti
2870 the printed message was misleading). Thanks to Chris Liechti
2868 <cliechti-AT-gmx.net> for the heads up.
2871 <cliechti-AT-gmx.net> for the heads up.
2869
2872
2870 2003-02-21 Fernando Perez <fperez@colorado.edu>
2873 2003-02-21 Fernando Perez <fperez@colorado.edu>
2871
2874
2872 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2875 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2873 of ValueError exception when checking for auto-execution. This
2876 of ValueError exception when checking for auto-execution. This
2874 one is raised by things like Numeric arrays arr.flat when the
2877 one is raised by things like Numeric arrays arr.flat when the
2875 array is non-contiguous.
2878 array is non-contiguous.
2876
2879
2877 2003-01-31 Fernando Perez <fperez@colorado.edu>
2880 2003-01-31 Fernando Perez <fperez@colorado.edu>
2878
2881
2879 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2882 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2880 not return any value at all (even though the command would get
2883 not return any value at all (even though the command would get
2881 executed).
2884 executed).
2882 (xsys): Flush stdout right after printing the command to ensure
2885 (xsys): Flush stdout right after printing the command to ensure
2883 proper ordering of commands and command output in the total
2886 proper ordering of commands and command output in the total
2884 output.
2887 output.
2885 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2888 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2886 system/getoutput as defaults. The old ones are kept for
2889 system/getoutput as defaults. The old ones are kept for
2887 compatibility reasons, so no code which uses this library needs
2890 compatibility reasons, so no code which uses this library needs
2888 changing.
2891 changing.
2889
2892
2890 2003-01-27 *** Released version 0.2.14
2893 2003-01-27 *** Released version 0.2.14
2891
2894
2892 2003-01-25 Fernando Perez <fperez@colorado.edu>
2895 2003-01-25 Fernando Perez <fperez@colorado.edu>
2893
2896
2894 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2897 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2895 functions defined in previous edit sessions could not be re-edited
2898 functions defined in previous edit sessions could not be re-edited
2896 (because the temp files were immediately removed). Now temp files
2899 (because the temp files were immediately removed). Now temp files
2897 are removed only at IPython's exit.
2900 are removed only at IPython's exit.
2898 (Magic.magic_run): Improved @run to perform shell-like expansions
2901 (Magic.magic_run): Improved @run to perform shell-like expansions
2899 on its arguments (~users and $VARS). With this, @run becomes more
2902 on its arguments (~users and $VARS). With this, @run becomes more
2900 like a normal command-line.
2903 like a normal command-line.
2901
2904
2902 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2905 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2903 bugs related to embedding and cleaned up that code. A fairly
2906 bugs related to embedding and cleaned up that code. A fairly
2904 important one was the impossibility to access the global namespace
2907 important one was the impossibility to access the global namespace
2905 through the embedded IPython (only local variables were visible).
2908 through the embedded IPython (only local variables were visible).
2906
2909
2907 2003-01-14 Fernando Perez <fperez@colorado.edu>
2910 2003-01-14 Fernando Perez <fperez@colorado.edu>
2908
2911
2909 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2912 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2910 auto-calling to be a bit more conservative. Now it doesn't get
2913 auto-calling to be a bit more conservative. Now it doesn't get
2911 triggered if any of '!=()<>' are in the rest of the input line, to
2914 triggered if any of '!=()<>' are in the rest of the input line, to
2912 allow comparing callables. Thanks to Alex for the heads up.
2915 allow comparing callables. Thanks to Alex for the heads up.
2913
2916
2914 2003-01-07 Fernando Perez <fperez@colorado.edu>
2917 2003-01-07 Fernando Perez <fperez@colorado.edu>
2915
2918
2916 * IPython/genutils.py (page): fixed estimation of the number of
2919 * IPython/genutils.py (page): fixed estimation of the number of
2917 lines in a string to be paged to simply count newlines. This
2920 lines in a string to be paged to simply count newlines. This
2918 prevents over-guessing due to embedded escape sequences. A better
2921 prevents over-guessing due to embedded escape sequences. A better
2919 long-term solution would involve stripping out the control chars
2922 long-term solution would involve stripping out the control chars
2920 for the count, but it's potentially so expensive I just don't
2923 for the count, but it's potentially so expensive I just don't
2921 think it's worth doing.
2924 think it's worth doing.
2922
2925
2923 2002-12-19 *** Released version 0.2.14pre50
2926 2002-12-19 *** Released version 0.2.14pre50
2924
2927
2925 2002-12-19 Fernando Perez <fperez@colorado.edu>
2928 2002-12-19 Fernando Perez <fperez@colorado.edu>
2926
2929
2927 * tools/release (version): Changed release scripts to inform
2930 * tools/release (version): Changed release scripts to inform
2928 Andrea and build a NEWS file with a list of recent changes.
2931 Andrea and build a NEWS file with a list of recent changes.
2929
2932
2930 * IPython/ColorANSI.py (__all__): changed terminal detection
2933 * IPython/ColorANSI.py (__all__): changed terminal detection
2931 code. Seems to work better for xterms without breaking
2934 code. Seems to work better for xterms without breaking
2932 konsole. Will need more testing to determine if WinXP and Mac OSX
2935 konsole. Will need more testing to determine if WinXP and Mac OSX
2933 also work ok.
2936 also work ok.
2934
2937
2935 2002-12-18 *** Released version 0.2.14pre49
2938 2002-12-18 *** Released version 0.2.14pre49
2936
2939
2937 2002-12-18 Fernando Perez <fperez@colorado.edu>
2940 2002-12-18 Fernando Perez <fperez@colorado.edu>
2938
2941
2939 * Docs: added new info about Mac OSX, from Andrea.
2942 * Docs: added new info about Mac OSX, from Andrea.
2940
2943
2941 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2944 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2942 allow direct plotting of python strings whose format is the same
2945 allow direct plotting of python strings whose format is the same
2943 of gnuplot data files.
2946 of gnuplot data files.
2944
2947
2945 2002-12-16 Fernando Perez <fperez@colorado.edu>
2948 2002-12-16 Fernando Perez <fperez@colorado.edu>
2946
2949
2947 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2950 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2948 value of exit question to be acknowledged.
2951 value of exit question to be acknowledged.
2949
2952
2950 2002-12-03 Fernando Perez <fperez@colorado.edu>
2953 2002-12-03 Fernando Perez <fperez@colorado.edu>
2951
2954
2952 * IPython/ipmaker.py: removed generators, which had been added
2955 * IPython/ipmaker.py: removed generators, which had been added
2953 by mistake in an earlier debugging run. This was causing trouble
2956 by mistake in an earlier debugging run. This was causing trouble
2954 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2957 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2955 for pointing this out.
2958 for pointing this out.
2956
2959
2957 2002-11-17 Fernando Perez <fperez@colorado.edu>
2960 2002-11-17 Fernando Perez <fperez@colorado.edu>
2958
2961
2959 * Manual: updated the Gnuplot section.
2962 * Manual: updated the Gnuplot section.
2960
2963
2961 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2964 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2962 a much better split of what goes in Runtime and what goes in
2965 a much better split of what goes in Runtime and what goes in
2963 Interactive.
2966 Interactive.
2964
2967
2965 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2968 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2966 being imported from iplib.
2969 being imported from iplib.
2967
2970
2968 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2971 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2969 for command-passing. Now the global Gnuplot instance is called
2972 for command-passing. Now the global Gnuplot instance is called
2970 'gp' instead of 'g', which was really a far too fragile and
2973 'gp' instead of 'g', which was really a far too fragile and
2971 common name.
2974 common name.
2972
2975
2973 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2976 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2974 bounding boxes generated by Gnuplot for square plots.
2977 bounding boxes generated by Gnuplot for square plots.
2975
2978
2976 * IPython/genutils.py (popkey): new function added. I should
2979 * IPython/genutils.py (popkey): new function added. I should
2977 suggest this on c.l.py as a dict method, it seems useful.
2980 suggest this on c.l.py as a dict method, it seems useful.
2978
2981
2979 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2982 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2980 to transparently handle PostScript generation. MUCH better than
2983 to transparently handle PostScript generation. MUCH better than
2981 the previous plot_eps/replot_eps (which I removed now). The code
2984 the previous plot_eps/replot_eps (which I removed now). The code
2982 is also fairly clean and well documented now (including
2985 is also fairly clean and well documented now (including
2983 docstrings).
2986 docstrings).
2984
2987
2985 2002-11-13 Fernando Perez <fperez@colorado.edu>
2988 2002-11-13 Fernando Perez <fperez@colorado.edu>
2986
2989
2987 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2990 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2988 (inconsistent with options).
2991 (inconsistent with options).
2989
2992
2990 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2993 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2991 manually disabled, I don't know why. Fixed it.
2994 manually disabled, I don't know why. Fixed it.
2992 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2995 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2993 eps output.
2996 eps output.
2994
2997
2995 2002-11-12 Fernando Perez <fperez@colorado.edu>
2998 2002-11-12 Fernando Perez <fperez@colorado.edu>
2996
2999
2997 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3000 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2998 don't propagate up to caller. Fixes crash reported by François
3001 don't propagate up to caller. Fixes crash reported by François
2999 Pinard.
3002 Pinard.
3000
3003
3001 2002-11-09 Fernando Perez <fperez@colorado.edu>
3004 2002-11-09 Fernando Perez <fperez@colorado.edu>
3002
3005
3003 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3006 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3004 history file for new users.
3007 history file for new users.
3005 (make_IPython): fixed bug where initial install would leave the
3008 (make_IPython): fixed bug where initial install would leave the
3006 user running in the .ipython dir.
3009 user running in the .ipython dir.
3007 (make_IPython): fixed bug where config dir .ipython would be
3010 (make_IPython): fixed bug where config dir .ipython would be
3008 created regardless of the given -ipythondir option. Thanks to Cory
3011 created regardless of the given -ipythondir option. Thanks to Cory
3009 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3012 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3010
3013
3011 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3014 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3012 type confirmations. Will need to use it in all of IPython's code
3015 type confirmations. Will need to use it in all of IPython's code
3013 consistently.
3016 consistently.
3014
3017
3015 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3018 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3016 context to print 31 lines instead of the default 5. This will make
3019 context to print 31 lines instead of the default 5. This will make
3017 the crash reports extremely detailed in case the problem is in
3020 the crash reports extremely detailed in case the problem is in
3018 libraries I don't have access to.
3021 libraries I don't have access to.
3019
3022
3020 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3023 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3021 line of defense' code to still crash, but giving users fair
3024 line of defense' code to still crash, but giving users fair
3022 warning. I don't want internal errors to go unreported: if there's
3025 warning. I don't want internal errors to go unreported: if there's
3023 an internal problem, IPython should crash and generate a full
3026 an internal problem, IPython should crash and generate a full
3024 report.
3027 report.
3025
3028
3026 2002-11-08 Fernando Perez <fperez@colorado.edu>
3029 2002-11-08 Fernando Perez <fperez@colorado.edu>
3027
3030
3028 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3031 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3029 otherwise uncaught exceptions which can appear if people set
3032 otherwise uncaught exceptions which can appear if people set
3030 sys.stdout to something badly broken. Thanks to a crash report
3033 sys.stdout to something badly broken. Thanks to a crash report
3031 from henni-AT-mail.brainbot.com.
3034 from henni-AT-mail.brainbot.com.
3032
3035
3033 2002-11-04 Fernando Perez <fperez@colorado.edu>
3036 2002-11-04 Fernando Perez <fperez@colorado.edu>
3034
3037
3035 * IPython/iplib.py (InteractiveShell.interact): added
3038 * IPython/iplib.py (InteractiveShell.interact): added
3036 __IPYTHON__active to the builtins. It's a flag which goes on when
3039 __IPYTHON__active to the builtins. It's a flag which goes on when
3037 the interaction starts and goes off again when it stops. This
3040 the interaction starts and goes off again when it stops. This
3038 allows embedding code to detect being inside IPython. Before this
3041 allows embedding code to detect being inside IPython. Before this
3039 was done via __IPYTHON__, but that only shows that an IPython
3042 was done via __IPYTHON__, but that only shows that an IPython
3040 instance has been created.
3043 instance has been created.
3041
3044
3042 * IPython/Magic.py (Magic.magic_env): I realized that in a
3045 * IPython/Magic.py (Magic.magic_env): I realized that in a
3043 UserDict, instance.data holds the data as a normal dict. So I
3046 UserDict, instance.data holds the data as a normal dict. So I
3044 modified @env to return os.environ.data instead of rebuilding a
3047 modified @env to return os.environ.data instead of rebuilding a
3045 dict by hand.
3048 dict by hand.
3046
3049
3047 2002-11-02 Fernando Perez <fperez@colorado.edu>
3050 2002-11-02 Fernando Perez <fperez@colorado.edu>
3048
3051
3049 * IPython/genutils.py (warn): changed so that level 1 prints no
3052 * IPython/genutils.py (warn): changed so that level 1 prints no
3050 header. Level 2 is now the default (with 'WARNING' header, as
3053 header. Level 2 is now the default (with 'WARNING' header, as
3051 before). I think I tracked all places where changes were needed in
3054 before). I think I tracked all places where changes were needed in
3052 IPython, but outside code using the old level numbering may have
3055 IPython, but outside code using the old level numbering may have
3053 broken.
3056 broken.
3054
3057
3055 * IPython/iplib.py (InteractiveShell.runcode): added this to
3058 * IPython/iplib.py (InteractiveShell.runcode): added this to
3056 handle the tracebacks in SystemExit traps correctly. The previous
3059 handle the tracebacks in SystemExit traps correctly. The previous
3057 code (through interact) was printing more of the stack than
3060 code (through interact) was printing more of the stack than
3058 necessary, showing IPython internal code to the user.
3061 necessary, showing IPython internal code to the user.
3059
3062
3060 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3063 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3061 default. Now that the default at the confirmation prompt is yes,
3064 default. Now that the default at the confirmation prompt is yes,
3062 it's not so intrusive. François' argument that ipython sessions
3065 it's not so intrusive. François' argument that ipython sessions
3063 tend to be complex enough not to lose them from an accidental C-d,
3066 tend to be complex enough not to lose them from an accidental C-d,
3064 is a valid one.
3067 is a valid one.
3065
3068
3066 * IPython/iplib.py (InteractiveShell.interact): added a
3069 * IPython/iplib.py (InteractiveShell.interact): added a
3067 showtraceback() call to the SystemExit trap, and modified the exit
3070 showtraceback() call to the SystemExit trap, and modified the exit
3068 confirmation to have yes as the default.
3071 confirmation to have yes as the default.
3069
3072
3070 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3073 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3071 this file. It's been gone from the code for a long time, this was
3074 this file. It's been gone from the code for a long time, this was
3072 simply leftover junk.
3075 simply leftover junk.
3073
3076
3074 2002-11-01 Fernando Perez <fperez@colorado.edu>
3077 2002-11-01 Fernando Perez <fperez@colorado.edu>
3075
3078
3076 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3079 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3077 added. If set, IPython now traps EOF and asks for
3080 added. If set, IPython now traps EOF and asks for
3078 confirmation. After a request by François Pinard.
3081 confirmation. After a request by François Pinard.
3079
3082
3080 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3083 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3081 of @abort, and with a new (better) mechanism for handling the
3084 of @abort, and with a new (better) mechanism for handling the
3082 exceptions.
3085 exceptions.
3083
3086
3084 2002-10-27 Fernando Perez <fperez@colorado.edu>
3087 2002-10-27 Fernando Perez <fperez@colorado.edu>
3085
3088
3086 * IPython/usage.py (__doc__): updated the --help information and
3089 * IPython/usage.py (__doc__): updated the --help information and
3087 the ipythonrc file to indicate that -log generates
3090 the ipythonrc file to indicate that -log generates
3088 ./ipython.log. Also fixed the corresponding info in @logstart.
3091 ./ipython.log. Also fixed the corresponding info in @logstart.
3089 This and several other fixes in the manuals thanks to reports by
3092 This and several other fixes in the manuals thanks to reports by
3090 François Pinard <pinard-AT-iro.umontreal.ca>.
3093 François Pinard <pinard-AT-iro.umontreal.ca>.
3091
3094
3092 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3095 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3093 refer to @logstart (instead of @log, which doesn't exist).
3096 refer to @logstart (instead of @log, which doesn't exist).
3094
3097
3095 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3098 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3096 AttributeError crash. Thanks to Christopher Armstrong
3099 AttributeError crash. Thanks to Christopher Armstrong
3097 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3100 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3098 introduced recently (in 0.2.14pre37) with the fix to the eval
3101 introduced recently (in 0.2.14pre37) with the fix to the eval
3099 problem mentioned below.
3102 problem mentioned below.
3100
3103
3101 2002-10-17 Fernando Perez <fperez@colorado.edu>
3104 2002-10-17 Fernando Perez <fperez@colorado.edu>
3102
3105
3103 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3106 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3104 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3107 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3105
3108
3106 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3109 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3107 this function to fix a problem reported by Alex Schmolck. He saw
3110 this function to fix a problem reported by Alex Schmolck. He saw
3108 it with list comprehensions and generators, which were getting
3111 it with list comprehensions and generators, which were getting
3109 called twice. The real problem was an 'eval' call in testing for
3112 called twice. The real problem was an 'eval' call in testing for
3110 automagic which was evaluating the input line silently.
3113 automagic which was evaluating the input line silently.
3111
3114
3112 This is a potentially very nasty bug, if the input has side
3115 This is a potentially very nasty bug, if the input has side
3113 effects which must not be repeated. The code is much cleaner now,
3116 effects which must not be repeated. The code is much cleaner now,
3114 without any blanket 'except' left and with a regexp test for
3117 without any blanket 'except' left and with a regexp test for
3115 actual function names.
3118 actual function names.
3116
3119
3117 But an eval remains, which I'm not fully comfortable with. I just
3120 But an eval remains, which I'm not fully comfortable with. I just
3118 don't know how to find out if an expression could be a callable in
3121 don't know how to find out if an expression could be a callable in
3119 the user's namespace without doing an eval on the string. However
3122 the user's namespace without doing an eval on the string. However
3120 that string is now much more strictly checked so that no code
3123 that string is now much more strictly checked so that no code
3121 slips by, so the eval should only happen for things that can
3124 slips by, so the eval should only happen for things that can
3122 really be only function/method names.
3125 really be only function/method names.
3123
3126
3124 2002-10-15 Fernando Perez <fperez@colorado.edu>
3127 2002-10-15 Fernando Perez <fperez@colorado.edu>
3125
3128
3126 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3129 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3127 OSX information to main manual, removed README_Mac_OSX file from
3130 OSX information to main manual, removed README_Mac_OSX file from
3128 distribution. Also updated credits for recent additions.
3131 distribution. Also updated credits for recent additions.
3129
3132
3130 2002-10-10 Fernando Perez <fperez@colorado.edu>
3133 2002-10-10 Fernando Perez <fperez@colorado.edu>
3131
3134
3132 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3135 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3133 terminal-related issues. Many thanks to Andrea Riciputi
3136 terminal-related issues. Many thanks to Andrea Riciputi
3134 <andrea.riciputi-AT-libero.it> for writing it.
3137 <andrea.riciputi-AT-libero.it> for writing it.
3135
3138
3136 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3139 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3137 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3140 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3138
3141
3139 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3142 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3140 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3143 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3141 <syver-en-AT-online.no> who both submitted patches for this problem.
3144 <syver-en-AT-online.no> who both submitted patches for this problem.
3142
3145
3143 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3146 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3144 global embedding to make sure that things don't overwrite user
3147 global embedding to make sure that things don't overwrite user
3145 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3148 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3146
3149
3147 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3150 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3148 compatibility. Thanks to Hayden Callow
3151 compatibility. Thanks to Hayden Callow
3149 <h.callow-AT-elec.canterbury.ac.nz>
3152 <h.callow-AT-elec.canterbury.ac.nz>
3150
3153
3151 2002-10-04 Fernando Perez <fperez@colorado.edu>
3154 2002-10-04 Fernando Perez <fperez@colorado.edu>
3152
3155
3153 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3156 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3154 Gnuplot.File objects.
3157 Gnuplot.File objects.
3155
3158
3156 2002-07-23 Fernando Perez <fperez@colorado.edu>
3159 2002-07-23 Fernando Perez <fperez@colorado.edu>
3157
3160
3158 * IPython/genutils.py (timing): Added timings() and timing() for
3161 * IPython/genutils.py (timing): Added timings() and timing() for
3159 quick access to the most commonly needed data, the execution
3162 quick access to the most commonly needed data, the execution
3160 times. Old timing() renamed to timings_out().
3163 times. Old timing() renamed to timings_out().
3161
3164
3162 2002-07-18 Fernando Perez <fperez@colorado.edu>
3165 2002-07-18 Fernando Perez <fperez@colorado.edu>
3163
3166
3164 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3167 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3165 bug with nested instances disrupting the parent's tab completion.
3168 bug with nested instances disrupting the parent's tab completion.
3166
3169
3167 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3170 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3168 all_completions code to begin the emacs integration.
3171 all_completions code to begin the emacs integration.
3169
3172
3170 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3173 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3171 argument to allow titling individual arrays when plotting.
3174 argument to allow titling individual arrays when plotting.
3172
3175
3173 2002-07-15 Fernando Perez <fperez@colorado.edu>
3176 2002-07-15 Fernando Perez <fperez@colorado.edu>
3174
3177
3175 * setup.py (make_shortcut): changed to retrieve the value of
3178 * setup.py (make_shortcut): changed to retrieve the value of
3176 'Program Files' directory from the registry (this value changes in
3179 'Program Files' directory from the registry (this value changes in
3177 non-english versions of Windows). Thanks to Thomas Fanslau
3180 non-english versions of Windows). Thanks to Thomas Fanslau
3178 <tfanslau-AT-gmx.de> for the report.
3181 <tfanslau-AT-gmx.de> for the report.
3179
3182
3180 2002-07-10 Fernando Perez <fperez@colorado.edu>
3183 2002-07-10 Fernando Perez <fperez@colorado.edu>
3181
3184
3182 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3185 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3183 a bug in pdb, which crashes if a line with only whitespace is
3186 a bug in pdb, which crashes if a line with only whitespace is
3184 entered. Bug report submitted to sourceforge.
3187 entered. Bug report submitted to sourceforge.
3185
3188
3186 2002-07-09 Fernando Perez <fperez@colorado.edu>
3189 2002-07-09 Fernando Perez <fperez@colorado.edu>
3187
3190
3188 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3191 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3189 reporting exceptions (it's a bug in inspect.py, I just set a
3192 reporting exceptions (it's a bug in inspect.py, I just set a
3190 workaround).
3193 workaround).
3191
3194
3192 2002-07-08 Fernando Perez <fperez@colorado.edu>
3195 2002-07-08 Fernando Perez <fperez@colorado.edu>
3193
3196
3194 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3197 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3195 __IPYTHON__ in __builtins__ to show up in user_ns.
3198 __IPYTHON__ in __builtins__ to show up in user_ns.
3196
3199
3197 2002-07-03 Fernando Perez <fperez@colorado.edu>
3200 2002-07-03 Fernando Perez <fperez@colorado.edu>
3198
3201
3199 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3202 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3200 name from @gp_set_instance to @gp_set_default.
3203 name from @gp_set_instance to @gp_set_default.
3201
3204
3202 * IPython/ipmaker.py (make_IPython): default editor value set to
3205 * IPython/ipmaker.py (make_IPython): default editor value set to
3203 '0' (a string), to match the rc file. Otherwise will crash when
3206 '0' (a string), to match the rc file. Otherwise will crash when
3204 .strip() is called on it.
3207 .strip() is called on it.
3205
3208
3206
3209
3207 2002-06-28 Fernando Perez <fperez@colorado.edu>
3210 2002-06-28 Fernando Perez <fperez@colorado.edu>
3208
3211
3209 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3212 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3210 of files in current directory when a file is executed via
3213 of files in current directory when a file is executed via
3211 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3214 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3212
3215
3213 * setup.py (manfiles): fix for rpm builds, submitted by RA
3216 * setup.py (manfiles): fix for rpm builds, submitted by RA
3214 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3217 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3215
3218
3216 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3219 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3217 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3220 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3218 string!). A. Schmolck caught this one.
3221 string!). A. Schmolck caught this one.
3219
3222
3220 2002-06-27 Fernando Perez <fperez@colorado.edu>
3223 2002-06-27 Fernando Perez <fperez@colorado.edu>
3221
3224
3222 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3225 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3223 defined files at the cmd line. __name__ wasn't being set to
3226 defined files at the cmd line. __name__ wasn't being set to
3224 __main__.
3227 __main__.
3225
3228
3226 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3229 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3227 regular lists and tuples besides Numeric arrays.
3230 regular lists and tuples besides Numeric arrays.
3228
3231
3229 * IPython/Prompts.py (CachedOutput.__call__): Added output
3232 * IPython/Prompts.py (CachedOutput.__call__): Added output
3230 supression for input ending with ';'. Similar to Mathematica and
3233 supression for input ending with ';'. Similar to Mathematica and
3231 Matlab. The _* vars and Out[] list are still updated, just like
3234 Matlab. The _* vars and Out[] list are still updated, just like
3232 Mathematica behaves.
3235 Mathematica behaves.
3233
3236
3234 2002-06-25 Fernando Perez <fperez@colorado.edu>
3237 2002-06-25 Fernando Perez <fperez@colorado.edu>
3235
3238
3236 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3239 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3237 .ini extensions for profiels under Windows.
3240 .ini extensions for profiels under Windows.
3238
3241
3239 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3242 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3240 string form. Fix contributed by Alexander Schmolck
3243 string form. Fix contributed by Alexander Schmolck
3241 <a.schmolck-AT-gmx.net>
3244 <a.schmolck-AT-gmx.net>
3242
3245
3243 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3246 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3244 pre-configured Gnuplot instance.
3247 pre-configured Gnuplot instance.
3245
3248
3246 2002-06-21 Fernando Perez <fperez@colorado.edu>
3249 2002-06-21 Fernando Perez <fperez@colorado.edu>
3247
3250
3248 * IPython/numutils.py (exp_safe): new function, works around the
3251 * IPython/numutils.py (exp_safe): new function, works around the
3249 underflow problems in Numeric.
3252 underflow problems in Numeric.
3250 (log2): New fn. Safe log in base 2: returns exact integer answer
3253 (log2): New fn. Safe log in base 2: returns exact integer answer
3251 for exact integer powers of 2.
3254 for exact integer powers of 2.
3252
3255
3253 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3256 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3254 properly.
3257 properly.
3255
3258
3256 2002-06-20 Fernando Perez <fperez@colorado.edu>
3259 2002-06-20 Fernando Perez <fperez@colorado.edu>
3257
3260
3258 * IPython/genutils.py (timing): new function like
3261 * IPython/genutils.py (timing): new function like
3259 Mathematica's. Similar to time_test, but returns more info.
3262 Mathematica's. Similar to time_test, but returns more info.
3260
3263
3261 2002-06-18 Fernando Perez <fperez@colorado.edu>
3264 2002-06-18 Fernando Perez <fperez@colorado.edu>
3262
3265
3263 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3266 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3264 according to Mike Heeter's suggestions.
3267 according to Mike Heeter's suggestions.
3265
3268
3266 2002-06-16 Fernando Perez <fperez@colorado.edu>
3269 2002-06-16 Fernando Perez <fperez@colorado.edu>
3267
3270
3268 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3271 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3269 system. GnuplotMagic is gone as a user-directory option. New files
3272 system. GnuplotMagic is gone as a user-directory option. New files
3270 make it easier to use all the gnuplot stuff both from external
3273 make it easier to use all the gnuplot stuff both from external
3271 programs as well as from IPython. Had to rewrite part of
3274 programs as well as from IPython. Had to rewrite part of
3272 hardcopy() b/c of a strange bug: often the ps files simply don't
3275 hardcopy() b/c of a strange bug: often the ps files simply don't
3273 get created, and require a repeat of the command (often several
3276 get created, and require a repeat of the command (often several
3274 times).
3277 times).
3275
3278
3276 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3279 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3277 resolve output channel at call time, so that if sys.stderr has
3280 resolve output channel at call time, so that if sys.stderr has
3278 been redirected by user this gets honored.
3281 been redirected by user this gets honored.
3279
3282
3280 2002-06-13 Fernando Perez <fperez@colorado.edu>
3283 2002-06-13 Fernando Perez <fperez@colorado.edu>
3281
3284
3282 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3285 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3283 IPShell. Kept a copy with the old names to avoid breaking people's
3286 IPShell. Kept a copy with the old names to avoid breaking people's
3284 embedded code.
3287 embedded code.
3285
3288
3286 * IPython/ipython: simplified it to the bare minimum after
3289 * IPython/ipython: simplified it to the bare minimum after
3287 Holger's suggestions. Added info about how to use it in
3290 Holger's suggestions. Added info about how to use it in
3288 PYTHONSTARTUP.
3291 PYTHONSTARTUP.
3289
3292
3290 * IPython/Shell.py (IPythonShell): changed the options passing
3293 * IPython/Shell.py (IPythonShell): changed the options passing
3291 from a string with funky %s replacements to a straight list. Maybe
3294 from a string with funky %s replacements to a straight list. Maybe
3292 a bit more typing, but it follows sys.argv conventions, so there's
3295 a bit more typing, but it follows sys.argv conventions, so there's
3293 less special-casing to remember.
3296 less special-casing to remember.
3294
3297
3295 2002-06-12 Fernando Perez <fperez@colorado.edu>
3298 2002-06-12 Fernando Perez <fperez@colorado.edu>
3296
3299
3297 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3300 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3298 command. Thanks to a suggestion by Mike Heeter.
3301 command. Thanks to a suggestion by Mike Heeter.
3299 (Magic.magic_pfile): added behavior to look at filenames if given
3302 (Magic.magic_pfile): added behavior to look at filenames if given
3300 arg is not a defined object.
3303 arg is not a defined object.
3301 (Magic.magic_save): New @save function to save code snippets. Also
3304 (Magic.magic_save): New @save function to save code snippets. Also
3302 a Mike Heeter idea.
3305 a Mike Heeter idea.
3303
3306
3304 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3307 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3305 plot() and replot(). Much more convenient now, especially for
3308 plot() and replot(). Much more convenient now, especially for
3306 interactive use.
3309 interactive use.
3307
3310
3308 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3311 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3309 filenames.
3312 filenames.
3310
3313
3311 2002-06-02 Fernando Perez <fperez@colorado.edu>
3314 2002-06-02 Fernando Perez <fperez@colorado.edu>
3312
3315
3313 * IPython/Struct.py (Struct.__init__): modified to admit
3316 * IPython/Struct.py (Struct.__init__): modified to admit
3314 initialization via another struct.
3317 initialization via another struct.
3315
3318
3316 * IPython/genutils.py (SystemExec.__init__): New stateful
3319 * IPython/genutils.py (SystemExec.__init__): New stateful
3317 interface to xsys and bq. Useful for writing system scripts.
3320 interface to xsys and bq. Useful for writing system scripts.
3318
3321
3319 2002-05-30 Fernando Perez <fperez@colorado.edu>
3322 2002-05-30 Fernando Perez <fperez@colorado.edu>
3320
3323
3321 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3324 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3322 documents. This will make the user download smaller (it's getting
3325 documents. This will make the user download smaller (it's getting
3323 too big).
3326 too big).
3324
3327
3325 2002-05-29 Fernando Perez <fperez@colorado.edu>
3328 2002-05-29 Fernando Perez <fperez@colorado.edu>
3326
3329
3327 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3330 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3328 fix problems with shelve and pickle. Seems to work, but I don't
3331 fix problems with shelve and pickle. Seems to work, but I don't
3329 know if corner cases break it. Thanks to Mike Heeter
3332 know if corner cases break it. Thanks to Mike Heeter
3330 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3333 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3331
3334
3332 2002-05-24 Fernando Perez <fperez@colorado.edu>
3335 2002-05-24 Fernando Perez <fperez@colorado.edu>
3333
3336
3334 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3337 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3335 macros having broken.
3338 macros having broken.
3336
3339
3337 2002-05-21 Fernando Perez <fperez@colorado.edu>
3340 2002-05-21 Fernando Perez <fperez@colorado.edu>
3338
3341
3339 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3342 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3340 introduced logging bug: all history before logging started was
3343 introduced logging bug: all history before logging started was
3341 being written one character per line! This came from the redesign
3344 being written one character per line! This came from the redesign
3342 of the input history as a special list which slices to strings,
3345 of the input history as a special list which slices to strings,
3343 not to lists.
3346 not to lists.
3344
3347
3345 2002-05-20 Fernando Perez <fperez@colorado.edu>
3348 2002-05-20 Fernando Perez <fperez@colorado.edu>
3346
3349
3347 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3350 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3348 be an attribute of all classes in this module. The design of these
3351 be an attribute of all classes in this module. The design of these
3349 classes needs some serious overhauling.
3352 classes needs some serious overhauling.
3350
3353
3351 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3354 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3352 which was ignoring '_' in option names.
3355 which was ignoring '_' in option names.
3353
3356
3354 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3357 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3355 'Verbose_novars' to 'Context' and made it the new default. It's a
3358 'Verbose_novars' to 'Context' and made it the new default. It's a
3356 bit more readable and also safer than verbose.
3359 bit more readable and also safer than verbose.
3357
3360
3358 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3361 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3359 triple-quoted strings.
3362 triple-quoted strings.
3360
3363
3361 * IPython/OInspect.py (__all__): new module exposing the object
3364 * IPython/OInspect.py (__all__): new module exposing the object
3362 introspection facilities. Now the corresponding magics are dummy
3365 introspection facilities. Now the corresponding magics are dummy
3363 wrappers around this. Having this module will make it much easier
3366 wrappers around this. Having this module will make it much easier
3364 to put these functions into our modified pdb.
3367 to put these functions into our modified pdb.
3365 This new object inspector system uses the new colorizing module,
3368 This new object inspector system uses the new colorizing module,
3366 so source code and other things are nicely syntax highlighted.
3369 so source code and other things are nicely syntax highlighted.
3367
3370
3368 2002-05-18 Fernando Perez <fperez@colorado.edu>
3371 2002-05-18 Fernando Perez <fperez@colorado.edu>
3369
3372
3370 * IPython/ColorANSI.py: Split the coloring tools into a separate
3373 * IPython/ColorANSI.py: Split the coloring tools into a separate
3371 module so I can use them in other code easier (they were part of
3374 module so I can use them in other code easier (they were part of
3372 ultraTB).
3375 ultraTB).
3373
3376
3374 2002-05-17 Fernando Perez <fperez@colorado.edu>
3377 2002-05-17 Fernando Perez <fperez@colorado.edu>
3375
3378
3376 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3379 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3377 fixed it to set the global 'g' also to the called instance, as
3380 fixed it to set the global 'g' also to the called instance, as
3378 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3381 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3379 user's 'g' variables).
3382 user's 'g' variables).
3380
3383
3381 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3384 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3382 global variables (aliases to _ih,_oh) so that users which expect
3385 global variables (aliases to _ih,_oh) so that users which expect
3383 In[5] or Out[7] to work aren't unpleasantly surprised.
3386 In[5] or Out[7] to work aren't unpleasantly surprised.
3384 (InputList.__getslice__): new class to allow executing slices of
3387 (InputList.__getslice__): new class to allow executing slices of
3385 input history directly. Very simple class, complements the use of
3388 input history directly. Very simple class, complements the use of
3386 macros.
3389 macros.
3387
3390
3388 2002-05-16 Fernando Perez <fperez@colorado.edu>
3391 2002-05-16 Fernando Perez <fperez@colorado.edu>
3389
3392
3390 * setup.py (docdirbase): make doc directory be just doc/IPython
3393 * setup.py (docdirbase): make doc directory be just doc/IPython
3391 without version numbers, it will reduce clutter for users.
3394 without version numbers, it will reduce clutter for users.
3392
3395
3393 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3396 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3394 execfile call to prevent possible memory leak. See for details:
3397 execfile call to prevent possible memory leak. See for details:
3395 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3398 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3396
3399
3397 2002-05-15 Fernando Perez <fperez@colorado.edu>
3400 2002-05-15 Fernando Perez <fperez@colorado.edu>
3398
3401
3399 * IPython/Magic.py (Magic.magic_psource): made the object
3402 * IPython/Magic.py (Magic.magic_psource): made the object
3400 introspection names be more standard: pdoc, pdef, pfile and
3403 introspection names be more standard: pdoc, pdef, pfile and
3401 psource. They all print/page their output, and it makes
3404 psource. They all print/page their output, and it makes
3402 remembering them easier. Kept old names for compatibility as
3405 remembering them easier. Kept old names for compatibility as
3403 aliases.
3406 aliases.
3404
3407
3405 2002-05-14 Fernando Perez <fperez@colorado.edu>
3408 2002-05-14 Fernando Perez <fperez@colorado.edu>
3406
3409
3407 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3410 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3408 what the mouse problem was. The trick is to use gnuplot with temp
3411 what the mouse problem was. The trick is to use gnuplot with temp
3409 files and NOT with pipes (for data communication), because having
3412 files and NOT with pipes (for data communication), because having
3410 both pipes and the mouse on is bad news.
3413 both pipes and the mouse on is bad news.
3411
3414
3412 2002-05-13 Fernando Perez <fperez@colorado.edu>
3415 2002-05-13 Fernando Perez <fperez@colorado.edu>
3413
3416
3414 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3417 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3415 bug. Information would be reported about builtins even when
3418 bug. Information would be reported about builtins even when
3416 user-defined functions overrode them.
3419 user-defined functions overrode them.
3417
3420
3418 2002-05-11 Fernando Perez <fperez@colorado.edu>
3421 2002-05-11 Fernando Perez <fperez@colorado.edu>
3419
3422
3420 * IPython/__init__.py (__all__): removed FlexCompleter from
3423 * IPython/__init__.py (__all__): removed FlexCompleter from
3421 __all__ so that things don't fail in platforms without readline.
3424 __all__ so that things don't fail in platforms without readline.
3422
3425
3423 2002-05-10 Fernando Perez <fperez@colorado.edu>
3426 2002-05-10 Fernando Perez <fperez@colorado.edu>
3424
3427
3425 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3428 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3426 it requires Numeric, effectively making Numeric a dependency for
3429 it requires Numeric, effectively making Numeric a dependency for
3427 IPython.
3430 IPython.
3428
3431
3429 * Released 0.2.13
3432 * Released 0.2.13
3430
3433
3431 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3434 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3432 profiler interface. Now all the major options from the profiler
3435 profiler interface. Now all the major options from the profiler
3433 module are directly supported in IPython, both for single
3436 module are directly supported in IPython, both for single
3434 expressions (@prun) and for full programs (@run -p).
3437 expressions (@prun) and for full programs (@run -p).
3435
3438
3436 2002-05-09 Fernando Perez <fperez@colorado.edu>
3439 2002-05-09 Fernando Perez <fperez@colorado.edu>
3437
3440
3438 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3441 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3439 magic properly formatted for screen.
3442 magic properly formatted for screen.
3440
3443
3441 * setup.py (make_shortcut): Changed things to put pdf version in
3444 * setup.py (make_shortcut): Changed things to put pdf version in
3442 doc/ instead of doc/manual (had to change lyxport a bit).
3445 doc/ instead of doc/manual (had to change lyxport a bit).
3443
3446
3444 * IPython/Magic.py (Profile.string_stats): made profile runs go
3447 * IPython/Magic.py (Profile.string_stats): made profile runs go
3445 through pager (they are long and a pager allows searching, saving,
3448 through pager (they are long and a pager allows searching, saving,
3446 etc.)
3449 etc.)
3447
3450
3448 2002-05-08 Fernando Perez <fperez@colorado.edu>
3451 2002-05-08 Fernando Perez <fperez@colorado.edu>
3449
3452
3450 * Released 0.2.12
3453 * Released 0.2.12
3451
3454
3452 2002-05-06 Fernando Perez <fperez@colorado.edu>
3455 2002-05-06 Fernando Perez <fperez@colorado.edu>
3453
3456
3454 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3457 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3455 introduced); 'hist n1 n2' was broken.
3458 introduced); 'hist n1 n2' was broken.
3456 (Magic.magic_pdb): added optional on/off arguments to @pdb
3459 (Magic.magic_pdb): added optional on/off arguments to @pdb
3457 (Magic.magic_run): added option -i to @run, which executes code in
3460 (Magic.magic_run): added option -i to @run, which executes code in
3458 the IPython namespace instead of a clean one. Also added @irun as
3461 the IPython namespace instead of a clean one. Also added @irun as
3459 an alias to @run -i.
3462 an alias to @run -i.
3460
3463
3461 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3464 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3462 fixed (it didn't really do anything, the namespaces were wrong).
3465 fixed (it didn't really do anything, the namespaces were wrong).
3463
3466
3464 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3467 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3465
3468
3466 * IPython/__init__.py (__all__): Fixed package namespace, now
3469 * IPython/__init__.py (__all__): Fixed package namespace, now
3467 'import IPython' does give access to IPython.<all> as
3470 'import IPython' does give access to IPython.<all> as
3468 expected. Also renamed __release__ to Release.
3471 expected. Also renamed __release__ to Release.
3469
3472
3470 * IPython/Debugger.py (__license__): created new Pdb class which
3473 * IPython/Debugger.py (__license__): created new Pdb class which
3471 functions like a drop-in for the normal pdb.Pdb but does NOT
3474 functions like a drop-in for the normal pdb.Pdb but does NOT
3472 import readline by default. This way it doesn't muck up IPython's
3475 import readline by default. This way it doesn't muck up IPython's
3473 readline handling, and now tab-completion finally works in the
3476 readline handling, and now tab-completion finally works in the
3474 debugger -- sort of. It completes things globally visible, but the
3477 debugger -- sort of. It completes things globally visible, but the
3475 completer doesn't track the stack as pdb walks it. That's a bit
3478 completer doesn't track the stack as pdb walks it. That's a bit
3476 tricky, and I'll have to implement it later.
3479 tricky, and I'll have to implement it later.
3477
3480
3478 2002-05-05 Fernando Perez <fperez@colorado.edu>
3481 2002-05-05 Fernando Perez <fperez@colorado.edu>
3479
3482
3480 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3483 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3481 magic docstrings when printed via ? (explicit \'s were being
3484 magic docstrings when printed via ? (explicit \'s were being
3482 printed).
3485 printed).
3483
3486
3484 * IPython/ipmaker.py (make_IPython): fixed namespace
3487 * IPython/ipmaker.py (make_IPython): fixed namespace
3485 identification bug. Now variables loaded via logs or command-line
3488 identification bug. Now variables loaded via logs or command-line
3486 files are recognized in the interactive namespace by @who.
3489 files are recognized in the interactive namespace by @who.
3487
3490
3488 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3491 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3489 log replay system stemming from the string form of Structs.
3492 log replay system stemming from the string form of Structs.
3490
3493
3491 * IPython/Magic.py (Macro.__init__): improved macros to properly
3494 * IPython/Magic.py (Macro.__init__): improved macros to properly
3492 handle magic commands in them.
3495 handle magic commands in them.
3493 (Magic.magic_logstart): usernames are now expanded so 'logstart
3496 (Magic.magic_logstart): usernames are now expanded so 'logstart
3494 ~/mylog' now works.
3497 ~/mylog' now works.
3495
3498
3496 * IPython/iplib.py (complete): fixed bug where paths starting with
3499 * IPython/iplib.py (complete): fixed bug where paths starting with
3497 '/' would be completed as magic names.
3500 '/' would be completed as magic names.
3498
3501
3499 2002-05-04 Fernando Perez <fperez@colorado.edu>
3502 2002-05-04 Fernando Perez <fperez@colorado.edu>
3500
3503
3501 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3504 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3502 allow running full programs under the profiler's control.
3505 allow running full programs under the profiler's control.
3503
3506
3504 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3507 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3505 mode to report exceptions verbosely but without formatting
3508 mode to report exceptions verbosely but without formatting
3506 variables. This addresses the issue of ipython 'freezing' (it's
3509 variables. This addresses the issue of ipython 'freezing' (it's
3507 not frozen, but caught in an expensive formatting loop) when huge
3510 not frozen, but caught in an expensive formatting loop) when huge
3508 variables are in the context of an exception.
3511 variables are in the context of an exception.
3509 (VerboseTB.text): Added '--->' markers at line where exception was
3512 (VerboseTB.text): Added '--->' markers at line where exception was
3510 triggered. Much clearer to read, especially in NoColor modes.
3513 triggered. Much clearer to read, especially in NoColor modes.
3511
3514
3512 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3515 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3513 implemented in reverse when changing to the new parse_options().
3516 implemented in reverse when changing to the new parse_options().
3514
3517
3515 2002-05-03 Fernando Perez <fperez@colorado.edu>
3518 2002-05-03 Fernando Perez <fperez@colorado.edu>
3516
3519
3517 * IPython/Magic.py (Magic.parse_options): new function so that
3520 * IPython/Magic.py (Magic.parse_options): new function so that
3518 magics can parse options easier.
3521 magics can parse options easier.
3519 (Magic.magic_prun): new function similar to profile.run(),
3522 (Magic.magic_prun): new function similar to profile.run(),
3520 suggested by Chris Hart.
3523 suggested by Chris Hart.
3521 (Magic.magic_cd): fixed behavior so that it only changes if
3524 (Magic.magic_cd): fixed behavior so that it only changes if
3522 directory actually is in history.
3525 directory actually is in history.
3523
3526
3524 * IPython/usage.py (__doc__): added information about potential
3527 * IPython/usage.py (__doc__): added information about potential
3525 slowness of Verbose exception mode when there are huge data
3528 slowness of Verbose exception mode when there are huge data
3526 structures to be formatted (thanks to Archie Paulson).
3529 structures to be formatted (thanks to Archie Paulson).
3527
3530
3528 * IPython/ipmaker.py (make_IPython): Changed default logging
3531 * IPython/ipmaker.py (make_IPython): Changed default logging
3529 (when simply called with -log) to use curr_dir/ipython.log in
3532 (when simply called with -log) to use curr_dir/ipython.log in
3530 rotate mode. Fixed crash which was occuring with -log before
3533 rotate mode. Fixed crash which was occuring with -log before
3531 (thanks to Jim Boyle).
3534 (thanks to Jim Boyle).
3532
3535
3533 2002-05-01 Fernando Perez <fperez@colorado.edu>
3536 2002-05-01 Fernando Perez <fperez@colorado.edu>
3534
3537
3535 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3538 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3536 was nasty -- though somewhat of a corner case).
3539 was nasty -- though somewhat of a corner case).
3537
3540
3538 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3541 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3539 text (was a bug).
3542 text (was a bug).
3540
3543
3541 2002-04-30 Fernando Perez <fperez@colorado.edu>
3544 2002-04-30 Fernando Perez <fperez@colorado.edu>
3542
3545
3543 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3546 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3544 a print after ^D or ^C from the user so that the In[] prompt
3547 a print after ^D or ^C from the user so that the In[] prompt
3545 doesn't over-run the gnuplot one.
3548 doesn't over-run the gnuplot one.
3546
3549
3547 2002-04-29 Fernando Perez <fperez@colorado.edu>
3550 2002-04-29 Fernando Perez <fperez@colorado.edu>
3548
3551
3549 * Released 0.2.10
3552 * Released 0.2.10
3550
3553
3551 * IPython/__release__.py (version): get date dynamically.
3554 * IPython/__release__.py (version): get date dynamically.
3552
3555
3553 * Misc. documentation updates thanks to Arnd's comments. Also ran
3556 * Misc. documentation updates thanks to Arnd's comments. Also ran
3554 a full spellcheck on the manual (hadn't been done in a while).
3557 a full spellcheck on the manual (hadn't been done in a while).
3555
3558
3556 2002-04-27 Fernando Perez <fperez@colorado.edu>
3559 2002-04-27 Fernando Perez <fperez@colorado.edu>
3557
3560
3558 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3561 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3559 starting a log in mid-session would reset the input history list.
3562 starting a log in mid-session would reset the input history list.
3560
3563
3561 2002-04-26 Fernando Perez <fperez@colorado.edu>
3564 2002-04-26 Fernando Perez <fperez@colorado.edu>
3562
3565
3563 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3566 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3564 all files were being included in an update. Now anything in
3567 all files were being included in an update. Now anything in
3565 UserConfig that matches [A-Za-z]*.py will go (this excludes
3568 UserConfig that matches [A-Za-z]*.py will go (this excludes
3566 __init__.py)
3569 __init__.py)
3567
3570
3568 2002-04-25 Fernando Perez <fperez@colorado.edu>
3571 2002-04-25 Fernando Perez <fperez@colorado.edu>
3569
3572
3570 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3573 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3571 to __builtins__ so that any form of embedded or imported code can
3574 to __builtins__ so that any form of embedded or imported code can
3572 test for being inside IPython.
3575 test for being inside IPython.
3573
3576
3574 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3577 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3575 changed to GnuplotMagic because it's now an importable module,
3578 changed to GnuplotMagic because it's now an importable module,
3576 this makes the name follow that of the standard Gnuplot module.
3579 this makes the name follow that of the standard Gnuplot module.
3577 GnuplotMagic can now be loaded at any time in mid-session.
3580 GnuplotMagic can now be loaded at any time in mid-session.
3578
3581
3579 2002-04-24 Fernando Perez <fperez@colorado.edu>
3582 2002-04-24 Fernando Perez <fperez@colorado.edu>
3580
3583
3581 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3584 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3582 the globals (IPython has its own namespace) and the
3585 the globals (IPython has its own namespace) and the
3583 PhysicalQuantity stuff is much better anyway.
3586 PhysicalQuantity stuff is much better anyway.
3584
3587
3585 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3588 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3586 embedding example to standard user directory for
3589 embedding example to standard user directory for
3587 distribution. Also put it in the manual.
3590 distribution. Also put it in the manual.
3588
3591
3589 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3592 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3590 instance as first argument (so it doesn't rely on some obscure
3593 instance as first argument (so it doesn't rely on some obscure
3591 hidden global).
3594 hidden global).
3592
3595
3593 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3596 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3594 delimiters. While it prevents ().TAB from working, it allows
3597 delimiters. While it prevents ().TAB from working, it allows
3595 completions in open (... expressions. This is by far a more common
3598 completions in open (... expressions. This is by far a more common
3596 case.
3599 case.
3597
3600
3598 2002-04-23 Fernando Perez <fperez@colorado.edu>
3601 2002-04-23 Fernando Perez <fperez@colorado.edu>
3599
3602
3600 * IPython/Extensions/InterpreterPasteInput.py: new
3603 * IPython/Extensions/InterpreterPasteInput.py: new
3601 syntax-processing module for pasting lines with >>> or ... at the
3604 syntax-processing module for pasting lines with >>> or ... at the
3602 start.
3605 start.
3603
3606
3604 * IPython/Extensions/PhysicalQ_Interactive.py
3607 * IPython/Extensions/PhysicalQ_Interactive.py
3605 (PhysicalQuantityInteractive.__int__): fixed to work with either
3608 (PhysicalQuantityInteractive.__int__): fixed to work with either
3606 Numeric or math.
3609 Numeric or math.
3607
3610
3608 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3611 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3609 provided profiles. Now we have:
3612 provided profiles. Now we have:
3610 -math -> math module as * and cmath with its own namespace.
3613 -math -> math module as * and cmath with its own namespace.
3611 -numeric -> Numeric as *, plus gnuplot & grace
3614 -numeric -> Numeric as *, plus gnuplot & grace
3612 -physics -> same as before
3615 -physics -> same as before
3613
3616
3614 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3617 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3615 user-defined magics wouldn't be found by @magic if they were
3618 user-defined magics wouldn't be found by @magic if they were
3616 defined as class methods. Also cleaned up the namespace search
3619 defined as class methods. Also cleaned up the namespace search
3617 logic and the string building (to use %s instead of many repeated
3620 logic and the string building (to use %s instead of many repeated
3618 string adds).
3621 string adds).
3619
3622
3620 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3623 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3621 of user-defined magics to operate with class methods (cleaner, in
3624 of user-defined magics to operate with class methods (cleaner, in
3622 line with the gnuplot code).
3625 line with the gnuplot code).
3623
3626
3624 2002-04-22 Fernando Perez <fperez@colorado.edu>
3627 2002-04-22 Fernando Perez <fperez@colorado.edu>
3625
3628
3626 * setup.py: updated dependency list so that manual is updated when
3629 * setup.py: updated dependency list so that manual is updated when
3627 all included files change.
3630 all included files change.
3628
3631
3629 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3632 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3630 the delimiter removal option (the fix is ugly right now).
3633 the delimiter removal option (the fix is ugly right now).
3631
3634
3632 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3635 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3633 all of the math profile (quicker loading, no conflict between
3636 all of the math profile (quicker loading, no conflict between
3634 g-9.8 and g-gnuplot).
3637 g-9.8 and g-gnuplot).
3635
3638
3636 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3639 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3637 name of post-mortem files to IPython_crash_report.txt.
3640 name of post-mortem files to IPython_crash_report.txt.
3638
3641
3639 * Cleanup/update of the docs. Added all the new readline info and
3642 * Cleanup/update of the docs. Added all the new readline info and
3640 formatted all lists as 'real lists'.
3643 formatted all lists as 'real lists'.
3641
3644
3642 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3645 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3643 tab-completion options, since the full readline parse_and_bind is
3646 tab-completion options, since the full readline parse_and_bind is
3644 now accessible.
3647 now accessible.
3645
3648
3646 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3649 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3647 handling of readline options. Now users can specify any string to
3650 handling of readline options. Now users can specify any string to
3648 be passed to parse_and_bind(), as well as the delimiters to be
3651 be passed to parse_and_bind(), as well as the delimiters to be
3649 removed.
3652 removed.
3650 (InteractiveShell.__init__): Added __name__ to the global
3653 (InteractiveShell.__init__): Added __name__ to the global
3651 namespace so that things like Itpl which rely on its existence
3654 namespace so that things like Itpl which rely on its existence
3652 don't crash.
3655 don't crash.
3653 (InteractiveShell._prefilter): Defined the default with a _ so
3656 (InteractiveShell._prefilter): Defined the default with a _ so
3654 that prefilter() is easier to override, while the default one
3657 that prefilter() is easier to override, while the default one
3655 remains available.
3658 remains available.
3656
3659
3657 2002-04-18 Fernando Perez <fperez@colorado.edu>
3660 2002-04-18 Fernando Perez <fperez@colorado.edu>
3658
3661
3659 * Added information about pdb in the docs.
3662 * Added information about pdb in the docs.
3660
3663
3661 2002-04-17 Fernando Perez <fperez@colorado.edu>
3664 2002-04-17 Fernando Perez <fperez@colorado.edu>
3662
3665
3663 * IPython/ipmaker.py (make_IPython): added rc_override option to
3666 * IPython/ipmaker.py (make_IPython): added rc_override option to
3664 allow passing config options at creation time which may override
3667 allow passing config options at creation time which may override
3665 anything set in the config files or command line. This is
3668 anything set in the config files or command line. This is
3666 particularly useful for configuring embedded instances.
3669 particularly useful for configuring embedded instances.
3667
3670
3668 2002-04-15 Fernando Perez <fperez@colorado.edu>
3671 2002-04-15 Fernando Perez <fperez@colorado.edu>
3669
3672
3670 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3673 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3671 crash embedded instances because of the input cache falling out of
3674 crash embedded instances because of the input cache falling out of
3672 sync with the output counter.
3675 sync with the output counter.
3673
3676
3674 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3677 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3675 mode which calls pdb after an uncaught exception in IPython itself.
3678 mode which calls pdb after an uncaught exception in IPython itself.
3676
3679
3677 2002-04-14 Fernando Perez <fperez@colorado.edu>
3680 2002-04-14 Fernando Perez <fperez@colorado.edu>
3678
3681
3679 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3682 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3680 readline, fix it back after each call.
3683 readline, fix it back after each call.
3681
3684
3682 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3685 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3683 method to force all access via __call__(), which guarantees that
3686 method to force all access via __call__(), which guarantees that
3684 traceback references are properly deleted.
3687 traceback references are properly deleted.
3685
3688
3686 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3689 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3687 improve printing when pprint is in use.
3690 improve printing when pprint is in use.
3688
3691
3689 2002-04-13 Fernando Perez <fperez@colorado.edu>
3692 2002-04-13 Fernando Perez <fperez@colorado.edu>
3690
3693
3691 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3694 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3692 exceptions aren't caught anymore. If the user triggers one, he
3695 exceptions aren't caught anymore. If the user triggers one, he
3693 should know why he's doing it and it should go all the way up,
3696 should know why he's doing it and it should go all the way up,
3694 just like any other exception. So now @abort will fully kill the
3697 just like any other exception. So now @abort will fully kill the
3695 embedded interpreter and the embedding code (unless that happens
3698 embedded interpreter and the embedding code (unless that happens
3696 to catch SystemExit).
3699 to catch SystemExit).
3697
3700
3698 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3701 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3699 and a debugger() method to invoke the interactive pdb debugger
3702 and a debugger() method to invoke the interactive pdb debugger
3700 after printing exception information. Also added the corresponding
3703 after printing exception information. Also added the corresponding
3701 -pdb option and @pdb magic to control this feature, and updated
3704 -pdb option and @pdb magic to control this feature, and updated
3702 the docs. After a suggestion from Christopher Hart
3705 the docs. After a suggestion from Christopher Hart
3703 (hart-AT-caltech.edu).
3706 (hart-AT-caltech.edu).
3704
3707
3705 2002-04-12 Fernando Perez <fperez@colorado.edu>
3708 2002-04-12 Fernando Perez <fperez@colorado.edu>
3706
3709
3707 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3710 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3708 the exception handlers defined by the user (not the CrashHandler)
3711 the exception handlers defined by the user (not the CrashHandler)
3709 so that user exceptions don't trigger an ipython bug report.
3712 so that user exceptions don't trigger an ipython bug report.
3710
3713
3711 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3714 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3712 configurable (it should have always been so).
3715 configurable (it should have always been so).
3713
3716
3714 2002-03-26 Fernando Perez <fperez@colorado.edu>
3717 2002-03-26 Fernando Perez <fperez@colorado.edu>
3715
3718
3716 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3719 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3717 and there to fix embedding namespace issues. This should all be
3720 and there to fix embedding namespace issues. This should all be
3718 done in a more elegant way.
3721 done in a more elegant way.
3719
3722
3720 2002-03-25 Fernando Perez <fperez@colorado.edu>
3723 2002-03-25 Fernando Perez <fperez@colorado.edu>
3721
3724
3722 * IPython/genutils.py (get_home_dir): Try to make it work under
3725 * IPython/genutils.py (get_home_dir): Try to make it work under
3723 win9x also.
3726 win9x also.
3724
3727
3725 2002-03-20 Fernando Perez <fperez@colorado.edu>
3728 2002-03-20 Fernando Perez <fperez@colorado.edu>
3726
3729
3727 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3730 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3728 sys.displayhook untouched upon __init__.
3731 sys.displayhook untouched upon __init__.
3729
3732
3730 2002-03-19 Fernando Perez <fperez@colorado.edu>
3733 2002-03-19 Fernando Perez <fperez@colorado.edu>
3731
3734
3732 * Released 0.2.9 (for embedding bug, basically).
3735 * Released 0.2.9 (for embedding bug, basically).
3733
3736
3734 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3737 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3735 exceptions so that enclosing shell's state can be restored.
3738 exceptions so that enclosing shell's state can be restored.
3736
3739
3737 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3740 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3738 naming conventions in the .ipython/ dir.
3741 naming conventions in the .ipython/ dir.
3739
3742
3740 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3743 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3741 from delimiters list so filenames with - in them get expanded.
3744 from delimiters list so filenames with - in them get expanded.
3742
3745
3743 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3746 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3744 sys.displayhook not being properly restored after an embedded call.
3747 sys.displayhook not being properly restored after an embedded call.
3745
3748
3746 2002-03-18 Fernando Perez <fperez@colorado.edu>
3749 2002-03-18 Fernando Perez <fperez@colorado.edu>
3747
3750
3748 * Released 0.2.8
3751 * Released 0.2.8
3749
3752
3750 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3753 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3751 some files weren't being included in a -upgrade.
3754 some files weren't being included in a -upgrade.
3752 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3755 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3753 on' so that the first tab completes.
3756 on' so that the first tab completes.
3754 (InteractiveShell.handle_magic): fixed bug with spaces around
3757 (InteractiveShell.handle_magic): fixed bug with spaces around
3755 quotes breaking many magic commands.
3758 quotes breaking many magic commands.
3756
3759
3757 * setup.py: added note about ignoring the syntax error messages at
3760 * setup.py: added note about ignoring the syntax error messages at
3758 installation.
3761 installation.
3759
3762
3760 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3763 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3761 streamlining the gnuplot interface, now there's only one magic @gp.
3764 streamlining the gnuplot interface, now there's only one magic @gp.
3762
3765
3763 2002-03-17 Fernando Perez <fperez@colorado.edu>
3766 2002-03-17 Fernando Perez <fperez@colorado.edu>
3764
3767
3765 * IPython/UserConfig/magic_gnuplot.py: new name for the
3768 * IPython/UserConfig/magic_gnuplot.py: new name for the
3766 example-magic_pm.py file. Much enhanced system, now with a shell
3769 example-magic_pm.py file. Much enhanced system, now with a shell
3767 for communicating directly with gnuplot, one command at a time.
3770 for communicating directly with gnuplot, one command at a time.
3768
3771
3769 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3772 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3770 setting __name__=='__main__'.
3773 setting __name__=='__main__'.
3771
3774
3772 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3775 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3773 mini-shell for accessing gnuplot from inside ipython. Should
3776 mini-shell for accessing gnuplot from inside ipython. Should
3774 extend it later for grace access too. Inspired by Arnd's
3777 extend it later for grace access too. Inspired by Arnd's
3775 suggestion.
3778 suggestion.
3776
3779
3777 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3780 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3778 calling magic functions with () in their arguments. Thanks to Arnd
3781 calling magic functions with () in their arguments. Thanks to Arnd
3779 Baecker for pointing this to me.
3782 Baecker for pointing this to me.
3780
3783
3781 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3784 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3782 infinitely for integer or complex arrays (only worked with floats).
3785 infinitely for integer or complex arrays (only worked with floats).
3783
3786
3784 2002-03-16 Fernando Perez <fperez@colorado.edu>
3787 2002-03-16 Fernando Perez <fperez@colorado.edu>
3785
3788
3786 * setup.py: Merged setup and setup_windows into a single script
3789 * setup.py: Merged setup and setup_windows into a single script
3787 which properly handles things for windows users.
3790 which properly handles things for windows users.
3788
3791
3789 2002-03-15 Fernando Perez <fperez@colorado.edu>
3792 2002-03-15 Fernando Perez <fperez@colorado.edu>
3790
3793
3791 * Big change to the manual: now the magics are all automatically
3794 * Big change to the manual: now the magics are all automatically
3792 documented. This information is generated from their docstrings
3795 documented. This information is generated from their docstrings
3793 and put in a latex file included by the manual lyx file. This way
3796 and put in a latex file included by the manual lyx file. This way
3794 we get always up to date information for the magics. The manual
3797 we get always up to date information for the magics. The manual
3795 now also has proper version information, also auto-synced.
3798 now also has proper version information, also auto-synced.
3796
3799
3797 For this to work, an undocumented --magic_docstrings option was added.
3800 For this to work, an undocumented --magic_docstrings option was added.
3798
3801
3799 2002-03-13 Fernando Perez <fperez@colorado.edu>
3802 2002-03-13 Fernando Perez <fperez@colorado.edu>
3800
3803
3801 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3804 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3802 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3805 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3803
3806
3804 2002-03-12 Fernando Perez <fperez@colorado.edu>
3807 2002-03-12 Fernando Perez <fperez@colorado.edu>
3805
3808
3806 * IPython/ultraTB.py (TermColors): changed color escapes again to
3809 * IPython/ultraTB.py (TermColors): changed color escapes again to
3807 fix the (old, reintroduced) line-wrapping bug. Basically, if
3810 fix the (old, reintroduced) line-wrapping bug. Basically, if
3808 \001..\002 aren't given in the color escapes, lines get wrapped
3811 \001..\002 aren't given in the color escapes, lines get wrapped
3809 weirdly. But giving those screws up old xterms and emacs terms. So
3812 weirdly. But giving those screws up old xterms and emacs terms. So
3810 I added some logic for emacs terms to be ok, but I can't identify old
3813 I added some logic for emacs terms to be ok, but I can't identify old
3811 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3814 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3812
3815
3813 2002-03-10 Fernando Perez <fperez@colorado.edu>
3816 2002-03-10 Fernando Perez <fperez@colorado.edu>
3814
3817
3815 * IPython/usage.py (__doc__): Various documentation cleanups and
3818 * IPython/usage.py (__doc__): Various documentation cleanups and
3816 updates, both in usage docstrings and in the manual.
3819 updates, both in usage docstrings and in the manual.
3817
3820
3818 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3821 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3819 handling of caching. Set minimum acceptabe value for having a
3822 handling of caching. Set minimum acceptabe value for having a
3820 cache at 20 values.
3823 cache at 20 values.
3821
3824
3822 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3825 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3823 install_first_time function to a method, renamed it and added an
3826 install_first_time function to a method, renamed it and added an
3824 'upgrade' mode. Now people can update their config directory with
3827 'upgrade' mode. Now people can update their config directory with
3825 a simple command line switch (-upgrade, also new).
3828 a simple command line switch (-upgrade, also new).
3826
3829
3827 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3830 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3828 @file (convenient for automagic users under Python >= 2.2).
3831 @file (convenient for automagic users under Python >= 2.2).
3829 Removed @files (it seemed more like a plural than an abbrev. of
3832 Removed @files (it seemed more like a plural than an abbrev. of
3830 'file show').
3833 'file show').
3831
3834
3832 * IPython/iplib.py (install_first_time): Fixed crash if there were
3835 * IPython/iplib.py (install_first_time): Fixed crash if there were
3833 backup files ('~') in .ipython/ install directory.
3836 backup files ('~') in .ipython/ install directory.
3834
3837
3835 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3838 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3836 system. Things look fine, but these changes are fairly
3839 system. Things look fine, but these changes are fairly
3837 intrusive. Test them for a few days.
3840 intrusive. Test them for a few days.
3838
3841
3839 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3842 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3840 the prompts system. Now all in/out prompt strings are user
3843 the prompts system. Now all in/out prompt strings are user
3841 controllable. This is particularly useful for embedding, as one
3844 controllable. This is particularly useful for embedding, as one
3842 can tag embedded instances with particular prompts.
3845 can tag embedded instances with particular prompts.
3843
3846
3844 Also removed global use of sys.ps1/2, which now allows nested
3847 Also removed global use of sys.ps1/2, which now allows nested
3845 embeddings without any problems. Added command-line options for
3848 embeddings without any problems. Added command-line options for
3846 the prompt strings.
3849 the prompt strings.
3847
3850
3848 2002-03-08 Fernando Perez <fperez@colorado.edu>
3851 2002-03-08 Fernando Perez <fperez@colorado.edu>
3849
3852
3850 * IPython/UserConfig/example-embed-short.py (ipshell): added
3853 * IPython/UserConfig/example-embed-short.py (ipshell): added
3851 example file with the bare minimum code for embedding.
3854 example file with the bare minimum code for embedding.
3852
3855
3853 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3856 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3854 functionality for the embeddable shell to be activated/deactivated
3857 functionality for the embeddable shell to be activated/deactivated
3855 either globally or at each call.
3858 either globally or at each call.
3856
3859
3857 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3860 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3858 rewriting the prompt with '--->' for auto-inputs with proper
3861 rewriting the prompt with '--->' for auto-inputs with proper
3859 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3862 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3860 this is handled by the prompts class itself, as it should.
3863 this is handled by the prompts class itself, as it should.
3861
3864
3862 2002-03-05 Fernando Perez <fperez@colorado.edu>
3865 2002-03-05 Fernando Perez <fperez@colorado.edu>
3863
3866
3864 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3867 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3865 @logstart to avoid name clashes with the math log function.
3868 @logstart to avoid name clashes with the math log function.
3866
3869
3867 * Big updates to X/Emacs section of the manual.
3870 * Big updates to X/Emacs section of the manual.
3868
3871
3869 * Removed ipython_emacs. Milan explained to me how to pass
3872 * Removed ipython_emacs. Milan explained to me how to pass
3870 arguments to ipython through Emacs. Some day I'm going to end up
3873 arguments to ipython through Emacs. Some day I'm going to end up
3871 learning some lisp...
3874 learning some lisp...
3872
3875
3873 2002-03-04 Fernando Perez <fperez@colorado.edu>
3876 2002-03-04 Fernando Perez <fperez@colorado.edu>
3874
3877
3875 * IPython/ipython_emacs: Created script to be used as the
3878 * IPython/ipython_emacs: Created script to be used as the
3876 py-python-command Emacs variable so we can pass IPython
3879 py-python-command Emacs variable so we can pass IPython
3877 parameters. I can't figure out how to tell Emacs directly to pass
3880 parameters. I can't figure out how to tell Emacs directly to pass
3878 parameters to IPython, so a dummy shell script will do it.
3881 parameters to IPython, so a dummy shell script will do it.
3879
3882
3880 Other enhancements made for things to work better under Emacs'
3883 Other enhancements made for things to work better under Emacs'
3881 various types of terminals. Many thanks to Milan Zamazal
3884 various types of terminals. Many thanks to Milan Zamazal
3882 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3885 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3883
3886
3884 2002-03-01 Fernando Perez <fperez@colorado.edu>
3887 2002-03-01 Fernando Perez <fperez@colorado.edu>
3885
3888
3886 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3889 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3887 that loading of readline is now optional. This gives better
3890 that loading of readline is now optional. This gives better
3888 control to emacs users.
3891 control to emacs users.
3889
3892
3890 * IPython/ultraTB.py (__date__): Modified color escape sequences
3893 * IPython/ultraTB.py (__date__): Modified color escape sequences
3891 and now things work fine under xterm and in Emacs' term buffers
3894 and now things work fine under xterm and in Emacs' term buffers
3892 (though not shell ones). Well, in emacs you get colors, but all
3895 (though not shell ones). Well, in emacs you get colors, but all
3893 seem to be 'light' colors (no difference between dark and light
3896 seem to be 'light' colors (no difference between dark and light
3894 ones). But the garbage chars are gone, and also in xterms. It
3897 ones). But the garbage chars are gone, and also in xterms. It
3895 seems that now I'm using 'cleaner' ansi sequences.
3898 seems that now I'm using 'cleaner' ansi sequences.
3896
3899
3897 2002-02-21 Fernando Perez <fperez@colorado.edu>
3900 2002-02-21 Fernando Perez <fperez@colorado.edu>
3898
3901
3899 * Released 0.2.7 (mainly to publish the scoping fix).
3902 * Released 0.2.7 (mainly to publish the scoping fix).
3900
3903
3901 * IPython/Logger.py (Logger.logstate): added. A corresponding
3904 * IPython/Logger.py (Logger.logstate): added. A corresponding
3902 @logstate magic was created.
3905 @logstate magic was created.
3903
3906
3904 * IPython/Magic.py: fixed nested scoping problem under Python
3907 * IPython/Magic.py: fixed nested scoping problem under Python
3905 2.1.x (automagic wasn't working).
3908 2.1.x (automagic wasn't working).
3906
3909
3907 2002-02-20 Fernando Perez <fperez@colorado.edu>
3910 2002-02-20 Fernando Perez <fperez@colorado.edu>
3908
3911
3909 * Released 0.2.6.
3912 * Released 0.2.6.
3910
3913
3911 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3914 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3912 option so that logs can come out without any headers at all.
3915 option so that logs can come out without any headers at all.
3913
3916
3914 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3917 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3915 SciPy.
3918 SciPy.
3916
3919
3917 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3920 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3918 that embedded IPython calls don't require vars() to be explicitly
3921 that embedded IPython calls don't require vars() to be explicitly
3919 passed. Now they are extracted from the caller's frame (code
3922 passed. Now they are extracted from the caller's frame (code
3920 snatched from Eric Jones' weave). Added better documentation to
3923 snatched from Eric Jones' weave). Added better documentation to
3921 the section on embedding and the example file.
3924 the section on embedding and the example file.
3922
3925
3923 * IPython/genutils.py (page): Changed so that under emacs, it just
3926 * IPython/genutils.py (page): Changed so that under emacs, it just
3924 prints the string. You can then page up and down in the emacs
3927 prints the string. You can then page up and down in the emacs
3925 buffer itself. This is how the builtin help() works.
3928 buffer itself. This is how the builtin help() works.
3926
3929
3927 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3930 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3928 macro scoping: macros need to be executed in the user's namespace
3931 macro scoping: macros need to be executed in the user's namespace
3929 to work as if they had been typed by the user.
3932 to work as if they had been typed by the user.
3930
3933
3931 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3934 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3932 execute automatically (no need to type 'exec...'). They then
3935 execute automatically (no need to type 'exec...'). They then
3933 behave like 'true macros'. The printing system was also modified
3936 behave like 'true macros'. The printing system was also modified
3934 for this to work.
3937 for this to work.
3935
3938
3936 2002-02-19 Fernando Perez <fperez@colorado.edu>
3939 2002-02-19 Fernando Perez <fperez@colorado.edu>
3937
3940
3938 * IPython/genutils.py (page_file): new function for paging files
3941 * IPython/genutils.py (page_file): new function for paging files
3939 in an OS-independent way. Also necessary for file viewing to work
3942 in an OS-independent way. Also necessary for file viewing to work
3940 well inside Emacs buffers.
3943 well inside Emacs buffers.
3941 (page): Added checks for being in an emacs buffer.
3944 (page): Added checks for being in an emacs buffer.
3942 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3945 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3943 same bug in iplib.
3946 same bug in iplib.
3944
3947
3945 2002-02-18 Fernando Perez <fperez@colorado.edu>
3948 2002-02-18 Fernando Perez <fperez@colorado.edu>
3946
3949
3947 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3950 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3948 of readline so that IPython can work inside an Emacs buffer.
3951 of readline so that IPython can work inside an Emacs buffer.
3949
3952
3950 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3953 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3951 method signatures (they weren't really bugs, but it looks cleaner
3954 method signatures (they weren't really bugs, but it looks cleaner
3952 and keeps PyChecker happy).
3955 and keeps PyChecker happy).
3953
3956
3954 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3957 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3955 for implementing various user-defined hooks. Currently only
3958 for implementing various user-defined hooks. Currently only
3956 display is done.
3959 display is done.
3957
3960
3958 * IPython/Prompts.py (CachedOutput._display): changed display
3961 * IPython/Prompts.py (CachedOutput._display): changed display
3959 functions so that they can be dynamically changed by users easily.
3962 functions so that they can be dynamically changed by users easily.
3960
3963
3961 * IPython/Extensions/numeric_formats.py (num_display): added an
3964 * IPython/Extensions/numeric_formats.py (num_display): added an
3962 extension for printing NumPy arrays in flexible manners. It
3965 extension for printing NumPy arrays in flexible manners. It
3963 doesn't do anything yet, but all the structure is in
3966 doesn't do anything yet, but all the structure is in
3964 place. Ultimately the plan is to implement output format control
3967 place. Ultimately the plan is to implement output format control
3965 like in Octave.
3968 like in Octave.
3966
3969
3967 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3970 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3968 methods are found at run-time by all the automatic machinery.
3971 methods are found at run-time by all the automatic machinery.
3969
3972
3970 2002-02-17 Fernando Perez <fperez@colorado.edu>
3973 2002-02-17 Fernando Perez <fperez@colorado.edu>
3971
3974
3972 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3975 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3973 whole file a little.
3976 whole file a little.
3974
3977
3975 * ToDo: closed this document. Now there's a new_design.lyx
3978 * ToDo: closed this document. Now there's a new_design.lyx
3976 document for all new ideas. Added making a pdf of it for the
3979 document for all new ideas. Added making a pdf of it for the
3977 end-user distro.
3980 end-user distro.
3978
3981
3979 * IPython/Logger.py (Logger.switch_log): Created this to replace
3982 * IPython/Logger.py (Logger.switch_log): Created this to replace
3980 logon() and logoff(). It also fixes a nasty crash reported by
3983 logon() and logoff(). It also fixes a nasty crash reported by
3981 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3984 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3982
3985
3983 * IPython/iplib.py (complete): got auto-completion to work with
3986 * IPython/iplib.py (complete): got auto-completion to work with
3984 automagic (I had wanted this for a long time).
3987 automagic (I had wanted this for a long time).
3985
3988
3986 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3989 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3987 to @file, since file() is now a builtin and clashes with automagic
3990 to @file, since file() is now a builtin and clashes with automagic
3988 for @file.
3991 for @file.
3989
3992
3990 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3993 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3991 of this was previously in iplib, which had grown to more than 2000
3994 of this was previously in iplib, which had grown to more than 2000
3992 lines, way too long. No new functionality, but it makes managing
3995 lines, way too long. No new functionality, but it makes managing
3993 the code a bit easier.
3996 the code a bit easier.
3994
3997
3995 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3998 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3996 information to crash reports.
3999 information to crash reports.
3997
4000
3998 2002-02-12 Fernando Perez <fperez@colorado.edu>
4001 2002-02-12 Fernando Perez <fperez@colorado.edu>
3999
4002
4000 * Released 0.2.5.
4003 * Released 0.2.5.
4001
4004
4002 2002-02-11 Fernando Perez <fperez@colorado.edu>
4005 2002-02-11 Fernando Perez <fperez@colorado.edu>
4003
4006
4004 * Wrote a relatively complete Windows installer. It puts
4007 * Wrote a relatively complete Windows installer. It puts
4005 everything in place, creates Start Menu entries and fixes the
4008 everything in place, creates Start Menu entries and fixes the
4006 color issues. Nothing fancy, but it works.
4009 color issues. Nothing fancy, but it works.
4007
4010
4008 2002-02-10 Fernando Perez <fperez@colorado.edu>
4011 2002-02-10 Fernando Perez <fperez@colorado.edu>
4009
4012
4010 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4013 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4011 os.path.expanduser() call so that we can type @run ~/myfile.py and
4014 os.path.expanduser() call so that we can type @run ~/myfile.py and
4012 have thigs work as expected.
4015 have thigs work as expected.
4013
4016
4014 * IPython/genutils.py (page): fixed exception handling so things
4017 * IPython/genutils.py (page): fixed exception handling so things
4015 work both in Unix and Windows correctly. Quitting a pager triggers
4018 work both in Unix and Windows correctly. Quitting a pager triggers
4016 an IOError/broken pipe in Unix, and in windows not finding a pager
4019 an IOError/broken pipe in Unix, and in windows not finding a pager
4017 is also an IOError, so I had to actually look at the return value
4020 is also an IOError, so I had to actually look at the return value
4018 of the exception, not just the exception itself. Should be ok now.
4021 of the exception, not just the exception itself. Should be ok now.
4019
4022
4020 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4023 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4021 modified to allow case-insensitive color scheme changes.
4024 modified to allow case-insensitive color scheme changes.
4022
4025
4023 2002-02-09 Fernando Perez <fperez@colorado.edu>
4026 2002-02-09 Fernando Perez <fperez@colorado.edu>
4024
4027
4025 * IPython/genutils.py (native_line_ends): new function to leave
4028 * IPython/genutils.py (native_line_ends): new function to leave
4026 user config files with os-native line-endings.
4029 user config files with os-native line-endings.
4027
4030
4028 * README and manual updates.
4031 * README and manual updates.
4029
4032
4030 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4033 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4031 instead of StringType to catch Unicode strings.
4034 instead of StringType to catch Unicode strings.
4032
4035
4033 * IPython/genutils.py (filefind): fixed bug for paths with
4036 * IPython/genutils.py (filefind): fixed bug for paths with
4034 embedded spaces (very common in Windows).
4037 embedded spaces (very common in Windows).
4035
4038
4036 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4039 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4037 files under Windows, so that they get automatically associated
4040 files under Windows, so that they get automatically associated
4038 with a text editor. Windows makes it a pain to handle
4041 with a text editor. Windows makes it a pain to handle
4039 extension-less files.
4042 extension-less files.
4040
4043
4041 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4044 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4042 warning about readline only occur for Posix. In Windows there's no
4045 warning about readline only occur for Posix. In Windows there's no
4043 way to get readline, so why bother with the warning.
4046 way to get readline, so why bother with the warning.
4044
4047
4045 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4048 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4046 for __str__ instead of dir(self), since dir() changed in 2.2.
4049 for __str__ instead of dir(self), since dir() changed in 2.2.
4047
4050
4048 * Ported to Windows! Tested on XP, I suspect it should work fine
4051 * Ported to Windows! Tested on XP, I suspect it should work fine
4049 on NT/2000, but I don't think it will work on 98 et al. That
4052 on NT/2000, but I don't think it will work on 98 et al. That
4050 series of Windows is such a piece of junk anyway that I won't try
4053 series of Windows is such a piece of junk anyway that I won't try
4051 porting it there. The XP port was straightforward, showed a few
4054 porting it there. The XP port was straightforward, showed a few
4052 bugs here and there (fixed all), in particular some string
4055 bugs here and there (fixed all), in particular some string
4053 handling stuff which required considering Unicode strings (which
4056 handling stuff which required considering Unicode strings (which
4054 Windows uses). This is good, but hasn't been too tested :) No
4057 Windows uses). This is good, but hasn't been too tested :) No
4055 fancy installer yet, I'll put a note in the manual so people at
4058 fancy installer yet, I'll put a note in the manual so people at
4056 least make manually a shortcut.
4059 least make manually a shortcut.
4057
4060
4058 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4061 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4059 into a single one, "colors". This now controls both prompt and
4062 into a single one, "colors". This now controls both prompt and
4060 exception color schemes, and can be changed both at startup
4063 exception color schemes, and can be changed both at startup
4061 (either via command-line switches or via ipythonrc files) and at
4064 (either via command-line switches or via ipythonrc files) and at
4062 runtime, with @colors.
4065 runtime, with @colors.
4063 (Magic.magic_run): renamed @prun to @run and removed the old
4066 (Magic.magic_run): renamed @prun to @run and removed the old
4064 @run. The two were too similar to warrant keeping both.
4067 @run. The two were too similar to warrant keeping both.
4065
4068
4066 2002-02-03 Fernando Perez <fperez@colorado.edu>
4069 2002-02-03 Fernando Perez <fperez@colorado.edu>
4067
4070
4068 * IPython/iplib.py (install_first_time): Added comment on how to
4071 * IPython/iplib.py (install_first_time): Added comment on how to
4069 configure the color options for first-time users. Put a <return>
4072 configure the color options for first-time users. Put a <return>
4070 request at the end so that small-terminal users get a chance to
4073 request at the end so that small-terminal users get a chance to
4071 read the startup info.
4074 read the startup info.
4072
4075
4073 2002-01-23 Fernando Perez <fperez@colorado.edu>
4076 2002-01-23 Fernando Perez <fperez@colorado.edu>
4074
4077
4075 * IPython/iplib.py (CachedOutput.update): Changed output memory
4078 * IPython/iplib.py (CachedOutput.update): Changed output memory
4076 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4079 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4077 input history we still use _i. Did this b/c these variable are
4080 input history we still use _i. Did this b/c these variable are
4078 very commonly used in interactive work, so the less we need to
4081 very commonly used in interactive work, so the less we need to
4079 type the better off we are.
4082 type the better off we are.
4080 (Magic.magic_prun): updated @prun to better handle the namespaces
4083 (Magic.magic_prun): updated @prun to better handle the namespaces
4081 the file will run in, including a fix for __name__ not being set
4084 the file will run in, including a fix for __name__ not being set
4082 before.
4085 before.
4083
4086
4084 2002-01-20 Fernando Perez <fperez@colorado.edu>
4087 2002-01-20 Fernando Perez <fperez@colorado.edu>
4085
4088
4086 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4089 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4087 extra garbage for Python 2.2. Need to look more carefully into
4090 extra garbage for Python 2.2. Need to look more carefully into
4088 this later.
4091 this later.
4089
4092
4090 2002-01-19 Fernando Perez <fperez@colorado.edu>
4093 2002-01-19 Fernando Perez <fperez@colorado.edu>
4091
4094
4092 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4095 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4093 display SyntaxError exceptions properly formatted when they occur
4096 display SyntaxError exceptions properly formatted when they occur
4094 (they can be triggered by imported code).
4097 (they can be triggered by imported code).
4095
4098
4096 2002-01-18 Fernando Perez <fperez@colorado.edu>
4099 2002-01-18 Fernando Perez <fperez@colorado.edu>
4097
4100
4098 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4101 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4099 SyntaxError exceptions are reported nicely formatted, instead of
4102 SyntaxError exceptions are reported nicely formatted, instead of
4100 spitting out only offset information as before.
4103 spitting out only offset information as before.
4101 (Magic.magic_prun): Added the @prun function for executing
4104 (Magic.magic_prun): Added the @prun function for executing
4102 programs with command line args inside IPython.
4105 programs with command line args inside IPython.
4103
4106
4104 2002-01-16 Fernando Perez <fperez@colorado.edu>
4107 2002-01-16 Fernando Perez <fperez@colorado.edu>
4105
4108
4106 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4109 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4107 to *not* include the last item given in a range. This brings their
4110 to *not* include the last item given in a range. This brings their
4108 behavior in line with Python's slicing:
4111 behavior in line with Python's slicing:
4109 a[n1:n2] -> a[n1]...a[n2-1]
4112 a[n1:n2] -> a[n1]...a[n2-1]
4110 It may be a bit less convenient, but I prefer to stick to Python's
4113 It may be a bit less convenient, but I prefer to stick to Python's
4111 conventions *everywhere*, so users never have to wonder.
4114 conventions *everywhere*, so users never have to wonder.
4112 (Magic.magic_macro): Added @macro function to ease the creation of
4115 (Magic.magic_macro): Added @macro function to ease the creation of
4113 macros.
4116 macros.
4114
4117
4115 2002-01-05 Fernando Perez <fperez@colorado.edu>
4118 2002-01-05 Fernando Perez <fperez@colorado.edu>
4116
4119
4117 * Released 0.2.4.
4120 * Released 0.2.4.
4118
4121
4119 * IPython/iplib.py (Magic.magic_pdef):
4122 * IPython/iplib.py (Magic.magic_pdef):
4120 (InteractiveShell.safe_execfile): report magic lines and error
4123 (InteractiveShell.safe_execfile): report magic lines and error
4121 lines without line numbers so one can easily copy/paste them for
4124 lines without line numbers so one can easily copy/paste them for
4122 re-execution.
4125 re-execution.
4123
4126
4124 * Updated manual with recent changes.
4127 * Updated manual with recent changes.
4125
4128
4126 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4129 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4127 docstring printing when class? is called. Very handy for knowing
4130 docstring printing when class? is called. Very handy for knowing
4128 how to create class instances (as long as __init__ is well
4131 how to create class instances (as long as __init__ is well
4129 documented, of course :)
4132 documented, of course :)
4130 (Magic.magic_doc): print both class and constructor docstrings.
4133 (Magic.magic_doc): print both class and constructor docstrings.
4131 (Magic.magic_pdef): give constructor info if passed a class and
4134 (Magic.magic_pdef): give constructor info if passed a class and
4132 __call__ info for callable object instances.
4135 __call__ info for callable object instances.
4133
4136
4134 2002-01-04 Fernando Perez <fperez@colorado.edu>
4137 2002-01-04 Fernando Perez <fperez@colorado.edu>
4135
4138
4136 * Made deep_reload() off by default. It doesn't always work
4139 * Made deep_reload() off by default. It doesn't always work
4137 exactly as intended, so it's probably safer to have it off. It's
4140 exactly as intended, so it's probably safer to have it off. It's
4138 still available as dreload() anyway, so nothing is lost.
4141 still available as dreload() anyway, so nothing is lost.
4139
4142
4140 2002-01-02 Fernando Perez <fperez@colorado.edu>
4143 2002-01-02 Fernando Perez <fperez@colorado.edu>
4141
4144
4142 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4145 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4143 so I wanted an updated release).
4146 so I wanted an updated release).
4144
4147
4145 2001-12-27 Fernando Perez <fperez@colorado.edu>
4148 2001-12-27 Fernando Perez <fperez@colorado.edu>
4146
4149
4147 * IPython/iplib.py (InteractiveShell.interact): Added the original
4150 * IPython/iplib.py (InteractiveShell.interact): Added the original
4148 code from 'code.py' for this module in order to change the
4151 code from 'code.py' for this module in order to change the
4149 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4152 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4150 the history cache would break when the user hit Ctrl-C, and
4153 the history cache would break when the user hit Ctrl-C, and
4151 interact() offers no way to add any hooks to it.
4154 interact() offers no way to add any hooks to it.
4152
4155
4153 2001-12-23 Fernando Perez <fperez@colorado.edu>
4156 2001-12-23 Fernando Perez <fperez@colorado.edu>
4154
4157
4155 * setup.py: added check for 'MANIFEST' before trying to remove
4158 * setup.py: added check for 'MANIFEST' before trying to remove
4156 it. Thanks to Sean Reifschneider.
4159 it. Thanks to Sean Reifschneider.
4157
4160
4158 2001-12-22 Fernando Perez <fperez@colorado.edu>
4161 2001-12-22 Fernando Perez <fperez@colorado.edu>
4159
4162
4160 * Released 0.2.2.
4163 * Released 0.2.2.
4161
4164
4162 * Finished (reasonably) writing the manual. Later will add the
4165 * Finished (reasonably) writing the manual. Later will add the
4163 python-standard navigation stylesheets, but for the time being
4166 python-standard navigation stylesheets, but for the time being
4164 it's fairly complete. Distribution will include html and pdf
4167 it's fairly complete. Distribution will include html and pdf
4165 versions.
4168 versions.
4166
4169
4167 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4170 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4168 (MayaVi author).
4171 (MayaVi author).
4169
4172
4170 2001-12-21 Fernando Perez <fperez@colorado.edu>
4173 2001-12-21 Fernando Perez <fperez@colorado.edu>
4171
4174
4172 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4175 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4173 good public release, I think (with the manual and the distutils
4176 good public release, I think (with the manual and the distutils
4174 installer). The manual can use some work, but that can go
4177 installer). The manual can use some work, but that can go
4175 slowly. Otherwise I think it's quite nice for end users. Next
4178 slowly. Otherwise I think it's quite nice for end users. Next
4176 summer, rewrite the guts of it...
4179 summer, rewrite the guts of it...
4177
4180
4178 * Changed format of ipythonrc files to use whitespace as the
4181 * Changed format of ipythonrc files to use whitespace as the
4179 separator instead of an explicit '='. Cleaner.
4182 separator instead of an explicit '='. Cleaner.
4180
4183
4181 2001-12-20 Fernando Perez <fperez@colorado.edu>
4184 2001-12-20 Fernando Perez <fperez@colorado.edu>
4182
4185
4183 * Started a manual in LyX. For now it's just a quick merge of the
4186 * Started a manual in LyX. For now it's just a quick merge of the
4184 various internal docstrings and READMEs. Later it may grow into a
4187 various internal docstrings and READMEs. Later it may grow into a
4185 nice, full-blown manual.
4188 nice, full-blown manual.
4186
4189
4187 * Set up a distutils based installer. Installation should now be
4190 * Set up a distutils based installer. Installation should now be
4188 trivially simple for end-users.
4191 trivially simple for end-users.
4189
4192
4190 2001-12-11 Fernando Perez <fperez@colorado.edu>
4193 2001-12-11 Fernando Perez <fperez@colorado.edu>
4191
4194
4192 * Released 0.2.0. First public release, announced it at
4195 * Released 0.2.0. First public release, announced it at
4193 comp.lang.python. From now on, just bugfixes...
4196 comp.lang.python. From now on, just bugfixes...
4194
4197
4195 * Went through all the files, set copyright/license notices and
4198 * Went through all the files, set copyright/license notices and
4196 cleaned up things. Ready for release.
4199 cleaned up things. Ready for release.
4197
4200
4198 2001-12-10 Fernando Perez <fperez@colorado.edu>
4201 2001-12-10 Fernando Perez <fperez@colorado.edu>
4199
4202
4200 * Changed the first-time installer not to use tarfiles. It's more
4203 * Changed the first-time installer not to use tarfiles. It's more
4201 robust now and less unix-dependent. Also makes it easier for
4204 robust now and less unix-dependent. Also makes it easier for
4202 people to later upgrade versions.
4205 people to later upgrade versions.
4203
4206
4204 * Changed @exit to @abort to reflect the fact that it's pretty
4207 * Changed @exit to @abort to reflect the fact that it's pretty
4205 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4208 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4206 becomes significant only when IPyhton is embedded: in that case,
4209 becomes significant only when IPyhton is embedded: in that case,
4207 C-D closes IPython only, but @abort kills the enclosing program
4210 C-D closes IPython only, but @abort kills the enclosing program
4208 too (unless it had called IPython inside a try catching
4211 too (unless it had called IPython inside a try catching
4209 SystemExit).
4212 SystemExit).
4210
4213
4211 * Created Shell module which exposes the actuall IPython Shell
4214 * Created Shell module which exposes the actuall IPython Shell
4212 classes, currently the normal and the embeddable one. This at
4215 classes, currently the normal and the embeddable one. This at
4213 least offers a stable interface we won't need to change when
4216 least offers a stable interface we won't need to change when
4214 (later) the internals are rewritten. That rewrite will be confined
4217 (later) the internals are rewritten. That rewrite will be confined
4215 to iplib and ipmaker, but the Shell interface should remain as is.
4218 to iplib and ipmaker, but the Shell interface should remain as is.
4216
4219
4217 * Added embed module which offers an embeddable IPShell object,
4220 * Added embed module which offers an embeddable IPShell object,
4218 useful to fire up IPython *inside* a running program. Great for
4221 useful to fire up IPython *inside* a running program. Great for
4219 debugging or dynamical data analysis.
4222 debugging or dynamical data analysis.
4220
4223
4221 2001-12-08 Fernando Perez <fperez@colorado.edu>
4224 2001-12-08 Fernando Perez <fperez@colorado.edu>
4222
4225
4223 * Fixed small bug preventing seeing info from methods of defined
4226 * Fixed small bug preventing seeing info from methods of defined
4224 objects (incorrect namespace in _ofind()).
4227 objects (incorrect namespace in _ofind()).
4225
4228
4226 * Documentation cleanup. Moved the main usage docstrings to a
4229 * Documentation cleanup. Moved the main usage docstrings to a
4227 separate file, usage.py (cleaner to maintain, and hopefully in the
4230 separate file, usage.py (cleaner to maintain, and hopefully in the
4228 future some perlpod-like way of producing interactive, man and
4231 future some perlpod-like way of producing interactive, man and
4229 html docs out of it will be found).
4232 html docs out of it will be found).
4230
4233
4231 * Added @profile to see your profile at any time.
4234 * Added @profile to see your profile at any time.
4232
4235
4233 * Added @p as an alias for 'print'. It's especially convenient if
4236 * Added @p as an alias for 'print'. It's especially convenient if
4234 using automagic ('p x' prints x).
4237 using automagic ('p x' prints x).
4235
4238
4236 * Small cleanups and fixes after a pychecker run.
4239 * Small cleanups and fixes after a pychecker run.
4237
4240
4238 * Changed the @cd command to handle @cd - and @cd -<n> for
4241 * Changed the @cd command to handle @cd - and @cd -<n> for
4239 visiting any directory in _dh.
4242 visiting any directory in _dh.
4240
4243
4241 * Introduced _dh, a history of visited directories. @dhist prints
4244 * Introduced _dh, a history of visited directories. @dhist prints
4242 it out with numbers.
4245 it out with numbers.
4243
4246
4244 2001-12-07 Fernando Perez <fperez@colorado.edu>
4247 2001-12-07 Fernando Perez <fperez@colorado.edu>
4245
4248
4246 * Released 0.1.22
4249 * Released 0.1.22
4247
4250
4248 * Made initialization a bit more robust against invalid color
4251 * Made initialization a bit more robust against invalid color
4249 options in user input (exit, not traceback-crash).
4252 options in user input (exit, not traceback-crash).
4250
4253
4251 * Changed the bug crash reporter to write the report only in the
4254 * Changed the bug crash reporter to write the report only in the
4252 user's .ipython directory. That way IPython won't litter people's
4255 user's .ipython directory. That way IPython won't litter people's
4253 hard disks with crash files all over the place. Also print on
4256 hard disks with crash files all over the place. Also print on
4254 screen the necessary mail command.
4257 screen the necessary mail command.
4255
4258
4256 * With the new ultraTB, implemented LightBG color scheme for light
4259 * With the new ultraTB, implemented LightBG color scheme for light
4257 background terminals. A lot of people like white backgrounds, so I
4260 background terminals. A lot of people like white backgrounds, so I
4258 guess we should at least give them something readable.
4261 guess we should at least give them something readable.
4259
4262
4260 2001-12-06 Fernando Perez <fperez@colorado.edu>
4263 2001-12-06 Fernando Perez <fperez@colorado.edu>
4261
4264
4262 * Modified the structure of ultraTB. Now there's a proper class
4265 * Modified the structure of ultraTB. Now there's a proper class
4263 for tables of color schemes which allow adding schemes easily and
4266 for tables of color schemes which allow adding schemes easily and
4264 switching the active scheme without creating a new instance every
4267 switching the active scheme without creating a new instance every
4265 time (which was ridiculous). The syntax for creating new schemes
4268 time (which was ridiculous). The syntax for creating new schemes
4266 is also cleaner. I think ultraTB is finally done, with a clean
4269 is also cleaner. I think ultraTB is finally done, with a clean
4267 class structure. Names are also much cleaner (now there's proper
4270 class structure. Names are also much cleaner (now there's proper
4268 color tables, no need for every variable to also have 'color' in
4271 color tables, no need for every variable to also have 'color' in
4269 its name).
4272 its name).
4270
4273
4271 * Broke down genutils into separate files. Now genutils only
4274 * Broke down genutils into separate files. Now genutils only
4272 contains utility functions, and classes have been moved to their
4275 contains utility functions, and classes have been moved to their
4273 own files (they had enough independent functionality to warrant
4276 own files (they had enough independent functionality to warrant
4274 it): ConfigLoader, OutputTrap, Struct.
4277 it): ConfigLoader, OutputTrap, Struct.
4275
4278
4276 2001-12-05 Fernando Perez <fperez@colorado.edu>
4279 2001-12-05 Fernando Perez <fperez@colorado.edu>
4277
4280
4278 * IPython turns 21! Released version 0.1.21, as a candidate for
4281 * IPython turns 21! Released version 0.1.21, as a candidate for
4279 public consumption. If all goes well, release in a few days.
4282 public consumption. If all goes well, release in a few days.
4280
4283
4281 * Fixed path bug (files in Extensions/ directory wouldn't be found
4284 * Fixed path bug (files in Extensions/ directory wouldn't be found
4282 unless IPython/ was explicitly in sys.path).
4285 unless IPython/ was explicitly in sys.path).
4283
4286
4284 * Extended the FlexCompleter class as MagicCompleter to allow
4287 * Extended the FlexCompleter class as MagicCompleter to allow
4285 completion of @-starting lines.
4288 completion of @-starting lines.
4286
4289
4287 * Created __release__.py file as a central repository for release
4290 * Created __release__.py file as a central repository for release
4288 info that other files can read from.
4291 info that other files can read from.
4289
4292
4290 * Fixed small bug in logging: when logging was turned on in
4293 * Fixed small bug in logging: when logging was turned on in
4291 mid-session, old lines with special meanings (!@?) were being
4294 mid-session, old lines with special meanings (!@?) were being
4292 logged without the prepended comment, which is necessary since
4295 logged without the prepended comment, which is necessary since
4293 they are not truly valid python syntax. This should make session
4296 they are not truly valid python syntax. This should make session
4294 restores produce less errors.
4297 restores produce less errors.
4295
4298
4296 * The namespace cleanup forced me to make a FlexCompleter class
4299 * The namespace cleanup forced me to make a FlexCompleter class
4297 which is nothing but a ripoff of rlcompleter, but with selectable
4300 which is nothing but a ripoff of rlcompleter, but with selectable
4298 namespace (rlcompleter only works in __main__.__dict__). I'll try
4301 namespace (rlcompleter only works in __main__.__dict__). I'll try
4299 to submit a note to the authors to see if this change can be
4302 to submit a note to the authors to see if this change can be
4300 incorporated in future rlcompleter releases (Dec.6: done)
4303 incorporated in future rlcompleter releases (Dec.6: done)
4301
4304
4302 * More fixes to namespace handling. It was a mess! Now all
4305 * More fixes to namespace handling. It was a mess! Now all
4303 explicit references to __main__.__dict__ are gone (except when
4306 explicit references to __main__.__dict__ are gone (except when
4304 really needed) and everything is handled through the namespace
4307 really needed) and everything is handled through the namespace
4305 dicts in the IPython instance. We seem to be getting somewhere
4308 dicts in the IPython instance. We seem to be getting somewhere
4306 with this, finally...
4309 with this, finally...
4307
4310
4308 * Small documentation updates.
4311 * Small documentation updates.
4309
4312
4310 * Created the Extensions directory under IPython (with an
4313 * Created the Extensions directory under IPython (with an
4311 __init__.py). Put the PhysicalQ stuff there. This directory should
4314 __init__.py). Put the PhysicalQ stuff there. This directory should
4312 be used for all special-purpose extensions.
4315 be used for all special-purpose extensions.
4313
4316
4314 * File renaming:
4317 * File renaming:
4315 ipythonlib --> ipmaker
4318 ipythonlib --> ipmaker
4316 ipplib --> iplib
4319 ipplib --> iplib
4317 This makes a bit more sense in terms of what these files actually do.
4320 This makes a bit more sense in terms of what these files actually do.
4318
4321
4319 * Moved all the classes and functions in ipythonlib to ipplib, so
4322 * Moved all the classes and functions in ipythonlib to ipplib, so
4320 now ipythonlib only has make_IPython(). This will ease up its
4323 now ipythonlib only has make_IPython(). This will ease up its
4321 splitting in smaller functional chunks later.
4324 splitting in smaller functional chunks later.
4322
4325
4323 * Cleaned up (done, I think) output of @whos. Better column
4326 * Cleaned up (done, I think) output of @whos. Better column
4324 formatting, and now shows str(var) for as much as it can, which is
4327 formatting, and now shows str(var) for as much as it can, which is
4325 typically what one gets with a 'print var'.
4328 typically what one gets with a 'print var'.
4326
4329
4327 2001-12-04 Fernando Perez <fperez@colorado.edu>
4330 2001-12-04 Fernando Perez <fperez@colorado.edu>
4328
4331
4329 * Fixed namespace problems. Now builtin/IPyhton/user names get
4332 * Fixed namespace problems. Now builtin/IPyhton/user names get
4330 properly reported in their namespace. Internal namespace handling
4333 properly reported in their namespace. Internal namespace handling
4331 is finally getting decent (not perfect yet, but much better than
4334 is finally getting decent (not perfect yet, but much better than
4332 the ad-hoc mess we had).
4335 the ad-hoc mess we had).
4333
4336
4334 * Removed -exit option. If people just want to run a python
4337 * Removed -exit option. If people just want to run a python
4335 script, that's what the normal interpreter is for. Less
4338 script, that's what the normal interpreter is for. Less
4336 unnecessary options, less chances for bugs.
4339 unnecessary options, less chances for bugs.
4337
4340
4338 * Added a crash handler which generates a complete post-mortem if
4341 * Added a crash handler which generates a complete post-mortem if
4339 IPython crashes. This will help a lot in tracking bugs down the
4342 IPython crashes. This will help a lot in tracking bugs down the
4340 road.
4343 road.
4341
4344
4342 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4345 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4343 which were boud to functions being reassigned would bypass the
4346 which were boud to functions being reassigned would bypass the
4344 logger, breaking the sync of _il with the prompt counter. This
4347 logger, breaking the sync of _il with the prompt counter. This
4345 would then crash IPython later when a new line was logged.
4348 would then crash IPython later when a new line was logged.
4346
4349
4347 2001-12-02 Fernando Perez <fperez@colorado.edu>
4350 2001-12-02 Fernando Perez <fperez@colorado.edu>
4348
4351
4349 * Made IPython a package. This means people don't have to clutter
4352 * Made IPython a package. This means people don't have to clutter
4350 their sys.path with yet another directory. Changed the INSTALL
4353 their sys.path with yet another directory. Changed the INSTALL
4351 file accordingly.
4354 file accordingly.
4352
4355
4353 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4356 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4354 sorts its output (so @who shows it sorted) and @whos formats the
4357 sorts its output (so @who shows it sorted) and @whos formats the
4355 table according to the width of the first column. Nicer, easier to
4358 table according to the width of the first column. Nicer, easier to
4356 read. Todo: write a generic table_format() which takes a list of
4359 read. Todo: write a generic table_format() which takes a list of
4357 lists and prints it nicely formatted, with optional row/column
4360 lists and prints it nicely formatted, with optional row/column
4358 separators and proper padding and justification.
4361 separators and proper padding and justification.
4359
4362
4360 * Released 0.1.20
4363 * Released 0.1.20
4361
4364
4362 * Fixed bug in @log which would reverse the inputcache list (a
4365 * Fixed bug in @log which would reverse the inputcache list (a
4363 copy operation was missing).
4366 copy operation was missing).
4364
4367
4365 * Code cleanup. @config was changed to use page(). Better, since
4368 * Code cleanup. @config was changed to use page(). Better, since
4366 its output is always quite long.
4369 its output is always quite long.
4367
4370
4368 * Itpl is back as a dependency. I was having too many problems
4371 * Itpl is back as a dependency. I was having too many problems
4369 getting the parametric aliases to work reliably, and it's just
4372 getting the parametric aliases to work reliably, and it's just
4370 easier to code weird string operations with it than playing %()s
4373 easier to code weird string operations with it than playing %()s
4371 games. It's only ~6k, so I don't think it's too big a deal.
4374 games. It's only ~6k, so I don't think it's too big a deal.
4372
4375
4373 * Found (and fixed) a very nasty bug with history. !lines weren't
4376 * Found (and fixed) a very nasty bug with history. !lines weren't
4374 getting cached, and the out of sync caches would crash
4377 getting cached, and the out of sync caches would crash
4375 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4378 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4376 division of labor a bit better. Bug fixed, cleaner structure.
4379 division of labor a bit better. Bug fixed, cleaner structure.
4377
4380
4378 2001-12-01 Fernando Perez <fperez@colorado.edu>
4381 2001-12-01 Fernando Perez <fperez@colorado.edu>
4379
4382
4380 * Released 0.1.19
4383 * Released 0.1.19
4381
4384
4382 * Added option -n to @hist to prevent line number printing. Much
4385 * Added option -n to @hist to prevent line number printing. Much
4383 easier to copy/paste code this way.
4386 easier to copy/paste code this way.
4384
4387
4385 * Created global _il to hold the input list. Allows easy
4388 * Created global _il to hold the input list. Allows easy
4386 re-execution of blocks of code by slicing it (inspired by Janko's
4389 re-execution of blocks of code by slicing it (inspired by Janko's
4387 comment on 'macros').
4390 comment on 'macros').
4388
4391
4389 * Small fixes and doc updates.
4392 * Small fixes and doc updates.
4390
4393
4391 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4394 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4392 much too fragile with automagic. Handles properly multi-line
4395 much too fragile with automagic. Handles properly multi-line
4393 statements and takes parameters.
4396 statements and takes parameters.
4394
4397
4395 2001-11-30 Fernando Perez <fperez@colorado.edu>
4398 2001-11-30 Fernando Perez <fperez@colorado.edu>
4396
4399
4397 * Version 0.1.18 released.
4400 * Version 0.1.18 released.
4398
4401
4399 * Fixed nasty namespace bug in initial module imports.
4402 * Fixed nasty namespace bug in initial module imports.
4400
4403
4401 * Added copyright/license notes to all code files (except
4404 * Added copyright/license notes to all code files (except
4402 DPyGetOpt). For the time being, LGPL. That could change.
4405 DPyGetOpt). For the time being, LGPL. That could change.
4403
4406
4404 * Rewrote a much nicer README, updated INSTALL, cleaned up
4407 * Rewrote a much nicer README, updated INSTALL, cleaned up
4405 ipythonrc-* samples.
4408 ipythonrc-* samples.
4406
4409
4407 * Overall code/documentation cleanup. Basically ready for
4410 * Overall code/documentation cleanup. Basically ready for
4408 release. Only remaining thing: licence decision (LGPL?).
4411 release. Only remaining thing: licence decision (LGPL?).
4409
4412
4410 * Converted load_config to a class, ConfigLoader. Now recursion
4413 * Converted load_config to a class, ConfigLoader. Now recursion
4411 control is better organized. Doesn't include the same file twice.
4414 control is better organized. Doesn't include the same file twice.
4412
4415
4413 2001-11-29 Fernando Perez <fperez@colorado.edu>
4416 2001-11-29 Fernando Perez <fperez@colorado.edu>
4414
4417
4415 * Got input history working. Changed output history variables from
4418 * Got input history working. Changed output history variables from
4416 _p to _o so that _i is for input and _o for output. Just cleaner
4419 _p to _o so that _i is for input and _o for output. Just cleaner
4417 convention.
4420 convention.
4418
4421
4419 * Implemented parametric aliases. This pretty much allows the
4422 * Implemented parametric aliases. This pretty much allows the
4420 alias system to offer full-blown shell convenience, I think.
4423 alias system to offer full-blown shell convenience, I think.
4421
4424
4422 * Version 0.1.17 released, 0.1.18 opened.
4425 * Version 0.1.17 released, 0.1.18 opened.
4423
4426
4424 * dot_ipython/ipythonrc (alias): added documentation.
4427 * dot_ipython/ipythonrc (alias): added documentation.
4425 (xcolor): Fixed small bug (xcolors -> xcolor)
4428 (xcolor): Fixed small bug (xcolors -> xcolor)
4426
4429
4427 * Changed the alias system. Now alias is a magic command to define
4430 * Changed the alias system. Now alias is a magic command to define
4428 aliases just like the shell. Rationale: the builtin magics should
4431 aliases just like the shell. Rationale: the builtin magics should
4429 be there for things deeply connected to IPython's
4432 be there for things deeply connected to IPython's
4430 architecture. And this is a much lighter system for what I think
4433 architecture. And this is a much lighter system for what I think
4431 is the really important feature: allowing users to define quickly
4434 is the really important feature: allowing users to define quickly
4432 magics that will do shell things for them, so they can customize
4435 magics that will do shell things for them, so they can customize
4433 IPython easily to match their work habits. If someone is really
4436 IPython easily to match their work habits. If someone is really
4434 desperate to have another name for a builtin alias, they can
4437 desperate to have another name for a builtin alias, they can
4435 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4438 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4436 works.
4439 works.
4437
4440
4438 2001-11-28 Fernando Perez <fperez@colorado.edu>
4441 2001-11-28 Fernando Perez <fperez@colorado.edu>
4439
4442
4440 * Changed @file so that it opens the source file at the proper
4443 * Changed @file so that it opens the source file at the proper
4441 line. Since it uses less, if your EDITOR environment is
4444 line. Since it uses less, if your EDITOR environment is
4442 configured, typing v will immediately open your editor of choice
4445 configured, typing v will immediately open your editor of choice
4443 right at the line where the object is defined. Not as quick as
4446 right at the line where the object is defined. Not as quick as
4444 having a direct @edit command, but for all intents and purposes it
4447 having a direct @edit command, but for all intents and purposes it
4445 works. And I don't have to worry about writing @edit to deal with
4448 works. And I don't have to worry about writing @edit to deal with
4446 all the editors, less does that.
4449 all the editors, less does that.
4447
4450
4448 * Version 0.1.16 released, 0.1.17 opened.
4451 * Version 0.1.16 released, 0.1.17 opened.
4449
4452
4450 * Fixed some nasty bugs in the page/page_dumb combo that could
4453 * Fixed some nasty bugs in the page/page_dumb combo that could
4451 crash IPython.
4454 crash IPython.
4452
4455
4453 2001-11-27 Fernando Perez <fperez@colorado.edu>
4456 2001-11-27 Fernando Perez <fperez@colorado.edu>
4454
4457
4455 * Version 0.1.15 released, 0.1.16 opened.
4458 * Version 0.1.15 released, 0.1.16 opened.
4456
4459
4457 * Finally got ? and ?? to work for undefined things: now it's
4460 * Finally got ? and ?? to work for undefined things: now it's
4458 possible to type {}.get? and get information about the get method
4461 possible to type {}.get? and get information about the get method
4459 of dicts, or os.path? even if only os is defined (so technically
4462 of dicts, or os.path? even if only os is defined (so technically
4460 os.path isn't). Works at any level. For example, after import os,
4463 os.path isn't). Works at any level. For example, after import os,
4461 os?, os.path?, os.path.abspath? all work. This is great, took some
4464 os?, os.path?, os.path.abspath? all work. This is great, took some
4462 work in _ofind.
4465 work in _ofind.
4463
4466
4464 * Fixed more bugs with logging. The sanest way to do it was to add
4467 * Fixed more bugs with logging. The sanest way to do it was to add
4465 to @log a 'mode' parameter. Killed two in one shot (this mode
4468 to @log a 'mode' parameter. Killed two in one shot (this mode
4466 option was a request of Janko's). I think it's finally clean
4469 option was a request of Janko's). I think it's finally clean
4467 (famous last words).
4470 (famous last words).
4468
4471
4469 * Added a page_dumb() pager which does a decent job of paging on
4472 * Added a page_dumb() pager which does a decent job of paging on
4470 screen, if better things (like less) aren't available. One less
4473 screen, if better things (like less) aren't available. One less
4471 unix dependency (someday maybe somebody will port this to
4474 unix dependency (someday maybe somebody will port this to
4472 windows).
4475 windows).
4473
4476
4474 * Fixed problem in magic_log: would lock of logging out if log
4477 * Fixed problem in magic_log: would lock of logging out if log
4475 creation failed (because it would still think it had succeeded).
4478 creation failed (because it would still think it had succeeded).
4476
4479
4477 * Improved the page() function using curses to auto-detect screen
4480 * Improved the page() function using curses to auto-detect screen
4478 size. Now it can make a much better decision on whether to print
4481 size. Now it can make a much better decision on whether to print
4479 or page a string. Option screen_length was modified: a value 0
4482 or page a string. Option screen_length was modified: a value 0
4480 means auto-detect, and that's the default now.
4483 means auto-detect, and that's the default now.
4481
4484
4482 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4485 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4483 go out. I'll test it for a few days, then talk to Janko about
4486 go out. I'll test it for a few days, then talk to Janko about
4484 licences and announce it.
4487 licences and announce it.
4485
4488
4486 * Fixed the length of the auto-generated ---> prompt which appears
4489 * Fixed the length of the auto-generated ---> prompt which appears
4487 for auto-parens and auto-quotes. Getting this right isn't trivial,
4490 for auto-parens and auto-quotes. Getting this right isn't trivial,
4488 with all the color escapes, different prompt types and optional
4491 with all the color escapes, different prompt types and optional
4489 separators. But it seems to be working in all the combinations.
4492 separators. But it seems to be working in all the combinations.
4490
4493
4491 2001-11-26 Fernando Perez <fperez@colorado.edu>
4494 2001-11-26 Fernando Perez <fperez@colorado.edu>
4492
4495
4493 * Wrote a regexp filter to get option types from the option names
4496 * Wrote a regexp filter to get option types from the option names
4494 string. This eliminates the need to manually keep two duplicate
4497 string. This eliminates the need to manually keep two duplicate
4495 lists.
4498 lists.
4496
4499
4497 * Removed the unneeded check_option_names. Now options are handled
4500 * Removed the unneeded check_option_names. Now options are handled
4498 in a much saner manner and it's easy to visually check that things
4501 in a much saner manner and it's easy to visually check that things
4499 are ok.
4502 are ok.
4500
4503
4501 * Updated version numbers on all files I modified to carry a
4504 * Updated version numbers on all files I modified to carry a
4502 notice so Janko and Nathan have clear version markers.
4505 notice so Janko and Nathan have clear version markers.
4503
4506
4504 * Updated docstring for ultraTB with my changes. I should send
4507 * Updated docstring for ultraTB with my changes. I should send
4505 this to Nathan.
4508 this to Nathan.
4506
4509
4507 * Lots of small fixes. Ran everything through pychecker again.
4510 * Lots of small fixes. Ran everything through pychecker again.
4508
4511
4509 * Made loading of deep_reload an cmd line option. If it's not too
4512 * Made loading of deep_reload an cmd line option. If it's not too
4510 kosher, now people can just disable it. With -nodeep_reload it's
4513 kosher, now people can just disable it. With -nodeep_reload it's
4511 still available as dreload(), it just won't overwrite reload().
4514 still available as dreload(), it just won't overwrite reload().
4512
4515
4513 * Moved many options to the no| form (-opt and -noopt
4516 * Moved many options to the no| form (-opt and -noopt
4514 accepted). Cleaner.
4517 accepted). Cleaner.
4515
4518
4516 * Changed magic_log so that if called with no parameters, it uses
4519 * Changed magic_log so that if called with no parameters, it uses
4517 'rotate' mode. That way auto-generated logs aren't automatically
4520 'rotate' mode. That way auto-generated logs aren't automatically
4518 over-written. For normal logs, now a backup is made if it exists
4521 over-written. For normal logs, now a backup is made if it exists
4519 (only 1 level of backups). A new 'backup' mode was added to the
4522 (only 1 level of backups). A new 'backup' mode was added to the
4520 Logger class to support this. This was a request by Janko.
4523 Logger class to support this. This was a request by Janko.
4521
4524
4522 * Added @logoff/@logon to stop/restart an active log.
4525 * Added @logoff/@logon to stop/restart an active log.
4523
4526
4524 * Fixed a lot of bugs in log saving/replay. It was pretty
4527 * Fixed a lot of bugs in log saving/replay. It was pretty
4525 broken. Now special lines (!@,/) appear properly in the command
4528 broken. Now special lines (!@,/) appear properly in the command
4526 history after a log replay.
4529 history after a log replay.
4527
4530
4528 * Tried and failed to implement full session saving via pickle. My
4531 * Tried and failed to implement full session saving via pickle. My
4529 idea was to pickle __main__.__dict__, but modules can't be
4532 idea was to pickle __main__.__dict__, but modules can't be
4530 pickled. This would be a better alternative to replaying logs, but
4533 pickled. This would be a better alternative to replaying logs, but
4531 seems quite tricky to get to work. Changed -session to be called
4534 seems quite tricky to get to work. Changed -session to be called
4532 -logplay, which more accurately reflects what it does. And if we
4535 -logplay, which more accurately reflects what it does. And if we
4533 ever get real session saving working, -session is now available.
4536 ever get real session saving working, -session is now available.
4534
4537
4535 * Implemented color schemes for prompts also. As for tracebacks,
4538 * Implemented color schemes for prompts also. As for tracebacks,
4536 currently only NoColor and Linux are supported. But now the
4539 currently only NoColor and Linux are supported. But now the
4537 infrastructure is in place, based on a generic ColorScheme
4540 infrastructure is in place, based on a generic ColorScheme
4538 class. So writing and activating new schemes both for the prompts
4541 class. So writing and activating new schemes both for the prompts
4539 and the tracebacks should be straightforward.
4542 and the tracebacks should be straightforward.
4540
4543
4541 * Version 0.1.13 released, 0.1.14 opened.
4544 * Version 0.1.13 released, 0.1.14 opened.
4542
4545
4543 * Changed handling of options for output cache. Now counter is
4546 * Changed handling of options for output cache. Now counter is
4544 hardwired starting at 1 and one specifies the maximum number of
4547 hardwired starting at 1 and one specifies the maximum number of
4545 entries *in the outcache* (not the max prompt counter). This is
4548 entries *in the outcache* (not the max prompt counter). This is
4546 much better, since many statements won't increase the cache
4549 much better, since many statements won't increase the cache
4547 count. It also eliminated some confusing options, now there's only
4550 count. It also eliminated some confusing options, now there's only
4548 one: cache_size.
4551 one: cache_size.
4549
4552
4550 * Added 'alias' magic function and magic_alias option in the
4553 * Added 'alias' magic function and magic_alias option in the
4551 ipythonrc file. Now the user can easily define whatever names he
4554 ipythonrc file. Now the user can easily define whatever names he
4552 wants for the magic functions without having to play weird
4555 wants for the magic functions without having to play weird
4553 namespace games. This gives IPython a real shell-like feel.
4556 namespace games. This gives IPython a real shell-like feel.
4554
4557
4555 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4558 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4556 @ or not).
4559 @ or not).
4557
4560
4558 This was one of the last remaining 'visible' bugs (that I know
4561 This was one of the last remaining 'visible' bugs (that I know
4559 of). I think if I can clean up the session loading so it works
4562 of). I think if I can clean up the session loading so it works
4560 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4563 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4561 about licensing).
4564 about licensing).
4562
4565
4563 2001-11-25 Fernando Perez <fperez@colorado.edu>
4566 2001-11-25 Fernando Perez <fperez@colorado.edu>
4564
4567
4565 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4568 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4566 there's a cleaner distinction between what ? and ?? show.
4569 there's a cleaner distinction between what ? and ?? show.
4567
4570
4568 * Added screen_length option. Now the user can define his own
4571 * Added screen_length option. Now the user can define his own
4569 screen size for page() operations.
4572 screen size for page() operations.
4570
4573
4571 * Implemented magic shell-like functions with automatic code
4574 * Implemented magic shell-like functions with automatic code
4572 generation. Now adding another function is just a matter of adding
4575 generation. Now adding another function is just a matter of adding
4573 an entry to a dict, and the function is dynamically generated at
4576 an entry to a dict, and the function is dynamically generated at
4574 run-time. Python has some really cool features!
4577 run-time. Python has some really cool features!
4575
4578
4576 * Renamed many options to cleanup conventions a little. Now all
4579 * Renamed many options to cleanup conventions a little. Now all
4577 are lowercase, and only underscores where needed. Also in the code
4580 are lowercase, and only underscores where needed. Also in the code
4578 option name tables are clearer.
4581 option name tables are clearer.
4579
4582
4580 * Changed prompts a little. Now input is 'In [n]:' instead of
4583 * Changed prompts a little. Now input is 'In [n]:' instead of
4581 'In[n]:='. This allows it the numbers to be aligned with the
4584 'In[n]:='. This allows it the numbers to be aligned with the
4582 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4585 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4583 Python (it was a Mathematica thing). The '...' continuation prompt
4586 Python (it was a Mathematica thing). The '...' continuation prompt
4584 was also changed a little to align better.
4587 was also changed a little to align better.
4585
4588
4586 * Fixed bug when flushing output cache. Not all _p<n> variables
4589 * Fixed bug when flushing output cache. Not all _p<n> variables
4587 exist, so their deletion needs to be wrapped in a try:
4590 exist, so their deletion needs to be wrapped in a try:
4588
4591
4589 * Figured out how to properly use inspect.formatargspec() (it
4592 * Figured out how to properly use inspect.formatargspec() (it
4590 requires the args preceded by *). So I removed all the code from
4593 requires the args preceded by *). So I removed all the code from
4591 _get_pdef in Magic, which was just replicating that.
4594 _get_pdef in Magic, which was just replicating that.
4592
4595
4593 * Added test to prefilter to allow redefining magic function names
4596 * Added test to prefilter to allow redefining magic function names
4594 as variables. This is ok, since the @ form is always available,
4597 as variables. This is ok, since the @ form is always available,
4595 but whe should allow the user to define a variable called 'ls' if
4598 but whe should allow the user to define a variable called 'ls' if
4596 he needs it.
4599 he needs it.
4597
4600
4598 * Moved the ToDo information from README into a separate ToDo.
4601 * Moved the ToDo information from README into a separate ToDo.
4599
4602
4600 * General code cleanup and small bugfixes. I think it's close to a
4603 * General code cleanup and small bugfixes. I think it's close to a
4601 state where it can be released, obviously with a big 'beta'
4604 state where it can be released, obviously with a big 'beta'
4602 warning on it.
4605 warning on it.
4603
4606
4604 * Got the magic function split to work. Now all magics are defined
4607 * Got the magic function split to work. Now all magics are defined
4605 in a separate class. It just organizes things a bit, and now
4608 in a separate class. It just organizes things a bit, and now
4606 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4609 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4607 was too long).
4610 was too long).
4608
4611
4609 * Changed @clear to @reset to avoid potential confusions with
4612 * Changed @clear to @reset to avoid potential confusions with
4610 the shell command clear. Also renamed @cl to @clear, which does
4613 the shell command clear. Also renamed @cl to @clear, which does
4611 exactly what people expect it to from their shell experience.
4614 exactly what people expect it to from their shell experience.
4612
4615
4613 Added a check to the @reset command (since it's so
4616 Added a check to the @reset command (since it's so
4614 destructive, it's probably a good idea to ask for confirmation).
4617 destructive, it's probably a good idea to ask for confirmation).
4615 But now reset only works for full namespace resetting. Since the
4618 But now reset only works for full namespace resetting. Since the
4616 del keyword is already there for deleting a few specific
4619 del keyword is already there for deleting a few specific
4617 variables, I don't see the point of having a redundant magic
4620 variables, I don't see the point of having a redundant magic
4618 function for the same task.
4621 function for the same task.
4619
4622
4620 2001-11-24 Fernando Perez <fperez@colorado.edu>
4623 2001-11-24 Fernando Perez <fperez@colorado.edu>
4621
4624
4622 * Updated the builtin docs (esp. the ? ones).
4625 * Updated the builtin docs (esp. the ? ones).
4623
4626
4624 * Ran all the code through pychecker. Not terribly impressed with
4627 * Ran all the code through pychecker. Not terribly impressed with
4625 it: lots of spurious warnings and didn't really find anything of
4628 it: lots of spurious warnings and didn't really find anything of
4626 substance (just a few modules being imported and not used).
4629 substance (just a few modules being imported and not used).
4627
4630
4628 * Implemented the new ultraTB functionality into IPython. New
4631 * Implemented the new ultraTB functionality into IPython. New
4629 option: xcolors. This chooses color scheme. xmode now only selects
4632 option: xcolors. This chooses color scheme. xmode now only selects
4630 between Plain and Verbose. Better orthogonality.
4633 between Plain and Verbose. Better orthogonality.
4631
4634
4632 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4635 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4633 mode and color scheme for the exception handlers. Now it's
4636 mode and color scheme for the exception handlers. Now it's
4634 possible to have the verbose traceback with no coloring.
4637 possible to have the verbose traceback with no coloring.
4635
4638
4636 2001-11-23 Fernando Perez <fperez@colorado.edu>
4639 2001-11-23 Fernando Perez <fperez@colorado.edu>
4637
4640
4638 * Version 0.1.12 released, 0.1.13 opened.
4641 * Version 0.1.12 released, 0.1.13 opened.
4639
4642
4640 * Removed option to set auto-quote and auto-paren escapes by
4643 * Removed option to set auto-quote and auto-paren escapes by
4641 user. The chances of breaking valid syntax are just too high. If
4644 user. The chances of breaking valid syntax are just too high. If
4642 someone *really* wants, they can always dig into the code.
4645 someone *really* wants, they can always dig into the code.
4643
4646
4644 * Made prompt separators configurable.
4647 * Made prompt separators configurable.
4645
4648
4646 2001-11-22 Fernando Perez <fperez@colorado.edu>
4649 2001-11-22 Fernando Perez <fperez@colorado.edu>
4647
4650
4648 * Small bugfixes in many places.
4651 * Small bugfixes in many places.
4649
4652
4650 * Removed the MyCompleter class from ipplib. It seemed redundant
4653 * Removed the MyCompleter class from ipplib. It seemed redundant
4651 with the C-p,C-n history search functionality. Less code to
4654 with the C-p,C-n history search functionality. Less code to
4652 maintain.
4655 maintain.
4653
4656
4654 * Moved all the original ipython.py code into ipythonlib.py. Right
4657 * Moved all the original ipython.py code into ipythonlib.py. Right
4655 now it's just one big dump into a function called make_IPython, so
4658 now it's just one big dump into a function called make_IPython, so
4656 no real modularity has been gained. But at least it makes the
4659 no real modularity has been gained. But at least it makes the
4657 wrapper script tiny, and since ipythonlib is a module, it gets
4660 wrapper script tiny, and since ipythonlib is a module, it gets
4658 compiled and startup is much faster.
4661 compiled and startup is much faster.
4659
4662
4660 This is a reasobably 'deep' change, so we should test it for a
4663 This is a reasobably 'deep' change, so we should test it for a
4661 while without messing too much more with the code.
4664 while without messing too much more with the code.
4662
4665
4663 2001-11-21 Fernando Perez <fperez@colorado.edu>
4666 2001-11-21 Fernando Perez <fperez@colorado.edu>
4664
4667
4665 * Version 0.1.11 released, 0.1.12 opened for further work.
4668 * Version 0.1.11 released, 0.1.12 opened for further work.
4666
4669
4667 * Removed dependency on Itpl. It was only needed in one place. It
4670 * Removed dependency on Itpl. It was only needed in one place. It
4668 would be nice if this became part of python, though. It makes life
4671 would be nice if this became part of python, though. It makes life
4669 *a lot* easier in some cases.
4672 *a lot* easier in some cases.
4670
4673
4671 * Simplified the prefilter code a bit. Now all handlers are
4674 * Simplified the prefilter code a bit. Now all handlers are
4672 expected to explicitly return a value (at least a blank string).
4675 expected to explicitly return a value (at least a blank string).
4673
4676
4674 * Heavy edits in ipplib. Removed the help system altogether. Now
4677 * Heavy edits in ipplib. Removed the help system altogether. Now
4675 obj?/?? is used for inspecting objects, a magic @doc prints
4678 obj?/?? is used for inspecting objects, a magic @doc prints
4676 docstrings, and full-blown Python help is accessed via the 'help'
4679 docstrings, and full-blown Python help is accessed via the 'help'
4677 keyword. This cleans up a lot of code (less to maintain) and does
4680 keyword. This cleans up a lot of code (less to maintain) and does
4678 the job. Since 'help' is now a standard Python component, might as
4681 the job. Since 'help' is now a standard Python component, might as
4679 well use it and remove duplicate functionality.
4682 well use it and remove duplicate functionality.
4680
4683
4681 Also removed the option to use ipplib as a standalone program. By
4684 Also removed the option to use ipplib as a standalone program. By
4682 now it's too dependent on other parts of IPython to function alone.
4685 now it's too dependent on other parts of IPython to function alone.
4683
4686
4684 * Fixed bug in genutils.pager. It would crash if the pager was
4687 * Fixed bug in genutils.pager. It would crash if the pager was
4685 exited immediately after opening (broken pipe).
4688 exited immediately after opening (broken pipe).
4686
4689
4687 * Trimmed down the VerboseTB reporting a little. The header is
4690 * Trimmed down the VerboseTB reporting a little. The header is
4688 much shorter now and the repeated exception arguments at the end
4691 much shorter now and the repeated exception arguments at the end
4689 have been removed. For interactive use the old header seemed a bit
4692 have been removed. For interactive use the old header seemed a bit
4690 excessive.
4693 excessive.
4691
4694
4692 * Fixed small bug in output of @whos for variables with multi-word
4695 * Fixed small bug in output of @whos for variables with multi-word
4693 types (only first word was displayed).
4696 types (only first word was displayed).
4694
4697
4695 2001-11-17 Fernando Perez <fperez@colorado.edu>
4698 2001-11-17 Fernando Perez <fperez@colorado.edu>
4696
4699
4697 * Version 0.1.10 released, 0.1.11 opened for further work.
4700 * Version 0.1.10 released, 0.1.11 opened for further work.
4698
4701
4699 * Modified dirs and friends. dirs now *returns* the stack (not
4702 * Modified dirs and friends. dirs now *returns* the stack (not
4700 prints), so one can manipulate it as a variable. Convenient to
4703 prints), so one can manipulate it as a variable. Convenient to
4701 travel along many directories.
4704 travel along many directories.
4702
4705
4703 * Fixed bug in magic_pdef: would only work with functions with
4706 * Fixed bug in magic_pdef: would only work with functions with
4704 arguments with default values.
4707 arguments with default values.
4705
4708
4706 2001-11-14 Fernando Perez <fperez@colorado.edu>
4709 2001-11-14 Fernando Perez <fperez@colorado.edu>
4707
4710
4708 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4711 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4709 example with IPython. Various other minor fixes and cleanups.
4712 example with IPython. Various other minor fixes and cleanups.
4710
4713
4711 * Version 0.1.9 released, 0.1.10 opened for further work.
4714 * Version 0.1.9 released, 0.1.10 opened for further work.
4712
4715
4713 * Added sys.path to the list of directories searched in the
4716 * Added sys.path to the list of directories searched in the
4714 execfile= option. It used to be the current directory and the
4717 execfile= option. It used to be the current directory and the
4715 user's IPYTHONDIR only.
4718 user's IPYTHONDIR only.
4716
4719
4717 2001-11-13 Fernando Perez <fperez@colorado.edu>
4720 2001-11-13 Fernando Perez <fperez@colorado.edu>
4718
4721
4719 * Reinstated the raw_input/prefilter separation that Janko had
4722 * Reinstated the raw_input/prefilter separation that Janko had
4720 initially. This gives a more convenient setup for extending the
4723 initially. This gives a more convenient setup for extending the
4721 pre-processor from the outside: raw_input always gets a string,
4724 pre-processor from the outside: raw_input always gets a string,
4722 and prefilter has to process it. We can then redefine prefilter
4725 and prefilter has to process it. We can then redefine prefilter
4723 from the outside and implement extensions for special
4726 from the outside and implement extensions for special
4724 purposes.
4727 purposes.
4725
4728
4726 Today I got one for inputting PhysicalQuantity objects
4729 Today I got one for inputting PhysicalQuantity objects
4727 (from Scientific) without needing any function calls at
4730 (from Scientific) without needing any function calls at
4728 all. Extremely convenient, and it's all done as a user-level
4731 all. Extremely convenient, and it's all done as a user-level
4729 extension (no IPython code was touched). Now instead of:
4732 extension (no IPython code was touched). Now instead of:
4730 a = PhysicalQuantity(4.2,'m/s**2')
4733 a = PhysicalQuantity(4.2,'m/s**2')
4731 one can simply say
4734 one can simply say
4732 a = 4.2 m/s**2
4735 a = 4.2 m/s**2
4733 or even
4736 or even
4734 a = 4.2 m/s^2
4737 a = 4.2 m/s^2
4735
4738
4736 I use this, but it's also a proof of concept: IPython really is
4739 I use this, but it's also a proof of concept: IPython really is
4737 fully user-extensible, even at the level of the parsing of the
4740 fully user-extensible, even at the level of the parsing of the
4738 command line. It's not trivial, but it's perfectly doable.
4741 command line. It's not trivial, but it's perfectly doable.
4739
4742
4740 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4743 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4741 the problem of modules being loaded in the inverse order in which
4744 the problem of modules being loaded in the inverse order in which
4742 they were defined in
4745 they were defined in
4743
4746
4744 * Version 0.1.8 released, 0.1.9 opened for further work.
4747 * Version 0.1.8 released, 0.1.9 opened for further work.
4745
4748
4746 * Added magics pdef, source and file. They respectively show the
4749 * Added magics pdef, source and file. They respectively show the
4747 definition line ('prototype' in C), source code and full python
4750 definition line ('prototype' in C), source code and full python
4748 file for any callable object. The object inspector oinfo uses
4751 file for any callable object. The object inspector oinfo uses
4749 these to show the same information.
4752 these to show the same information.
4750
4753
4751 * Version 0.1.7 released, 0.1.8 opened for further work.
4754 * Version 0.1.7 released, 0.1.8 opened for further work.
4752
4755
4753 * Separated all the magic functions into a class called Magic. The
4756 * Separated all the magic functions into a class called Magic. The
4754 InteractiveShell class was becoming too big for Xemacs to handle
4757 InteractiveShell class was becoming too big for Xemacs to handle
4755 (de-indenting a line would lock it up for 10 seconds while it
4758 (de-indenting a line would lock it up for 10 seconds while it
4756 backtracked on the whole class!)
4759 backtracked on the whole class!)
4757
4760
4758 FIXME: didn't work. It can be done, but right now namespaces are
4761 FIXME: didn't work. It can be done, but right now namespaces are
4759 all messed up. Do it later (reverted it for now, so at least
4762 all messed up. Do it later (reverted it for now, so at least
4760 everything works as before).
4763 everything works as before).
4761
4764
4762 * Got the object introspection system (magic_oinfo) working! I
4765 * Got the object introspection system (magic_oinfo) working! I
4763 think this is pretty much ready for release to Janko, so he can
4766 think this is pretty much ready for release to Janko, so he can
4764 test it for a while and then announce it. Pretty much 100% of what
4767 test it for a while and then announce it. Pretty much 100% of what
4765 I wanted for the 'phase 1' release is ready. Happy, tired.
4768 I wanted for the 'phase 1' release is ready. Happy, tired.
4766
4769
4767 2001-11-12 Fernando Perez <fperez@colorado.edu>
4770 2001-11-12 Fernando Perez <fperez@colorado.edu>
4768
4771
4769 * Version 0.1.6 released, 0.1.7 opened for further work.
4772 * Version 0.1.6 released, 0.1.7 opened for further work.
4770
4773
4771 * Fixed bug in printing: it used to test for truth before
4774 * Fixed bug in printing: it used to test for truth before
4772 printing, so 0 wouldn't print. Now checks for None.
4775 printing, so 0 wouldn't print. Now checks for None.
4773
4776
4774 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4777 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4775 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4778 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4776 reaches by hand into the outputcache. Think of a better way to do
4779 reaches by hand into the outputcache. Think of a better way to do
4777 this later.
4780 this later.
4778
4781
4779 * Various small fixes thanks to Nathan's comments.
4782 * Various small fixes thanks to Nathan's comments.
4780
4783
4781 * Changed magic_pprint to magic_Pprint. This way it doesn't
4784 * Changed magic_pprint to magic_Pprint. This way it doesn't
4782 collide with pprint() and the name is consistent with the command
4785 collide with pprint() and the name is consistent with the command
4783 line option.
4786 line option.
4784
4787
4785 * Changed prompt counter behavior to be fully like
4788 * Changed prompt counter behavior to be fully like
4786 Mathematica's. That is, even input that doesn't return a result
4789 Mathematica's. That is, even input that doesn't return a result
4787 raises the prompt counter. The old behavior was kind of confusing
4790 raises the prompt counter. The old behavior was kind of confusing
4788 (getting the same prompt number several times if the operation
4791 (getting the same prompt number several times if the operation
4789 didn't return a result).
4792 didn't return a result).
4790
4793
4791 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4794 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4792
4795
4793 * Fixed -Classic mode (wasn't working anymore).
4796 * Fixed -Classic mode (wasn't working anymore).
4794
4797
4795 * Added colored prompts using Nathan's new code. Colors are
4798 * Added colored prompts using Nathan's new code. Colors are
4796 currently hardwired, they can be user-configurable. For
4799 currently hardwired, they can be user-configurable. For
4797 developers, they can be chosen in file ipythonlib.py, at the
4800 developers, they can be chosen in file ipythonlib.py, at the
4798 beginning of the CachedOutput class def.
4801 beginning of the CachedOutput class def.
4799
4802
4800 2001-11-11 Fernando Perez <fperez@colorado.edu>
4803 2001-11-11 Fernando Perez <fperez@colorado.edu>
4801
4804
4802 * Version 0.1.5 released, 0.1.6 opened for further work.
4805 * Version 0.1.5 released, 0.1.6 opened for further work.
4803
4806
4804 * Changed magic_env to *return* the environment as a dict (not to
4807 * Changed magic_env to *return* the environment as a dict (not to
4805 print it). This way it prints, but it can also be processed.
4808 print it). This way it prints, but it can also be processed.
4806
4809
4807 * Added Verbose exception reporting to interactive
4810 * Added Verbose exception reporting to interactive
4808 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4811 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4809 traceback. Had to make some changes to the ultraTB file. This is
4812 traceback. Had to make some changes to the ultraTB file. This is
4810 probably the last 'big' thing in my mental todo list. This ties
4813 probably the last 'big' thing in my mental todo list. This ties
4811 in with the next entry:
4814 in with the next entry:
4812
4815
4813 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4816 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4814 has to specify is Plain, Color or Verbose for all exception
4817 has to specify is Plain, Color or Verbose for all exception
4815 handling.
4818 handling.
4816
4819
4817 * Removed ShellServices option. All this can really be done via
4820 * Removed ShellServices option. All this can really be done via
4818 the magic system. It's easier to extend, cleaner and has automatic
4821 the magic system. It's easier to extend, cleaner and has automatic
4819 namespace protection and documentation.
4822 namespace protection and documentation.
4820
4823
4821 2001-11-09 Fernando Perez <fperez@colorado.edu>
4824 2001-11-09 Fernando Perez <fperez@colorado.edu>
4822
4825
4823 * Fixed bug in output cache flushing (missing parameter to
4826 * Fixed bug in output cache flushing (missing parameter to
4824 __init__). Other small bugs fixed (found using pychecker).
4827 __init__). Other small bugs fixed (found using pychecker).
4825
4828
4826 * Version 0.1.4 opened for bugfixing.
4829 * Version 0.1.4 opened for bugfixing.
4827
4830
4828 2001-11-07 Fernando Perez <fperez@colorado.edu>
4831 2001-11-07 Fernando Perez <fperez@colorado.edu>
4829
4832
4830 * Version 0.1.3 released, mainly because of the raw_input bug.
4833 * Version 0.1.3 released, mainly because of the raw_input bug.
4831
4834
4832 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4835 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4833 and when testing for whether things were callable, a call could
4836 and when testing for whether things were callable, a call could
4834 actually be made to certain functions. They would get called again
4837 actually be made to certain functions. They would get called again
4835 once 'really' executed, with a resulting double call. A disaster
4838 once 'really' executed, with a resulting double call. A disaster
4836 in many cases (list.reverse() would never work!).
4839 in many cases (list.reverse() would never work!).
4837
4840
4838 * Removed prefilter() function, moved its code to raw_input (which
4841 * Removed prefilter() function, moved its code to raw_input (which
4839 after all was just a near-empty caller for prefilter). This saves
4842 after all was just a near-empty caller for prefilter). This saves
4840 a function call on every prompt, and simplifies the class a tiny bit.
4843 a function call on every prompt, and simplifies the class a tiny bit.
4841
4844
4842 * Fix _ip to __ip name in magic example file.
4845 * Fix _ip to __ip name in magic example file.
4843
4846
4844 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4847 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4845 work with non-gnu versions of tar.
4848 work with non-gnu versions of tar.
4846
4849
4847 2001-11-06 Fernando Perez <fperez@colorado.edu>
4850 2001-11-06 Fernando Perez <fperez@colorado.edu>
4848
4851
4849 * Version 0.1.2. Just to keep track of the recent changes.
4852 * Version 0.1.2. Just to keep track of the recent changes.
4850
4853
4851 * Fixed nasty bug in output prompt routine. It used to check 'if
4854 * Fixed nasty bug in output prompt routine. It used to check 'if
4852 arg != None...'. Problem is, this fails if arg implements a
4855 arg != None...'. Problem is, this fails if arg implements a
4853 special comparison (__cmp__) which disallows comparing to
4856 special comparison (__cmp__) which disallows comparing to
4854 None. Found it when trying to use the PhysicalQuantity module from
4857 None. Found it when trying to use the PhysicalQuantity module from
4855 ScientificPython.
4858 ScientificPython.
4856
4859
4857 2001-11-05 Fernando Perez <fperez@colorado.edu>
4860 2001-11-05 Fernando Perez <fperez@colorado.edu>
4858
4861
4859 * Also added dirs. Now the pushd/popd/dirs family functions
4862 * Also added dirs. Now the pushd/popd/dirs family functions
4860 basically like the shell, with the added convenience of going home
4863 basically like the shell, with the added convenience of going home
4861 when called with no args.
4864 when called with no args.
4862
4865
4863 * pushd/popd slightly modified to mimic shell behavior more
4866 * pushd/popd slightly modified to mimic shell behavior more
4864 closely.
4867 closely.
4865
4868
4866 * Added env,pushd,popd from ShellServices as magic functions. I
4869 * Added env,pushd,popd from ShellServices as magic functions. I
4867 think the cleanest will be to port all desired functions from
4870 think the cleanest will be to port all desired functions from
4868 ShellServices as magics and remove ShellServices altogether. This
4871 ShellServices as magics and remove ShellServices altogether. This
4869 will provide a single, clean way of adding functionality
4872 will provide a single, clean way of adding functionality
4870 (shell-type or otherwise) to IP.
4873 (shell-type or otherwise) to IP.
4871
4874
4872 2001-11-04 Fernando Perez <fperez@colorado.edu>
4875 2001-11-04 Fernando Perez <fperez@colorado.edu>
4873
4876
4874 * Added .ipython/ directory to sys.path. This way users can keep
4877 * Added .ipython/ directory to sys.path. This way users can keep
4875 customizations there and access them via import.
4878 customizations there and access them via import.
4876
4879
4877 2001-11-03 Fernando Perez <fperez@colorado.edu>
4880 2001-11-03 Fernando Perez <fperez@colorado.edu>
4878
4881
4879 * Opened version 0.1.1 for new changes.
4882 * Opened version 0.1.1 for new changes.
4880
4883
4881 * Changed version number to 0.1.0: first 'public' release, sent to
4884 * Changed version number to 0.1.0: first 'public' release, sent to
4882 Nathan and Janko.
4885 Nathan and Janko.
4883
4886
4884 * Lots of small fixes and tweaks.
4887 * Lots of small fixes and tweaks.
4885
4888
4886 * Minor changes to whos format. Now strings are shown, snipped if
4889 * Minor changes to whos format. Now strings are shown, snipped if
4887 too long.
4890 too long.
4888
4891
4889 * Changed ShellServices to work on __main__ so they show up in @who
4892 * Changed ShellServices to work on __main__ so they show up in @who
4890
4893
4891 * Help also works with ? at the end of a line:
4894 * Help also works with ? at the end of a line:
4892 ?sin and sin?
4895 ?sin and sin?
4893 both produce the same effect. This is nice, as often I use the
4896 both produce the same effect. This is nice, as often I use the
4894 tab-complete to find the name of a method, but I used to then have
4897 tab-complete to find the name of a method, but I used to then have
4895 to go to the beginning of the line to put a ? if I wanted more
4898 to go to the beginning of the line to put a ? if I wanted more
4896 info. Now I can just add the ? and hit return. Convenient.
4899 info. Now I can just add the ? and hit return. Convenient.
4897
4900
4898 2001-11-02 Fernando Perez <fperez@colorado.edu>
4901 2001-11-02 Fernando Perez <fperez@colorado.edu>
4899
4902
4900 * Python version check (>=2.1) added.
4903 * Python version check (>=2.1) added.
4901
4904
4902 * Added LazyPython documentation. At this point the docs are quite
4905 * Added LazyPython documentation. At this point the docs are quite
4903 a mess. A cleanup is in order.
4906 a mess. A cleanup is in order.
4904
4907
4905 * Auto-installer created. For some bizarre reason, the zipfiles
4908 * Auto-installer created. For some bizarre reason, the zipfiles
4906 module isn't working on my system. So I made a tar version
4909 module isn't working on my system. So I made a tar version
4907 (hopefully the command line options in various systems won't kill
4910 (hopefully the command line options in various systems won't kill
4908 me).
4911 me).
4909
4912
4910 * Fixes to Struct in genutils. Now all dictionary-like methods are
4913 * Fixes to Struct in genutils. Now all dictionary-like methods are
4911 protected (reasonably).
4914 protected (reasonably).
4912
4915
4913 * Added pager function to genutils and changed ? to print usage
4916 * Added pager function to genutils and changed ? to print usage
4914 note through it (it was too long).
4917 note through it (it was too long).
4915
4918
4916 * Added the LazyPython functionality. Works great! I changed the
4919 * Added the LazyPython functionality. Works great! I changed the
4917 auto-quote escape to ';', it's on home row and next to '. But
4920 auto-quote escape to ';', it's on home row and next to '. But
4918 both auto-quote and auto-paren (still /) escapes are command-line
4921 both auto-quote and auto-paren (still /) escapes are command-line
4919 parameters.
4922 parameters.
4920
4923
4921
4924
4922 2001-11-01 Fernando Perez <fperez@colorado.edu>
4925 2001-11-01 Fernando Perez <fperez@colorado.edu>
4923
4926
4924 * Version changed to 0.0.7. Fairly large change: configuration now
4927 * Version changed to 0.0.7. Fairly large change: configuration now
4925 is all stored in a directory, by default .ipython. There, all
4928 is all stored in a directory, by default .ipython. There, all
4926 config files have normal looking names (not .names)
4929 config files have normal looking names (not .names)
4927
4930
4928 * Version 0.0.6 Released first to Lucas and Archie as a test
4931 * Version 0.0.6 Released first to Lucas and Archie as a test
4929 run. Since it's the first 'semi-public' release, change version to
4932 run. Since it's the first 'semi-public' release, change version to
4930 > 0.0.6 for any changes now.
4933 > 0.0.6 for any changes now.
4931
4934
4932 * Stuff I had put in the ipplib.py changelog:
4935 * Stuff I had put in the ipplib.py changelog:
4933
4936
4934 Changes to InteractiveShell:
4937 Changes to InteractiveShell:
4935
4938
4936 - Made the usage message a parameter.
4939 - Made the usage message a parameter.
4937
4940
4938 - Require the name of the shell variable to be given. It's a bit
4941 - Require the name of the shell variable to be given. It's a bit
4939 of a hack, but allows the name 'shell' not to be hardwire in the
4942 of a hack, but allows the name 'shell' not to be hardwire in the
4940 magic (@) handler, which is problematic b/c it requires
4943 magic (@) handler, which is problematic b/c it requires
4941 polluting the global namespace with 'shell'. This in turn is
4944 polluting the global namespace with 'shell'. This in turn is
4942 fragile: if a user redefines a variable called shell, things
4945 fragile: if a user redefines a variable called shell, things
4943 break.
4946 break.
4944
4947
4945 - magic @: all functions available through @ need to be defined
4948 - magic @: all functions available through @ need to be defined
4946 as magic_<name>, even though they can be called simply as
4949 as magic_<name>, even though they can be called simply as
4947 @<name>. This allows the special command @magic to gather
4950 @<name>. This allows the special command @magic to gather
4948 information automatically about all existing magic functions,
4951 information automatically about all existing magic functions,
4949 even if they are run-time user extensions, by parsing the shell
4952 even if they are run-time user extensions, by parsing the shell
4950 instance __dict__ looking for special magic_ names.
4953 instance __dict__ looking for special magic_ names.
4951
4954
4952 - mainloop: added *two* local namespace parameters. This allows
4955 - mainloop: added *two* local namespace parameters. This allows
4953 the class to differentiate between parameters which were there
4956 the class to differentiate between parameters which were there
4954 before and after command line initialization was processed. This
4957 before and after command line initialization was processed. This
4955 way, later @who can show things loaded at startup by the
4958 way, later @who can show things loaded at startup by the
4956 user. This trick was necessary to make session saving/reloading
4959 user. This trick was necessary to make session saving/reloading
4957 really work: ideally after saving/exiting/reloading a session,
4960 really work: ideally after saving/exiting/reloading a session,
4958 *everythin* should look the same, including the output of @who. I
4961 *everythin* should look the same, including the output of @who. I
4959 was only able to make this work with this double namespace
4962 was only able to make this work with this double namespace
4960 trick.
4963 trick.
4961
4964
4962 - added a header to the logfile which allows (almost) full
4965 - added a header to the logfile which allows (almost) full
4963 session restoring.
4966 session restoring.
4964
4967
4965 - prepend lines beginning with @ or !, with a and log
4968 - prepend lines beginning with @ or !, with a and log
4966 them. Why? !lines: may be useful to know what you did @lines:
4969 them. Why? !lines: may be useful to know what you did @lines:
4967 they may affect session state. So when restoring a session, at
4970 they may affect session state. So when restoring a session, at
4968 least inform the user of their presence. I couldn't quite get
4971 least inform the user of their presence. I couldn't quite get
4969 them to properly re-execute, but at least the user is warned.
4972 them to properly re-execute, but at least the user is warned.
4970
4973
4971 * Started ChangeLog.
4974 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now