##// END OF EJS Templates
- Manual updates...
fperez -
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,2754 +1,2752 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 1029 2006-01-18 07:33:38Z fperez $"""
4 $Id: Magic.py 1030 2006-01-18 19:24:48Z fperez $"""
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 from cStringIO import StringIO
34 from cStringIO import StringIO
35 from getopt import getopt
35 from getopt import getopt
36 from pprint import pprint, pformat
36 from pprint import pprint, pformat
37
37
38 # profile isn't bundled by default in Debian for license reasons
38 # profile isn't bundled by default in Debian for license reasons
39 try:
39 try:
40 import profile,pstats
40 import profile,pstats
41 except ImportError:
41 except ImportError:
42 profile = pstats = None
42 profile = pstats = None
43
43
44 # Homebrewed
44 # Homebrewed
45 from IPython import Debugger, OInspect, wildcard
45 from IPython import Debugger, OInspect, wildcard
46 from IPython.FakeModule import FakeModule
46 from IPython.FakeModule import FakeModule
47 from IPython.Itpl import Itpl, itpl, printpl,itplns
47 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.PyColorize import Parser
48 from IPython.PyColorize import Parser
49 from IPython.ipstruct import Struct
49 from IPython.ipstruct import Struct
50 from IPython.macro import Macro
50 from IPython.macro import Macro
51 from IPython.genutils import *
51 from IPython.genutils import *
52 from IPython import platutils
52 from IPython import platutils
53 #***************************************************************************
53 #***************************************************************************
54 # Utility functions
54 # Utility functions
55 def on_off(tag):
55 def on_off(tag):
56 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
56 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
57 return ['OFF','ON'][tag]
57 return ['OFF','ON'][tag]
58
58
59 class Bunch: pass
59 class Bunch: pass
60
60
61 #***************************************************************************
61 #***************************************************************************
62 # Main class implementing Magic functionality
62 # Main class implementing Magic functionality
63 class Magic:
63 class Magic:
64 """Magic functions for InteractiveShell.
64 """Magic functions for InteractiveShell.
65
65
66 Shell functions which can be reached as %function_name. All magic
66 Shell functions which can be reached as %function_name. All magic
67 functions should accept a string, which they can parse for their own
67 functions should accept a string, which they can parse for their own
68 needs. This can make some functions easier to type, eg `%cd ../`
68 needs. This can make some functions easier to type, eg `%cd ../`
69 vs. `%cd("../")`
69 vs. `%cd("../")`
70
70
71 ALL definitions MUST begin with the prefix magic_. The user won't need it
71 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. """
72 at the command line, but it is is needed in the definition. """
73
73
74 # class globals
74 # class globals
75 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
75 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
76 'Automagic is ON, % prefix NOT needed for magic functions.']
76 'Automagic is ON, % prefix NOT needed for magic functions.']
77
77
78 #......................................................................
78 #......................................................................
79 # some utility functions
79 # some utility functions
80
80
81 def __init__(self,shell):
81 def __init__(self,shell):
82
82
83 self.options_table = {}
83 self.options_table = {}
84 if profile is None:
84 if profile is None:
85 self.magic_prun = self.profile_missing_notice
85 self.magic_prun = self.profile_missing_notice
86 self.shell = shell
86 self.shell = shell
87
87
88 # namespace for holding state we may need
88 # namespace for holding state we may need
89 self._magic_state = Bunch()
89 self._magic_state = Bunch()
90
90
91 def profile_missing_notice(self, *args, **kwargs):
91 def profile_missing_notice(self, *args, **kwargs):
92 error("""\
92 error("""\
93 The profile module could not be found. If you are a Debian user,
93 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
94 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.""")
95 license. To use profiling, please install"python2.3-profiler" from non-free.""")
96
96
97 def default_option(self,fn,optstr):
97 def default_option(self,fn,optstr):
98 """Make an entry in the options_table for fn, with value optstr"""
98 """Make an entry in the options_table for fn, with value optstr"""
99
99
100 if fn not in self.lsmagic():
100 if fn not in self.lsmagic():
101 error("%s is not a magic function" % fn)
101 error("%s is not a magic function" % fn)
102 self.options_table[fn] = optstr
102 self.options_table[fn] = optstr
103
103
104 def lsmagic(self):
104 def lsmagic(self):
105 """Return a list of currently available magic functions.
105 """Return a list of currently available magic functions.
106
106
107 Gives a list of the bare names after mangling (['ls','cd', ...], not
107 Gives a list of the bare names after mangling (['ls','cd', ...], not
108 ['magic_ls','magic_cd',...]"""
108 ['magic_ls','magic_cd',...]"""
109
109
110 # FIXME. This needs a cleanup, in the way the magics list is built.
110 # FIXME. This needs a cleanup, in the way the magics list is built.
111
111
112 # magics in class definition
112 # magics in class definition
113 class_magic = lambda fn: fn.startswith('magic_') and \
113 class_magic = lambda fn: fn.startswith('magic_') and \
114 callable(Magic.__dict__[fn])
114 callable(Magic.__dict__[fn])
115 # in instance namespace (run-time user additions)
115 # in instance namespace (run-time user additions)
116 inst_magic = lambda fn: fn.startswith('magic_') and \
116 inst_magic = lambda fn: fn.startswith('magic_') and \
117 callable(self.__dict__[fn])
117 callable(self.__dict__[fn])
118 # and bound magics by user (so they can access self):
118 # and bound magics by user (so they can access self):
119 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
119 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
120 callable(self.__class__.__dict__[fn])
120 callable(self.__class__.__dict__[fn])
121 magics = filter(class_magic,Magic.__dict__.keys()) + \
121 magics = filter(class_magic,Magic.__dict__.keys()) + \
122 filter(inst_magic,self.__dict__.keys()) + \
122 filter(inst_magic,self.__dict__.keys()) + \
123 filter(inst_bound_magic,self.__class__.__dict__.keys())
123 filter(inst_bound_magic,self.__class__.__dict__.keys())
124 out = []
124 out = []
125 for fn in magics:
125 for fn in magics:
126 out.append(fn.replace('magic_','',1))
126 out.append(fn.replace('magic_','',1))
127 out.sort()
127 out.sort()
128 return out
128 return out
129
129
130 def extract_input_slices(self,slices):
130 def extract_input_slices(self,slices):
131 """Return as a string a set of input history slices.
131 """Return as a string a set of input history slices.
132
132
133 The set of slices is given as a list of strings (like ['1','4:8','9'],
133 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
134 since this function is for use by magic functions which get their
135 arguments as strings.
135 arguments as strings.
136
136
137 Note that slices can be called with two notations:
137 Note that slices can be called with two notations:
138
138
139 N:M -> standard python form, means including items N...(M-1).
139 N:M -> standard python form, means including items N...(M-1).
140
140
141 N-M -> include items N..M (closed endpoint)."""
141 N-M -> include items N..M (closed endpoint)."""
142
142
143 cmds = []
143 cmds = []
144 for chunk in slices:
144 for chunk in slices:
145 if ':' in chunk:
145 if ':' in chunk:
146 ini,fin = map(int,chunk.split(':'))
146 ini,fin = map(int,chunk.split(':'))
147 elif '-' in chunk:
147 elif '-' in chunk:
148 ini,fin = map(int,chunk.split('-'))
148 ini,fin = map(int,chunk.split('-'))
149 fin += 1
149 fin += 1
150 else:
150 else:
151 ini = int(chunk)
151 ini = int(chunk)
152 fin = ini+1
152 fin = ini+1
153 cmds.append(self.shell.input_hist[ini:fin])
153 cmds.append(self.shell.input_hist[ini:fin])
154 return cmds
154 return cmds
155
155
156 def _ofind(self,oname):
156 def _ofind(self,oname):
157 """Find an object in the available namespaces.
157 """Find an object in the available namespaces.
158
158
159 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
159 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
160
160
161 Has special code to detect magic functions.
161 Has special code to detect magic functions.
162 """
162 """
163
163
164 oname = oname.strip()
164 oname = oname.strip()
165
165
166 # Namespaces to search in:
166 # Namespaces to search in:
167 user_ns = self.shell.user_ns
167 user_ns = self.shell.user_ns
168 internal_ns = self.shell.internal_ns
168 internal_ns = self.shell.internal_ns
169 builtin_ns = __builtin__.__dict__
169 builtin_ns = __builtin__.__dict__
170 alias_ns = self.shell.alias_table
170 alias_ns = self.shell.alias_table
171
171
172 # Put them in a list. The order is important so that we find things in
172 # Put them in a list. The order is important so that we find things in
173 # the same order that Python finds them.
173 # the same order that Python finds them.
174 namespaces = [ ('Interactive',user_ns),
174 namespaces = [ ('Interactive',user_ns),
175 ('IPython internal',internal_ns),
175 ('IPython internal',internal_ns),
176 ('Python builtin',builtin_ns),
176 ('Python builtin',builtin_ns),
177 ('Alias',alias_ns),
177 ('Alias',alias_ns),
178 ]
178 ]
179
179
180 # initialize results to 'null'
180 # initialize results to 'null'
181 found = 0; obj = None; ospace = None; ds = None;
181 found = 0; obj = None; ospace = None; ds = None;
182 ismagic = 0; isalias = 0
182 ismagic = 0; isalias = 0
183
183
184 # Look for the given name by splitting it in parts. If the head is
184 # 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
185 # found, then we look for all the remaining parts as members, and only
186 # declare success if we can find them all.
186 # declare success if we can find them all.
187 oname_parts = oname.split('.')
187 oname_parts = oname.split('.')
188 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
188 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
189 for nsname,ns in namespaces:
189 for nsname,ns in namespaces:
190 try:
190 try:
191 obj = ns[oname_head]
191 obj = ns[oname_head]
192 except KeyError:
192 except KeyError:
193 continue
193 continue
194 else:
194 else:
195 for part in oname_rest:
195 for part in oname_rest:
196 try:
196 try:
197 obj = getattr(obj,part)
197 obj = getattr(obj,part)
198 except:
198 except:
199 # Blanket except b/c some badly implemented objects
199 # Blanket except b/c some badly implemented objects
200 # allow __getattr__ to raise exceptions other than
200 # allow __getattr__ to raise exceptions other than
201 # AttributeError, which then crashes IPython.
201 # AttributeError, which then crashes IPython.
202 break
202 break
203 else:
203 else:
204 # If we finish the for loop (no break), we got all members
204 # If we finish the for loop (no break), we got all members
205 found = 1
205 found = 1
206 ospace = nsname
206 ospace = nsname
207 if ns == alias_ns:
207 if ns == alias_ns:
208 isalias = 1
208 isalias = 1
209 break # namespace loop
209 break # namespace loop
210
210
211 # Try to see if it's magic
211 # Try to see if it's magic
212 if not found:
212 if not found:
213 if oname.startswith(self.shell.ESC_MAGIC):
213 if oname.startswith(self.shell.ESC_MAGIC):
214 oname = oname[1:]
214 oname = oname[1:]
215 obj = getattr(self,'magic_'+oname,None)
215 obj = getattr(self,'magic_'+oname,None)
216 if obj is not None:
216 if obj is not None:
217 found = 1
217 found = 1
218 ospace = 'IPython internal'
218 ospace = 'IPython internal'
219 ismagic = 1
219 ismagic = 1
220
220
221 # Last try: special-case some literals like '', [], {}, etc:
221 # Last try: special-case some literals like '', [], {}, etc:
222 if not found and oname_head in ["''",'""','[]','{}','()']:
222 if not found and oname_head in ["''",'""','[]','{}','()']:
223 obj = eval(oname_head)
223 obj = eval(oname_head)
224 found = 1
224 found = 1
225 ospace = 'Interactive'
225 ospace = 'Interactive'
226
226
227 return {'found':found, 'obj':obj, 'namespace':ospace,
227 return {'found':found, 'obj':obj, 'namespace':ospace,
228 'ismagic':ismagic, 'isalias':isalias}
228 'ismagic':ismagic, 'isalias':isalias}
229
229
230 def arg_err(self,func):
230 def arg_err(self,func):
231 """Print docstring if incorrect arguments were passed"""
231 """Print docstring if incorrect arguments were passed"""
232 print 'Error in arguments:'
232 print 'Error in arguments:'
233 print OInspect.getdoc(func)
233 print OInspect.getdoc(func)
234
234
235 def format_latex(self,strng):
235 def format_latex(self,strng):
236 """Format a string for latex inclusion."""
236 """Format a string for latex inclusion."""
237
237
238 # Characters that need to be escaped for latex:
238 # Characters that need to be escaped for latex:
239 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
239 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
240 # Magic command names as headers:
240 # Magic command names as headers:
241 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
241 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
242 re.MULTILINE)
242 re.MULTILINE)
243 # Magic commands
243 # Magic commands
244 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
244 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
245 re.MULTILINE)
245 re.MULTILINE)
246 # Paragraph continue
246 # Paragraph continue
247 par_re = re.compile(r'\\$',re.MULTILINE)
247 par_re = re.compile(r'\\$',re.MULTILINE)
248
248
249 # The "\n" symbol
249 # The "\n" symbol
250 newline_re = re.compile(r'\\n')
250 newline_re = re.compile(r'\\n')
251
251
252 # Now build the string for output:
252 # Now build the string for output:
253 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
253 #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}}:',
254 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
255 strng)
255 strng)
256 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
256 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
257 strng = par_re.sub(r'\\\\',strng)
257 strng = par_re.sub(r'\\\\',strng)
258 strng = escape_re.sub(r'\\\1',strng)
258 strng = escape_re.sub(r'\\\1',strng)
259 strng = newline_re.sub(r'\\textbackslash{}n',strng)
259 strng = newline_re.sub(r'\\textbackslash{}n',strng)
260 return strng
260 return strng
261
261
262 def format_screen(self,strng):
262 def format_screen(self,strng):
263 """Format a string for screen printing.
263 """Format a string for screen printing.
264
264
265 This removes some latex-type format codes."""
265 This removes some latex-type format codes."""
266 # Paragraph continue
266 # Paragraph continue
267 par_re = re.compile(r'\\$',re.MULTILINE)
267 par_re = re.compile(r'\\$',re.MULTILINE)
268 strng = par_re.sub('',strng)
268 strng = par_re.sub('',strng)
269 return strng
269 return strng
270
270
271 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
271 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
272 """Parse options passed to an argument string.
272 """Parse options passed to an argument string.
273
273
274 The interface is similar to that of getopt(), but it returns back a
274 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
275 Struct with the options as keys and the stripped argument string still
276 as a string.
276 as a string.
277
277
278 arg_str is quoted as a true sys.argv vector by using shlex.split.
278 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
279 This allows us to easily expand variables, glob files, quote
280 arguments, etc.
280 arguments, etc.
281
281
282 Options:
282 Options:
283 -mode: default 'string'. If given as 'list', the argument string is
283 -mode: default 'string'. If given as 'list', the argument string is
284 returned as a list (split on whitespace) instead of a string.
284 returned as a list (split on whitespace) instead of a string.
285
285
286 -list_all: put all option values in lists. Normally only options
286 -list_all: put all option values in lists. Normally only options
287 appearing more than once are put in a list."""
287 appearing more than once are put in a list."""
288
288
289 # inject default options at the beginning of the input line
289 # inject default options at the beginning of the input line
290 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
290 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
291 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
291 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
292
292
293 mode = kw.get('mode','string')
293 mode = kw.get('mode','string')
294 if mode not in ['string','list']:
294 if mode not in ['string','list']:
295 raise ValueError,'incorrect mode given: %s' % mode
295 raise ValueError,'incorrect mode given: %s' % mode
296 # Get options
296 # Get options
297 list_all = kw.get('list_all',0)
297 list_all = kw.get('list_all',0)
298
298
299 # Check if we have more than one argument to warrant extra processing:
299 # Check if we have more than one argument to warrant extra processing:
300 odict = {} # Dictionary with options
300 odict = {} # Dictionary with options
301 args = arg_str.split()
301 args = arg_str.split()
302 if len(args) >= 1:
302 if len(args) >= 1:
303 # If the list of inputs only has 0 or 1 thing in it, there's no
303 # If the list of inputs only has 0 or 1 thing in it, there's no
304 # need to look for options
304 # need to look for options
305 argv = shlex_split(arg_str)
305 argv = shlex_split(arg_str)
306 # Do regular option processing
306 # Do regular option processing
307 opts,args = getopt(argv,opt_str,*long_opts)
307 opts,args = getopt(argv,opt_str,*long_opts)
308 for o,a in opts:
308 for o,a in opts:
309 if o.startswith('--'):
309 if o.startswith('--'):
310 o = o[2:]
310 o = o[2:]
311 else:
311 else:
312 o = o[1:]
312 o = o[1:]
313 try:
313 try:
314 odict[o].append(a)
314 odict[o].append(a)
315 except AttributeError:
315 except AttributeError:
316 odict[o] = [odict[o],a]
316 odict[o] = [odict[o],a]
317 except KeyError:
317 except KeyError:
318 if list_all:
318 if list_all:
319 odict[o] = [a]
319 odict[o] = [a]
320 else:
320 else:
321 odict[o] = a
321 odict[o] = a
322
322
323 # Prepare opts,args for return
323 # Prepare opts,args for return
324 opts = Struct(odict)
324 opts = Struct(odict)
325 if mode == 'string':
325 if mode == 'string':
326 args = ' '.join(args)
326 args = ' '.join(args)
327
327
328 return opts,args
328 return opts,args
329
329
330 #......................................................................
330 #......................................................................
331 # And now the actual magic functions
331 # And now the actual magic functions
332
332
333 # Functions for IPython shell work (vars,funcs, config, etc)
333 # Functions for IPython shell work (vars,funcs, config, etc)
334 def magic_lsmagic(self, parameter_s = ''):
334 def magic_lsmagic(self, parameter_s = ''):
335 """List currently available magic functions."""
335 """List currently available magic functions."""
336 mesc = self.shell.ESC_MAGIC
336 mesc = self.shell.ESC_MAGIC
337 print 'Available magic functions:\n'+mesc+\
337 print 'Available magic functions:\n'+mesc+\
338 (' '+mesc).join(self.lsmagic())
338 (' '+mesc).join(self.lsmagic())
339 print '\n' + Magic.auto_status[self.shell.rc.automagic]
339 print '\n' + Magic.auto_status[self.shell.rc.automagic]
340 return None
340 return None
341
341
342 def magic_magic(self, parameter_s = ''):
342 def magic_magic(self, parameter_s = ''):
343 """Print information about the magic function system."""
343 """Print information about the magic function system."""
344
344
345 mode = ''
345 mode = ''
346 try:
346 try:
347 if parameter_s.split()[0] == '-latex':
347 if parameter_s.split()[0] == '-latex':
348 mode = 'latex'
348 mode = 'latex'
349 except:
349 except:
350 pass
350 pass
351
351
352 magic_docs = []
352 magic_docs = []
353 for fname in self.lsmagic():
353 for fname in self.lsmagic():
354 mname = 'magic_' + fname
354 mname = 'magic_' + fname
355 for space in (Magic,self,self.__class__):
355 for space in (Magic,self,self.__class__):
356 try:
356 try:
357 fn = space.__dict__[mname]
357 fn = space.__dict__[mname]
358 except KeyError:
358 except KeyError:
359 pass
359 pass
360 else:
360 else:
361 break
361 break
362 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
362 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
363 fname,fn.__doc__))
363 fname,fn.__doc__))
364 magic_docs = ''.join(magic_docs)
364 magic_docs = ''.join(magic_docs)
365
365
366 if mode == 'latex':
366 if mode == 'latex':
367 print self.format_latex(magic_docs)
367 print self.format_latex(magic_docs)
368 return
368 return
369 else:
369 else:
370 magic_docs = self.format_screen(magic_docs)
370 magic_docs = self.format_screen(magic_docs)
371
371
372 outmsg = """
372 outmsg = """
373 IPython's 'magic' functions
373 IPython's 'magic' functions
374 ===========================
374 ===========================
375
375
376 The magic function system provides a series of functions which allow you to
376 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
377 control the behavior of IPython itself, plus a lot of system-type
378 features. All these functions are prefixed with a % character, but parameters
378 features. All these functions are prefixed with a % character, but parameters
379 are given without parentheses or quotes.
379 are given without parentheses or quotes.
380
380
381 NOTE: If you have 'automagic' enabled (via the command line option or with the
381 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,
382 %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.
383 IPython ships with automagic on, so you should only rarely need the % escape.
384
384
385 Example: typing '%cd mydir' (without the quotes) changes you working directory
385 Example: typing '%cd mydir' (without the quotes) changes you working directory
386 to 'mydir', if it exists.
386 to 'mydir', if it exists.
387
387
388 You can define your own magic functions to extend the system. See the supplied
388 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
389 ipythonrc and example-magic.py files for details (in your ipython
390 configuration directory, typically $HOME/.ipython/).
390 configuration directory, typically $HOME/.ipython/).
391
391
392 You can also define your own aliased names for magic functions. In your
392 You can also define your own aliased names for magic functions. In your
393 ipythonrc file, placing a line like:
393 ipythonrc file, placing a line like:
394
394
395 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
395 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
396
396
397 will define %pf as a new name for %profile.
397 will define %pf as a new name for %profile.
398
398
399 You can also call magics in code using the ipmagic() function, which IPython
399 You can also call magics in code using the ipmagic() function, which IPython
400 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
400 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
401
401
402 For a list of the available magic functions, use %lsmagic. For a description
402 For a list of the available magic functions, use %lsmagic. For a description
403 of any of them, type %magic_name?, e.g. '%cd?'.
403 of any of them, type %magic_name?, e.g. '%cd?'.
404
404
405 Currently the magic system has the following functions:\n"""
405 Currently the magic system has the following functions:\n"""
406
406
407 mesc = self.shell.ESC_MAGIC
407 mesc = self.shell.ESC_MAGIC
408 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
408 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
409 "\n\n%s%s\n\n%s" % (outmsg,
409 "\n\n%s%s\n\n%s" % (outmsg,
410 magic_docs,mesc,mesc,
410 magic_docs,mesc,mesc,
411 (' '+mesc).join(self.lsmagic()),
411 (' '+mesc).join(self.lsmagic()),
412 Magic.auto_status[self.shell.rc.automagic] ) )
412 Magic.auto_status[self.shell.rc.automagic] ) )
413
413
414 page(outmsg,screen_lines=self.shell.rc.screen_length)
414 page(outmsg,screen_lines=self.shell.rc.screen_length)
415
415
416 def magic_automagic(self, parameter_s = ''):
416 def magic_automagic(self, parameter_s = ''):
417 """Make magic functions callable without having to type the initial %.
417 """Make magic functions callable without having to type the initial %.
418
418
419 Toggles on/off (when off, you must call it as %automagic, of
419 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
420 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
421 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,
422 won't work for that function (you get the variable instead). However,
423 if you delete the variable (del var), the previously shadowed magic
423 if you delete the variable (del var), the previously shadowed magic
424 function becomes visible to automagic again."""
424 function becomes visible to automagic again."""
425
425
426 rc = self.shell.rc
426 rc = self.shell.rc
427 rc.automagic = not rc.automagic
427 rc.automagic = not rc.automagic
428 print '\n' + Magic.auto_status[rc.automagic]
428 print '\n' + Magic.auto_status[rc.automagic]
429
429
430 def magic_autocall(self, parameter_s = ''):
430 def magic_autocall(self, parameter_s = ''):
431 """Make functions callable without having to type parentheses.
431 """Make functions callable without having to type parentheses.
432
432
433 Usage:
433 Usage:
434
434
435 %autocall [mode]
435 %autocall [mode]
436
436
437 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
437 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)."""
438 value is toggled on and off (remembering the previous state)."""
439
439
440 rc = self.shell.rc
440 rc = self.shell.rc
441
441
442 if parameter_s:
442 if parameter_s:
443 arg = int(parameter_s)
443 arg = int(parameter_s)
444 else:
444 else:
445 arg = 'toggle'
445 arg = 'toggle'
446
446
447 if not arg in (0,1,2,'toggle'):
447 if not arg in (0,1,2,'toggle'):
448 error('Valid modes: (0->Off, 1->Smart, 2->Full')
448 error('Valid modes: (0->Off, 1->Smart, 2->Full')
449 return
449 return
450
450
451 if arg in (0,1,2):
451 if arg in (0,1,2):
452 rc.autocall = arg
452 rc.autocall = arg
453 else: # toggle
453 else: # toggle
454 if rc.autocall:
454 if rc.autocall:
455 self._magic_state.autocall_save = rc.autocall
455 self._magic_state.autocall_save = rc.autocall
456 rc.autocall = 0
456 rc.autocall = 0
457 else:
457 else:
458 try:
458 try:
459 rc.autocall = self._magic_state.autocall_save
459 rc.autocall = self._magic_state.autocall_save
460 except AttributeError:
460 except AttributeError:
461 rc.autocall = self._magic_state.autocall_save = 1
461 rc.autocall = self._magic_state.autocall_save = 1
462
462
463 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
463 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
464
464
465 def magic_autoindent(self, parameter_s = ''):
465 def magic_autoindent(self, parameter_s = ''):
466 """Toggle autoindent on/off (if available)."""
466 """Toggle autoindent on/off (if available)."""
467
467
468 self.shell.set_autoindent()
468 self.shell.set_autoindent()
469 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
469 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
470
470
471 def magic_system_verbose(self, parameter_s = ''):
471 def magic_system_verbose(self, parameter_s = ''):
472 """Toggle verbose printing of system calls on/off."""
472 """Toggle verbose printing of system calls on/off."""
473
473
474 self.shell.rc_set_toggle('system_verbose')
474 self.shell.rc_set_toggle('system_verbose')
475 print "System verbose printing is:",\
475 print "System verbose printing is:",\
476 ['OFF','ON'][self.shell.rc.system_verbose]
476 ['OFF','ON'][self.shell.rc.system_verbose]
477
477
478 def magic_history(self, parameter_s = ''):
478 def magic_history(self, parameter_s = ''):
479 """Print input history (_i<n> variables), with most recent last.
479 """Print input history (_i<n> variables), with most recent last.
480
480
481 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
481 %history [-n] -> print at most 40 inputs (some may be multi-line)\\
482 %history [-n] n -> print at most n inputs\\
482 %history [-n] n -> print at most n inputs\\
483 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
483 %history [-n] n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
484
484
485 Each input's number <n> is shown, and is accessible as the
485 Each input's number <n> is shown, and is accessible as the
486 automatically generated variable _i<n>. Multi-line statements are
486 automatically generated variable _i<n>. Multi-line statements are
487 printed starting at a new line for easy copy/paste.
487 printed starting at a new line for easy copy/paste.
488
488
489 If option -n is used, input numbers are not printed. This is useful if
489 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
490 you want to get a printout of many lines which can be directly pasted
491 into a text editor.
491 into a text editor.
492
492
493 This feature is only available if numbered prompts are in use."""
493 This feature is only available if numbered prompts are in use."""
494
494
495 shell = self.shell
495 shell = self.shell
496 if not shell.outputcache.do_full_cache:
496 if not shell.outputcache.do_full_cache:
497 print 'This feature is only available if numbered prompts are in use.'
497 print 'This feature is only available if numbered prompts are in use.'
498 return
498 return
499 opts,args = self.parse_options(parameter_s,'n',mode='list')
499 opts,args = self.parse_options(parameter_s,'n',mode='list')
500
500
501 input_hist = shell.input_hist
501 input_hist = shell.input_hist
502 default_length = 40
502 default_length = 40
503 if len(args) == 0:
503 if len(args) == 0:
504 final = len(input_hist)
504 final = len(input_hist)
505 init = max(1,final-default_length)
505 init = max(1,final-default_length)
506 elif len(args) == 1:
506 elif len(args) == 1:
507 final = len(input_hist)
507 final = len(input_hist)
508 init = max(1,final-int(args[0]))
508 init = max(1,final-int(args[0]))
509 elif len(args) == 2:
509 elif len(args) == 2:
510 init,final = map(int,args)
510 init,final = map(int,args)
511 else:
511 else:
512 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
512 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
513 print self.magic_hist.__doc__
513 print self.magic_hist.__doc__
514 return
514 return
515 width = len(str(final))
515 width = len(str(final))
516 line_sep = ['','\n']
516 line_sep = ['','\n']
517 print_nums = not opts.has_key('n')
517 print_nums = not opts.has_key('n')
518 for in_num in range(init,final):
518 for in_num in range(init,final):
519 inline = input_hist[in_num]
519 inline = input_hist[in_num]
520 multiline = int(inline.count('\n') > 1)
520 multiline = int(inline.count('\n') > 1)
521 if print_nums:
521 if print_nums:
522 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
522 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
523 print inline,
523 print inline,
524
524
525 def magic_hist(self, parameter_s=''):
525 def magic_hist(self, parameter_s=''):
526 """Alternate name for %history."""
526 """Alternate name for %history."""
527 return self.magic_history(parameter_s)
527 return self.magic_history(parameter_s)
528
528
529 def magic_p(self, parameter_s=''):
529 def magic_p(self, parameter_s=''):
530 """Just a short alias for Python's 'print'."""
530 """Just a short alias for Python's 'print'."""
531 exec 'print ' + parameter_s in self.shell.user_ns
531 exec 'print ' + parameter_s in self.shell.user_ns
532
532
533 def magic_r(self, parameter_s=''):
533 def magic_r(self, parameter_s=''):
534 """Repeat previous input.
534 """Repeat previous input.
535
535
536 If given an argument, repeats the previous command which starts with
536 If given an argument, repeats the previous command which starts with
537 the same string, otherwise it just repeats the previous input.
537 the same string, otherwise it just repeats the previous input.
538
538
539 Shell escaped commands (with ! as first character) are not recognized
539 Shell escaped commands (with ! as first character) are not recognized
540 by this system, only pure python code and magic commands.
540 by this system, only pure python code and magic commands.
541 """
541 """
542
542
543 start = parameter_s.strip()
543 start = parameter_s.strip()
544 esc_magic = self.shell.ESC_MAGIC
544 esc_magic = self.shell.ESC_MAGIC
545 # Identify magic commands even if automagic is on (which means
545 # Identify magic commands even if automagic is on (which means
546 # the in-memory version is different from that typed by the user).
546 # the in-memory version is different from that typed by the user).
547 if self.shell.rc.automagic:
547 if self.shell.rc.automagic:
548 start_magic = esc_magic+start
548 start_magic = esc_magic+start
549 else:
549 else:
550 start_magic = start
550 start_magic = start
551 # Look through the input history in reverse
551 # Look through the input history in reverse
552 for n in range(len(self.shell.input_hist)-2,0,-1):
552 for n in range(len(self.shell.input_hist)-2,0,-1):
553 input = self.shell.input_hist[n]
553 input = self.shell.input_hist[n]
554 # skip plain 'r' lines so we don't recurse to infinity
554 # skip plain 'r' lines so we don't recurse to infinity
555 if input != 'ipmagic("r")\n' and \
555 if input != 'ipmagic("r")\n' and \
556 (input.startswith(start) or input.startswith(start_magic)):
556 (input.startswith(start) or input.startswith(start_magic)):
557 #print 'match',`input` # dbg
557 #print 'match',`input` # dbg
558 print 'Executing:',input,
558 print 'Executing:',input,
559 self.shell.runlines(input)
559 self.shell.runlines(input)
560 return
560 return
561 print 'No previous input matching `%s` found.' % start
561 print 'No previous input matching `%s` found.' % start
562
562
563 def magic_page(self, parameter_s=''):
563 def magic_page(self, parameter_s=''):
564 """Pretty print the object and display it through a pager.
564 """Pretty print the object and display it through a pager.
565
565
566 If no parameter is given, use _ (last output)."""
566 If no parameter is given, use _ (last output)."""
567 # After a function contributed by Olivier Aubert, slightly modified.
567 # After a function contributed by Olivier Aubert, slightly modified.
568
568
569 oname = parameter_s and parameter_s or '_'
569 oname = parameter_s and parameter_s or '_'
570 info = self._ofind(oname)
570 info = self._ofind(oname)
571 if info['found']:
571 if info['found']:
572 page(pformat(info['obj']))
572 page(pformat(info['obj']))
573 else:
573 else:
574 print 'Object `%s` not found' % oname
574 print 'Object `%s` not found' % oname
575
575
576 def magic_profile(self, parameter_s=''):
576 def magic_profile(self, parameter_s=''):
577 """Print your currently active IPyhton profile."""
577 """Print your currently active IPyhton profile."""
578 if self.shell.rc.profile:
578 if self.shell.rc.profile:
579 printpl('Current IPython profile: $self.shell.rc.profile.')
579 printpl('Current IPython profile: $self.shell.rc.profile.')
580 else:
580 else:
581 print 'No profile active.'
581 print 'No profile active.'
582
582
583 def _inspect(self,meth,oname,**kw):
583 def _inspect(self,meth,oname,**kw):
584 """Generic interface to the inspector system.
584 """Generic interface to the inspector system.
585
585
586 This function is meant to be called by pdef, pdoc & friends."""
586 This function is meant to be called by pdef, pdoc & friends."""
587
587
588 oname = oname.strip()
588 oname = oname.strip()
589 info = Struct(self._ofind(oname))
589 info = Struct(self._ofind(oname))
590 if info.found:
590 if info.found:
591 pmethod = getattr(self.shell.inspector,meth)
591 pmethod = getattr(self.shell.inspector,meth)
592 formatter = info.ismagic and self.format_screen or None
592 formatter = info.ismagic and self.format_screen or None
593 if meth == 'pdoc':
593 if meth == 'pdoc':
594 pmethod(info.obj,oname,formatter)
594 pmethod(info.obj,oname,formatter)
595 elif meth == 'pinfo':
595 elif meth == 'pinfo':
596 pmethod(info.obj,oname,formatter,info,**kw)
596 pmethod(info.obj,oname,formatter,info,**kw)
597 else:
597 else:
598 pmethod(info.obj,oname)
598 pmethod(info.obj,oname)
599 else:
599 else:
600 print 'Object `%s` not found.' % oname
600 print 'Object `%s` not found.' % oname
601 return 'not found' # so callers can take other action
601 return 'not found' # so callers can take other action
602
602
603 def magic_pdef(self, parameter_s=''):
603 def magic_pdef(self, parameter_s=''):
604 """Print the definition header for any callable object.
604 """Print the definition header for any callable object.
605
605
606 If the object is a class, print the constructor information."""
606 If the object is a class, print the constructor information."""
607 self._inspect('pdef',parameter_s)
607 self._inspect('pdef',parameter_s)
608
608
609 def magic_pdoc(self, parameter_s=''):
609 def magic_pdoc(self, parameter_s=''):
610 """Print the docstring for an object.
610 """Print the docstring for an object.
611
611
612 If the given object is a class, it will print both the class and the
612 If the given object is a class, it will print both the class and the
613 constructor docstrings."""
613 constructor docstrings."""
614 self._inspect('pdoc',parameter_s)
614 self._inspect('pdoc',parameter_s)
615
615
616 def magic_psource(self, parameter_s=''):
616 def magic_psource(self, parameter_s=''):
617 """Print (or run through pager) the source code for an object."""
617 """Print (or run through pager) the source code for an object."""
618 self._inspect('psource',parameter_s)
618 self._inspect('psource',parameter_s)
619
619
620 def magic_pfile(self, parameter_s=''):
620 def magic_pfile(self, parameter_s=''):
621 """Print (or run through pager) the file where an object is defined.
621 """Print (or run through pager) the file where an object is defined.
622
622
623 The file opens at the line where the object definition begins. IPython
623 The file opens at the line where the object definition begins. IPython
624 will honor the environment variable PAGER if set, and otherwise will
624 will honor the environment variable PAGER if set, and otherwise will
625 do its best to print the file in a convenient form.
625 do its best to print the file in a convenient form.
626
626
627 If the given argument is not an object currently defined, IPython will
627 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
628 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
629 if needed). You can thus use %pfile as a syntax highlighting code
630 viewer."""
630 viewer."""
631
631
632 # first interpret argument as an object name
632 # first interpret argument as an object name
633 out = self._inspect('pfile',parameter_s)
633 out = self._inspect('pfile',parameter_s)
634 # if not, try the input as a filename
634 # if not, try the input as a filename
635 if out == 'not found':
635 if out == 'not found':
636 try:
636 try:
637 filename = get_py_filename(parameter_s)
637 filename = get_py_filename(parameter_s)
638 except IOError,msg:
638 except IOError,msg:
639 print msg
639 print msg
640 return
640 return
641 page(self.shell.inspector.format(file(filename).read()))
641 page(self.shell.inspector.format(file(filename).read()))
642
642
643 def magic_pinfo(self, parameter_s=''):
643 def magic_pinfo(self, parameter_s=''):
644 """Provide detailed information about an object.
644 """Provide detailed information about an object.
645
645
646 '%pinfo object' is just a synonym for object? or ?object."""
646 '%pinfo object' is just a synonym for object? or ?object."""
647
647
648 #print 'pinfo par: <%s>' % parameter_s # dbg
648 #print 'pinfo par: <%s>' % parameter_s # dbg
649
649
650 # detail_level: 0 -> obj? , 1 -> obj??
650 # detail_level: 0 -> obj? , 1 -> obj??
651 detail_level = 0
651 detail_level = 0
652 # We need to detect if we got called as 'pinfo pinfo foo', which can
652 # 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.
653 # happen if the user types 'pinfo foo?' at the cmd line.
654 pinfo,qmark1,oname,qmark2 = \
654 pinfo,qmark1,oname,qmark2 = \
655 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
655 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
656 if pinfo or qmark1 or qmark2:
656 if pinfo or qmark1 or qmark2:
657 detail_level = 1
657 detail_level = 1
658 if "*" in oname:
658 if "*" in oname:
659 self.magic_psearch(oname)
659 self.magic_psearch(oname)
660 else:
660 else:
661 self._inspect('pinfo',oname,detail_level=detail_level)
661 self._inspect('pinfo',oname,detail_level=detail_level)
662
662
663 def magic_psearch(self, parameter_s=''):
663 def magic_psearch(self, parameter_s=''):
664 """Search for object in namespaces by wildcard.
664 """Search for object in namespaces by wildcard.
665
665
666 %psearch [options] PATTERN [OBJECT TYPE]
666 %psearch [options] PATTERN [OBJECT TYPE]
667
667
668 Note: ? can be used as a synonym for %psearch, at the beginning or at
668 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
669 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
670 rest of the command line must be unchanged (options come first), so
671 for example the following forms are equivalent
671 for example the following forms are equivalent
672
672
673 %psearch -i a* function
673 %psearch -i a* function
674 -i a* function?
674 -i a* function?
675 ?-i a* function
675 ?-i a* function
676
676
677 Arguments:
677 Arguments:
678
678
679 PATTERN
679 PATTERN
680
680
681 where PATTERN is a string containing * as a wildcard similar to its
681 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
682 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
683 search path. By default objects starting with a single _ are not
684 matched, many IPython generated objects have a single
684 matched, many IPython generated objects have a single
685 underscore. The default is case insensitive matching. Matching is
685 underscore. The default is case insensitive matching. Matching is
686 also done on the attributes of objects and not only on the objects
686 also done on the attributes of objects and not only on the objects
687 in a module.
687 in a module.
688
688
689 [OBJECT TYPE]
689 [OBJECT TYPE]
690
690
691 Is the name of a python type from the types module. The name is
691 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
692 given in lowercase without the ending type, ex. StringType is
693 written string. By adding a type here only objects matching the
693 written string. By adding a type here only objects matching the
694 given type are matched. Using all here makes the pattern match all
694 given type are matched. Using all here makes the pattern match all
695 types (this is the default).
695 types (this is the default).
696
696
697 Options:
697 Options:
698
698
699 -a: makes the pattern match even objects whose names start with a
699 -a: makes the pattern match even objects whose names start with a
700 single underscore. These names are normally ommitted from the
700 single underscore. These names are normally ommitted from the
701 search.
701 search.
702
702
703 -i/-c: make the pattern case insensitive/sensitive. If neither of
703 -i/-c: make the pattern case insensitive/sensitive. If neither of
704 these options is given, the default is read from your ipythonrc
704 these options is given, the default is read from your ipythonrc
705 file. The option name which sets this value is
705 file. The option name which sets this value is
706 'wildcards_case_sensitive'. If this option is not specified in your
706 'wildcards_case_sensitive'. If this option is not specified in your
707 ipythonrc file, IPython's internal default is to do a case sensitive
707 ipythonrc file, IPython's internal default is to do a case sensitive
708 search.
708 search.
709
709
710 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
710 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
711 specifiy can be searched in any of the following namespaces:
711 specifiy can be searched in any of the following namespaces:
712 'builtin', 'user', 'user_global','internal', 'alias', where
712 'builtin', 'user', 'user_global','internal', 'alias', where
713 'builtin' and 'user' are the search defaults. Note that you should
713 'builtin' and 'user' are the search defaults. Note that you should
714 not use quotes when specifying namespaces.
714 not use quotes when specifying namespaces.
715
715
716 'Builtin' contains the python module builtin, 'user' contains all
716 'Builtin' contains the python module builtin, 'user' contains all
717 user data, 'alias' only contain the shell aliases and no python
717 user data, 'alias' only contain the shell aliases and no python
718 objects, 'internal' contains objects used by IPython. The
718 objects, 'internal' contains objects used by IPython. The
719 'user_global' namespace is only used by embedded IPython instances,
719 'user_global' namespace is only used by embedded IPython instances,
720 and it contains module-level globals. You can add namespaces to the
720 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
721 search with -s or exclude them with -e (these options can be given
722 more than once).
722 more than once).
723
723
724 Examples:
724 Examples:
725
725
726 %psearch a* -> objects beginning with an a
726 %psearch a* -> objects beginning with an a
727 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
727 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
728 %psearch a* function -> all functions beginning with an a
728 %psearch a* function -> all functions beginning with an a
729 %psearch re.e* -> objects beginning with an e in module re
729 %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
730 %psearch r*.e* -> objects that start with e in modules starting in r
731 %psearch r*.* string -> all strings in modules beginning with r
731 %psearch r*.* string -> all strings in modules beginning with r
732
732
733 Case sensitve search:
733 Case sensitve search:
734
734
735 %psearch -c a* list all object beginning with lower case a
735 %psearch -c a* list all object beginning with lower case a
736
736
737 Show objects beginning with a single _:
737 Show objects beginning with a single _:
738
738
739 %psearch -a _* list objects beginning with a single underscore"""
739 %psearch -a _* list objects beginning with a single underscore"""
740
740
741 # default namespaces to be searched
741 # default namespaces to be searched
742 def_search = ['user','builtin']
742 def_search = ['user','builtin']
743
743
744 # Process options/args
744 # Process options/args
745 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
745 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
746 opt = opts.get
746 opt = opts.get
747 shell = self.shell
747 shell = self.shell
748 psearch = shell.inspector.psearch
748 psearch = shell.inspector.psearch
749
749
750 # select case options
750 # select case options
751 if opts.has_key('i'):
751 if opts.has_key('i'):
752 ignore_case = True
752 ignore_case = True
753 elif opts.has_key('c'):
753 elif opts.has_key('c'):
754 ignore_case = False
754 ignore_case = False
755 else:
755 else:
756 ignore_case = not shell.rc.wildcards_case_sensitive
756 ignore_case = not shell.rc.wildcards_case_sensitive
757
757
758 # Build list of namespaces to search from user options
758 # Build list of namespaces to search from user options
759 def_search.extend(opt('s',[]))
759 def_search.extend(opt('s',[]))
760 ns_exclude = ns_exclude=opt('e',[])
760 ns_exclude = ns_exclude=opt('e',[])
761 ns_search = [nm for nm in def_search if nm not in ns_exclude]
761 ns_search = [nm for nm in def_search if nm not in ns_exclude]
762
762
763 # Call the actual search
763 # Call the actual search
764 try:
764 try:
765 psearch(args,shell.ns_table,ns_search,
765 psearch(args,shell.ns_table,ns_search,
766 show_all=opt('a'),ignore_case=ignore_case)
766 show_all=opt('a'),ignore_case=ignore_case)
767 except:
767 except:
768 shell.showtraceback()
768 shell.showtraceback()
769
769
770 def magic_who_ls(self, parameter_s=''):
770 def magic_who_ls(self, parameter_s=''):
771 """Return a sorted list of all interactive variables.
771 """Return a sorted list of all interactive variables.
772
772
773 If arguments are given, only variables of types matching these
773 If arguments are given, only variables of types matching these
774 arguments are returned."""
774 arguments are returned."""
775
775
776 user_ns = self.shell.user_ns
776 user_ns = self.shell.user_ns
777 internal_ns = self.shell.internal_ns
777 internal_ns = self.shell.internal_ns
778 user_config_ns = self.shell.user_config_ns
778 user_config_ns = self.shell.user_config_ns
779 out = []
779 out = []
780 typelist = parameter_s.split()
780 typelist = parameter_s.split()
781
781
782 for i in user_ns:
782 for i in user_ns:
783 if not (i.startswith('_') or i.startswith('_i')) \
783 if not (i.startswith('_') or i.startswith('_i')) \
784 and not (i in internal_ns or i in user_config_ns):
784 and not (i in internal_ns or i in user_config_ns):
785 if typelist:
785 if typelist:
786 if type(user_ns[i]).__name__ in typelist:
786 if type(user_ns[i]).__name__ in typelist:
787 out.append(i)
787 out.append(i)
788 else:
788 else:
789 out.append(i)
789 out.append(i)
790 out.sort()
790 out.sort()
791 return out
791 return out
792
792
793 def magic_who(self, parameter_s=''):
793 def magic_who(self, parameter_s=''):
794 """Print all interactive variables, with some minimal formatting.
794 """Print all interactive variables, with some minimal formatting.
795
795
796 If any arguments are given, only variables whose type matches one of
796 If any arguments are given, only variables whose type matches one of
797 these are printed. For example:
797 these are printed. For example:
798
798
799 %who function str
799 %who function str
800
800
801 will only list functions and strings, excluding all other types of
801 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
802 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:
803 command line to see how python prints type names. For example:
804
804
805 In [1]: type('hello')\\
805 In [1]: type('hello')\\
806 Out[1]: <type 'str'>
806 Out[1]: <type 'str'>
807
807
808 indicates that the type name for strings is 'str'.
808 indicates that the type name for strings is 'str'.
809
809
810 %who always excludes executed names loaded through your configuration
810 %who always excludes executed names loaded through your configuration
811 file and things which are internal to IPython.
811 file and things which are internal to IPython.
812
812
813 This is deliberate, as typically you may load many modules and the
813 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."""
814 purpose of %who is to show you only what you've manually defined."""
815
815
816 varlist = self.magic_who_ls(parameter_s)
816 varlist = self.magic_who_ls(parameter_s)
817 if not varlist:
817 if not varlist:
818 print 'Interactive namespace is empty.'
818 print 'Interactive namespace is empty.'
819 return
819 return
820
820
821 # if we have variables, move on...
821 # if we have variables, move on...
822
822
823 # stupid flushing problem: when prompts have no separators, stdout is
823 # 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
824 # 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
825 # to force a flush with a print because even a sys.stdout.flush
826 # doesn't seem to do anything!
826 # doesn't seem to do anything!
827
827
828 count = 0
828 count = 0
829 for i in varlist:
829 for i in varlist:
830 print i+'\t',
830 print i+'\t',
831 count += 1
831 count += 1
832 if count > 8:
832 if count > 8:
833 count = 0
833 count = 0
834 print
834 print
835 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
835 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
836
836
837 print # well, this does force a flush at the expense of an extra \n
837 print # well, this does force a flush at the expense of an extra \n
838
838
839 def magic_whos(self, parameter_s=''):
839 def magic_whos(self, parameter_s=''):
840 """Like %who, but gives some extra information about each variable.
840 """Like %who, but gives some extra information about each variable.
841
841
842 The same type filtering of %who can be applied here.
842 The same type filtering of %who can be applied here.
843
843
844 For all variables, the type is printed. Additionally it prints:
844 For all variables, the type is printed. Additionally it prints:
845
845
846 - For {},[],(): their length.
846 - For {},[],(): their length.
847
847
848 - For Numeric arrays, a summary with shape, number of elements,
848 - For Numeric arrays, a summary with shape, number of elements,
849 typecode and size in memory.
849 typecode and size in memory.
850
850
851 - Everything else: a string representation, snipping their middle if
851 - Everything else: a string representation, snipping their middle if
852 too long."""
852 too long."""
853
853
854 varnames = self.magic_who_ls(parameter_s)
854 varnames = self.magic_who_ls(parameter_s)
855 if not varnames:
855 if not varnames:
856 print 'Interactive namespace is empty.'
856 print 'Interactive namespace is empty.'
857 return
857 return
858
858
859 # if we have variables, move on...
859 # if we have variables, move on...
860
860
861 # for these types, show len() instead of data:
861 # for these types, show len() instead of data:
862 seq_types = [types.DictType,types.ListType,types.TupleType]
862 seq_types = [types.DictType,types.ListType,types.TupleType]
863
863
864 # for Numeric arrays, display summary info
864 # for Numeric arrays, display summary info
865 try:
865 try:
866 import Numeric
866 import Numeric
867 except ImportError:
867 except ImportError:
868 array_type = None
868 array_type = None
869 else:
869 else:
870 array_type = Numeric.ArrayType.__name__
870 array_type = Numeric.ArrayType.__name__
871
871
872 # Find all variable names and types so we can figure out column sizes
872 # Find all variable names and types so we can figure out column sizes
873 get_vars = lambda i: self.shell.user_ns[i]
873 get_vars = lambda i: self.shell.user_ns[i]
874 type_name = lambda v: type(v).__name__
874 type_name = lambda v: type(v).__name__
875 varlist = map(get_vars,varnames)
875 varlist = map(get_vars,varnames)
876
876
877 typelist = []
877 typelist = []
878 for vv in varlist:
878 for vv in varlist:
879 tt = type_name(vv)
879 tt = type_name(vv)
880 if tt=='instance':
880 if tt=='instance':
881 typelist.append(str(vv.__class__))
881 typelist.append(str(vv.__class__))
882 else:
882 else:
883 typelist.append(tt)
883 typelist.append(tt)
884
884
885 # column labels and # of spaces as separator
885 # column labels and # of spaces as separator
886 varlabel = 'Variable'
886 varlabel = 'Variable'
887 typelabel = 'Type'
887 typelabel = 'Type'
888 datalabel = 'Data/Info'
888 datalabel = 'Data/Info'
889 colsep = 3
889 colsep = 3
890 # variable format strings
890 # variable format strings
891 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
891 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
892 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
892 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
893 aformat = "%s: %s elems, type `%s`, %s bytes"
893 aformat = "%s: %s elems, type `%s`, %s bytes"
894 # find the size of the columns to format the output nicely
894 # find the size of the columns to format the output nicely
895 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
895 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
896 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
896 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
897 # table header
897 # table header
898 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
898 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
899 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
899 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
900 # and the table itself
900 # and the table itself
901 kb = 1024
901 kb = 1024
902 Mb = 1048576 # kb**2
902 Mb = 1048576 # kb**2
903 for vname,var,vtype in zip(varnames,varlist,typelist):
903 for vname,var,vtype in zip(varnames,varlist,typelist):
904 print itpl(vformat),
904 print itpl(vformat),
905 if vtype in seq_types:
905 if vtype in seq_types:
906 print len(var)
906 print len(var)
907 elif vtype==array_type:
907 elif vtype==array_type:
908 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
908 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
909 vsize = Numeric.size(var)
909 vsize = Numeric.size(var)
910 vbytes = vsize*var.itemsize()
910 vbytes = vsize*var.itemsize()
911 if vbytes < 100000:
911 if vbytes < 100000:
912 print aformat % (vshape,vsize,var.typecode(),vbytes)
912 print aformat % (vshape,vsize,var.typecode(),vbytes)
913 else:
913 else:
914 print aformat % (vshape,vsize,var.typecode(),vbytes),
914 print aformat % (vshape,vsize,var.typecode(),vbytes),
915 if vbytes < Mb:
915 if vbytes < Mb:
916 print '(%s kb)' % (vbytes/kb,)
916 print '(%s kb)' % (vbytes/kb,)
917 else:
917 else:
918 print '(%s Mb)' % (vbytes/Mb,)
918 print '(%s Mb)' % (vbytes/Mb,)
919 else:
919 else:
920 vstr = str(var).replace('\n','\\n')
920 vstr = str(var).replace('\n','\\n')
921 if len(vstr) < 50:
921 if len(vstr) < 50:
922 print vstr
922 print vstr
923 else:
923 else:
924 printpl(vfmt_short)
924 printpl(vfmt_short)
925
925
926 def magic_reset(self, parameter_s=''):
926 def magic_reset(self, parameter_s=''):
927 """Resets the namespace by removing all names defined by the user.
927 """Resets the namespace by removing all names defined by the user.
928
928
929 Input/Output history are left around in case you need them."""
929 Input/Output history are left around in case you need them."""
930
930
931 ans = raw_input(
931 ans = raw_input(
932 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
932 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
933 if not ans.lower() == 'y':
933 if not ans.lower() == 'y':
934 print 'Nothing done.'
934 print 'Nothing done.'
935 return
935 return
936 user_ns = self.shell.user_ns
936 user_ns = self.shell.user_ns
937 for i in self.magic_who_ls():
937 for i in self.magic_who_ls():
938 del(user_ns[i])
938 del(user_ns[i])
939
939
940 def magic_config(self,parameter_s=''):
940 def magic_config(self,parameter_s=''):
941 """Show IPython's internal configuration."""
941 """Show IPython's internal configuration."""
942
942
943 page('Current configuration structure:\n'+
943 page('Current configuration structure:\n'+
944 pformat(self.shell.rc.dict()))
944 pformat(self.shell.rc.dict()))
945
945
946 def magic_logstart(self,parameter_s=''):
946 def magic_logstart(self,parameter_s=''):
947 """Start logging anywhere in a session.
947 """Start logging anywhere in a session.
948
948
949 %logstart [-o|-t] [log_name [log_mode]]
949 %logstart [-o|-t] [log_name [log_mode]]
950
950
951 If no name is given, it defaults to a file named 'ipython_log.py' in your
951 If no name is given, it defaults to a file named 'ipython_log.py' in your
952 current directory, in 'rotate' mode (see below).
952 current directory, in 'rotate' mode (see below).
953
953
954 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
954 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
955 history up to that point and then continues logging.
955 history up to that point and then continues logging.
956
956
957 %logstart takes a second optional parameter: logging mode. This can be one
957 %logstart takes a second optional parameter: logging mode. This can be one
958 of (note that the modes are given unquoted):\\
958 of (note that the modes are given unquoted):\\
959 append: well, that says it.\\
959 append: well, that says it.\\
960 backup: rename (if exists) to name~ and start name.\\
960 backup: rename (if exists) to name~ and start name.\\
961 global: single logfile in your home dir, appended to.\\
961 global: single logfile in your home dir, appended to.\\
962 over : overwrite existing log.\\
962 over : overwrite existing log.\\
963 rotate: create rotating logs name.1~, name.2~, etc.
963 rotate: create rotating logs name.1~, name.2~, etc.
964
964
965 Options:
965 Options:
966
966
967 -o: log also IPython's output. In this mode, all commands which
967 -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
968 generate an Out[NN] prompt are recorded to the logfile, right after
969 their corresponding input line. The output lines are always
969 their corresponding input line. The output lines are always
970 prepended with a '#[Out]# ' marker, so that the log remains valid
970 prepended with a '#[Out]# ' marker, so that the log remains valid
971 Python code.
971 Python code.
972
972
973 Since this marker is always the same, filtering only the output from
973 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:
974 a log is very easy, using for example a simple awk call:
975
975
976 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
976 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
977
977
978 -t: put timestamps before each input line logged (these are put in
978 -t: put timestamps before each input line logged (these are put in
979 comments)."""
979 comments)."""
980
980
981 opts,par = self.parse_options(parameter_s,'ot')
981 opts,par = self.parse_options(parameter_s,'ot')
982 log_output = 'o' in opts
982 log_output = 'o' in opts
983 timestamp = 't' in opts
983 timestamp = 't' in opts
984
984
985 rc = self.shell.rc
985 rc = self.shell.rc
986 logger = self.shell.logger
986 logger = self.shell.logger
987
987
988 # if no args are given, the defaults set in the logger constructor by
988 # if no args are given, the defaults set in the logger constructor by
989 # ipytohn remain valid
989 # ipytohn remain valid
990 if par:
990 if par:
991 try:
991 try:
992 logfname,logmode = par.split()
992 logfname,logmode = par.split()
993 except:
993 except:
994 logfname = par
994 logfname = par
995 logmode = 'backup'
995 logmode = 'backup'
996 else:
996 else:
997 logfname = logger.logfname
997 logfname = logger.logfname
998 logmode = logger.logmode
998 logmode = logger.logmode
999 # put logfname into rc struct as if it had been called on the command
999 # 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
1000 # line, so it ends up saved in the log header Save it in case we need
1001 # to restore it...
1001 # to restore it...
1002 old_logfile = rc.opts.get('logfile','')
1002 old_logfile = rc.opts.get('logfile','')
1003 if logfname:
1003 if logfname:
1004 logfname = os.path.expanduser(logfname)
1004 logfname = os.path.expanduser(logfname)
1005 rc.opts.logfile = logfname
1005 rc.opts.logfile = logfname
1006 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1006 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1007 try:
1007 try:
1008 started = logger.logstart(logfname,loghead,logmode,
1008 started = logger.logstart(logfname,loghead,logmode,
1009 log_output,timestamp)
1009 log_output,timestamp)
1010 except:
1010 except:
1011 rc.opts.logfile = old_logfile
1011 rc.opts.logfile = old_logfile
1012 warn("Couldn't start log: %s" % sys.exc_info()[1])
1012 warn("Couldn't start log: %s" % sys.exc_info()[1])
1013 else:
1013 else:
1014 # log input history up to this point, optionally interleaving
1014 # log input history up to this point, optionally interleaving
1015 # output if requested
1015 # output if requested
1016
1016
1017 if timestamp:
1017 if timestamp:
1018 # disable timestamping for the previous history, since we've
1018 # disable timestamping for the previous history, since we've
1019 # lost those already (no time machine here).
1019 # lost those already (no time machine here).
1020 logger.timestamp = False
1020 logger.timestamp = False
1021 if log_output:
1021 if log_output:
1022 log_write = logger.log_write
1022 log_write = logger.log_write
1023 input_hist = self.shell.input_hist
1023 input_hist = self.shell.input_hist
1024 output_hist = self.shell.output_hist
1024 output_hist = self.shell.output_hist
1025 for n in range(1,len(input_hist)-1):
1025 for n in range(1,len(input_hist)-1):
1026 log_write(input_hist[n].rstrip())
1026 log_write(input_hist[n].rstrip())
1027 if n in output_hist:
1027 if n in output_hist:
1028 log_write(repr(output_hist[n]),'output')
1028 log_write(repr(output_hist[n]),'output')
1029 else:
1029 else:
1030 logger.log_write(self.shell.input_hist[1:])
1030 logger.log_write(self.shell.input_hist[1:])
1031 if timestamp:
1031 if timestamp:
1032 # re-enable timestamping
1032 # re-enable timestamping
1033 logger.timestamp = True
1033 logger.timestamp = True
1034
1034
1035 print ('Activating auto-logging. '
1035 print ('Activating auto-logging. '
1036 'Current session state plus future input saved.')
1036 'Current session state plus future input saved.')
1037 logger.logstate()
1037 logger.logstate()
1038
1038
1039 def magic_logoff(self,parameter_s=''):
1039 def magic_logoff(self,parameter_s=''):
1040 """Temporarily stop logging.
1040 """Temporarily stop logging.
1041
1041
1042 You must have previously started logging."""
1042 You must have previously started logging."""
1043 self.shell.logger.switch_log(0)
1043 self.shell.logger.switch_log(0)
1044
1044
1045 def magic_logon(self,parameter_s=''):
1045 def magic_logon(self,parameter_s=''):
1046 """Restart logging.
1046 """Restart logging.
1047
1047
1048 This function is for restarting logging which you've temporarily
1048 This function is for restarting logging which you've temporarily
1049 stopped with %logoff. For starting logging for the first time, you
1049 stopped with %logoff. For starting logging for the first time, you
1050 must use the %logstart function, which allows you to specify an
1050 must use the %logstart function, which allows you to specify an
1051 optional log filename."""
1051 optional log filename."""
1052
1052
1053 self.shell.logger.switch_log(1)
1053 self.shell.logger.switch_log(1)
1054
1054
1055 def magic_logstate(self,parameter_s=''):
1055 def magic_logstate(self,parameter_s=''):
1056 """Print the status of the logging system."""
1056 """Print the status of the logging system."""
1057
1057
1058 self.shell.logger.logstate()
1058 self.shell.logger.logstate()
1059
1059
1060 def magic_pdb(self, parameter_s=''):
1060 def magic_pdb(self, parameter_s=''):
1061 """Control the calling of the pdb interactive debugger.
1061 """Control the calling of the pdb interactive debugger.
1062
1062
1063 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1063 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1064 argument it works as a toggle.
1064 argument it works as a toggle.
1065
1065
1066 When an exception is triggered, IPython can optionally call the
1066 When an exception is triggered, IPython can optionally call the
1067 interactive pdb debugger after the traceback printout. %pdb toggles
1067 interactive pdb debugger after the traceback printout. %pdb toggles
1068 this feature on and off."""
1068 this feature on and off."""
1069
1069
1070 par = parameter_s.strip().lower()
1070 par = parameter_s.strip().lower()
1071
1071
1072 if par:
1072 if par:
1073 try:
1073 try:
1074 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1074 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1075 except KeyError:
1075 except KeyError:
1076 print ('Incorrect argument. Use on/1, off/0, '
1076 print ('Incorrect argument. Use on/1, off/0, '
1077 'or nothing for a toggle.')
1077 'or nothing for a toggle.')
1078 return
1078 return
1079 else:
1079 else:
1080 # toggle
1080 # toggle
1081 new_pdb = not self.shell.InteractiveTB.call_pdb
1081 new_pdb = not self.shell.InteractiveTB.call_pdb
1082
1082
1083 # set on the shell
1083 # set on the shell
1084 self.shell.call_pdb = new_pdb
1084 self.shell.call_pdb = new_pdb
1085 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1085 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1086
1086
1087 def magic_prun(self, parameter_s ='',user_mode=1,
1087 def magic_prun(self, parameter_s ='',user_mode=1,
1088 opts=None,arg_lst=None,prog_ns=None):
1088 opts=None,arg_lst=None,prog_ns=None):
1089
1089
1090 """Run a statement through the python code profiler.
1090 """Run a statement through the python code profiler.
1091
1091
1092 Usage:\\
1092 Usage:\\
1093 %prun [options] statement
1093 %prun [options] statement
1094
1094
1095 The given statement (which doesn't require quote marks) is run via the
1095 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.
1096 python profiler in a manner similar to the profile.run() function.
1097 Namespaces are internally managed to work correctly; profile.run
1097 Namespaces are internally managed to work correctly; profile.run
1098 cannot be used in IPython because it makes certain assumptions about
1098 cannot be used in IPython because it makes certain assumptions about
1099 namespaces which do not hold under IPython.
1099 namespaces which do not hold under IPython.
1100
1100
1101 Options:
1101 Options:
1102
1102
1103 -l <limit>: you can place restrictions on what or how much of the
1103 -l <limit>: you can place restrictions on what or how much of the
1104 profile gets printed. The limit value can be:
1104 profile gets printed. The limit value can be:
1105
1105
1106 * A string: only information for function names containing this string
1106 * A string: only information for function names containing this string
1107 is printed.
1107 is printed.
1108
1108
1109 * An integer: only these many lines are printed.
1109 * An integer: only these many lines are printed.
1110
1110
1111 * A float (between 0 and 1): this fraction of the report is printed
1111 * 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).
1112 (for example, use a limit of 0.4 to see the topmost 40% only).
1113
1113
1114 You can combine several limits with repeated use of the option. For
1114 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
1115 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1116 information about class constructors.
1116 information about class constructors.
1117
1117
1118 -r: return the pstats.Stats object generated by the profiling. This
1118 -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
1119 object has all the information about the profile in it, and you can
1120 later use it for further analysis or in other functions.
1120 later use it for further analysis or in other functions.
1121
1121
1122 Since magic functions have a particular form of calling which prevents
1122 Since magic functions have a particular form of calling which prevents
1123 you from writing something like:\\
1123 you from writing something like:\\
1124 In [1]: p = %prun -r print 4 # invalid!\\
1124 In [1]: p = %prun -r print 4 # invalid!\\
1125 you must instead use IPython's automatic variables to assign this:\\
1125 you must instead use IPython's automatic variables to assign this:\\
1126 In [1]: %prun -r print 4 \\
1126 In [1]: %prun -r print 4 \\
1127 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1127 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1128 In [2]: stats = _
1128 In [2]: stats = _
1129
1129
1130 If you really need to assign this value via an explicit function call,
1130 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
1131 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
1132 by using the ipmagic function (which IPython automatically adds to the
1133 builtins):\\
1133 builtins):\\
1134 In [3]: stats = ipmagic('prun','-r print 4')
1134 In [3]: stats = ipmagic('prun','-r print 4')
1135
1135
1136 You can type ipmagic? for more details on ipmagic.
1136 You can type ipmagic? for more details on ipmagic.
1137
1137
1138 -s <key>: sort profile by given key. You can provide more than one key
1138 -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
1139 by using the option several times: '-s key1 -s key2 -s key3...'. The
1140 default sorting key is 'time'.
1140 default sorting key is 'time'.
1141
1141
1142 The following is copied verbatim from the profile documentation
1142 The following is copied verbatim from the profile documentation
1143 referenced below:
1143 referenced below:
1144
1144
1145 When more than one key is provided, additional keys are used as
1145 When more than one key is provided, additional keys are used as
1146 secondary criteria when the there is equality in all keys selected
1146 secondary criteria when the there is equality in all keys selected
1147 before them.
1147 before them.
1148
1148
1149 Abbreviations can be used for any key names, as long as the
1149 Abbreviations can be used for any key names, as long as the
1150 abbreviation is unambiguous. The following are the keys currently
1150 abbreviation is unambiguous. The following are the keys currently
1151 defined:
1151 defined:
1152
1152
1153 Valid Arg Meaning\\
1153 Valid Arg Meaning\\
1154 "calls" call count\\
1154 "calls" call count\\
1155 "cumulative" cumulative time\\
1155 "cumulative" cumulative time\\
1156 "file" file name\\
1156 "file" file name\\
1157 "module" file name\\
1157 "module" file name\\
1158 "pcalls" primitive call count\\
1158 "pcalls" primitive call count\\
1159 "line" line number\\
1159 "line" line number\\
1160 "name" function name\\
1160 "name" function name\\
1161 "nfl" name/file/line\\
1161 "nfl" name/file/line\\
1162 "stdname" standard name\\
1162 "stdname" standard name\\
1163 "time" internal time
1163 "time" internal time
1164
1164
1165 Note that all sorts on statistics are in descending order (placing
1165 Note that all sorts on statistics are in descending order (placing
1166 most time consuming items first), where as name, file, and line number
1166 most time consuming items first), where as name, file, and line number
1167 searches are in ascending order (i.e., alphabetical). The subtle
1167 searches are in ascending order (i.e., alphabetical). The subtle
1168 distinction between "nfl" and "stdname" is that the standard name is a
1168 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
1169 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
1170 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
1171 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
1172 "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
1173 line numbers. In fact, sort_stats("nfl") is the same as
1174 sort_stats("name", "file", "line").
1174 sort_stats("name", "file", "line").
1175
1175
1176 -T <filename>: save profile results as shown on screen to a text
1176 -T <filename>: save profile results as shown on screen to a text
1177 file. The profile is still shown on screen.
1177 file. The profile is still shown on screen.
1178
1178
1179 -D <filename>: save (via dump_stats) profile statistics to given
1179 -D <filename>: save (via dump_stats) profile statistics to given
1180 filename. This data is in a format understod by the pstats module, and
1180 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
1181 is generated by a call to the dump_stats() method of profile
1182 objects. The profile is still shown on screen.
1182 objects. The profile is still shown on screen.
1183
1183
1184 If you want to run complete programs under the profiler's control, use
1184 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
1185 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1186 contains profiler specific options as described here.
1186 contains profiler specific options as described here.
1187
1187
1188 You can read the complete documentation for the profile module with:\\
1188 You can read the complete documentation for the profile module with:\\
1189 In [1]: import profile; profile.help() """
1189 In [1]: import profile; profile.help() """
1190
1190
1191 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1191 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1192 # protect user quote marks
1192 # protect user quote marks
1193 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1193 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1194
1194
1195 if user_mode: # regular user call
1195 if user_mode: # regular user call
1196 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1196 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1197 list_all=1)
1197 list_all=1)
1198 namespace = self.shell.user_ns
1198 namespace = self.shell.user_ns
1199 else: # called to run a program by %run -p
1199 else: # called to run a program by %run -p
1200 try:
1200 try:
1201 filename = get_py_filename(arg_lst[0])
1201 filename = get_py_filename(arg_lst[0])
1202 except IOError,msg:
1202 except IOError,msg:
1203 error(msg)
1203 error(msg)
1204 return
1204 return
1205
1205
1206 arg_str = 'execfile(filename,prog_ns)'
1206 arg_str = 'execfile(filename,prog_ns)'
1207 namespace = locals()
1207 namespace = locals()
1208
1208
1209 opts.merge(opts_def)
1209 opts.merge(opts_def)
1210
1210
1211 prof = profile.Profile()
1211 prof = profile.Profile()
1212 try:
1212 try:
1213 prof = prof.runctx(arg_str,namespace,namespace)
1213 prof = prof.runctx(arg_str,namespace,namespace)
1214 sys_exit = ''
1214 sys_exit = ''
1215 except SystemExit:
1215 except SystemExit:
1216 sys_exit = """*** SystemExit exception caught in code being profiled."""
1216 sys_exit = """*** SystemExit exception caught in code being profiled."""
1217
1217
1218 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1218 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1219
1219
1220 lims = opts.l
1220 lims = opts.l
1221 if lims:
1221 if lims:
1222 lims = [] # rebuild lims with ints/floats/strings
1222 lims = [] # rebuild lims with ints/floats/strings
1223 for lim in opts.l:
1223 for lim in opts.l:
1224 try:
1224 try:
1225 lims.append(int(lim))
1225 lims.append(int(lim))
1226 except ValueError:
1226 except ValueError:
1227 try:
1227 try:
1228 lims.append(float(lim))
1228 lims.append(float(lim))
1229 except ValueError:
1229 except ValueError:
1230 lims.append(lim)
1230 lims.append(lim)
1231
1231
1232 # trap output
1232 # trap output
1233 sys_stdout = sys.stdout
1233 sys_stdout = sys.stdout
1234 stdout_trap = StringIO()
1234 stdout_trap = StringIO()
1235 try:
1235 try:
1236 sys.stdout = stdout_trap
1236 sys.stdout = stdout_trap
1237 stats.print_stats(*lims)
1237 stats.print_stats(*lims)
1238 finally:
1238 finally:
1239 sys.stdout = sys_stdout
1239 sys.stdout = sys_stdout
1240 output = stdout_trap.getvalue()
1240 output = stdout_trap.getvalue()
1241 output = output.rstrip()
1241 output = output.rstrip()
1242
1242
1243 page(output,screen_lines=self.shell.rc.screen_length)
1243 page(output,screen_lines=self.shell.rc.screen_length)
1244 print sys_exit,
1244 print sys_exit,
1245
1245
1246 dump_file = opts.D[0]
1246 dump_file = opts.D[0]
1247 text_file = opts.T[0]
1247 text_file = opts.T[0]
1248 if dump_file:
1248 if dump_file:
1249 prof.dump_stats(dump_file)
1249 prof.dump_stats(dump_file)
1250 print '\n*** Profile stats marshalled to file',\
1250 print '\n*** Profile stats marshalled to file',\
1251 `dump_file`+'.',sys_exit
1251 `dump_file`+'.',sys_exit
1252 if text_file:
1252 if text_file:
1253 file(text_file,'w').write(output)
1253 file(text_file,'w').write(output)
1254 print '\n*** Profile printout saved to text file',\
1254 print '\n*** Profile printout saved to text file',\
1255 `text_file`+'.',sys_exit
1255 `text_file`+'.',sys_exit
1256
1256
1257 if opts.has_key('r'):
1257 if opts.has_key('r'):
1258 return stats
1258 return stats
1259 else:
1259 else:
1260 return None
1260 return None
1261
1261
1262 def magic_run(self, parameter_s ='',runner=None):
1262 def magic_run(self, parameter_s ='',runner=None):
1263 """Run the named file inside IPython as a program.
1263 """Run the named file inside IPython as a program.
1264
1264
1265 Usage:\\
1265 Usage:\\
1266 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1266 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1267
1267
1268 Parameters after the filename are passed as command-line arguments to
1268 Parameters after the filename are passed as command-line arguments to
1269 the program (put in sys.argv). Then, control returns to IPython's
1269 the program (put in sys.argv). Then, control returns to IPython's
1270 prompt.
1270 prompt.
1271
1271
1272 This is similar to running at a system prompt:\\
1272 This is similar to running at a system prompt:\\
1273 $ python file args\\
1273 $ python file args\\
1274 but with the advantage of giving you IPython's tracebacks, and of
1274 but with the advantage of giving you IPython's tracebacks, and of
1275 loading all variables into your interactive namespace for further use
1275 loading all variables into your interactive namespace for further use
1276 (unless -p is used, see below).
1276 (unless -p is used, see below).
1277
1277
1278 The file is executed in a namespace initially consisting only of
1278 The file is executed in a namespace initially consisting only of
1279 __name__=='__main__' and sys.argv constructed as indicated. It thus
1279 __name__=='__main__' and sys.argv constructed as indicated. It thus
1280 sees its environment as if it were being run as a stand-alone
1280 sees its environment as if it were being run as a stand-alone
1281 program. But after execution, the IPython interactive namespace gets
1281 program. But after execution, the IPython interactive namespace gets
1282 updated with all variables defined in the program (except for __name__
1282 updated with all variables defined in the program (except for __name__
1283 and sys.argv). This allows for very convenient loading of code for
1283 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.
1284 interactive work, while giving each program a 'clean sheet' to run in.
1285
1285
1286 Options:
1286 Options:
1287
1287
1288 -n: __name__ is NOT set to '__main__', but to the running file's name
1288 -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
1289 without extension (as python does under import). This allows running
1290 scripts and reloading the definitions in them without calling code
1290 scripts and reloading the definitions in them without calling code
1291 protected by an ' if __name__ == "__main__" ' clause.
1291 protected by an ' if __name__ == "__main__" ' clause.
1292
1292
1293 -i: run the file in IPython's namespace instead of an empty one. This
1293 -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
1294 is useful if you are experimenting with code written in a text editor
1295 which depends on variables defined interactively.
1295 which depends on variables defined interactively.
1296
1296
1297 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1297 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1298 being run. This is particularly useful if IPython is being used to
1298 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
1299 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
1300 cases you are interested in the output of the test results, not in
1301 seeing a traceback of the unittest module.
1301 seeing a traceback of the unittest module.
1302
1302
1303 -t: print timing information at the end of the run. IPython will give
1303 -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
1304 you an estimated CPU time consumption for your script, which under
1305 Unix uses the resource module to avoid the wraparound problems of
1305 Unix uses the resource module to avoid the wraparound problems of
1306 time.clock(). Under Unix, an estimate of time spent on system tasks
1306 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).
1307 is also given (for Windows platforms this is reported as 0.0).
1308
1308
1309 If -t is given, an additional -N<N> option can be given, where <N>
1309 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
1310 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.
1311 run. The final timing report will include total and per run results.
1312
1312
1313 For example (testing the script uniq_stable.py):
1313 For example (testing the script uniq_stable.py):
1314
1314
1315 In [1]: run -t uniq_stable
1315 In [1]: run -t uniq_stable
1316
1316
1317 IPython CPU timings (estimated):\\
1317 IPython CPU timings (estimated):\\
1318 User : 0.19597 s.\\
1318 User : 0.19597 s.\\
1319 System: 0.0 s.\\
1319 System: 0.0 s.\\
1320
1320
1321 In [2]: run -t -N5 uniq_stable
1321 In [2]: run -t -N5 uniq_stable
1322
1322
1323 IPython CPU timings (estimated):\\
1323 IPython CPU timings (estimated):\\
1324 Total runs performed: 5\\
1324 Total runs performed: 5\\
1325 Times : Total Per run\\
1325 Times : Total Per run\\
1326 User : 0.910862 s, 0.1821724 s.\\
1326 User : 0.910862 s, 0.1821724 s.\\
1327 System: 0.0 s, 0.0 s.
1327 System: 0.0 s, 0.0 s.
1328
1328
1329 -d: run your program under the control of pdb, the Python debugger.
1329 -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,
1330 This allows you to execute your program step by step, watch variables,
1331 etc. Internally, what IPython does is similar to calling:
1331 etc. Internally, what IPython does is similar to calling:
1332
1332
1333 pdb.run('execfile("YOURFILENAME")')
1333 pdb.run('execfile("YOURFILENAME")')
1334
1334
1335 with a breakpoint set on line 1 of your file. You can change the line
1335 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
1336 number for this automatic breakpoint to be <N> by using the -bN option
1337 (where N must be an integer). For example:
1337 (where N must be an integer). For example:
1338
1338
1339 %run -d -b40 myscript
1339 %run -d -b40 myscript
1340
1340
1341 will set the first breakpoint at line 40 in myscript.py. Note that
1341 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
1342 the first breakpoint must be set on a line which actually does
1343 something (not a comment or docstring) for it to stop execution.
1343 something (not a comment or docstring) for it to stop execution.
1344
1344
1345 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1345 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
1346 first enter 'c' (without qoutes) to start execution up to the first
1347 breakpoint.
1347 breakpoint.
1348
1348
1349 Entering 'help' gives information about the use of the debugger. You
1349 Entering 'help' gives information about the use of the debugger. You
1350 can easily see pdb's full documentation with "import pdb;pdb.help()"
1350 can easily see pdb's full documentation with "import pdb;pdb.help()"
1351 at a prompt.
1351 at a prompt.
1352
1352
1353 -p: run program under the control of the Python profiler module (which
1353 -p: run program under the control of the Python profiler module (which
1354 prints a detailed report of execution times, function calls, etc).
1354 prints a detailed report of execution times, function calls, etc).
1355
1355
1356 You can pass other options after -p which affect the behavior of the
1356 You can pass other options after -p which affect the behavior of the
1357 profiler itself. See the docs for %prun for details.
1357 profiler itself. See the docs for %prun for details.
1358
1358
1359 In this mode, the program's variables do NOT propagate back to the
1359 In this mode, the program's variables do NOT propagate back to the
1360 IPython interactive namespace (because they remain in the namespace
1360 IPython interactive namespace (because they remain in the namespace
1361 where the profiler executes them).
1361 where the profiler executes them).
1362
1362
1363 Internally this triggers a call to %prun, see its documentation for
1363 Internally this triggers a call to %prun, see its documentation for
1364 details on the options available specifically for profiling."""
1364 details on the options available specifically for profiling."""
1365
1365
1366 # get arguments and set sys.argv for program to be run.
1366 # 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',
1367 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1368 mode='list',list_all=1)
1368 mode='list',list_all=1)
1369
1369
1370 try:
1370 try:
1371 filename = get_py_filename(arg_lst[0])
1371 filename = get_py_filename(arg_lst[0])
1372 except IndexError:
1372 except IndexError:
1373 warn('you must provide at least a filename.')
1373 warn('you must provide at least a filename.')
1374 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1374 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1375 return
1375 return
1376 except IOError,msg:
1376 except IOError,msg:
1377 error(msg)
1377 error(msg)
1378 return
1378 return
1379
1379
1380 # Control the response to exit() calls made by the script being run
1380 # Control the response to exit() calls made by the script being run
1381 exit_ignore = opts.has_key('e')
1381 exit_ignore = opts.has_key('e')
1382
1382
1383 # Make sure that the running script gets a proper sys.argv as if it
1383 # Make sure that the running script gets a proper sys.argv as if it
1384 # were run from a system shell.
1384 # were run from a system shell.
1385 save_argv = sys.argv # save it for later restoring
1385 save_argv = sys.argv # save it for later restoring
1386 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1386 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1387
1387
1388 if opts.has_key('i'):
1388 if opts.has_key('i'):
1389 prog_ns = self.shell.user_ns
1389 prog_ns = self.shell.user_ns
1390 __name__save = self.shell.user_ns['__name__']
1390 __name__save = self.shell.user_ns['__name__']
1391 prog_ns['__name__'] = '__main__'
1391 prog_ns['__name__'] = '__main__'
1392 else:
1392 else:
1393 if opts.has_key('n'):
1393 if opts.has_key('n'):
1394 name = os.path.splitext(os.path.basename(filename))[0]
1394 name = os.path.splitext(os.path.basename(filename))[0]
1395 else:
1395 else:
1396 name = '__main__'
1396 name = '__main__'
1397 prog_ns = {'__name__':name}
1397 prog_ns = {'__name__':name}
1398
1398
1399 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1399 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1400 # set the __file__ global in the script's namespace
1400 # set the __file__ global in the script's namespace
1401 prog_ns['__file__'] = filename
1401 prog_ns['__file__'] = filename
1402
1402
1403 # pickle fix. See iplib for an explanation. But we need to make sure
1403 # 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
1404 # that, if we overwrite __main__, we replace it at the end
1405 if prog_ns['__name__'] == '__main__':
1405 if prog_ns['__name__'] == '__main__':
1406 restore_main = sys.modules['__main__']
1406 restore_main = sys.modules['__main__']
1407 else:
1407 else:
1408 restore_main = False
1408 restore_main = False
1409
1409
1410 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1410 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1411
1411
1412 stats = None
1412 stats = None
1413 try:
1413 try:
1414 if opts.has_key('p'):
1414 if opts.has_key('p'):
1415 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1415 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1416 else:
1416 else:
1417 if opts.has_key('d'):
1417 if opts.has_key('d'):
1418 deb = Debugger.Pdb(self.shell.rc.colors)
1418 deb = Debugger.Pdb(self.shell.rc.colors)
1419 # reset Breakpoint state, which is moronically kept
1419 # reset Breakpoint state, which is moronically kept
1420 # in a class
1420 # in a class
1421 bdb.Breakpoint.next = 1
1421 bdb.Breakpoint.next = 1
1422 bdb.Breakpoint.bplist = {}
1422 bdb.Breakpoint.bplist = {}
1423 bdb.Breakpoint.bpbynumber = [None]
1423 bdb.Breakpoint.bpbynumber = [None]
1424 # Set an initial breakpoint to stop execution
1424 # Set an initial breakpoint to stop execution
1425 maxtries = 10
1425 maxtries = 10
1426 bp = int(opts.get('b',[1])[0])
1426 bp = int(opts.get('b',[1])[0])
1427 checkline = deb.checkline(filename,bp)
1427 checkline = deb.checkline(filename,bp)
1428 if not checkline:
1428 if not checkline:
1429 for bp in range(bp+1,bp+maxtries+1):
1429 for bp in range(bp+1,bp+maxtries+1):
1430 if deb.checkline(filename,bp):
1430 if deb.checkline(filename,bp):
1431 break
1431 break
1432 else:
1432 else:
1433 msg = ("\nI failed to find a valid line to set "
1433 msg = ("\nI failed to find a valid line to set "
1434 "a breakpoint\n"
1434 "a breakpoint\n"
1435 "after trying up to line: %s.\n"
1435 "after trying up to line: %s.\n"
1436 "Please set a valid breakpoint manually "
1436 "Please set a valid breakpoint manually "
1437 "with the -b option." % bp)
1437 "with the -b option." % bp)
1438 error(msg)
1438 error(msg)
1439 return
1439 return
1440 # if we find a good linenumber, set the breakpoint
1440 # if we find a good linenumber, set the breakpoint
1441 deb.do_break('%s:%s' % (filename,bp))
1441 deb.do_break('%s:%s' % (filename,bp))
1442 # Start file run
1442 # Start file run
1443 print "NOTE: Enter 'c' at the",
1443 print "NOTE: Enter 'c' at the",
1444 print "ipdb> prompt to start your script."
1444 print "ipdb> prompt to start your script."
1445 try:
1445 try:
1446 deb.run('execfile("%s")' % filename,prog_ns)
1446 deb.run('execfile("%s")' % filename,prog_ns)
1447 except:
1447 except:
1448 etype, value, tb = sys.exc_info()
1448 etype, value, tb = sys.exc_info()
1449 # Skip three frames in the traceback: the %run one,
1449 # Skip three frames in the traceback: the %run one,
1450 # one inside bdb.py, and the command-line typed by the
1450 # one inside bdb.py, and the command-line typed by the
1451 # user (run by exec in pdb itself).
1451 # user (run by exec in pdb itself).
1452 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1452 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1453 else:
1453 else:
1454 if runner is None:
1454 if runner is None:
1455 runner = self.shell.safe_execfile
1455 runner = self.shell.safe_execfile
1456 if opts.has_key('t'):
1456 if opts.has_key('t'):
1457 try:
1457 try:
1458 nruns = int(opts['N'][0])
1458 nruns = int(opts['N'][0])
1459 if nruns < 1:
1459 if nruns < 1:
1460 error('Number of runs must be >=1')
1460 error('Number of runs must be >=1')
1461 return
1461 return
1462 except (KeyError):
1462 except (KeyError):
1463 nruns = 1
1463 nruns = 1
1464 if nruns == 1:
1464 if nruns == 1:
1465 t0 = clock2()
1465 t0 = clock2()
1466 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1466 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1467 t1 = clock2()
1467 t1 = clock2()
1468 t_usr = t1[0]-t0[0]
1468 t_usr = t1[0]-t0[0]
1469 t_sys = t1[1]-t1[1]
1469 t_sys = t1[1]-t1[1]
1470 print "\nIPython CPU timings (estimated):"
1470 print "\nIPython CPU timings (estimated):"
1471 print " User : %10s s." % t_usr
1471 print " User : %10s s." % t_usr
1472 print " System: %10s s." % t_sys
1472 print " System: %10s s." % t_sys
1473 else:
1473 else:
1474 runs = range(nruns)
1474 runs = range(nruns)
1475 t0 = clock2()
1475 t0 = clock2()
1476 for nr in runs:
1476 for nr in runs:
1477 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1477 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1478 t1 = clock2()
1478 t1 = clock2()
1479 t_usr = t1[0]-t0[0]
1479 t_usr = t1[0]-t0[0]
1480 t_sys = t1[1]-t1[1]
1480 t_sys = t1[1]-t1[1]
1481 print "\nIPython CPU timings (estimated):"
1481 print "\nIPython CPU timings (estimated):"
1482 print "Total runs performed:",nruns
1482 print "Total runs performed:",nruns
1483 print " Times : %10s %10s" % ('Total','Per run')
1483 print " Times : %10s %10s" % ('Total','Per run')
1484 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1484 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1485 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1485 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1486
1486
1487 else:
1487 else:
1488 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1488 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1489 if opts.has_key('i'):
1489 if opts.has_key('i'):
1490 self.shell.user_ns['__name__'] = __name__save
1490 self.shell.user_ns['__name__'] = __name__save
1491 else:
1491 else:
1492 # update IPython interactive namespace
1492 # update IPython interactive namespace
1493 del prog_ns['__name__']
1493 del prog_ns['__name__']
1494 self.shell.user_ns.update(prog_ns)
1494 self.shell.user_ns.update(prog_ns)
1495 finally:
1495 finally:
1496 sys.argv = save_argv
1496 sys.argv = save_argv
1497 if restore_main:
1497 if restore_main:
1498 sys.modules['__main__'] = restore_main
1498 sys.modules['__main__'] = restore_main
1499 return stats
1499 return stats
1500
1500
1501 def magic_runlog(self, parameter_s =''):
1501 def magic_runlog(self, parameter_s =''):
1502 """Run files as logs.
1502 """Run files as logs.
1503
1503
1504 Usage:\\
1504 Usage:\\
1505 %runlog file1 file2 ...
1505 %runlog file1 file2 ...
1506
1506
1507 Run the named files (treating them as log files) in sequence inside
1507 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
1508 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
1509 %run because each line is executed in a try/except block, but it
1510 allows running files with syntax errors in them.
1510 allows running files with syntax errors in them.
1511
1511
1512 Normally IPython will guess when a file is one of its own logfiles, so
1512 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
1513 you can typically use %run even for logs. This shorthand allows you to
1514 force any file to be treated as a log file."""
1514 force any file to be treated as a log file."""
1515
1515
1516 for f in parameter_s.split():
1516 for f in parameter_s.split():
1517 self.shell.safe_execfile(f,self.shell.user_ns,
1517 self.shell.safe_execfile(f,self.shell.user_ns,
1518 self.shell.user_ns,islog=1)
1518 self.shell.user_ns,islog=1)
1519
1519
1520 def magic_time(self,parameter_s = ''):
1520 def magic_time(self,parameter_s = ''):
1521 """Time execution of a Python statement or expression.
1521 """Time execution of a Python statement or expression.
1522
1522
1523 The CPU and wall clock times are printed, and the value of the
1523 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
1524 expression (if any) is returned. Note that under Win32, system time
1525 is always reported as 0, since it can not be measured.
1525 is always reported as 0, since it can not be measured.
1526
1526
1527 This function provides very basic timing functionality. In Python
1527 This function provides very basic timing functionality. In Python
1528 2.3, the timeit module offers more control and sophistication, but for
1528 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
1529 now IPython supports Python 2.2, so we can not rely on timeit being
1530 present.
1530 present.
1531
1531
1532 Some examples:
1532 Some examples:
1533
1533
1534 In [1]: time 2**128
1534 In [1]: time 2**128
1535 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1535 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1536 Wall time: 0.00
1536 Wall time: 0.00
1537 Out[1]: 340282366920938463463374607431768211456L
1537 Out[1]: 340282366920938463463374607431768211456L
1538
1538
1539 In [2]: n = 1000000
1539 In [2]: n = 1000000
1540
1540
1541 In [3]: time sum(range(n))
1541 In [3]: time sum(range(n))
1542 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1542 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1543 Wall time: 1.37
1543 Wall time: 1.37
1544 Out[3]: 499999500000L
1544 Out[3]: 499999500000L
1545
1545
1546 In [4]: time print 'hello world'
1546 In [4]: time print 'hello world'
1547 hello world
1547 hello world
1548 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1548 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1549 Wall time: 0.00
1549 Wall time: 0.00
1550 """
1550 """
1551
1551
1552 # fail immediately if the given expression can't be compiled
1552 # fail immediately if the given expression can't be compiled
1553 try:
1553 try:
1554 mode = 'eval'
1554 mode = 'eval'
1555 code = compile(parameter_s,'<timed eval>',mode)
1555 code = compile(parameter_s,'<timed eval>',mode)
1556 except SyntaxError:
1556 except SyntaxError:
1557 mode = 'exec'
1557 mode = 'exec'
1558 code = compile(parameter_s,'<timed exec>',mode)
1558 code = compile(parameter_s,'<timed exec>',mode)
1559 # skew measurement as little as possible
1559 # skew measurement as little as possible
1560 glob = self.shell.user_ns
1560 glob = self.shell.user_ns
1561 clk = clock2
1561 clk = clock2
1562 wtime = time.time
1562 wtime = time.time
1563 # time execution
1563 # time execution
1564 wall_st = wtime()
1564 wall_st = wtime()
1565 if mode=='eval':
1565 if mode=='eval':
1566 st = clk()
1566 st = clk()
1567 out = eval(code,glob)
1567 out = eval(code,glob)
1568 end = clk()
1568 end = clk()
1569 else:
1569 else:
1570 st = clk()
1570 st = clk()
1571 exec code in glob
1571 exec code in glob
1572 end = clk()
1572 end = clk()
1573 out = None
1573 out = None
1574 wall_end = wtime()
1574 wall_end = wtime()
1575 # Compute actual times and report
1575 # Compute actual times and report
1576 wall_time = wall_end-wall_st
1576 wall_time = wall_end-wall_st
1577 cpu_user = end[0]-st[0]
1577 cpu_user = end[0]-st[0]
1578 cpu_sys = end[1]-st[1]
1578 cpu_sys = end[1]-st[1]
1579 cpu_tot = cpu_user+cpu_sys
1579 cpu_tot = cpu_user+cpu_sys
1580 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1580 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1581 (cpu_user,cpu_sys,cpu_tot)
1581 (cpu_user,cpu_sys,cpu_tot)
1582 print "Wall time: %.2f" % wall_time
1582 print "Wall time: %.2f" % wall_time
1583 return out
1583 return out
1584
1584
1585 def magic_macro(self,parameter_s = ''):
1585 def magic_macro(self,parameter_s = ''):
1586 """Define a set of input lines as a macro for future re-execution.
1586 """Define a set of input lines as a macro for future re-execution.
1587
1587
1588 Usage:\\
1588 Usage:\\
1589 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1589 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1590
1590
1591 This will define a global variable called `name` which is a string
1591 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
1592 made of joining the slices and lines you specify (n1,n2,... numbers
1593 above) from your input history into a single string. This variable
1593 above) from your input history into a single string. This variable
1594 acts like an automatic function which re-executes those lines as if
1594 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
1595 you had typed them. You just type 'name' at the prompt and the code
1596 executes.
1596 executes.
1597
1597
1598 The notation for indicating number ranges is: n1-n2 means 'use line
1598 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
1599 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1600 using the lines numbered 5,6 and 7.
1600 using the lines numbered 5,6 and 7.
1601
1601
1602 Note: as a 'hidden' feature, you can also use traditional python slice
1602 Note: as a 'hidden' feature, you can also use traditional python slice
1603 notation, where N:M means numbers N through M-1.
1603 notation, where N:M means numbers N through M-1.
1604
1604
1605 For example, if your history contains (%hist prints it):
1605 For example, if your history contains (%hist prints it):
1606
1606
1607 44: x=1\\
1607 44: x=1\\
1608 45: y=3\\
1608 45: y=3\\
1609 46: z=x+y\\
1609 46: z=x+y\\
1610 47: print x\\
1610 47: print x\\
1611 48: a=5\\
1611 48: a=5\\
1612 49: print 'x',x,'y',y\\
1612 49: print 'x',x,'y',y\\
1613
1613
1614 you can create a macro with lines 44 through 47 (included) and line 49
1614 you can create a macro with lines 44 through 47 (included) and line 49
1615 called my_macro with:
1615 called my_macro with:
1616
1616
1617 In [51]: %macro my_macro 44-47 49
1617 In [51]: %macro my_macro 44-47 49
1618
1618
1619 Now, typing `my_macro` (without quotes) will re-execute all this code
1619 Now, typing `my_macro` (without quotes) will re-execute all this code
1620 in one pass.
1620 in one pass.
1621
1621
1622 You don't need to give the line-numbers in order, and any given line
1622 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
1623 number can appear multiple times. You can assemble macros with any
1624 lines from your input history in any order.
1624 lines from your input history in any order.
1625
1625
1626 The macro is a simple object which holds its value in an attribute,
1626 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
1627 but IPython's display system checks for macros and executes them as
1628 code instead of printing them when you type their name.
1628 code instead of printing them when you type their name.
1629
1629
1630 You can view a macro's contents by explicitly printing it with:
1630 You can view a macro's contents by explicitly printing it with:
1631
1631
1632 'print macro_name'.
1632 'print macro_name'.
1633
1633
1634 For one-off cases which DON'T contain magic function calls in them you
1634 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
1635 can obtain similar results by explicitly executing slices from your
1636 input history with:
1636 input history with:
1637
1637
1638 In [60]: exec In[44:48]+In[49]"""
1638 In [60]: exec In[44:48]+In[49]"""
1639
1639
1640 args = parameter_s.split()
1640 args = parameter_s.split()
1641 name,ranges = args[0], args[1:]
1641 name,ranges = args[0], args[1:]
1642 #print 'rng',ranges # dbg
1642 #print 'rng',ranges # dbg
1643 lines = self.extract_input_slices(ranges)
1643 lines = self.extract_input_slices(ranges)
1644 macro = Macro(lines)
1644 macro = Macro(lines)
1645 self.shell.user_ns.update({name:macro})
1645 self.shell.user_ns.update({name:macro})
1646 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1646 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1647 print 'Macro contents:'
1647 print 'Macro contents:'
1648 print macro,
1648 print macro,
1649
1649
1650 def magic_save(self,parameter_s = ''):
1650 def magic_save(self,parameter_s = ''):
1651 """Save a set of lines to a given filename.
1651 """Save a set of lines to a given filename.
1652
1652
1653 Usage:\\
1653 Usage:\\
1654 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1654 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1655
1655
1656 This function uses the same syntax as %macro for line extraction, but
1656 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
1657 instead of creating a macro it saves the resulting string to the
1658 filename you specify.
1658 filename you specify.
1659
1659
1660 It adds a '.py' extension to the file if you don't do so yourself, and
1660 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."""
1661 it asks for confirmation before overwriting existing files."""
1662
1662
1663 args = parameter_s.split()
1663 args = parameter_s.split()
1664 fname,ranges = args[0], args[1:]
1664 fname,ranges = args[0], args[1:]
1665 if not fname.endswith('.py'):
1665 if not fname.endswith('.py'):
1666 fname += '.py'
1666 fname += '.py'
1667 if os.path.isfile(fname):
1667 if os.path.isfile(fname):
1668 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1668 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1669 if ans.lower() not in ['y','yes']:
1669 if ans.lower() not in ['y','yes']:
1670 print 'Operation cancelled.'
1670 print 'Operation cancelled.'
1671 return
1671 return
1672 cmds = ''.join(self.extract_input_slices(ranges))
1672 cmds = ''.join(self.extract_input_slices(ranges))
1673 f = file(fname,'w')
1673 f = file(fname,'w')
1674 f.write(cmds)
1674 f.write(cmds)
1675 f.close()
1675 f.close()
1676 print 'The following commands were written to file `%s`:' % fname
1676 print 'The following commands were written to file `%s`:' % fname
1677 print cmds
1677 print cmds
1678
1678
1679 def _edit_macro(self,mname,macro):
1679 def _edit_macro(self,mname,macro):
1680 """open an editor with the macro data in a file"""
1680 """open an editor with the macro data in a file"""
1681 filename = self.shell.mktempfile(macro.value)
1681 filename = self.shell.mktempfile(macro.value)
1682 self.shell.hooks.editor(filename)
1682 self.shell.hooks.editor(filename)
1683
1683
1684 # and make a new macro object, to replace the old one
1684 # and make a new macro object, to replace the old one
1685 mfile = open(filename)
1685 mfile = open(filename)
1686 mvalue = mfile.read()
1686 mvalue = mfile.read()
1687 mfile.close()
1687 mfile.close()
1688 self.shell.user_ns[mname] = Macro(mvalue)
1688 self.shell.user_ns[mname] = Macro(mvalue)
1689
1689
1690 def magic_ed(self,parameter_s=''):
1690 def magic_ed(self,parameter_s=''):
1691 """Alias to %edit."""
1691 """Alias to %edit."""
1692 return self.magic_edit(parameter_s)
1692 return self.magic_edit(parameter_s)
1693
1693
1694 def magic_edit(self,parameter_s='',last_call=['','']):
1694 def magic_edit(self,parameter_s='',last_call=['','']):
1695 """Bring up an editor and execute the resulting code.
1695 """Bring up an editor and execute the resulting code.
1696
1696
1697 Usage:
1697 Usage:
1698 %edit [options] [args]
1698 %edit [options] [args]
1699
1699
1700 %edit runs IPython's editor hook. The default version of this hook is
1700 %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
1701 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
1702 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
1703 vi under Linux/Unix and to notepad under Windows. See the end of this
1704 docstring for how to change the editor hook.
1704 docstring for how to change the editor hook.
1705
1705
1706 You can also set the value of this editor via the command line option
1706 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
1707 '-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
1708 specifically for IPython an editor different from your typical default
1709 (and for Windows users who typically don't set environment variables).
1709 (and for Windows users who typically don't set environment variables).
1710
1710
1711 This command allows you to conveniently edit multi-line code right in
1711 This command allows you to conveniently edit multi-line code right in
1712 your IPython session.
1712 your IPython session.
1713
1713
1714 If called without arguments, %edit opens up an empty editor with a
1714 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
1715 temporary file and will execute the contents of this file when you
1716 close it (don't forget to save it!).
1716 close it (don't forget to save it!).
1717
1717
1718
1718
1719 Options:
1719 Options:
1720
1720
1721 -p: this will call the editor with the same data as the previous time
1721 -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
1722 it was used, regardless of how long ago (in your current session) it
1723 was.
1723 was.
1724
1724
1725 -x: do not execute the edited code immediately upon exit. This is
1725 -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
1726 mainly useful if you are editing programs which need to be called with
1727 command line arguments, which you can then do using %run.
1727 command line arguments, which you can then do using %run.
1728
1728
1729
1729
1730 Arguments:
1730 Arguments:
1731
1731
1732 If arguments are given, the following possibilites exist:
1732 If arguments are given, the following possibilites exist:
1733
1733
1734 - The arguments are numbers or pairs of colon-separated numbers (like
1734 - 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
1735 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.
1736 loaded into the editor. The syntax is the same of the %macro command.
1737
1737
1738 - If the argument doesn't start with a number, it is evaluated as a
1738 - 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
1739 variable and its contents loaded into the editor. You can thus edit
1740 any string which contains python code (including the result of
1740 any string which contains python code (including the result of
1741 previous edits).
1741 previous edits).
1742
1742
1743 - If the argument is the name of an object (other than a string),
1743 - 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
1744 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`
1745 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,
1746 to load an editor exactly at the point where 'function' is defined,
1747 edit it and have the file be executed automatically.
1747 edit it and have the file be executed automatically.
1748
1748
1749 If the object is a macro (see %macro for details), this opens up your
1749 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.
1750 specified editor with a temporary file containing the macro's data.
1751 Upon exit, the macro is reloaded with the contents of the file.
1751 Upon exit, the macro is reloaded with the contents of the file.
1752
1752
1753 Note: opening at an exact line is only supported under Unix, and some
1753 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
1754 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1755 '+NUMBER' parameter necessary for this feature. Good editors like
1755 '+NUMBER' parameter necessary for this feature. Good editors like
1756 (X)Emacs, vi, jed, pico and joe all do.
1756 (X)Emacs, vi, jed, pico and joe all do.
1757
1757
1758 - If the argument is not found as a variable, IPython will look for a
1758 - 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
1759 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,
1760 editor. It will execute its contents with execfile() when you exit,
1761 loading any code in the file into your interactive namespace.
1761 loading any code in the file into your interactive namespace.
1762
1762
1763 After executing your code, %edit will return as output the code you
1763 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
1764 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,
1765 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
1766 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1767 the output.
1767 the output.
1768
1768
1769 Note that %edit is also available through the alias %ed.
1769 Note that %edit is also available through the alias %ed.
1770
1770
1771 This is an example of creating a simple function inside the editor and
1771 This is an example of creating a simple function inside the editor and
1772 then modifying it. First, start up the editor:
1772 then modifying it. First, start up the editor:
1773
1773
1774 In [1]: ed\\
1774 In [1]: ed\\
1775 Editing... done. Executing edited code...\\
1775 Editing... done. Executing edited code...\\
1776 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1776 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1777
1777
1778 We can then call the function foo():
1778 We can then call the function foo():
1779
1779
1780 In [2]: foo()\\
1780 In [2]: foo()\\
1781 foo() was defined in an editing session
1781 foo() was defined in an editing session
1782
1782
1783 Now we edit foo. IPython automatically loads the editor with the
1783 Now we edit foo. IPython automatically loads the editor with the
1784 (temporary) file where foo() was previously defined:
1784 (temporary) file where foo() was previously defined:
1785
1785
1786 In [3]: ed foo\\
1786 In [3]: ed foo\\
1787 Editing... done. Executing edited code...
1787 Editing... done. Executing edited code...
1788
1788
1789 And if we call foo() again we get the modified version:
1789 And if we call foo() again we get the modified version:
1790
1790
1791 In [4]: foo()\\
1791 In [4]: foo()\\
1792 foo() has now been changed!
1792 foo() has now been changed!
1793
1793
1794 Here is an example of how to edit a code snippet successive
1794 Here is an example of how to edit a code snippet successive
1795 times. First we call the editor:
1795 times. First we call the editor:
1796
1796
1797 In [8]: ed\\
1797 In [8]: ed\\
1798 Editing... done. Executing edited code...\\
1798 Editing... done. Executing edited code...\\
1799 hello\\
1799 hello\\
1800 Out[8]: "print 'hello'\\n"
1800 Out[8]: "print 'hello'\\n"
1801
1801
1802 Now we call it again with the previous output (stored in _):
1802 Now we call it again with the previous output (stored in _):
1803
1803
1804 In [9]: ed _\\
1804 In [9]: ed _\\
1805 Editing... done. Executing edited code...\\
1805 Editing... done. Executing edited code...\\
1806 hello world\\
1806 hello world\\
1807 Out[9]: "print 'hello world'\\n"
1807 Out[9]: "print 'hello world'\\n"
1808
1808
1809 Now we call it with the output #8 (stored in _8, also as Out[8]):
1809 Now we call it with the output #8 (stored in _8, also as Out[8]):
1810
1810
1811 In [10]: ed _8\\
1811 In [10]: ed _8\\
1812 Editing... done. Executing edited code...\\
1812 Editing... done. Executing edited code...\\
1813 hello again\\
1813 hello again\\
1814 Out[10]: "print 'hello again'\\n"
1814 Out[10]: "print 'hello again'\\n"
1815
1815
1816
1816
1817 Changing the default editor hook:
1817 Changing the default editor hook:
1818
1818
1819 If you wish to write your own editor hook, you can put it in a
1819 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
1820 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
1821 is defined in the IPython.hooks module, and you can use that as a
1822 starting example for further modifications. That file also has
1822 starting example for further modifications. That file also has
1823 general instructions on how to set a new hook for use once you've
1823 general instructions on how to set a new hook for use once you've
1824 defined it."""
1824 defined it."""
1825
1825
1826 # FIXME: This function has become a convoluted mess. It needs a
1826 # FIXME: This function has become a convoluted mess. It needs a
1827 # ground-up rewrite with clean, simple logic.
1827 # ground-up rewrite with clean, simple logic.
1828
1828
1829 def make_filename(arg):
1829 def make_filename(arg):
1830 "Make a filename from the given args"
1830 "Make a filename from the given args"
1831 try:
1831 try:
1832 filename = get_py_filename(arg)
1832 filename = get_py_filename(arg)
1833 except IOError:
1833 except IOError:
1834 if args.endswith('.py'):
1834 if args.endswith('.py'):
1835 filename = arg
1835 filename = arg
1836 else:
1836 else:
1837 filename = None
1837 filename = None
1838 return filename
1838 return filename
1839
1839
1840 # custom exceptions
1840 # custom exceptions
1841 class DataIsObject(Exception): pass
1841 class DataIsObject(Exception): pass
1842
1842
1843 opts,args = self.parse_options(parameter_s,'px')
1843 opts,args = self.parse_options(parameter_s,'px')
1844
1844
1845 # Default line number value
1845 # Default line number value
1846 lineno = None
1846 lineno = None
1847 if opts.has_key('p'):
1847 if opts.has_key('p'):
1848 args = '_%s' % last_call[0]
1848 args = '_%s' % last_call[0]
1849 if not self.shell.user_ns.has_key(args):
1849 if not self.shell.user_ns.has_key(args):
1850 args = last_call[1]
1850 args = last_call[1]
1851
1851
1852 # use last_call to remember the state of the previous call, but don't
1852 # use last_call to remember the state of the previous call, but don't
1853 # let it be clobbered by successive '-p' calls.
1853 # let it be clobbered by successive '-p' calls.
1854 try:
1854 try:
1855 last_call[0] = self.shell.outputcache.prompt_count
1855 last_call[0] = self.shell.outputcache.prompt_count
1856 if not opts.has_key('p'):
1856 if not opts.has_key('p'):
1857 last_call[1] = parameter_s
1857 last_call[1] = parameter_s
1858 except:
1858 except:
1859 pass
1859 pass
1860
1860
1861 # by default this is done with temp files, except when the given
1861 # by default this is done with temp files, except when the given
1862 # arg is a filename
1862 # arg is a filename
1863 use_temp = 1
1863 use_temp = 1
1864
1864
1865 if re.match(r'\d',args):
1865 if re.match(r'\d',args):
1866 # Mode where user specifies ranges of lines, like in %macro.
1866 # Mode where user specifies ranges of lines, like in %macro.
1867 # This means that you can't edit files whose names begin with
1867 # This means that you can't edit files whose names begin with
1868 # numbers this way. Tough.
1868 # numbers this way. Tough.
1869 ranges = args.split()
1869 ranges = args.split()
1870 data = ''.join(self.extract_input_slices(ranges))
1870 data = ''.join(self.extract_input_slices(ranges))
1871 elif args.endswith('.py'):
1871 elif args.endswith('.py'):
1872 filename = make_filename(args)
1872 filename = make_filename(args)
1873 data = ''
1873 data = ''
1874 use_temp = 0
1874 use_temp = 0
1875 elif args:
1875 elif args:
1876 try:
1876 try:
1877 # Load the parameter given as a variable. If not a string,
1877 # Load the parameter given as a variable. If not a string,
1878 # process it as an object instead (below)
1878 # process it as an object instead (below)
1879
1879
1880 #print '*** args',args,'type',type(args) # dbg
1880 #print '*** args',args,'type',type(args) # dbg
1881 data = eval(args,self.shell.user_ns)
1881 data = eval(args,self.shell.user_ns)
1882 if not type(data) in StringTypes:
1882 if not type(data) in StringTypes:
1883 raise DataIsObject
1883 raise DataIsObject
1884
1884
1885 except (NameError,SyntaxError):
1885 except (NameError,SyntaxError):
1886 # given argument is not a variable, try as a filename
1886 # given argument is not a variable, try as a filename
1887 filename = make_filename(args)
1887 filename = make_filename(args)
1888 if filename is None:
1888 if filename is None:
1889 warn("Argument given (%s) can't be found as a variable "
1889 warn("Argument given (%s) can't be found as a variable "
1890 "or as a filename." % args)
1890 "or as a filename." % args)
1891 return
1891 return
1892
1892
1893 data = ''
1893 data = ''
1894 use_temp = 0
1894 use_temp = 0
1895 except DataIsObject:
1895 except DataIsObject:
1896
1896
1897 # macros have a special edit function
1897 # macros have a special edit function
1898 if isinstance(data,Macro):
1898 if isinstance(data,Macro):
1899 self._edit_macro(args,data)
1899 self._edit_macro(args,data)
1900 return
1900 return
1901
1901
1902 # For objects, try to edit the file where they are defined
1902 # For objects, try to edit the file where they are defined
1903 try:
1903 try:
1904 filename = inspect.getabsfile(data)
1904 filename = inspect.getabsfile(data)
1905 datafile = 1
1905 datafile = 1
1906 except TypeError:
1906 except TypeError:
1907 filename = make_filename(args)
1907 filename = make_filename(args)
1908 datafile = 1
1908 datafile = 1
1909 warn('Could not find file where `%s` is defined.\n'
1909 warn('Could not find file where `%s` is defined.\n'
1910 'Opening a file named `%s`' % (args,filename))
1910 'Opening a file named `%s`' % (args,filename))
1911 # Now, make sure we can actually read the source (if it was in
1911 # Now, make sure we can actually read the source (if it was in
1912 # a temp file it's gone by now).
1912 # a temp file it's gone by now).
1913 if datafile:
1913 if datafile:
1914 try:
1914 try:
1915 lineno = inspect.getsourcelines(data)[1]
1915 lineno = inspect.getsourcelines(data)[1]
1916 except IOError:
1916 except IOError:
1917 filename = make_filename(args)
1917 filename = make_filename(args)
1918 if filename is None:
1918 if filename is None:
1919 warn('The file `%s` where `%s` was defined cannot '
1919 warn('The file `%s` where `%s` was defined cannot '
1920 'be read.' % (filename,data))
1920 'be read.' % (filename,data))
1921 return
1921 return
1922 use_temp = 0
1922 use_temp = 0
1923 else:
1923 else:
1924 data = ''
1924 data = ''
1925
1925
1926 if use_temp:
1926 if use_temp:
1927 filename = self.shell.mktempfile(data)
1927 filename = self.shell.mktempfile(data)
1928 print 'IPython will make a temporary file named:',filename
1928 print 'IPython will make a temporary file named:',filename
1929
1929
1930 # do actual editing here
1930 # do actual editing here
1931 print 'Editing...',
1931 print 'Editing...',
1932 sys.stdout.flush()
1932 sys.stdout.flush()
1933 self.shell.hooks.editor(filename,lineno)
1933 self.shell.hooks.editor(filename,lineno)
1934 if opts.has_key('x'): # -x prevents actual execution
1934 if opts.has_key('x'): # -x prevents actual execution
1935 print
1935 print
1936 else:
1936 else:
1937 print 'done. Executing edited code...'
1937 print 'done. Executing edited code...'
1938 try:
1939 self.shell.safe_execfile(filename,self.shell.user_ns)
1938 self.shell.safe_execfile(filename,self.shell.user_ns)
1939 if use_temp:
1940 try:
1941 return open(filename).read()
1940 except IOError,msg:
1942 except IOError,msg:
1941 if msg.filename == filename:
1943 if msg.filename == filename:
1942 warn('File not found. Did you forget to save?')
1944 warn('File not found. Did you forget to save?')
1943 return
1945 return
1944 else:
1946 else:
1945 self.shell.showtraceback()
1947 self.shell.showtraceback()
1946 except:
1947 self.shell.showtraceback()
1948 if use_temp:
1949 return open(filename).read()
1950
1948
1951 def magic_xmode(self,parameter_s = ''):
1949 def magic_xmode(self,parameter_s = ''):
1952 """Switch modes for the exception handlers.
1950 """Switch modes for the exception handlers.
1953
1951
1954 Valid modes: Plain, Context and Verbose.
1952 Valid modes: Plain, Context and Verbose.
1955
1953
1956 If called without arguments, acts as a toggle."""
1954 If called without arguments, acts as a toggle."""
1957
1955
1958 def xmode_switch_err(name):
1956 def xmode_switch_err(name):
1959 warn('Error changing %s exception modes.\n%s' %
1957 warn('Error changing %s exception modes.\n%s' %
1960 (name,sys.exc_info()[1]))
1958 (name,sys.exc_info()[1]))
1961
1959
1962 shell = self.shell
1960 shell = self.shell
1963 new_mode = parameter_s.strip().capitalize()
1961 new_mode = parameter_s.strip().capitalize()
1964 try:
1962 try:
1965 shell.InteractiveTB.set_mode(mode=new_mode)
1963 shell.InteractiveTB.set_mode(mode=new_mode)
1966 print 'Exception reporting mode:',shell.InteractiveTB.mode
1964 print 'Exception reporting mode:',shell.InteractiveTB.mode
1967 except:
1965 except:
1968 xmode_switch_err('user')
1966 xmode_switch_err('user')
1969
1967
1970 # threaded shells use a special handler in sys.excepthook
1968 # threaded shells use a special handler in sys.excepthook
1971 if shell.isthreaded:
1969 if shell.isthreaded:
1972 try:
1970 try:
1973 shell.sys_excepthook.set_mode(mode=new_mode)
1971 shell.sys_excepthook.set_mode(mode=new_mode)
1974 except:
1972 except:
1975 xmode_switch_err('threaded')
1973 xmode_switch_err('threaded')
1976
1974
1977 def magic_colors(self,parameter_s = ''):
1975 def magic_colors(self,parameter_s = ''):
1978 """Switch color scheme for prompts, info system and exception handlers.
1976 """Switch color scheme for prompts, info system and exception handlers.
1979
1977
1980 Currently implemented schemes: NoColor, Linux, LightBG.
1978 Currently implemented schemes: NoColor, Linux, LightBG.
1981
1979
1982 Color scheme names are not case-sensitive."""
1980 Color scheme names are not case-sensitive."""
1983
1981
1984 def color_switch_err(name):
1982 def color_switch_err(name):
1985 warn('Error changing %s color schemes.\n%s' %
1983 warn('Error changing %s color schemes.\n%s' %
1986 (name,sys.exc_info()[1]))
1984 (name,sys.exc_info()[1]))
1987
1985
1988
1986
1989 new_scheme = parameter_s.strip()
1987 new_scheme = parameter_s.strip()
1990 if not new_scheme:
1988 if not new_scheme:
1991 print 'You must specify a color scheme.'
1989 print 'You must specify a color scheme.'
1992 return
1990 return
1993 # Under Windows, check for Gary Bishop's readline, which is necessary
1991 # Under Windows, check for Gary Bishop's readline, which is necessary
1994 # for ANSI coloring
1992 # for ANSI coloring
1995 if os.name in ['nt','dos']:
1993 if os.name in ['nt','dos']:
1996 try:
1994 try:
1997 import readline
1995 import readline
1998 except ImportError:
1996 except ImportError:
1999 has_readline = 0
1997 has_readline = 0
2000 else:
1998 else:
2001 try:
1999 try:
2002 readline.GetOutputFile()
2000 readline.GetOutputFile()
2003 except AttributeError:
2001 except AttributeError:
2004 has_readline = 0
2002 has_readline = 0
2005 else:
2003 else:
2006 has_readline = 1
2004 has_readline = 1
2007 if not has_readline:
2005 if not has_readline:
2008 msg = """\
2006 msg = """\
2009 Proper color support under MS Windows requires Gary Bishop's readline library.
2007 Proper color support under MS Windows requires Gary Bishop's readline library.
2010 You can find it at:
2008 You can find it at:
2011 http://sourceforge.net/projects/uncpythontools
2009 http://sourceforge.net/projects/uncpythontools
2012 Gary's readline needs the ctypes module, from:
2010 Gary's readline needs the ctypes module, from:
2013 http://starship.python.net/crew/theller/ctypes
2011 http://starship.python.net/crew/theller/ctypes
2014
2012
2015 Defaulting color scheme to 'NoColor'"""
2013 Defaulting color scheme to 'NoColor'"""
2016 new_scheme = 'NoColor'
2014 new_scheme = 'NoColor'
2017 warn(msg)
2015 warn(msg)
2018 # local shortcut
2016 # local shortcut
2019 shell = self.shell
2017 shell = self.shell
2020
2018
2021 # Set prompt colors
2019 # Set prompt colors
2022 try:
2020 try:
2023 shell.outputcache.set_colors(new_scheme)
2021 shell.outputcache.set_colors(new_scheme)
2024 except:
2022 except:
2025 color_switch_err('prompt')
2023 color_switch_err('prompt')
2026 else:
2024 else:
2027 shell.rc.colors = \
2025 shell.rc.colors = \
2028 shell.outputcache.color_table.active_scheme_name
2026 shell.outputcache.color_table.active_scheme_name
2029 # Set exception colors
2027 # Set exception colors
2030 try:
2028 try:
2031 shell.InteractiveTB.set_colors(scheme = new_scheme)
2029 shell.InteractiveTB.set_colors(scheme = new_scheme)
2032 shell.SyntaxTB.set_colors(scheme = new_scheme)
2030 shell.SyntaxTB.set_colors(scheme = new_scheme)
2033 except:
2031 except:
2034 color_switch_err('exception')
2032 color_switch_err('exception')
2035
2033
2036 # threaded shells use a verbose traceback in sys.excepthook
2034 # threaded shells use a verbose traceback in sys.excepthook
2037 if shell.isthreaded:
2035 if shell.isthreaded:
2038 try:
2036 try:
2039 shell.sys_excepthook.set_colors(scheme=new_scheme)
2037 shell.sys_excepthook.set_colors(scheme=new_scheme)
2040 except:
2038 except:
2041 color_switch_err('system exception handler')
2039 color_switch_err('system exception handler')
2042
2040
2043 # Set info (for 'object?') colors
2041 # Set info (for 'object?') colors
2044 if shell.rc.color_info:
2042 if shell.rc.color_info:
2045 try:
2043 try:
2046 shell.inspector.set_active_scheme(new_scheme)
2044 shell.inspector.set_active_scheme(new_scheme)
2047 except:
2045 except:
2048 color_switch_err('object inspector')
2046 color_switch_err('object inspector')
2049 else:
2047 else:
2050 shell.inspector.set_active_scheme('NoColor')
2048 shell.inspector.set_active_scheme('NoColor')
2051
2049
2052 def magic_color_info(self,parameter_s = ''):
2050 def magic_color_info(self,parameter_s = ''):
2053 """Toggle color_info.
2051 """Toggle color_info.
2054
2052
2055 The color_info configuration parameter controls whether colors are
2053 The color_info configuration parameter controls whether colors are
2056 used for displaying object details (by things like %psource, %pfile or
2054 used for displaying object details (by things like %psource, %pfile or
2057 the '?' system). This function toggles this value with each call.
2055 the '?' system). This function toggles this value with each call.
2058
2056
2059 Note that unless you have a fairly recent pager (less works better
2057 Note that unless you have a fairly recent pager (less works better
2060 than more) in your system, using colored object information displays
2058 than more) in your system, using colored object information displays
2061 will not work properly. Test it and see."""
2059 will not work properly. Test it and see."""
2062
2060
2063 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2061 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2064 self.magic_colors(self.shell.rc.colors)
2062 self.magic_colors(self.shell.rc.colors)
2065 print 'Object introspection functions have now coloring:',
2063 print 'Object introspection functions have now coloring:',
2066 print ['OFF','ON'][self.shell.rc.color_info]
2064 print ['OFF','ON'][self.shell.rc.color_info]
2067
2065
2068 def magic_Pprint(self, parameter_s=''):
2066 def magic_Pprint(self, parameter_s=''):
2069 """Toggle pretty printing on/off."""
2067 """Toggle pretty printing on/off."""
2070
2068
2071 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2069 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2072 print 'Pretty printing has been turned', \
2070 print 'Pretty printing has been turned', \
2073 ['OFF','ON'][self.shell.outputcache.Pprint]
2071 ['OFF','ON'][self.shell.outputcache.Pprint]
2074
2072
2075 def magic_exit(self, parameter_s=''):
2073 def magic_exit(self, parameter_s=''):
2076 """Exit IPython, confirming if configured to do so.
2074 """Exit IPython, confirming if configured to do so.
2077
2075
2078 You can configure whether IPython asks for confirmation upon exit by
2076 You can configure whether IPython asks for confirmation upon exit by
2079 setting the confirm_exit flag in the ipythonrc file."""
2077 setting the confirm_exit flag in the ipythonrc file."""
2080
2078
2081 self.shell.exit()
2079 self.shell.exit()
2082
2080
2083 def magic_quit(self, parameter_s=''):
2081 def magic_quit(self, parameter_s=''):
2084 """Exit IPython, confirming if configured to do so (like %exit)"""
2082 """Exit IPython, confirming if configured to do so (like %exit)"""
2085
2083
2086 self.shell.exit()
2084 self.shell.exit()
2087
2085
2088 def magic_Exit(self, parameter_s=''):
2086 def magic_Exit(self, parameter_s=''):
2089 """Exit IPython without confirmation."""
2087 """Exit IPython without confirmation."""
2090
2088
2091 self.shell.exit_now = True
2089 self.shell.exit_now = True
2092
2090
2093 def magic_Quit(self, parameter_s=''):
2091 def magic_Quit(self, parameter_s=''):
2094 """Exit IPython without confirmation (like %Exit)."""
2092 """Exit IPython without confirmation (like %Exit)."""
2095
2093
2096 self.shell.exit_now = True
2094 self.shell.exit_now = True
2097
2095
2098 #......................................................................
2096 #......................................................................
2099 # Functions to implement unix shell-type things
2097 # Functions to implement unix shell-type things
2100
2098
2101 def magic_alias(self, parameter_s = ''):
2099 def magic_alias(self, parameter_s = ''):
2102 """Define an alias for a system command.
2100 """Define an alias for a system command.
2103
2101
2104 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2102 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2105
2103
2106 Then, typing 'alias_name params' will execute the system command 'cmd
2104 Then, typing 'alias_name params' will execute the system command 'cmd
2107 params' (from your underlying operating system).
2105 params' (from your underlying operating system).
2108
2106
2109 Aliases have lower precedence than magic functions and Python normal
2107 Aliases have lower precedence than magic functions and Python normal
2110 variables, so if 'foo' is both a Python variable and an alias, the
2108 variables, so if 'foo' is both a Python variable and an alias, the
2111 alias can not be executed until 'del foo' removes the Python variable.
2109 alias can not be executed until 'del foo' removes the Python variable.
2112
2110
2113 You can use the %l specifier in an alias definition to represent the
2111 You can use the %l specifier in an alias definition to represent the
2114 whole line when the alias is called. For example:
2112 whole line when the alias is called. For example:
2115
2113
2116 In [2]: alias all echo "Input in brackets: <%l>"\\
2114 In [2]: alias all echo "Input in brackets: <%l>"\\
2117 In [3]: all hello world\\
2115 In [3]: all hello world\\
2118 Input in brackets: <hello world>
2116 Input in brackets: <hello world>
2119
2117
2120 You can also define aliases with parameters using %s specifiers (one
2118 You can also define aliases with parameters using %s specifiers (one
2121 per parameter):
2119 per parameter):
2122
2120
2123 In [1]: alias parts echo first %s second %s\\
2121 In [1]: alias parts echo first %s second %s\\
2124 In [2]: %parts A B\\
2122 In [2]: %parts A B\\
2125 first A second B\\
2123 first A second B\\
2126 In [3]: %parts A\\
2124 In [3]: %parts A\\
2127 Incorrect number of arguments: 2 expected.\\
2125 Incorrect number of arguments: 2 expected.\\
2128 parts is an alias to: 'echo first %s second %s'
2126 parts is an alias to: 'echo first %s second %s'
2129
2127
2130 Note that %l and %s are mutually exclusive. You can only use one or
2128 Note that %l and %s are mutually exclusive. You can only use one or
2131 the other in your aliases.
2129 the other in your aliases.
2132
2130
2133 Aliases expand Python variables just like system calls using ! or !!
2131 Aliases expand Python variables just like system calls using ! or !!
2134 do: all expressions prefixed with '$' get expanded. For details of
2132 do: all expressions prefixed with '$' get expanded. For details of
2135 the semantic rules, see PEP-215:
2133 the semantic rules, see PEP-215:
2136 http://www.python.org/peps/pep-0215.html. This is the library used by
2134 http://www.python.org/peps/pep-0215.html. This is the library used by
2137 IPython for variable expansion. If you want to access a true shell
2135 IPython for variable expansion. If you want to access a true shell
2138 variable, an extra $ is necessary to prevent its expansion by IPython:
2136 variable, an extra $ is necessary to prevent its expansion by IPython:
2139
2137
2140 In [6]: alias show echo\\
2138 In [6]: alias show echo\\
2141 In [7]: PATH='A Python string'\\
2139 In [7]: PATH='A Python string'\\
2142 In [8]: show $PATH\\
2140 In [8]: show $PATH\\
2143 A Python string\\
2141 A Python string\\
2144 In [9]: show $$PATH\\
2142 In [9]: show $$PATH\\
2145 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2143 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2146
2144
2147 You can use the alias facility to acess all of $PATH. See the %rehash
2145 You can use the alias facility to acess all of $PATH. See the %rehash
2148 and %rehashx functions, which automatically create aliases for the
2146 and %rehashx functions, which automatically create aliases for the
2149 contents of your $PATH.
2147 contents of your $PATH.
2150
2148
2151 If called with no parameters, %alias prints the current alias table."""
2149 If called with no parameters, %alias prints the current alias table."""
2152
2150
2153 par = parameter_s.strip()
2151 par = parameter_s.strip()
2154 if not par:
2152 if not par:
2155 if self.shell.rc.automagic:
2153 if self.shell.rc.automagic:
2156 prechar = ''
2154 prechar = ''
2157 else:
2155 else:
2158 prechar = self.shell.ESC_MAGIC
2156 prechar = self.shell.ESC_MAGIC
2159 print 'Alias\t\tSystem Command\n'+'-'*30
2157 print 'Alias\t\tSystem Command\n'+'-'*30
2160 atab = self.shell.alias_table
2158 atab = self.shell.alias_table
2161 aliases = atab.keys()
2159 aliases = atab.keys()
2162 aliases.sort()
2160 aliases.sort()
2163 for alias in aliases:
2161 for alias in aliases:
2164 print prechar+alias+'\t\t'+atab[alias][1]
2162 print prechar+alias+'\t\t'+atab[alias][1]
2165 print '-'*30+'\nTotal number of aliases:',len(aliases)
2163 print '-'*30+'\nTotal number of aliases:',len(aliases)
2166 return
2164 return
2167 try:
2165 try:
2168 alias,cmd = par.split(None,1)
2166 alias,cmd = par.split(None,1)
2169 except:
2167 except:
2170 print OInspect.getdoc(self.magic_alias)
2168 print OInspect.getdoc(self.magic_alias)
2171 else:
2169 else:
2172 nargs = cmd.count('%s')
2170 nargs = cmd.count('%s')
2173 if nargs>0 and cmd.find('%l')>=0:
2171 if nargs>0 and cmd.find('%l')>=0:
2174 error('The %s and %l specifiers are mutually exclusive '
2172 error('The %s and %l specifiers are mutually exclusive '
2175 'in alias definitions.')
2173 'in alias definitions.')
2176 else: # all looks OK
2174 else: # all looks OK
2177 self.shell.alias_table[alias] = (nargs,cmd)
2175 self.shell.alias_table[alias] = (nargs,cmd)
2178 self.shell.alias_table_validate(verbose=1)
2176 self.shell.alias_table_validate(verbose=1)
2179 # end magic_alias
2177 # end magic_alias
2180
2178
2181 def magic_unalias(self, parameter_s = ''):
2179 def magic_unalias(self, parameter_s = ''):
2182 """Remove an alias"""
2180 """Remove an alias"""
2183
2181
2184 aname = parameter_s.strip()
2182 aname = parameter_s.strip()
2185 if aname in self.shell.alias_table:
2183 if aname in self.shell.alias_table:
2186 del self.shell.alias_table[aname]
2184 del self.shell.alias_table[aname]
2187
2185
2188 def magic_rehash(self, parameter_s = ''):
2186 def magic_rehash(self, parameter_s = ''):
2189 """Update the alias table with all entries in $PATH.
2187 """Update the alias table with all entries in $PATH.
2190
2188
2191 This version does no checks on execute permissions or whether the
2189 This version does no checks on execute permissions or whether the
2192 contents of $PATH are truly files (instead of directories or something
2190 contents of $PATH are truly files (instead of directories or something
2193 else). For such a safer (but slower) version, use %rehashx."""
2191 else). For such a safer (but slower) version, use %rehashx."""
2194
2192
2195 # This function (and rehashx) manipulate the alias_table directly
2193 # This function (and rehashx) manipulate the alias_table directly
2196 # rather than calling magic_alias, for speed reasons. A rehash on a
2194 # rather than calling magic_alias, for speed reasons. A rehash on a
2197 # typical Linux box involves several thousand entries, so efficiency
2195 # typical Linux box involves several thousand entries, so efficiency
2198 # here is a top concern.
2196 # here is a top concern.
2199
2197
2200 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2198 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2201 alias_table = self.shell.alias_table
2199 alias_table = self.shell.alias_table
2202 for pdir in path:
2200 for pdir in path:
2203 for ff in os.listdir(pdir):
2201 for ff in os.listdir(pdir):
2204 # each entry in the alias table must be (N,name), where
2202 # each entry in the alias table must be (N,name), where
2205 # N is the number of positional arguments of the alias.
2203 # N is the number of positional arguments of the alias.
2206 alias_table[ff] = (0,ff)
2204 alias_table[ff] = (0,ff)
2207 # Make sure the alias table doesn't contain keywords or builtins
2205 # Make sure the alias table doesn't contain keywords or builtins
2208 self.shell.alias_table_validate()
2206 self.shell.alias_table_validate()
2209 # Call again init_auto_alias() so we get 'rm -i' and other modified
2207 # Call again init_auto_alias() so we get 'rm -i' and other modified
2210 # aliases since %rehash will probably clobber them
2208 # aliases since %rehash will probably clobber them
2211 self.shell.init_auto_alias()
2209 self.shell.init_auto_alias()
2212
2210
2213 def magic_rehashx(self, parameter_s = ''):
2211 def magic_rehashx(self, parameter_s = ''):
2214 """Update the alias table with all executable files in $PATH.
2212 """Update the alias table with all executable files in $PATH.
2215
2213
2216 This version explicitly checks that every entry in $PATH is a file
2214 This version explicitly checks that every entry in $PATH is a file
2217 with execute access (os.X_OK), so it is much slower than %rehash.
2215 with execute access (os.X_OK), so it is much slower than %rehash.
2218
2216
2219 Under Windows, it checks executability as a match agains a
2217 Under Windows, it checks executability as a match agains a
2220 '|'-separated string of extensions, stored in the IPython config
2218 '|'-separated string of extensions, stored in the IPython config
2221 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2219 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2222
2220
2223 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2221 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2224 alias_table = self.shell.alias_table
2222 alias_table = self.shell.alias_table
2225
2223
2226 if os.name == 'posix':
2224 if os.name == 'posix':
2227 isexec = lambda fname:os.path.isfile(fname) and \
2225 isexec = lambda fname:os.path.isfile(fname) and \
2228 os.access(fname,os.X_OK)
2226 os.access(fname,os.X_OK)
2229 else:
2227 else:
2230
2228
2231 try:
2229 try:
2232 winext = os.environ['pathext'].replace(';','|').replace('.','')
2230 winext = os.environ['pathext'].replace(';','|').replace('.','')
2233 except KeyError:
2231 except KeyError:
2234 winext = 'exe|com|bat'
2232 winext = 'exe|com|bat'
2235
2233
2236 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2234 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2237 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2235 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2238 savedir = os.getcwd()
2236 savedir = os.getcwd()
2239 try:
2237 try:
2240 # write the whole loop for posix/Windows so we don't have an if in
2238 # write the whole loop for posix/Windows so we don't have an if in
2241 # the innermost part
2239 # the innermost part
2242 if os.name == 'posix':
2240 if os.name == 'posix':
2243 for pdir in path:
2241 for pdir in path:
2244 os.chdir(pdir)
2242 os.chdir(pdir)
2245 for ff in os.listdir(pdir):
2243 for ff in os.listdir(pdir):
2246 if isexec(ff):
2244 if isexec(ff):
2247 # each entry in the alias table must be (N,name),
2245 # each entry in the alias table must be (N,name),
2248 # where N is the number of positional arguments of the
2246 # where N is the number of positional arguments of the
2249 # alias.
2247 # alias.
2250 alias_table[ff] = (0,ff)
2248 alias_table[ff] = (0,ff)
2251 else:
2249 else:
2252 for pdir in path:
2250 for pdir in path:
2253 os.chdir(pdir)
2251 os.chdir(pdir)
2254 for ff in os.listdir(pdir):
2252 for ff in os.listdir(pdir):
2255 if isexec(ff):
2253 if isexec(ff):
2256 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2254 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2257 # Make sure the alias table doesn't contain keywords or builtins
2255 # Make sure the alias table doesn't contain keywords or builtins
2258 self.shell.alias_table_validate()
2256 self.shell.alias_table_validate()
2259 # Call again init_auto_alias() so we get 'rm -i' and other
2257 # Call again init_auto_alias() so we get 'rm -i' and other
2260 # modified aliases since %rehashx will probably clobber them
2258 # modified aliases since %rehashx will probably clobber them
2261 self.shell.init_auto_alias()
2259 self.shell.init_auto_alias()
2262 finally:
2260 finally:
2263 os.chdir(savedir)
2261 os.chdir(savedir)
2264
2262
2265 def magic_pwd(self, parameter_s = ''):
2263 def magic_pwd(self, parameter_s = ''):
2266 """Return the current working directory path."""
2264 """Return the current working directory path."""
2267 return os.getcwd()
2265 return os.getcwd()
2268
2266
2269 def magic_cd(self, parameter_s=''):
2267 def magic_cd(self, parameter_s=''):
2270 """Change the current working directory.
2268 """Change the current working directory.
2271
2269
2272 This command automatically maintains an internal list of directories
2270 This command automatically maintains an internal list of directories
2273 you visit during your IPython session, in the variable _dh. The
2271 you visit during your IPython session, in the variable _dh. The
2274 command %dhist shows this history nicely formatted.
2272 command %dhist shows this history nicely formatted.
2275
2273
2276 Usage:
2274 Usage:
2277
2275
2278 cd 'dir': changes to directory 'dir'.
2276 cd 'dir': changes to directory 'dir'.
2279
2277
2280 cd -: changes to the last visited directory.
2278 cd -: changes to the last visited directory.
2281
2279
2282 cd -<n>: changes to the n-th directory in the directory history.
2280 cd -<n>: changes to the n-th directory in the directory history.
2283
2281
2284 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2282 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2285 (note: cd <bookmark_name> is enough if there is no
2283 (note: cd <bookmark_name> is enough if there is no
2286 directory <bookmark_name>, but a bookmark with the name exists.)
2284 directory <bookmark_name>, but a bookmark with the name exists.)
2287
2285
2288 Options:
2286 Options:
2289
2287
2290 -q: quiet. Do not print the working directory after the cd command is
2288 -q: quiet. Do not print the working directory after the cd command is
2291 executed. By default IPython's cd command does print this directory,
2289 executed. By default IPython's cd command does print this directory,
2292 since the default prompts do not display path information.
2290 since the default prompts do not display path information.
2293
2291
2294 Note that !cd doesn't work for this purpose because the shell where
2292 Note that !cd doesn't work for this purpose because the shell where
2295 !command runs is immediately discarded after executing 'command'."""
2293 !command runs is immediately discarded after executing 'command'."""
2296
2294
2297 parameter_s = parameter_s.strip()
2295 parameter_s = parameter_s.strip()
2298 bkms = self.shell.persist.get("bookmarks",{})
2296 bkms = self.shell.persist.get("bookmarks",{})
2299
2297
2300 numcd = re.match(r'(-)(\d+)$',parameter_s)
2298 numcd = re.match(r'(-)(\d+)$',parameter_s)
2301 # jump in directory history by number
2299 # jump in directory history by number
2302 if numcd:
2300 if numcd:
2303 nn = int(numcd.group(2))
2301 nn = int(numcd.group(2))
2304 try:
2302 try:
2305 ps = self.shell.user_ns['_dh'][nn]
2303 ps = self.shell.user_ns['_dh'][nn]
2306 except IndexError:
2304 except IndexError:
2307 print 'The requested directory does not exist in history.'
2305 print 'The requested directory does not exist in history.'
2308 return
2306 return
2309 else:
2307 else:
2310 opts = {}
2308 opts = {}
2311 else:
2309 else:
2312 #turn all non-space-escaping backslashes to slashes,
2310 #turn all non-space-escaping backslashes to slashes,
2313 # for c:\windows\directory\names\
2311 # for c:\windows\directory\names\
2314 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2312 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2315 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2313 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2316 # jump to previous
2314 # jump to previous
2317 if ps == '-':
2315 if ps == '-':
2318 try:
2316 try:
2319 ps = self.shell.user_ns['_dh'][-2]
2317 ps = self.shell.user_ns['_dh'][-2]
2320 except IndexError:
2318 except IndexError:
2321 print 'No previous directory to change to.'
2319 print 'No previous directory to change to.'
2322 return
2320 return
2323 # jump to bookmark
2321 # jump to bookmark
2324 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2322 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2325 if bkms.has_key(ps):
2323 if bkms.has_key(ps):
2326 target = bkms[ps]
2324 target = bkms[ps]
2327 print '(bookmark:%s) -> %s' % (ps,target)
2325 print '(bookmark:%s) -> %s' % (ps,target)
2328 ps = target
2326 ps = target
2329 else:
2327 else:
2330 if bkms:
2328 if bkms:
2331 error("Bookmark '%s' not found. "
2329 error("Bookmark '%s' not found. "
2332 "Use '%%bookmark -l' to see your bookmarks." % ps)
2330 "Use '%%bookmark -l' to see your bookmarks." % ps)
2333 else:
2331 else:
2334 print "Bookmarks not set - use %bookmark <bookmarkname>"
2332 print "Bookmarks not set - use %bookmark <bookmarkname>"
2335 return
2333 return
2336
2334
2337 # at this point ps should point to the target dir
2335 # at this point ps should point to the target dir
2338 if ps:
2336 if ps:
2339 try:
2337 try:
2340 os.chdir(os.path.expanduser(ps))
2338 os.chdir(os.path.expanduser(ps))
2341 ttitle = ("IPy:" + (
2339 ttitle = ("IPy:" + (
2342 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2340 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2343 platutils.set_term_title(ttitle)
2341 platutils.set_term_title(ttitle)
2344 except OSError:
2342 except OSError:
2345 print sys.exc_info()[1]
2343 print sys.exc_info()[1]
2346 else:
2344 else:
2347 self.shell.user_ns['_dh'].append(os.getcwd())
2345 self.shell.user_ns['_dh'].append(os.getcwd())
2348 else:
2346 else:
2349 os.chdir(self.shell.home_dir)
2347 os.chdir(self.shell.home_dir)
2350 platutils.set_term_title("IPy:~")
2348 platutils.set_term_title("IPy:~")
2351 self.shell.user_ns['_dh'].append(os.getcwd())
2349 self.shell.user_ns['_dh'].append(os.getcwd())
2352 if not 'q' in opts:
2350 if not 'q' in opts:
2353 print self.shell.user_ns['_dh'][-1]
2351 print self.shell.user_ns['_dh'][-1]
2354
2352
2355 def magic_dhist(self, parameter_s=''):
2353 def magic_dhist(self, parameter_s=''):
2356 """Print your history of visited directories.
2354 """Print your history of visited directories.
2357
2355
2358 %dhist -> print full history\\
2356 %dhist -> print full history\\
2359 %dhist n -> print last n entries only\\
2357 %dhist n -> print last n entries only\\
2360 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2358 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2361
2359
2362 This history is automatically maintained by the %cd command, and
2360 This history is automatically maintained by the %cd command, and
2363 always available as the global list variable _dh. You can use %cd -<n>
2361 always available as the global list variable _dh. You can use %cd -<n>
2364 to go to directory number <n>."""
2362 to go to directory number <n>."""
2365
2363
2366 dh = self.shell.user_ns['_dh']
2364 dh = self.shell.user_ns['_dh']
2367 if parameter_s:
2365 if parameter_s:
2368 try:
2366 try:
2369 args = map(int,parameter_s.split())
2367 args = map(int,parameter_s.split())
2370 except:
2368 except:
2371 self.arg_err(Magic.magic_dhist)
2369 self.arg_err(Magic.magic_dhist)
2372 return
2370 return
2373 if len(args) == 1:
2371 if len(args) == 1:
2374 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2372 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2375 elif len(args) == 2:
2373 elif len(args) == 2:
2376 ini,fin = args
2374 ini,fin = args
2377 else:
2375 else:
2378 self.arg_err(Magic.magic_dhist)
2376 self.arg_err(Magic.magic_dhist)
2379 return
2377 return
2380 else:
2378 else:
2381 ini,fin = 0,len(dh)
2379 ini,fin = 0,len(dh)
2382 nlprint(dh,
2380 nlprint(dh,
2383 header = 'Directory history (kept in _dh)',
2381 header = 'Directory history (kept in _dh)',
2384 start=ini,stop=fin)
2382 start=ini,stop=fin)
2385
2383
2386 def magic_env(self, parameter_s=''):
2384 def magic_env(self, parameter_s=''):
2387 """List environment variables."""
2385 """List environment variables."""
2388
2386
2389 return os.environ.data
2387 return os.environ.data
2390
2388
2391 def magic_pushd(self, parameter_s=''):
2389 def magic_pushd(self, parameter_s=''):
2392 """Place the current dir on stack and change directory.
2390 """Place the current dir on stack and change directory.
2393
2391
2394 Usage:\\
2392 Usage:\\
2395 %pushd ['dirname']
2393 %pushd ['dirname']
2396
2394
2397 %pushd with no arguments does a %pushd to your home directory.
2395 %pushd with no arguments does a %pushd to your home directory.
2398 """
2396 """
2399 if parameter_s == '': parameter_s = '~'
2397 if parameter_s == '': parameter_s = '~'
2400 dir_s = self.shell.dir_stack
2398 dir_s = self.shell.dir_stack
2401 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2399 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2402 os.path.expanduser(self.shell.dir_stack[0]):
2400 os.path.expanduser(self.shell.dir_stack[0]):
2403 try:
2401 try:
2404 self.magic_cd(parameter_s)
2402 self.magic_cd(parameter_s)
2405 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2403 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2406 self.magic_dirs()
2404 self.magic_dirs()
2407 except:
2405 except:
2408 print 'Invalid directory'
2406 print 'Invalid directory'
2409 else:
2407 else:
2410 print 'You are already there!'
2408 print 'You are already there!'
2411
2409
2412 def magic_popd(self, parameter_s=''):
2410 def magic_popd(self, parameter_s=''):
2413 """Change to directory popped off the top of the stack.
2411 """Change to directory popped off the top of the stack.
2414 """
2412 """
2415 if len (self.shell.dir_stack) > 1:
2413 if len (self.shell.dir_stack) > 1:
2416 self.shell.dir_stack.pop(0)
2414 self.shell.dir_stack.pop(0)
2417 self.magic_cd(self.shell.dir_stack[0])
2415 self.magic_cd(self.shell.dir_stack[0])
2418 print self.shell.dir_stack[0]
2416 print self.shell.dir_stack[0]
2419 else:
2417 else:
2420 print "You can't remove the starting directory from the stack:",\
2418 print "You can't remove the starting directory from the stack:",\
2421 self.shell.dir_stack
2419 self.shell.dir_stack
2422
2420
2423 def magic_dirs(self, parameter_s=''):
2421 def magic_dirs(self, parameter_s=''):
2424 """Return the current directory stack."""
2422 """Return the current directory stack."""
2425
2423
2426 return self.shell.dir_stack[:]
2424 return self.shell.dir_stack[:]
2427
2425
2428 def magic_sc(self, parameter_s=''):
2426 def magic_sc(self, parameter_s=''):
2429 """Shell capture - execute a shell command and capture its output.
2427 """Shell capture - execute a shell command and capture its output.
2430
2428
2431 %sc [options] varname=command
2429 %sc [options] varname=command
2432
2430
2433 IPython will run the given command using commands.getoutput(), and
2431 IPython will run the given command using commands.getoutput(), and
2434 will then update the user's interactive namespace with a variable
2432 will then update the user's interactive namespace with a variable
2435 called varname, containing the value of the call. Your command can
2433 called varname, containing the value of the call. Your command can
2436 contain shell wildcards, pipes, etc.
2434 contain shell wildcards, pipes, etc.
2437
2435
2438 The '=' sign in the syntax is mandatory, and the variable name you
2436 The '=' sign in the syntax is mandatory, and the variable name you
2439 supply must follow Python's standard conventions for valid names.
2437 supply must follow Python's standard conventions for valid names.
2440
2438
2441 Options:
2439 Options:
2442
2440
2443 -l: list output. Split the output on newlines into a list before
2441 -l: list output. Split the output on newlines into a list before
2444 assigning it to the given variable. By default the output is stored
2442 assigning it to the given variable. By default the output is stored
2445 as a single string.
2443 as a single string.
2446
2444
2447 -v: verbose. Print the contents of the variable.
2445 -v: verbose. Print the contents of the variable.
2448
2446
2449 In most cases you should not need to split as a list, because the
2447 In most cases you should not need to split as a list, because the
2450 returned value is a special type of string which can automatically
2448 returned value is a special type of string which can automatically
2451 provide its contents either as a list (split on newlines) or as a
2449 provide its contents either as a list (split on newlines) or as a
2452 space-separated string. These are convenient, respectively, either
2450 space-separated string. These are convenient, respectively, either
2453 for sequential processing or to be passed to a shell command.
2451 for sequential processing or to be passed to a shell command.
2454
2452
2455 For example:
2453 For example:
2456
2454
2457 # Capture into variable a
2455 # Capture into variable a
2458 In [9]: sc a=ls *py
2456 In [9]: sc a=ls *py
2459
2457
2460 # a is a string with embedded newlines
2458 # a is a string with embedded newlines
2461 In [10]: a
2459 In [10]: a
2462 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2460 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2463
2461
2464 # which can be seen as a list:
2462 # which can be seen as a list:
2465 In [11]: a.l
2463 In [11]: a.l
2466 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2464 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2467
2465
2468 # or as a whitespace-separated string:
2466 # or as a whitespace-separated string:
2469 In [12]: a.s
2467 In [12]: a.s
2470 Out[12]: 'setup.py win32_manual_post_install.py'
2468 Out[12]: 'setup.py win32_manual_post_install.py'
2471
2469
2472 # a.s is useful to pass as a single command line:
2470 # a.s is useful to pass as a single command line:
2473 In [13]: !wc -l $a.s
2471 In [13]: !wc -l $a.s
2474 146 setup.py
2472 146 setup.py
2475 130 win32_manual_post_install.py
2473 130 win32_manual_post_install.py
2476 276 total
2474 276 total
2477
2475
2478 # while the list form is useful to loop over:
2476 # while the list form is useful to loop over:
2479 In [14]: for f in a.l:
2477 In [14]: for f in a.l:
2480 ....: !wc -l $f
2478 ....: !wc -l $f
2481 ....:
2479 ....:
2482 146 setup.py
2480 146 setup.py
2483 130 win32_manual_post_install.py
2481 130 win32_manual_post_install.py
2484
2482
2485 Similiarly, the lists returned by the -l option are also special, in
2483 Similiarly, the lists returned by the -l option are also special, in
2486 the sense that you can equally invoke the .s attribute on them to
2484 the sense that you can equally invoke the .s attribute on them to
2487 automatically get a whitespace-separated string from their contents:
2485 automatically get a whitespace-separated string from their contents:
2488
2486
2489 In [1]: sc -l b=ls *py
2487 In [1]: sc -l b=ls *py
2490
2488
2491 In [2]: b
2489 In [2]: b
2492 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2490 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2493
2491
2494 In [3]: b.s
2492 In [3]: b.s
2495 Out[3]: 'setup.py win32_manual_post_install.py'
2493 Out[3]: 'setup.py win32_manual_post_install.py'
2496
2494
2497 In summary, both the lists and strings used for ouptut capture have
2495 In summary, both the lists and strings used for ouptut capture have
2498 the following special attributes:
2496 the following special attributes:
2499
2497
2500 .l (or .list) : value as list.
2498 .l (or .list) : value as list.
2501 .n (or .nlstr): value as newline-separated string.
2499 .n (or .nlstr): value as newline-separated string.
2502 .s (or .spstr): value as space-separated string.
2500 .s (or .spstr): value as space-separated string.
2503 """
2501 """
2504
2502
2505 opts,args = self.parse_options(parameter_s,'lv')
2503 opts,args = self.parse_options(parameter_s,'lv')
2506 # Try to get a variable name and command to run
2504 # Try to get a variable name and command to run
2507 try:
2505 try:
2508 # the variable name must be obtained from the parse_options
2506 # the variable name must be obtained from the parse_options
2509 # output, which uses shlex.split to strip options out.
2507 # output, which uses shlex.split to strip options out.
2510 var,_ = args.split('=',1)
2508 var,_ = args.split('=',1)
2511 var = var.strip()
2509 var = var.strip()
2512 # But the the command has to be extracted from the original input
2510 # But the the command has to be extracted from the original input
2513 # parameter_s, not on what parse_options returns, to avoid the
2511 # parameter_s, not on what parse_options returns, to avoid the
2514 # quote stripping which shlex.split performs on it.
2512 # quote stripping which shlex.split performs on it.
2515 _,cmd = parameter_s.split('=',1)
2513 _,cmd = parameter_s.split('=',1)
2516 except ValueError:
2514 except ValueError:
2517 var,cmd = '',''
2515 var,cmd = '',''
2518 if not var:
2516 if not var:
2519 error('you must specify a variable to assign the command to.')
2517 error('you must specify a variable to assign the command to.')
2520 return
2518 return
2521 # If all looks ok, proceed
2519 # If all looks ok, proceed
2522 out,err = self.shell.getoutputerror(cmd)
2520 out,err = self.shell.getoutputerror(cmd)
2523 if err:
2521 if err:
2524 print >> Term.cerr,err
2522 print >> Term.cerr,err
2525 if opts.has_key('l'):
2523 if opts.has_key('l'):
2526 out = SList(out.split('\n'))
2524 out = SList(out.split('\n'))
2527 else:
2525 else:
2528 out = LSString(out)
2526 out = LSString(out)
2529 if opts.has_key('v'):
2527 if opts.has_key('v'):
2530 print '%s ==\n%s' % (var,pformat(out))
2528 print '%s ==\n%s' % (var,pformat(out))
2531 self.shell.user_ns.update({var:out})
2529 self.shell.user_ns.update({var:out})
2532
2530
2533 def magic_sx(self, parameter_s=''):
2531 def magic_sx(self, parameter_s=''):
2534 """Shell execute - run a shell command and capture its output.
2532 """Shell execute - run a shell command and capture its output.
2535
2533
2536 %sx command
2534 %sx command
2537
2535
2538 IPython will run the given command using commands.getoutput(), and
2536 IPython will run the given command using commands.getoutput(), and
2539 return the result formatted as a list (split on '\\n'). Since the
2537 return the result formatted as a list (split on '\\n'). Since the
2540 output is _returned_, it will be stored in ipython's regular output
2538 output is _returned_, it will be stored in ipython's regular output
2541 cache Out[N] and in the '_N' automatic variables.
2539 cache Out[N] and in the '_N' automatic variables.
2542
2540
2543 Notes:
2541 Notes:
2544
2542
2545 1) If an input line begins with '!!', then %sx is automatically
2543 1) If an input line begins with '!!', then %sx is automatically
2546 invoked. That is, while:
2544 invoked. That is, while:
2547 !ls
2545 !ls
2548 causes ipython to simply issue system('ls'), typing
2546 causes ipython to simply issue system('ls'), typing
2549 !!ls
2547 !!ls
2550 is a shorthand equivalent to:
2548 is a shorthand equivalent to:
2551 %sx ls
2549 %sx ls
2552
2550
2553 2) %sx differs from %sc in that %sx automatically splits into a list,
2551 2) %sx differs from %sc in that %sx automatically splits into a list,
2554 like '%sc -l'. The reason for this is to make it as easy as possible
2552 like '%sc -l'. The reason for this is to make it as easy as possible
2555 to process line-oriented shell output via further python commands.
2553 to process line-oriented shell output via further python commands.
2556 %sc is meant to provide much finer control, but requires more
2554 %sc is meant to provide much finer control, but requires more
2557 typing.
2555 typing.
2558
2556
2559 3) Just like %sc -l, this is a list with special attributes:
2557 3) Just like %sc -l, this is a list with special attributes:
2560
2558
2561 .l (or .list) : value as list.
2559 .l (or .list) : value as list.
2562 .n (or .nlstr): value as newline-separated string.
2560 .n (or .nlstr): value as newline-separated string.
2563 .s (or .spstr): value as whitespace-separated string.
2561 .s (or .spstr): value as whitespace-separated string.
2564
2562
2565 This is very useful when trying to use such lists as arguments to
2563 This is very useful when trying to use such lists as arguments to
2566 system commands."""
2564 system commands."""
2567
2565
2568 if parameter_s:
2566 if parameter_s:
2569 out,err = self.shell.getoutputerror(parameter_s)
2567 out,err = self.shell.getoutputerror(parameter_s)
2570 if err:
2568 if err:
2571 print >> Term.cerr,err
2569 print >> Term.cerr,err
2572 return SList(out.split('\n'))
2570 return SList(out.split('\n'))
2573
2571
2574 def magic_bg(self, parameter_s=''):
2572 def magic_bg(self, parameter_s=''):
2575 """Run a job in the background, in a separate thread.
2573 """Run a job in the background, in a separate thread.
2576
2574
2577 For example,
2575 For example,
2578
2576
2579 %bg myfunc(x,y,z=1)
2577 %bg myfunc(x,y,z=1)
2580
2578
2581 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2579 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2582 execution starts, a message will be printed indicating the job
2580 execution starts, a message will be printed indicating the job
2583 number. If your job number is 5, you can use
2581 number. If your job number is 5, you can use
2584
2582
2585 myvar = jobs.result(5) or myvar = jobs[5].result
2583 myvar = jobs.result(5) or myvar = jobs[5].result
2586
2584
2587 to assign this result to variable 'myvar'.
2585 to assign this result to variable 'myvar'.
2588
2586
2589 IPython has a job manager, accessible via the 'jobs' object. You can
2587 IPython has a job manager, accessible via the 'jobs' object. You can
2590 type jobs? to get more information about it, and use jobs.<TAB> to see
2588 type jobs? to get more information about it, and use jobs.<TAB> to see
2591 its attributes. All attributes not starting with an underscore are
2589 its attributes. All attributes not starting with an underscore are
2592 meant for public use.
2590 meant for public use.
2593
2591
2594 In particular, look at the jobs.new() method, which is used to create
2592 In particular, look at the jobs.new() method, which is used to create
2595 new jobs. This magic %bg function is just a convenience wrapper
2593 new jobs. This magic %bg function is just a convenience wrapper
2596 around jobs.new(), for expression-based jobs. If you want to create a
2594 around jobs.new(), for expression-based jobs. If you want to create a
2597 new job with an explicit function object and arguments, you must call
2595 new job with an explicit function object and arguments, you must call
2598 jobs.new() directly.
2596 jobs.new() directly.
2599
2597
2600 The jobs.new docstring also describes in detail several important
2598 The jobs.new docstring also describes in detail several important
2601 caveats associated with a thread-based model for background job
2599 caveats associated with a thread-based model for background job
2602 execution. Type jobs.new? for details.
2600 execution. Type jobs.new? for details.
2603
2601
2604 You can check the status of all jobs with jobs.status().
2602 You can check the status of all jobs with jobs.status().
2605
2603
2606 The jobs variable is set by IPython into the Python builtin namespace.
2604 The jobs variable is set by IPython into the Python builtin namespace.
2607 If you ever declare a variable named 'jobs', you will shadow this
2605 If you ever declare a variable named 'jobs', you will shadow this
2608 name. You can either delete your global jobs variable to regain
2606 name. You can either delete your global jobs variable to regain
2609 access to the job manager, or make a new name and assign it manually
2607 access to the job manager, or make a new name and assign it manually
2610 to the manager (stored in IPython's namespace). For example, to
2608 to the manager (stored in IPython's namespace). For example, to
2611 assign the job manager to the Jobs name, use:
2609 assign the job manager to the Jobs name, use:
2612
2610
2613 Jobs = __builtins__.jobs"""
2611 Jobs = __builtins__.jobs"""
2614
2612
2615 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2613 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2616
2614
2617 def magic_store(self, parameter_s=''):
2615 def magic_store(self, parameter_s=''):
2618 """Lightweight persistence for python variables.
2616 """Lightweight persistence for python variables.
2619
2617
2620 Example:
2618 Example:
2621
2619
2622 ville@badger[~]|1> A = ['hello',10,'world']\\
2620 ville@badger[~]|1> A = ['hello',10,'world']\\
2623 ville@badger[~]|2> %store A\\
2621 ville@badger[~]|2> %store A\\
2624 ville@badger[~]|3> Exit
2622 ville@badger[~]|3> Exit
2625
2623
2626 (IPython session is closed and started again...)
2624 (IPython session is closed and started again...)
2627
2625
2628 ville@badger:~$ ipython -p pysh\\
2626 ville@badger:~$ ipython -p pysh\\
2629 ville@badger[~]|1> print A
2627 ville@badger[~]|1> print A
2630
2628
2631 ['hello', 10, 'world']
2629 ['hello', 10, 'world']
2632
2630
2633 Usage:
2631 Usage:
2634
2632
2635 %store - Show list of all variables and their current values\\
2633 %store - Show list of all variables and their current values\\
2636 %store <var> - Store the *current* value of the variable to disk\\
2634 %store <var> - Store the *current* value of the variable to disk\\
2637 %store -d <var> - Remove the variable and its value from storage\\
2635 %store -d <var> - Remove the variable and its value from storage\\
2638 %store -r - Remove all variables from storage
2636 %store -r - Remove all variables from storage
2639
2637
2640 It should be noted that if you change the value of a variable, you
2638 It should be noted that if you change the value of a variable, you
2641 need to %store it again if you want to persist the new value.
2639 need to %store it again if you want to persist the new value.
2642
2640
2643 Note also that the variables will need to be pickleable; most basic
2641 Note also that the variables will need to be pickleable; most basic
2644 python types can be safely %stored.
2642 python types can be safely %stored.
2645 """
2643 """
2646
2644
2647 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2645 opts,args = self.parse_options(parameter_s,'dr',mode='list')
2648 # delete
2646 # delete
2649 if opts.has_key('d'):
2647 if opts.has_key('d'):
2650 try:
2648 try:
2651 todel = args[0]
2649 todel = args[0]
2652 except IndexError:
2650 except IndexError:
2653 error('You must provide the variable to forget')
2651 error('You must provide the variable to forget')
2654 else:
2652 else:
2655 try:
2653 try:
2656 del self.shell.persist['S:' + todel]
2654 del self.shell.persist['S:' + todel]
2657 except:
2655 except:
2658 error("Can't delete variable '%s'" % todel)
2656 error("Can't delete variable '%s'" % todel)
2659 # reset
2657 # reset
2660 elif opts.has_key('r'):
2658 elif opts.has_key('r'):
2661 for k in self.shell.persist.keys():
2659 for k in self.shell.persist.keys():
2662 if k.startswith('S:'):
2660 if k.startswith('S:'):
2663 del self.shell.persist[k]
2661 del self.shell.persist[k]
2664
2662
2665 # run without arguments -> list variables & values
2663 # run without arguments -> list variables & values
2666 elif not args:
2664 elif not args:
2667 vars = [v[2:] for v in self.shell.persist.keys()
2665 vars = [v[2:] for v in self.shell.persist.keys()
2668 if v.startswith('S:')]
2666 if v.startswith('S:')]
2669 vars.sort()
2667 vars.sort()
2670 if vars:
2668 if vars:
2671 size = max(map(len,vars))
2669 size = max(map(len,vars))
2672 else:
2670 else:
2673 size = 0
2671 size = 0
2674
2672
2675 print 'Stored variables and their in-memory values:'
2673 print 'Stored variables and their in-memory values:'
2676 fmt = '%-'+str(size)+'s -> %s'
2674 fmt = '%-'+str(size)+'s -> %s'
2677 get = self.shell.user_ns.get
2675 get = self.shell.user_ns.get
2678 for var in vars:
2676 for var in vars:
2679 # print 30 first characters from every var
2677 # print 30 first characters from every var
2680 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2678 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2681
2679
2682 # default action - store the variable
2680 # default action - store the variable
2683 else:
2681 else:
2684 pickled = pickle.dumps(self.shell.user_ns[args[0] ])
2682 pickled = pickle.dumps(self.shell.user_ns[args[0] ])
2685 self.shell.persist[ 'S:' + args[0] ] = pickled
2683 self.shell.persist[ 'S:' + args[0] ] = pickled
2686 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2684 print "Stored '%s' (%d bytes)" % (args[0], len(pickled))
2687
2685
2688 def magic_bookmark(self, parameter_s=''):
2686 def magic_bookmark(self, parameter_s=''):
2689 """Manage IPython's bookmark system.
2687 """Manage IPython's bookmark system.
2690
2688
2691 %bookmark <name> - set bookmark to current dir
2689 %bookmark <name> - set bookmark to current dir
2692 %bookmark <name> <dir> - set bookmark to <dir>
2690 %bookmark <name> <dir> - set bookmark to <dir>
2693 %bookmark -l - list all bookmarks
2691 %bookmark -l - list all bookmarks
2694 %bookmark -d <name> - remove bookmark
2692 %bookmark -d <name> - remove bookmark
2695 %bookmark -r - remove all bookmarks
2693 %bookmark -r - remove all bookmarks
2696
2694
2697 You can later on access a bookmarked folder with:
2695 You can later on access a bookmarked folder with:
2698 %cd -b <name>
2696 %cd -b <name>
2699 or simply '%cd <name>' if there is no directory called <name> AND
2697 or simply '%cd <name>' if there is no directory called <name> AND
2700 there is such a bookmark defined.
2698 there is such a bookmark defined.
2701
2699
2702 Your bookmarks persist through IPython sessions, but they are
2700 Your bookmarks persist through IPython sessions, but they are
2703 associated with each profile."""
2701 associated with each profile."""
2704
2702
2705 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2703 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2706 if len(args) > 2:
2704 if len(args) > 2:
2707 error('You can only give at most two arguments')
2705 error('You can only give at most two arguments')
2708 return
2706 return
2709
2707
2710 bkms = self.shell.persist.get('bookmarks',{})
2708 bkms = self.shell.persist.get('bookmarks',{})
2711
2709
2712 if opts.has_key('d'):
2710 if opts.has_key('d'):
2713 try:
2711 try:
2714 todel = args[0]
2712 todel = args[0]
2715 except IndexError:
2713 except IndexError:
2716 error('You must provide a bookmark to delete')
2714 error('You must provide a bookmark to delete')
2717 else:
2715 else:
2718 try:
2716 try:
2719 del bkms[todel]
2717 del bkms[todel]
2720 except:
2718 except:
2721 error("Can't delete bookmark '%s'" % todel)
2719 error("Can't delete bookmark '%s'" % todel)
2722 elif opts.has_key('r'):
2720 elif opts.has_key('r'):
2723 bkms = {}
2721 bkms = {}
2724 elif opts.has_key('l'):
2722 elif opts.has_key('l'):
2725 bks = bkms.keys()
2723 bks = bkms.keys()
2726 bks.sort()
2724 bks.sort()
2727 if bks:
2725 if bks:
2728 size = max(map(len,bks))
2726 size = max(map(len,bks))
2729 else:
2727 else:
2730 size = 0
2728 size = 0
2731 fmt = '%-'+str(size)+'s -> %s'
2729 fmt = '%-'+str(size)+'s -> %s'
2732 print 'Current bookmarks:'
2730 print 'Current bookmarks:'
2733 for bk in bks:
2731 for bk in bks:
2734 print fmt % (bk,bkms[bk])
2732 print fmt % (bk,bkms[bk])
2735 else:
2733 else:
2736 if not args:
2734 if not args:
2737 error("You must specify the bookmark name")
2735 error("You must specify the bookmark name")
2738 elif len(args)==1:
2736 elif len(args)==1:
2739 bkms[args[0]] = os.getcwd()
2737 bkms[args[0]] = os.getcwd()
2740 elif len(args)==2:
2738 elif len(args)==2:
2741 bkms[args[0]] = args[1]
2739 bkms[args[0]] = args[1]
2742 self.shell.persist['bookmarks'] = bkms
2740 self.shell.persist['bookmarks'] = bkms
2743
2741
2744 def magic_pycat(self, parameter_s=''):
2742 def magic_pycat(self, parameter_s=''):
2745 """Show a syntax-highlighted file through a pager.
2743 """Show a syntax-highlighted file through a pager.
2746
2744
2747 This magic is similar to the cat utility, but it will assume the file
2745 This magic is similar to the cat utility, but it will assume the file
2748 to be Python source and will show it with syntax highlighting. """
2746 to be Python source and will show it with syntax highlighting. """
2749
2747
2750 filename = get_py_filename(parameter_s)
2748 filename = get_py_filename(parameter_s)
2751 page(self.shell.pycolorize(file_read(filename)),
2749 page(self.shell.pycolorize(file_read(filename)),
2752 screen_lines=self.shell.rc.screen_length)
2750 screen_lines=self.shell.rc.screen_length)
2753
2751
2754 # end Magic
2752 # end Magic
@@ -1,4948 +1,4953 b''
1 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
2
3 * IPython/Magic.py (magic_edit): fix check for when users don't
4 save their output files, the try/except was in the wrong section.
5
1 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
6 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
2
7
3 * IPython/Magic.py (magic_run): fix __file__ global missing from
8 * IPython/Magic.py (magic_run): fix __file__ global missing from
4 script's namespace when executed via %run. After a report by
9 script's namespace when executed via %run. After a report by
5 Vivian.
10 Vivian.
6
11
7 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
12 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
8 when using python 2.4. The parent constructor changed in 2.4, and
13 when using python 2.4. The parent constructor changed in 2.4, and
9 we need to track it directly (we can't call it, as it messes up
14 we need to track it directly (we can't call it, as it messes up
10 readline and tab-completion inside our pdb would stop working).
15 readline and tab-completion inside our pdb would stop working).
11 After a bug report by R. Bernstein <rocky-AT-panix.com>.
16 After a bug report by R. Bernstein <rocky-AT-panix.com>.
12
17
13 2006-01-16 Ville Vainio <vivainio@gmail.com>
18 2006-01-16 Ville Vainio <vivainio@gmail.com>
14
19
15 * Ipython/magic.py:Reverted back to old %edit functionality
20 * Ipython/magic.py:Reverted back to old %edit functionality
16 that returns file contents on exit.
21 that returns file contents on exit.
17
22
18 * IPython/path.py: Added Jason Orendorff's "path" module to
23 * IPython/path.py: Added Jason Orendorff's "path" module to
19 IPython tree, http://www.jorendorff.com/articles/python/path/.
24 IPython tree, http://www.jorendorff.com/articles/python/path/.
20 You can get path objects conveniently through %sc, and !!, e.g.:
25 You can get path objects conveniently through %sc, and !!, e.g.:
21 sc files=ls
26 sc files=ls
22 for p in files.paths: # or files.p
27 for p in files.paths: # or files.p
23 print p,p.mtime
28 print p,p.mtime
24
29
25 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
30 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
26 now work again without considering the exclusion regexp -
31 now work again without considering the exclusion regexp -
27 hence, things like ',foo my/path' turn to 'foo("my/path")'
32 hence, things like ',foo my/path' turn to 'foo("my/path")'
28 instead of syntax error.
33 instead of syntax error.
29
34
30
35
31 2006-01-14 Ville Vainio <vivainio@gmail.com>
36 2006-01-14 Ville Vainio <vivainio@gmail.com>
32
37
33 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
38 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
34 ipapi decorators for python 2.4 users, options() provides access to rc
39 ipapi decorators for python 2.4 users, options() provides access to rc
35 data.
40 data.
36
41
37 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
42 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
38 as path separators (even on Linux ;-). Space character after
43 as path separators (even on Linux ;-). Space character after
39 backslash (as yielded by tab completer) is still space;
44 backslash (as yielded by tab completer) is still space;
40 "%cd long\ name" works as expected.
45 "%cd long\ name" works as expected.
41
46
42 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
47 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
43 as "chain of command", with priority. API stays the same,
48 as "chain of command", with priority. API stays the same,
44 TryNext exception raised by a hook function signals that
49 TryNext exception raised by a hook function signals that
45 current hook failed and next hook should try handling it, as
50 current hook failed and next hook should try handling it, as
46 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
51 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
47 requested configurable display hook, which is now implemented.
52 requested configurable display hook, which is now implemented.
48
53
49 2006-01-13 Ville Vainio <vivainio@gmail.com>
54 2006-01-13 Ville Vainio <vivainio@gmail.com>
50
55
51 * IPython/platutils*.py: platform specific utility functions,
56 * IPython/platutils*.py: platform specific utility functions,
52 so far only set_term_title is implemented (change terminal
57 so far only set_term_title is implemented (change terminal
53 label in windowing systems). %cd now changes the title to
58 label in windowing systems). %cd now changes the title to
54 current dir.
59 current dir.
55
60
56 * IPython/Release.py: Added myself to "authors" list,
61 * IPython/Release.py: Added myself to "authors" list,
57 had to create new files.
62 had to create new files.
58
63
59 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
64 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
60 shell escape; not a known bug but had potential to be one in the
65 shell escape; not a known bug but had potential to be one in the
61 future.
66 future.
62
67
63 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
68 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
64 extension API for IPython! See the module for usage example. Fix
69 extension API for IPython! See the module for usage example. Fix
65 OInspect for docstring-less magic functions.
70 OInspect for docstring-less magic functions.
66
71
67
72
68 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
73 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
69
74
70 * IPython/iplib.py (raw_input): temporarily deactivate all
75 * IPython/iplib.py (raw_input): temporarily deactivate all
71 attempts at allowing pasting of code with autoindent on. It
76 attempts at allowing pasting of code with autoindent on. It
72 introduced bugs (reported by Prabhu) and I can't seem to find a
77 introduced bugs (reported by Prabhu) and I can't seem to find a
73 robust combination which works in all cases. Will have to revisit
78 robust combination which works in all cases. Will have to revisit
74 later.
79 later.
75
80
76 * IPython/genutils.py: remove isspace() function. We've dropped
81 * IPython/genutils.py: remove isspace() function. We've dropped
77 2.2 compatibility, so it's OK to use the string method.
82 2.2 compatibility, so it's OK to use the string method.
78
83
79 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
84 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
80
85
81 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
86 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
82 matching what NOT to autocall on, to include all python binary
87 matching what NOT to autocall on, to include all python binary
83 operators (including things like 'and', 'or', 'is' and 'in').
88 operators (including things like 'and', 'or', 'is' and 'in').
84 Prompted by a bug report on 'foo & bar', but I realized we had
89 Prompted by a bug report on 'foo & bar', but I realized we had
85 many more potential bug cases with other operators. The regexp is
90 many more potential bug cases with other operators. The regexp is
86 self.re_exclude_auto, it's fairly commented.
91 self.re_exclude_auto, it's fairly commented.
87
92
88 2006-01-12 Ville Vainio <vivainio@gmail.com>
93 2006-01-12 Ville Vainio <vivainio@gmail.com>
89
94
90 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
95 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
91 Prettified and hardened string/backslash quoting with ipsystem(),
96 Prettified and hardened string/backslash quoting with ipsystem(),
92 ipalias() and ipmagic(). Now even \ characters are passed to
97 ipalias() and ipmagic(). Now even \ characters are passed to
93 %magics, !shell escapes and aliases exactly as they are in the
98 %magics, !shell escapes and aliases exactly as they are in the
94 ipython command line. Should improve backslash experience,
99 ipython command line. Should improve backslash experience,
95 particularly in Windows (path delimiter for some commands that
100 particularly in Windows (path delimiter for some commands that
96 won't understand '/'), but Unix benefits as well (regexps). %cd
101 won't understand '/'), but Unix benefits as well (regexps). %cd
97 magic still doesn't support backslash path delimiters, though. Also
102 magic still doesn't support backslash path delimiters, though. Also
98 deleted all pretense of supporting multiline command strings in
103 deleted all pretense of supporting multiline command strings in
99 !system or %magic commands. Thanks to Jerry McRae for suggestions.
104 !system or %magic commands. Thanks to Jerry McRae for suggestions.
100
105
101 * doc/build_doc_instructions.txt added. Documentation on how to
106 * doc/build_doc_instructions.txt added. Documentation on how to
102 use doc/update_manual.py, added yesterday. Both files contributed
107 use doc/update_manual.py, added yesterday. Both files contributed
103 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
108 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
104 doc/*.sh for deprecation at a later date.
109 doc/*.sh for deprecation at a later date.
105
110
106 * /ipython.py Added ipython.py to root directory for
111 * /ipython.py Added ipython.py to root directory for
107 zero-installation (tar xzvf ipython.tgz; cd ipython; python
112 zero-installation (tar xzvf ipython.tgz; cd ipython; python
108 ipython.py) and development convenience (no need to kee doing
113 ipython.py) and development convenience (no need to kee doing
109 "setup.py install" between changes).
114 "setup.py install" between changes).
110
115
111 * Made ! and !! shell escapes work (again) in multiline expressions:
116 * Made ! and !! shell escapes work (again) in multiline expressions:
112 if 1:
117 if 1:
113 !ls
118 !ls
114 !!ls
119 !!ls
115
120
116 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
121 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
117
122
118 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
123 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
119 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
124 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
120 module in case-insensitive installation. Was causing crashes
125 module in case-insensitive installation. Was causing crashes
121 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
126 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
122
127
123 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
128 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
124 <marienz-AT-gentoo.org>, closes
129 <marienz-AT-gentoo.org>, closes
125 http://www.scipy.net/roundup/ipython/issue51.
130 http://www.scipy.net/roundup/ipython/issue51.
126
131
127 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
132 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
128
133
129 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
134 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
130 problem of excessive CPU usage under *nix and keyboard lag under
135 problem of excessive CPU usage under *nix and keyboard lag under
131 win32.
136 win32.
132
137
133 2006-01-10 *** Released version 0.7.0
138 2006-01-10 *** Released version 0.7.0
134
139
135 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
140 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
136
141
137 * IPython/Release.py (revision): tag version number to 0.7.0,
142 * IPython/Release.py (revision): tag version number to 0.7.0,
138 ready for release.
143 ready for release.
139
144
140 * IPython/Magic.py (magic_edit): Add print statement to %edit so
145 * IPython/Magic.py (magic_edit): Add print statement to %edit so
141 it informs the user of the name of the temp. file used. This can
146 it informs the user of the name of the temp. file used. This can
142 help if you decide later to reuse that same file, so you know
147 help if you decide later to reuse that same file, so you know
143 where to copy the info from.
148 where to copy the info from.
144
149
145 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
150 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
146
151
147 * setup_bdist_egg.py: little script to build an egg. Added
152 * setup_bdist_egg.py: little script to build an egg. Added
148 support in the release tools as well.
153 support in the release tools as well.
149
154
150 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
155 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
151
156
152 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
157 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
153 version selection (new -wxversion command line and ipythonrc
158 version selection (new -wxversion command line and ipythonrc
154 parameter). Patch contributed by Arnd Baecker
159 parameter). Patch contributed by Arnd Baecker
155 <arnd.baecker-AT-web.de>.
160 <arnd.baecker-AT-web.de>.
156
161
157 * IPython/iplib.py (embed_mainloop): fix tab-completion in
162 * IPython/iplib.py (embed_mainloop): fix tab-completion in
158 embedded instances, for variables defined at the interactive
163 embedded instances, for variables defined at the interactive
159 prompt of the embedded ipython. Reported by Arnd.
164 prompt of the embedded ipython. Reported by Arnd.
160
165
161 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
166 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
162 it can be used as a (stateful) toggle, or with a direct parameter.
167 it can be used as a (stateful) toggle, or with a direct parameter.
163
168
164 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
169 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
165 could be triggered in certain cases and cause the traceback
170 could be triggered in certain cases and cause the traceback
166 printer not to work.
171 printer not to work.
167
172
168 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
173 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
169
174
170 * IPython/iplib.py (_should_recompile): Small fix, closes
175 * IPython/iplib.py (_should_recompile): Small fix, closes
171 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
176 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
172
177
173 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
178 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
174
179
175 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
180 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
176 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
181 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
177 Moad for help with tracking it down.
182 Moad for help with tracking it down.
178
183
179 * IPython/iplib.py (handle_auto): fix autocall handling for
184 * IPython/iplib.py (handle_auto): fix autocall handling for
180 objects which support BOTH __getitem__ and __call__ (so that f [x]
185 objects which support BOTH __getitem__ and __call__ (so that f [x]
181 is left alone, instead of becoming f([x]) automatically).
186 is left alone, instead of becoming f([x]) automatically).
182
187
183 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
188 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
184 Ville's patch.
189 Ville's patch.
185
190
186 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
191 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
187
192
188 * IPython/iplib.py (handle_auto): changed autocall semantics to
193 * IPython/iplib.py (handle_auto): changed autocall semantics to
189 include 'smart' mode, where the autocall transformation is NOT
194 include 'smart' mode, where the autocall transformation is NOT
190 applied if there are no arguments on the line. This allows you to
195 applied if there are no arguments on the line. This allows you to
191 just type 'foo' if foo is a callable to see its internal form,
196 just type 'foo' if foo is a callable to see its internal form,
192 instead of having it called with no arguments (typically a
197 instead of having it called with no arguments (typically a
193 mistake). The old 'full' autocall still exists: for that, you
198 mistake). The old 'full' autocall still exists: for that, you
194 need to set the 'autocall' parameter to 2 in your ipythonrc file.
199 need to set the 'autocall' parameter to 2 in your ipythonrc file.
195
200
196 * IPython/completer.py (Completer.attr_matches): add
201 * IPython/completer.py (Completer.attr_matches): add
197 tab-completion support for Enthoughts' traits. After a report by
202 tab-completion support for Enthoughts' traits. After a report by
198 Arnd and a patch by Prabhu.
203 Arnd and a patch by Prabhu.
199
204
200 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
205 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
201
206
202 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
207 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
203 Schmolck's patch to fix inspect.getinnerframes().
208 Schmolck's patch to fix inspect.getinnerframes().
204
209
205 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
210 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
206 for embedded instances, regarding handling of namespaces and items
211 for embedded instances, regarding handling of namespaces and items
207 added to the __builtin__ one. Multiple embedded instances and
212 added to the __builtin__ one. Multiple embedded instances and
208 recursive embeddings should work better now (though I'm not sure
213 recursive embeddings should work better now (though I'm not sure
209 I've got all the corner cases fixed, that code is a bit of a brain
214 I've got all the corner cases fixed, that code is a bit of a brain
210 twister).
215 twister).
211
216
212 * IPython/Magic.py (magic_edit): added support to edit in-memory
217 * IPython/Magic.py (magic_edit): added support to edit in-memory
213 macros (automatically creates the necessary temp files). %edit
218 macros (automatically creates the necessary temp files). %edit
214 also doesn't return the file contents anymore, it's just noise.
219 also doesn't return the file contents anymore, it's just noise.
215
220
216 * IPython/completer.py (Completer.attr_matches): revert change to
221 * IPython/completer.py (Completer.attr_matches): revert change to
217 complete only on attributes listed in __all__. I realized it
222 complete only on attributes listed in __all__. I realized it
218 cripples the tab-completion system as a tool for exploring the
223 cripples the tab-completion system as a tool for exploring the
219 internals of unknown libraries (it renders any non-__all__
224 internals of unknown libraries (it renders any non-__all__
220 attribute off-limits). I got bit by this when trying to see
225 attribute off-limits). I got bit by this when trying to see
221 something inside the dis module.
226 something inside the dis module.
222
227
223 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
228 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
224
229
225 * IPython/iplib.py (InteractiveShell.__init__): add .meta
230 * IPython/iplib.py (InteractiveShell.__init__): add .meta
226 namespace for users and extension writers to hold data in. This
231 namespace for users and extension writers to hold data in. This
227 follows the discussion in
232 follows the discussion in
228 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
233 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
229
234
230 * IPython/completer.py (IPCompleter.complete): small patch to help
235 * IPython/completer.py (IPCompleter.complete): small patch to help
231 tab-completion under Emacs, after a suggestion by John Barnard
236 tab-completion under Emacs, after a suggestion by John Barnard
232 <barnarj-AT-ccf.org>.
237 <barnarj-AT-ccf.org>.
233
238
234 * IPython/Magic.py (Magic.extract_input_slices): added support for
239 * IPython/Magic.py (Magic.extract_input_slices): added support for
235 the slice notation in magics to use N-M to represent numbers N...M
240 the slice notation in magics to use N-M to represent numbers N...M
236 (closed endpoints). This is used by %macro and %save.
241 (closed endpoints). This is used by %macro and %save.
237
242
238 * IPython/completer.py (Completer.attr_matches): for modules which
243 * IPython/completer.py (Completer.attr_matches): for modules which
239 define __all__, complete only on those. After a patch by Jeffrey
244 define __all__, complete only on those. After a patch by Jeffrey
240 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
245 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
241 speed up this routine.
246 speed up this routine.
242
247
243 * IPython/Logger.py (Logger.log): fix a history handling bug. I
248 * IPython/Logger.py (Logger.log): fix a history handling bug. I
244 don't know if this is the end of it, but the behavior now is
249 don't know if this is the end of it, but the behavior now is
245 certainly much more correct. Note that coupled with macros,
250 certainly much more correct. Note that coupled with macros,
246 slightly surprising (at first) behavior may occur: a macro will in
251 slightly surprising (at first) behavior may occur: a macro will in
247 general expand to multiple lines of input, so upon exiting, the
252 general expand to multiple lines of input, so upon exiting, the
248 in/out counters will both be bumped by the corresponding amount
253 in/out counters will both be bumped by the corresponding amount
249 (as if the macro's contents had been typed interactively). Typing
254 (as if the macro's contents had been typed interactively). Typing
250 %hist will reveal the intermediate (silently processed) lines.
255 %hist will reveal the intermediate (silently processed) lines.
251
256
252 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
257 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
253 pickle to fail (%run was overwriting __main__ and not restoring
258 pickle to fail (%run was overwriting __main__ and not restoring
254 it, but pickle relies on __main__ to operate).
259 it, but pickle relies on __main__ to operate).
255
260
256 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
261 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
257 using properties, but forgot to make the main InteractiveShell
262 using properties, but forgot to make the main InteractiveShell
258 class a new-style class. Properties fail silently, and
263 class a new-style class. Properties fail silently, and
259 misteriously, with old-style class (getters work, but
264 misteriously, with old-style class (getters work, but
260 setters don't do anything).
265 setters don't do anything).
261
266
262 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
267 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
263
268
264 * IPython/Magic.py (magic_history): fix history reporting bug (I
269 * IPython/Magic.py (magic_history): fix history reporting bug (I
265 know some nasties are still there, I just can't seem to find a
270 know some nasties are still there, I just can't seem to find a
266 reproducible test case to track them down; the input history is
271 reproducible test case to track them down; the input history is
267 falling out of sync...)
272 falling out of sync...)
268
273
269 * IPython/iplib.py (handle_shell_escape): fix bug where both
274 * IPython/iplib.py (handle_shell_escape): fix bug where both
270 aliases and system accesses where broken for indented code (such
275 aliases and system accesses where broken for indented code (such
271 as loops).
276 as loops).
272
277
273 * IPython/genutils.py (shell): fix small but critical bug for
278 * IPython/genutils.py (shell): fix small but critical bug for
274 win32 system access.
279 win32 system access.
275
280
276 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
281 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
277
282
278 * IPython/iplib.py (showtraceback): remove use of the
283 * IPython/iplib.py (showtraceback): remove use of the
279 sys.last_{type/value/traceback} structures, which are non
284 sys.last_{type/value/traceback} structures, which are non
280 thread-safe.
285 thread-safe.
281 (_prefilter): change control flow to ensure that we NEVER
286 (_prefilter): change control flow to ensure that we NEVER
282 introspect objects when autocall is off. This will guarantee that
287 introspect objects when autocall is off. This will guarantee that
283 having an input line of the form 'x.y', where access to attribute
288 having an input line of the form 'x.y', where access to attribute
284 'y' has side effects, doesn't trigger the side effect TWICE. It
289 'y' has side effects, doesn't trigger the side effect TWICE. It
285 is important to note that, with autocall on, these side effects
290 is important to note that, with autocall on, these side effects
286 can still happen.
291 can still happen.
287 (ipsystem): new builtin, to complete the ip{magic/alias/system}
292 (ipsystem): new builtin, to complete the ip{magic/alias/system}
288 trio. IPython offers these three kinds of special calls which are
293 trio. IPython offers these three kinds of special calls which are
289 not python code, and it's a good thing to have their call method
294 not python code, and it's a good thing to have their call method
290 be accessible as pure python functions (not just special syntax at
295 be accessible as pure python functions (not just special syntax at
291 the command line). It gives us a better internal implementation
296 the command line). It gives us a better internal implementation
292 structure, as well as exposing these for user scripting more
297 structure, as well as exposing these for user scripting more
293 cleanly.
298 cleanly.
294
299
295 * IPython/macro.py (Macro.__init__): moved macros to a standalone
300 * IPython/macro.py (Macro.__init__): moved macros to a standalone
296 file. Now that they'll be more likely to be used with the
301 file. Now that they'll be more likely to be used with the
297 persistance system (%store), I want to make sure their module path
302 persistance system (%store), I want to make sure their module path
298 doesn't change in the future, so that we don't break things for
303 doesn't change in the future, so that we don't break things for
299 users' persisted data.
304 users' persisted data.
300
305
301 * IPython/iplib.py (autoindent_update): move indentation
306 * IPython/iplib.py (autoindent_update): move indentation
302 management into the _text_ processing loop, not the keyboard
307 management into the _text_ processing loop, not the keyboard
303 interactive one. This is necessary to correctly process non-typed
308 interactive one. This is necessary to correctly process non-typed
304 multiline input (such as macros).
309 multiline input (such as macros).
305
310
306 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
311 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
307 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
312 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
308 which was producing problems in the resulting manual.
313 which was producing problems in the resulting manual.
309 (magic_whos): improve reporting of instances (show their class,
314 (magic_whos): improve reporting of instances (show their class,
310 instead of simply printing 'instance' which isn't terribly
315 instead of simply printing 'instance' which isn't terribly
311 informative).
316 informative).
312
317
313 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
318 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
314 (minor mods) to support network shares under win32.
319 (minor mods) to support network shares under win32.
315
320
316 * IPython/winconsole.py (get_console_size): add new winconsole
321 * IPython/winconsole.py (get_console_size): add new winconsole
317 module and fixes to page_dumb() to improve its behavior under
322 module and fixes to page_dumb() to improve its behavior under
318 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
323 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
319
324
320 * IPython/Magic.py (Macro): simplified Macro class to just
325 * IPython/Magic.py (Macro): simplified Macro class to just
321 subclass list. We've had only 2.2 compatibility for a very long
326 subclass list. We've had only 2.2 compatibility for a very long
322 time, yet I was still avoiding subclassing the builtin types. No
327 time, yet I was still avoiding subclassing the builtin types. No
323 more (I'm also starting to use properties, though I won't shift to
328 more (I'm also starting to use properties, though I won't shift to
324 2.3-specific features quite yet).
329 2.3-specific features quite yet).
325 (magic_store): added Ville's patch for lightweight variable
330 (magic_store): added Ville's patch for lightweight variable
326 persistence, after a request on the user list by Matt Wilkie
331 persistence, after a request on the user list by Matt Wilkie
327 <maphew-AT-gmail.com>. The new %store magic's docstring has full
332 <maphew-AT-gmail.com>. The new %store magic's docstring has full
328 details.
333 details.
329
334
330 * IPython/iplib.py (InteractiveShell.post_config_initialization):
335 * IPython/iplib.py (InteractiveShell.post_config_initialization):
331 changed the default logfile name from 'ipython.log' to
336 changed the default logfile name from 'ipython.log' to
332 'ipython_log.py'. These logs are real python files, and now that
337 'ipython_log.py'. These logs are real python files, and now that
333 we have much better multiline support, people are more likely to
338 we have much better multiline support, people are more likely to
334 want to use them as such. Might as well name them correctly.
339 want to use them as such. Might as well name them correctly.
335
340
336 * IPython/Magic.py: substantial cleanup. While we can't stop
341 * IPython/Magic.py: substantial cleanup. While we can't stop
337 using magics as mixins, due to the existing customizations 'out
342 using magics as mixins, due to the existing customizations 'out
338 there' which rely on the mixin naming conventions, at least I
343 there' which rely on the mixin naming conventions, at least I
339 cleaned out all cross-class name usage. So once we are OK with
344 cleaned out all cross-class name usage. So once we are OK with
340 breaking compatibility, the two systems can be separated.
345 breaking compatibility, the two systems can be separated.
341
346
342 * IPython/Logger.py: major cleanup. This one is NOT a mixin
347 * IPython/Logger.py: major cleanup. This one is NOT a mixin
343 anymore, and the class is a fair bit less hideous as well. New
348 anymore, and the class is a fair bit less hideous as well. New
344 features were also introduced: timestamping of input, and logging
349 features were also introduced: timestamping of input, and logging
345 of output results. These are user-visible with the -t and -o
350 of output results. These are user-visible with the -t and -o
346 options to %logstart. Closes
351 options to %logstart. Closes
347 http://www.scipy.net/roundup/ipython/issue11 and a request by
352 http://www.scipy.net/roundup/ipython/issue11 and a request by
348 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
353 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
349
354
350 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
355 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
351
356
352 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
357 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
353 better hadnle backslashes in paths. See the thread 'More Windows
358 better hadnle backslashes in paths. See the thread 'More Windows
354 questions part 2 - \/ characters revisited' on the iypthon user
359 questions part 2 - \/ characters revisited' on the iypthon user
355 list:
360 list:
356 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
361 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
357
362
358 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
363 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
359
364
360 (InteractiveShell.__init__): change threaded shells to not use the
365 (InteractiveShell.__init__): change threaded shells to not use the
361 ipython crash handler. This was causing more problems than not,
366 ipython crash handler. This was causing more problems than not,
362 as exceptions in the main thread (GUI code, typically) would
367 as exceptions in the main thread (GUI code, typically) would
363 always show up as a 'crash', when they really weren't.
368 always show up as a 'crash', when they really weren't.
364
369
365 The colors and exception mode commands (%colors/%xmode) have been
370 The colors and exception mode commands (%colors/%xmode) have been
366 synchronized to also take this into account, so users can get
371 synchronized to also take this into account, so users can get
367 verbose exceptions for their threaded code as well. I also added
372 verbose exceptions for their threaded code as well. I also added
368 support for activating pdb inside this exception handler as well,
373 support for activating pdb inside this exception handler as well,
369 so now GUI authors can use IPython's enhanced pdb at runtime.
374 so now GUI authors can use IPython's enhanced pdb at runtime.
370
375
371 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
376 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
372 true by default, and add it to the shipped ipythonrc file. Since
377 true by default, and add it to the shipped ipythonrc file. Since
373 this asks the user before proceeding, I think it's OK to make it
378 this asks the user before proceeding, I think it's OK to make it
374 true by default.
379 true by default.
375
380
376 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
381 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
377 of the previous special-casing of input in the eval loop. I think
382 of the previous special-casing of input in the eval loop. I think
378 this is cleaner, as they really are commands and shouldn't have
383 this is cleaner, as they really are commands and shouldn't have
379 a special role in the middle of the core code.
384 a special role in the middle of the core code.
380
385
381 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
386 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
382
387
383 * IPython/iplib.py (edit_syntax_error): added support for
388 * IPython/iplib.py (edit_syntax_error): added support for
384 automatically reopening the editor if the file had a syntax error
389 automatically reopening the editor if the file had a syntax error
385 in it. Thanks to scottt who provided the patch at:
390 in it. Thanks to scottt who provided the patch at:
386 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
391 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
387 version committed).
392 version committed).
388
393
389 * IPython/iplib.py (handle_normal): add suport for multi-line
394 * IPython/iplib.py (handle_normal): add suport for multi-line
390 input with emtpy lines. This fixes
395 input with emtpy lines. This fixes
391 http://www.scipy.net/roundup/ipython/issue43 and a similar
396 http://www.scipy.net/roundup/ipython/issue43 and a similar
392 discussion on the user list.
397 discussion on the user list.
393
398
394 WARNING: a behavior change is necessarily introduced to support
399 WARNING: a behavior change is necessarily introduced to support
395 blank lines: now a single blank line with whitespace does NOT
400 blank lines: now a single blank line with whitespace does NOT
396 break the input loop, which means that when autoindent is on, by
401 break the input loop, which means that when autoindent is on, by
397 default hitting return on the next (indented) line does NOT exit.
402 default hitting return on the next (indented) line does NOT exit.
398
403
399 Instead, to exit a multiline input you can either have:
404 Instead, to exit a multiline input you can either have:
400
405
401 - TWO whitespace lines (just hit return again), or
406 - TWO whitespace lines (just hit return again), or
402 - a single whitespace line of a different length than provided
407 - a single whitespace line of a different length than provided
403 by the autoindent (add or remove a space).
408 by the autoindent (add or remove a space).
404
409
405 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
410 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
406 module to better organize all readline-related functionality.
411 module to better organize all readline-related functionality.
407 I've deleted FlexCompleter and put all completion clases here.
412 I've deleted FlexCompleter and put all completion clases here.
408
413
409 * IPython/iplib.py (raw_input): improve indentation management.
414 * IPython/iplib.py (raw_input): improve indentation management.
410 It is now possible to paste indented code with autoindent on, and
415 It is now possible to paste indented code with autoindent on, and
411 the code is interpreted correctly (though it still looks bad on
416 the code is interpreted correctly (though it still looks bad on
412 screen, due to the line-oriented nature of ipython).
417 screen, due to the line-oriented nature of ipython).
413 (MagicCompleter.complete): change behavior so that a TAB key on an
418 (MagicCompleter.complete): change behavior so that a TAB key on an
414 otherwise empty line actually inserts a tab, instead of completing
419 otherwise empty line actually inserts a tab, instead of completing
415 on the entire global namespace. This makes it easier to use the
420 on the entire global namespace. This makes it easier to use the
416 TAB key for indentation. After a request by Hans Meine
421 TAB key for indentation. After a request by Hans Meine
417 <hans_meine-AT-gmx.net>
422 <hans_meine-AT-gmx.net>
418 (_prefilter): add support so that typing plain 'exit' or 'quit'
423 (_prefilter): add support so that typing plain 'exit' or 'quit'
419 does a sensible thing. Originally I tried to deviate as little as
424 does a sensible thing. Originally I tried to deviate as little as
420 possible from the default python behavior, but even that one may
425 possible from the default python behavior, but even that one may
421 change in this direction (thread on python-dev to that effect).
426 change in this direction (thread on python-dev to that effect).
422 Regardless, ipython should do the right thing even if CPython's
427 Regardless, ipython should do the right thing even if CPython's
423 '>>>' prompt doesn't.
428 '>>>' prompt doesn't.
424 (InteractiveShell): removed subclassing code.InteractiveConsole
429 (InteractiveShell): removed subclassing code.InteractiveConsole
425 class. By now we'd overridden just about all of its methods: I've
430 class. By now we'd overridden just about all of its methods: I've
426 copied the remaining two over, and now ipython is a standalone
431 copied the remaining two over, and now ipython is a standalone
427 class. This will provide a clearer picture for the chainsaw
432 class. This will provide a clearer picture for the chainsaw
428 branch refactoring.
433 branch refactoring.
429
434
430 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
435 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
431
436
432 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
437 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
433 failures for objects which break when dir() is called on them.
438 failures for objects which break when dir() is called on them.
434
439
435 * IPython/FlexCompleter.py (Completer.__init__): Added support for
440 * IPython/FlexCompleter.py (Completer.__init__): Added support for
436 distinct local and global namespaces in the completer API. This
441 distinct local and global namespaces in the completer API. This
437 change allows us top properly handle completion with distinct
442 change allows us top properly handle completion with distinct
438 scopes, including in embedded instances (this had never really
443 scopes, including in embedded instances (this had never really
439 worked correctly).
444 worked correctly).
440
445
441 Note: this introduces a change in the constructor for
446 Note: this introduces a change in the constructor for
442 MagicCompleter, as a new global_namespace parameter is now the
447 MagicCompleter, as a new global_namespace parameter is now the
443 second argument (the others were bumped one position).
448 second argument (the others were bumped one position).
444
449
445 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
450 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
446
451
447 * IPython/iplib.py (embed_mainloop): fix tab-completion in
452 * IPython/iplib.py (embed_mainloop): fix tab-completion in
448 embedded instances (which can be done now thanks to Vivian's
453 embedded instances (which can be done now thanks to Vivian's
449 frame-handling fixes for pdb).
454 frame-handling fixes for pdb).
450 (InteractiveShell.__init__): Fix namespace handling problem in
455 (InteractiveShell.__init__): Fix namespace handling problem in
451 embedded instances. We were overwriting __main__ unconditionally,
456 embedded instances. We were overwriting __main__ unconditionally,
452 and this should only be done for 'full' (non-embedded) IPython;
457 and this should only be done for 'full' (non-embedded) IPython;
453 embedded instances must respect the caller's __main__. Thanks to
458 embedded instances must respect the caller's __main__. Thanks to
454 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
459 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
455
460
456 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
461 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
457
462
458 * setup.py: added download_url to setup(). This registers the
463 * setup.py: added download_url to setup(). This registers the
459 download address at PyPI, which is not only useful to humans
464 download address at PyPI, which is not only useful to humans
460 browsing the site, but is also picked up by setuptools (the Eggs
465 browsing the site, but is also picked up by setuptools (the Eggs
461 machinery). Thanks to Ville and R. Kern for the info/discussion
466 machinery). Thanks to Ville and R. Kern for the info/discussion
462 on this.
467 on this.
463
468
464 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
469 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
465
470
466 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
471 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
467 This brings a lot of nice functionality to the pdb mode, which now
472 This brings a lot of nice functionality to the pdb mode, which now
468 has tab-completion, syntax highlighting, and better stack handling
473 has tab-completion, syntax highlighting, and better stack handling
469 than before. Many thanks to Vivian De Smedt
474 than before. Many thanks to Vivian De Smedt
470 <vivian-AT-vdesmedt.com> for the original patches.
475 <vivian-AT-vdesmedt.com> for the original patches.
471
476
472 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
477 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
473
478
474 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
479 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
475 sequence to consistently accept the banner argument. The
480 sequence to consistently accept the banner argument. The
476 inconsistency was tripping SAGE, thanks to Gary Zablackis
481 inconsistency was tripping SAGE, thanks to Gary Zablackis
477 <gzabl-AT-yahoo.com> for the report.
482 <gzabl-AT-yahoo.com> for the report.
478
483
479 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
484 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
480
485
481 * IPython/iplib.py (InteractiveShell.post_config_initialization):
486 * IPython/iplib.py (InteractiveShell.post_config_initialization):
482 Fix bug where a naked 'alias' call in the ipythonrc file would
487 Fix bug where a naked 'alias' call in the ipythonrc file would
483 cause a crash. Bug reported by Jorgen Stenarson.
488 cause a crash. Bug reported by Jorgen Stenarson.
484
489
485 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
490 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
486
491
487 * IPython/ipmaker.py (make_IPython): cleanups which should improve
492 * IPython/ipmaker.py (make_IPython): cleanups which should improve
488 startup time.
493 startup time.
489
494
490 * IPython/iplib.py (runcode): my globals 'fix' for embedded
495 * IPython/iplib.py (runcode): my globals 'fix' for embedded
491 instances had introduced a bug with globals in normal code. Now
496 instances had introduced a bug with globals in normal code. Now
492 it's working in all cases.
497 it's working in all cases.
493
498
494 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
499 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
495 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
500 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
496 has been introduced to set the default case sensitivity of the
501 has been introduced to set the default case sensitivity of the
497 searches. Users can still select either mode at runtime on a
502 searches. Users can still select either mode at runtime on a
498 per-search basis.
503 per-search basis.
499
504
500 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
505 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
501
506
502 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
507 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
503 attributes in wildcard searches for subclasses. Modified version
508 attributes in wildcard searches for subclasses. Modified version
504 of a patch by Jorgen.
509 of a patch by Jorgen.
505
510
506 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
511 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
507
512
508 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
513 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
509 embedded instances. I added a user_global_ns attribute to the
514 embedded instances. I added a user_global_ns attribute to the
510 InteractiveShell class to handle this.
515 InteractiveShell class to handle this.
511
516
512 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
517 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
513
518
514 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
519 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
515 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
520 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
516 (reported under win32, but may happen also in other platforms).
521 (reported under win32, but may happen also in other platforms).
517 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
522 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
518
523
519 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
524 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
520
525
521 * IPython/Magic.py (magic_psearch): new support for wildcard
526 * IPython/Magic.py (magic_psearch): new support for wildcard
522 patterns. Now, typing ?a*b will list all names which begin with a
527 patterns. Now, typing ?a*b will list all names which begin with a
523 and end in b, for example. The %psearch magic has full
528 and end in b, for example. The %psearch magic has full
524 docstrings. Many thanks to Jörgen Stenarson
529 docstrings. Many thanks to Jörgen Stenarson
525 <jorgen.stenarson-AT-bostream.nu>, author of the patches
530 <jorgen.stenarson-AT-bostream.nu>, author of the patches
526 implementing this functionality.
531 implementing this functionality.
527
532
528 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
533 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
529
534
530 * Manual: fixed long-standing annoyance of double-dashes (as in
535 * Manual: fixed long-standing annoyance of double-dashes (as in
531 --prefix=~, for example) being stripped in the HTML version. This
536 --prefix=~, for example) being stripped in the HTML version. This
532 is a latex2html bug, but a workaround was provided. Many thanks
537 is a latex2html bug, but a workaround was provided. Many thanks
533 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
538 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
534 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
539 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
535 rolling. This seemingly small issue had tripped a number of users
540 rolling. This seemingly small issue had tripped a number of users
536 when first installing, so I'm glad to see it gone.
541 when first installing, so I'm glad to see it gone.
537
542
538 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
543 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
539
544
540 * IPython/Extensions/numeric_formats.py: fix missing import,
545 * IPython/Extensions/numeric_formats.py: fix missing import,
541 reported by Stephen Walton.
546 reported by Stephen Walton.
542
547
543 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
548 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
544
549
545 * IPython/demo.py: finish demo module, fully documented now.
550 * IPython/demo.py: finish demo module, fully documented now.
546
551
547 * IPython/genutils.py (file_read): simple little utility to read a
552 * IPython/genutils.py (file_read): simple little utility to read a
548 file and ensure it's closed afterwards.
553 file and ensure it's closed afterwards.
549
554
550 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
555 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
551
556
552 * IPython/demo.py (Demo.__init__): added support for individually
557 * IPython/demo.py (Demo.__init__): added support for individually
553 tagging blocks for automatic execution.
558 tagging blocks for automatic execution.
554
559
555 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
560 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
556 syntax-highlighted python sources, requested by John.
561 syntax-highlighted python sources, requested by John.
557
562
558 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
563 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
559
564
560 * IPython/demo.py (Demo.again): fix bug where again() blocks after
565 * IPython/demo.py (Demo.again): fix bug where again() blocks after
561 finishing.
566 finishing.
562
567
563 * IPython/genutils.py (shlex_split): moved from Magic to here,
568 * IPython/genutils.py (shlex_split): moved from Magic to here,
564 where all 2.2 compatibility stuff lives. I needed it for demo.py.
569 where all 2.2 compatibility stuff lives. I needed it for demo.py.
565
570
566 * IPython/demo.py (Demo.__init__): added support for silent
571 * IPython/demo.py (Demo.__init__): added support for silent
567 blocks, improved marks as regexps, docstrings written.
572 blocks, improved marks as regexps, docstrings written.
568 (Demo.__init__): better docstring, added support for sys.argv.
573 (Demo.__init__): better docstring, added support for sys.argv.
569
574
570 * IPython/genutils.py (marquee): little utility used by the demo
575 * IPython/genutils.py (marquee): little utility used by the demo
571 code, handy in general.
576 code, handy in general.
572
577
573 * IPython/demo.py (Demo.__init__): new class for interactive
578 * IPython/demo.py (Demo.__init__): new class for interactive
574 demos. Not documented yet, I just wrote it in a hurry for
579 demos. Not documented yet, I just wrote it in a hurry for
575 scipy'05. Will docstring later.
580 scipy'05. Will docstring later.
576
581
577 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
582 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
578
583
579 * IPython/Shell.py (sigint_handler): Drastic simplification which
584 * IPython/Shell.py (sigint_handler): Drastic simplification which
580 also seems to make Ctrl-C work correctly across threads! This is
585 also seems to make Ctrl-C work correctly across threads! This is
581 so simple, that I can't beleive I'd missed it before. Needs more
586 so simple, that I can't beleive I'd missed it before. Needs more
582 testing, though.
587 testing, though.
583 (KBINT): Never mind, revert changes. I'm sure I'd tried something
588 (KBINT): Never mind, revert changes. I'm sure I'd tried something
584 like this before...
589 like this before...
585
590
586 * IPython/genutils.py (get_home_dir): add protection against
591 * IPython/genutils.py (get_home_dir): add protection against
587 non-dirs in win32 registry.
592 non-dirs in win32 registry.
588
593
589 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
594 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
590 bug where dict was mutated while iterating (pysh crash).
595 bug where dict was mutated while iterating (pysh crash).
591
596
592 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
597 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
593
598
594 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
599 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
595 spurious newlines added by this routine. After a report by
600 spurious newlines added by this routine. After a report by
596 F. Mantegazza.
601 F. Mantegazza.
597
602
598 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
603 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
599
604
600 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
605 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
601 calls. These were a leftover from the GTK 1.x days, and can cause
606 calls. These were a leftover from the GTK 1.x days, and can cause
602 problems in certain cases (after a report by John Hunter).
607 problems in certain cases (after a report by John Hunter).
603
608
604 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
609 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
605 os.getcwd() fails at init time. Thanks to patch from David Remahl
610 os.getcwd() fails at init time. Thanks to patch from David Remahl
606 <chmod007-AT-mac.com>.
611 <chmod007-AT-mac.com>.
607 (InteractiveShell.__init__): prevent certain special magics from
612 (InteractiveShell.__init__): prevent certain special magics from
608 being shadowed by aliases. Closes
613 being shadowed by aliases. Closes
609 http://www.scipy.net/roundup/ipython/issue41.
614 http://www.scipy.net/roundup/ipython/issue41.
610
615
611 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
616 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
612
617
613 * IPython/iplib.py (InteractiveShell.complete): Added new
618 * IPython/iplib.py (InteractiveShell.complete): Added new
614 top-level completion method to expose the completion mechanism
619 top-level completion method to expose the completion mechanism
615 beyond readline-based environments.
620 beyond readline-based environments.
616
621
617 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
622 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
618
623
619 * tools/ipsvnc (svnversion): fix svnversion capture.
624 * tools/ipsvnc (svnversion): fix svnversion capture.
620
625
621 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
626 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
622 attribute to self, which was missing. Before, it was set by a
627 attribute to self, which was missing. Before, it was set by a
623 routine which in certain cases wasn't being called, so the
628 routine which in certain cases wasn't being called, so the
624 instance could end up missing the attribute. This caused a crash.
629 instance could end up missing the attribute. This caused a crash.
625 Closes http://www.scipy.net/roundup/ipython/issue40.
630 Closes http://www.scipy.net/roundup/ipython/issue40.
626
631
627 2005-08-16 Fernando Perez <fperez@colorado.edu>
632 2005-08-16 Fernando Perez <fperez@colorado.edu>
628
633
629 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
634 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
630 contains non-string attribute. Closes
635 contains non-string attribute. Closes
631 http://www.scipy.net/roundup/ipython/issue38.
636 http://www.scipy.net/roundup/ipython/issue38.
632
637
633 2005-08-14 Fernando Perez <fperez@colorado.edu>
638 2005-08-14 Fernando Perez <fperez@colorado.edu>
634
639
635 * tools/ipsvnc: Minor improvements, to add changeset info.
640 * tools/ipsvnc: Minor improvements, to add changeset info.
636
641
637 2005-08-12 Fernando Perez <fperez@colorado.edu>
642 2005-08-12 Fernando Perez <fperez@colorado.edu>
638
643
639 * IPython/iplib.py (runsource): remove self.code_to_run_src
644 * IPython/iplib.py (runsource): remove self.code_to_run_src
640 attribute. I realized this is nothing more than
645 attribute. I realized this is nothing more than
641 '\n'.join(self.buffer), and having the same data in two different
646 '\n'.join(self.buffer), and having the same data in two different
642 places is just asking for synchronization bugs. This may impact
647 places is just asking for synchronization bugs. This may impact
643 people who have custom exception handlers, so I need to warn
648 people who have custom exception handlers, so I need to warn
644 ipython-dev about it (F. Mantegazza may use them).
649 ipython-dev about it (F. Mantegazza may use them).
645
650
646 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
651 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
647
652
648 * IPython/genutils.py: fix 2.2 compatibility (generators)
653 * IPython/genutils.py: fix 2.2 compatibility (generators)
649
654
650 2005-07-18 Fernando Perez <fperez@colorado.edu>
655 2005-07-18 Fernando Perez <fperez@colorado.edu>
651
656
652 * IPython/genutils.py (get_home_dir): fix to help users with
657 * IPython/genutils.py (get_home_dir): fix to help users with
653 invalid $HOME under win32.
658 invalid $HOME under win32.
654
659
655 2005-07-17 Fernando Perez <fperez@colorado.edu>
660 2005-07-17 Fernando Perez <fperez@colorado.edu>
656
661
657 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
662 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
658 some old hacks and clean up a bit other routines; code should be
663 some old hacks and clean up a bit other routines; code should be
659 simpler and a bit faster.
664 simpler and a bit faster.
660
665
661 * IPython/iplib.py (interact): removed some last-resort attempts
666 * IPython/iplib.py (interact): removed some last-resort attempts
662 to survive broken stdout/stderr. That code was only making it
667 to survive broken stdout/stderr. That code was only making it
663 harder to abstract out the i/o (necessary for gui integration),
668 harder to abstract out the i/o (necessary for gui integration),
664 and the crashes it could prevent were extremely rare in practice
669 and the crashes it could prevent were extremely rare in practice
665 (besides being fully user-induced in a pretty violent manner).
670 (besides being fully user-induced in a pretty violent manner).
666
671
667 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
672 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
668 Nothing major yet, but the code is simpler to read; this should
673 Nothing major yet, but the code is simpler to read; this should
669 make it easier to do more serious modifications in the future.
674 make it easier to do more serious modifications in the future.
670
675
671 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
676 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
672 which broke in .15 (thanks to a report by Ville).
677 which broke in .15 (thanks to a report by Ville).
673
678
674 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
679 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
675 be quite correct, I know next to nothing about unicode). This
680 be quite correct, I know next to nothing about unicode). This
676 will allow unicode strings to be used in prompts, amongst other
681 will allow unicode strings to be used in prompts, amongst other
677 cases. It also will prevent ipython from crashing when unicode
682 cases. It also will prevent ipython from crashing when unicode
678 shows up unexpectedly in many places. If ascii encoding fails, we
683 shows up unexpectedly in many places. If ascii encoding fails, we
679 assume utf_8. Currently the encoding is not a user-visible
684 assume utf_8. Currently the encoding is not a user-visible
680 setting, though it could be made so if there is demand for it.
685 setting, though it could be made so if there is demand for it.
681
686
682 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
687 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
683
688
684 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
689 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
685
690
686 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
691 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
687
692
688 * IPython/genutils.py: Add 2.2 compatibility here, so all other
693 * IPython/genutils.py: Add 2.2 compatibility here, so all other
689 code can work transparently for 2.2/2.3.
694 code can work transparently for 2.2/2.3.
690
695
691 2005-07-16 Fernando Perez <fperez@colorado.edu>
696 2005-07-16 Fernando Perez <fperez@colorado.edu>
692
697
693 * IPython/ultraTB.py (ExceptionColors): Make a global variable
698 * IPython/ultraTB.py (ExceptionColors): Make a global variable
694 out of the color scheme table used for coloring exception
699 out of the color scheme table used for coloring exception
695 tracebacks. This allows user code to add new schemes at runtime.
700 tracebacks. This allows user code to add new schemes at runtime.
696 This is a minimally modified version of the patch at
701 This is a minimally modified version of the patch at
697 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
702 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
698 for the contribution.
703 for the contribution.
699
704
700 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
705 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
701 slightly modified version of the patch in
706 slightly modified version of the patch in
702 http://www.scipy.net/roundup/ipython/issue34, which also allows me
707 http://www.scipy.net/roundup/ipython/issue34, which also allows me
703 to remove the previous try/except solution (which was costlier).
708 to remove the previous try/except solution (which was costlier).
704 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
709 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
705
710
706 2005-06-08 Fernando Perez <fperez@colorado.edu>
711 2005-06-08 Fernando Perez <fperez@colorado.edu>
707
712
708 * IPython/iplib.py (write/write_err): Add methods to abstract all
713 * IPython/iplib.py (write/write_err): Add methods to abstract all
709 I/O a bit more.
714 I/O a bit more.
710
715
711 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
716 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
712 warning, reported by Aric Hagberg, fix by JD Hunter.
717 warning, reported by Aric Hagberg, fix by JD Hunter.
713
718
714 2005-06-02 *** Released version 0.6.15
719 2005-06-02 *** Released version 0.6.15
715
720
716 2005-06-01 Fernando Perez <fperez@colorado.edu>
721 2005-06-01 Fernando Perez <fperez@colorado.edu>
717
722
718 * IPython/iplib.py (MagicCompleter.file_matches): Fix
723 * IPython/iplib.py (MagicCompleter.file_matches): Fix
719 tab-completion of filenames within open-quoted strings. Note that
724 tab-completion of filenames within open-quoted strings. Note that
720 this requires that in ~/.ipython/ipythonrc, users change the
725 this requires that in ~/.ipython/ipythonrc, users change the
721 readline delimiters configuration to read:
726 readline delimiters configuration to read:
722
727
723 readline_remove_delims -/~
728 readline_remove_delims -/~
724
729
725
730
726 2005-05-31 *** Released version 0.6.14
731 2005-05-31 *** Released version 0.6.14
727
732
728 2005-05-29 Fernando Perez <fperez@colorado.edu>
733 2005-05-29 Fernando Perez <fperez@colorado.edu>
729
734
730 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
735 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
731 with files not on the filesystem. Reported by Eliyahu Sandler
736 with files not on the filesystem. Reported by Eliyahu Sandler
732 <eli@gondolin.net>
737 <eli@gondolin.net>
733
738
734 2005-05-22 Fernando Perez <fperez@colorado.edu>
739 2005-05-22 Fernando Perez <fperez@colorado.edu>
735
740
736 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
741 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
737 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
742 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
738
743
739 2005-05-19 Fernando Perez <fperez@colorado.edu>
744 2005-05-19 Fernando Perez <fperez@colorado.edu>
740
745
741 * IPython/iplib.py (safe_execfile): close a file which could be
746 * IPython/iplib.py (safe_execfile): close a file which could be
742 left open (causing problems in win32, which locks open files).
747 left open (causing problems in win32, which locks open files).
743 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
748 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
744
749
745 2005-05-18 Fernando Perez <fperez@colorado.edu>
750 2005-05-18 Fernando Perez <fperez@colorado.edu>
746
751
747 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
752 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
748 keyword arguments correctly to safe_execfile().
753 keyword arguments correctly to safe_execfile().
749
754
750 2005-05-13 Fernando Perez <fperez@colorado.edu>
755 2005-05-13 Fernando Perez <fperez@colorado.edu>
751
756
752 * ipython.1: Added info about Qt to manpage, and threads warning
757 * ipython.1: Added info about Qt to manpage, and threads warning
753 to usage page (invoked with --help).
758 to usage page (invoked with --help).
754
759
755 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
760 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
756 new matcher (it goes at the end of the priority list) to do
761 new matcher (it goes at the end of the priority list) to do
757 tab-completion on named function arguments. Submitted by George
762 tab-completion on named function arguments. Submitted by George
758 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
763 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
759 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
764 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
760 for more details.
765 for more details.
761
766
762 * IPython/Magic.py (magic_run): Added new -e flag to ignore
767 * IPython/Magic.py (magic_run): Added new -e flag to ignore
763 SystemExit exceptions in the script being run. Thanks to a report
768 SystemExit exceptions in the script being run. Thanks to a report
764 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
769 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
765 producing very annoying behavior when running unit tests.
770 producing very annoying behavior when running unit tests.
766
771
767 2005-05-12 Fernando Perez <fperez@colorado.edu>
772 2005-05-12 Fernando Perez <fperez@colorado.edu>
768
773
769 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
774 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
770 which I'd broken (again) due to a changed regexp. In the process,
775 which I'd broken (again) due to a changed regexp. In the process,
771 added ';' as an escape to auto-quote the whole line without
776 added ';' as an escape to auto-quote the whole line without
772 splitting its arguments. Thanks to a report by Jerry McRae
777 splitting its arguments. Thanks to a report by Jerry McRae
773 <qrs0xyc02-AT-sneakemail.com>.
778 <qrs0xyc02-AT-sneakemail.com>.
774
779
775 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
780 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
776 possible crashes caused by a TokenError. Reported by Ed Schofield
781 possible crashes caused by a TokenError. Reported by Ed Schofield
777 <schofield-AT-ftw.at>.
782 <schofield-AT-ftw.at>.
778
783
779 2005-05-06 Fernando Perez <fperez@colorado.edu>
784 2005-05-06 Fernando Perez <fperez@colorado.edu>
780
785
781 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
786 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
782
787
783 2005-04-29 Fernando Perez <fperez@colorado.edu>
788 2005-04-29 Fernando Perez <fperez@colorado.edu>
784
789
785 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
790 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
786 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
791 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
787 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
792 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
788 which provides support for Qt interactive usage (similar to the
793 which provides support for Qt interactive usage (similar to the
789 existing one for WX and GTK). This had been often requested.
794 existing one for WX and GTK). This had been often requested.
790
795
791 2005-04-14 *** Released version 0.6.13
796 2005-04-14 *** Released version 0.6.13
792
797
793 2005-04-08 Fernando Perez <fperez@colorado.edu>
798 2005-04-08 Fernando Perez <fperez@colorado.edu>
794
799
795 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
800 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
796 from _ofind, which gets called on almost every input line. Now,
801 from _ofind, which gets called on almost every input line. Now,
797 we only try to get docstrings if they are actually going to be
802 we only try to get docstrings if they are actually going to be
798 used (the overhead of fetching unnecessary docstrings can be
803 used (the overhead of fetching unnecessary docstrings can be
799 noticeable for certain objects, such as Pyro proxies).
804 noticeable for certain objects, such as Pyro proxies).
800
805
801 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
806 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
802 for completers. For some reason I had been passing them the state
807 for completers. For some reason I had been passing them the state
803 variable, which completers never actually need, and was in
808 variable, which completers never actually need, and was in
804 conflict with the rlcompleter API. Custom completers ONLY need to
809 conflict with the rlcompleter API. Custom completers ONLY need to
805 take the text parameter.
810 take the text parameter.
806
811
807 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
812 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
808 work correctly in pysh. I've also moved all the logic which used
813 work correctly in pysh. I've also moved all the logic which used
809 to be in pysh.py here, which will prevent problems with future
814 to be in pysh.py here, which will prevent problems with future
810 upgrades. However, this time I must warn users to update their
815 upgrades. However, this time I must warn users to update their
811 pysh profile to include the line
816 pysh profile to include the line
812
817
813 import_all IPython.Extensions.InterpreterExec
818 import_all IPython.Extensions.InterpreterExec
814
819
815 because otherwise things won't work for them. They MUST also
820 because otherwise things won't work for them. They MUST also
816 delete pysh.py and the line
821 delete pysh.py and the line
817
822
818 execfile pysh.py
823 execfile pysh.py
819
824
820 from their ipythonrc-pysh.
825 from their ipythonrc-pysh.
821
826
822 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
827 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
823 robust in the face of objects whose dir() returns non-strings
828 robust in the face of objects whose dir() returns non-strings
824 (which it shouldn't, but some broken libs like ITK do). Thanks to
829 (which it shouldn't, but some broken libs like ITK do). Thanks to
825 a patch by John Hunter (implemented differently, though). Also
830 a patch by John Hunter (implemented differently, though). Also
826 minor improvements by using .extend instead of + on lists.
831 minor improvements by using .extend instead of + on lists.
827
832
828 * pysh.py:
833 * pysh.py:
829
834
830 2005-04-06 Fernando Perez <fperez@colorado.edu>
835 2005-04-06 Fernando Perez <fperez@colorado.edu>
831
836
832 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
837 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
833 by default, so that all users benefit from it. Those who don't
838 by default, so that all users benefit from it. Those who don't
834 want it can still turn it off.
839 want it can still turn it off.
835
840
836 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
841 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
837 config file, I'd forgotten about this, so users were getting it
842 config file, I'd forgotten about this, so users were getting it
838 off by default.
843 off by default.
839
844
840 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
845 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
841 consistency. Now magics can be called in multiline statements,
846 consistency. Now magics can be called in multiline statements,
842 and python variables can be expanded in magic calls via $var.
847 and python variables can be expanded in magic calls via $var.
843 This makes the magic system behave just like aliases or !system
848 This makes the magic system behave just like aliases or !system
844 calls.
849 calls.
845
850
846 2005-03-28 Fernando Perez <fperez@colorado.edu>
851 2005-03-28 Fernando Perez <fperez@colorado.edu>
847
852
848 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
853 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
849 expensive string additions for building command. Add support for
854 expensive string additions for building command. Add support for
850 trailing ';' when autocall is used.
855 trailing ';' when autocall is used.
851
856
852 2005-03-26 Fernando Perez <fperez@colorado.edu>
857 2005-03-26 Fernando Perez <fperez@colorado.edu>
853
858
854 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
859 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
855 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
860 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
856 ipython.el robust against prompts with any number of spaces
861 ipython.el robust against prompts with any number of spaces
857 (including 0) after the ':' character.
862 (including 0) after the ':' character.
858
863
859 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
864 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
860 continuation prompt, which misled users to think the line was
865 continuation prompt, which misled users to think the line was
861 already indented. Closes debian Bug#300847, reported to me by
866 already indented. Closes debian Bug#300847, reported to me by
862 Norbert Tretkowski <tretkowski-AT-inittab.de>.
867 Norbert Tretkowski <tretkowski-AT-inittab.de>.
863
868
864 2005-03-23 Fernando Perez <fperez@colorado.edu>
869 2005-03-23 Fernando Perez <fperez@colorado.edu>
865
870
866 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
871 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
867 properly aligned if they have embedded newlines.
872 properly aligned if they have embedded newlines.
868
873
869 * IPython/iplib.py (runlines): Add a public method to expose
874 * IPython/iplib.py (runlines): Add a public method to expose
870 IPython's code execution machinery, so that users can run strings
875 IPython's code execution machinery, so that users can run strings
871 as if they had been typed at the prompt interactively.
876 as if they had been typed at the prompt interactively.
872 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
877 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
873 methods which can call the system shell, but with python variable
878 methods which can call the system shell, but with python variable
874 expansion. The three such methods are: __IPYTHON__.system,
879 expansion. The three such methods are: __IPYTHON__.system,
875 .getoutput and .getoutputerror. These need to be documented in a
880 .getoutput and .getoutputerror. These need to be documented in a
876 'public API' section (to be written) of the manual.
881 'public API' section (to be written) of the manual.
877
882
878 2005-03-20 Fernando Perez <fperez@colorado.edu>
883 2005-03-20 Fernando Perez <fperez@colorado.edu>
879
884
880 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
885 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
881 for custom exception handling. This is quite powerful, and it
886 for custom exception handling. This is quite powerful, and it
882 allows for user-installable exception handlers which can trap
887 allows for user-installable exception handlers which can trap
883 custom exceptions at runtime and treat them separately from
888 custom exceptions at runtime and treat them separately from
884 IPython's default mechanisms. At the request of Frédéric
889 IPython's default mechanisms. At the request of Frédéric
885 Mantegazza <mantegazza-AT-ill.fr>.
890 Mantegazza <mantegazza-AT-ill.fr>.
886 (InteractiveShell.set_custom_completer): public API function to
891 (InteractiveShell.set_custom_completer): public API function to
887 add new completers at runtime.
892 add new completers at runtime.
888
893
889 2005-03-19 Fernando Perez <fperez@colorado.edu>
894 2005-03-19 Fernando Perez <fperez@colorado.edu>
890
895
891 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
896 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
892 allow objects which provide their docstrings via non-standard
897 allow objects which provide their docstrings via non-standard
893 mechanisms (like Pyro proxies) to still be inspected by ipython's
898 mechanisms (like Pyro proxies) to still be inspected by ipython's
894 ? system.
899 ? system.
895
900
896 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
901 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
897 automatic capture system. I tried quite hard to make it work
902 automatic capture system. I tried quite hard to make it work
898 reliably, and simply failed. I tried many combinations with the
903 reliably, and simply failed. I tried many combinations with the
899 subprocess module, but eventually nothing worked in all needed
904 subprocess module, but eventually nothing worked in all needed
900 cases (not blocking stdin for the child, duplicating stdout
905 cases (not blocking stdin for the child, duplicating stdout
901 without blocking, etc). The new %sc/%sx still do capture to these
906 without blocking, etc). The new %sc/%sx still do capture to these
902 magical list/string objects which make shell use much more
907 magical list/string objects which make shell use much more
903 conveninent, so not all is lost.
908 conveninent, so not all is lost.
904
909
905 XXX - FIX MANUAL for the change above!
910 XXX - FIX MANUAL for the change above!
906
911
907 (runsource): I copied code.py's runsource() into ipython to modify
912 (runsource): I copied code.py's runsource() into ipython to modify
908 it a bit. Now the code object and source to be executed are
913 it a bit. Now the code object and source to be executed are
909 stored in ipython. This makes this info accessible to third-party
914 stored in ipython. This makes this info accessible to third-party
910 tools, like custom exception handlers. After a request by Frédéric
915 tools, like custom exception handlers. After a request by Frédéric
911 Mantegazza <mantegazza-AT-ill.fr>.
916 Mantegazza <mantegazza-AT-ill.fr>.
912
917
913 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
918 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
914 history-search via readline (like C-p/C-n). I'd wanted this for a
919 history-search via readline (like C-p/C-n). I'd wanted this for a
915 long time, but only recently found out how to do it. For users
920 long time, but only recently found out how to do it. For users
916 who already have their ipythonrc files made and want this, just
921 who already have their ipythonrc files made and want this, just
917 add:
922 add:
918
923
919 readline_parse_and_bind "\e[A": history-search-backward
924 readline_parse_and_bind "\e[A": history-search-backward
920 readline_parse_and_bind "\e[B": history-search-forward
925 readline_parse_and_bind "\e[B": history-search-forward
921
926
922 2005-03-18 Fernando Perez <fperez@colorado.edu>
927 2005-03-18 Fernando Perez <fperez@colorado.edu>
923
928
924 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
929 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
925 LSString and SList classes which allow transparent conversions
930 LSString and SList classes which allow transparent conversions
926 between list mode and whitespace-separated string.
931 between list mode and whitespace-separated string.
927 (magic_r): Fix recursion problem in %r.
932 (magic_r): Fix recursion problem in %r.
928
933
929 * IPython/genutils.py (LSString): New class to be used for
934 * IPython/genutils.py (LSString): New class to be used for
930 automatic storage of the results of all alias/system calls in _o
935 automatic storage of the results of all alias/system calls in _o
931 and _e (stdout/err). These provide a .l/.list attribute which
936 and _e (stdout/err). These provide a .l/.list attribute which
932 does automatic splitting on newlines. This means that for most
937 does automatic splitting on newlines. This means that for most
933 uses, you'll never need to do capturing of output with %sc/%sx
938 uses, you'll never need to do capturing of output with %sc/%sx
934 anymore, since ipython keeps this always done for you. Note that
939 anymore, since ipython keeps this always done for you. Note that
935 only the LAST results are stored, the _o/e variables are
940 only the LAST results are stored, the _o/e variables are
936 overwritten on each call. If you need to save their contents
941 overwritten on each call. If you need to save their contents
937 further, simply bind them to any other name.
942 further, simply bind them to any other name.
938
943
939 2005-03-17 Fernando Perez <fperez@colorado.edu>
944 2005-03-17 Fernando Perez <fperez@colorado.edu>
940
945
941 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
946 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
942 prompt namespace handling.
947 prompt namespace handling.
943
948
944 2005-03-16 Fernando Perez <fperez@colorado.edu>
949 2005-03-16 Fernando Perez <fperez@colorado.edu>
945
950
946 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
951 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
947 classic prompts to be '>>> ' (final space was missing, and it
952 classic prompts to be '>>> ' (final space was missing, and it
948 trips the emacs python mode).
953 trips the emacs python mode).
949 (BasePrompt.__str__): Added safe support for dynamic prompt
954 (BasePrompt.__str__): Added safe support for dynamic prompt
950 strings. Now you can set your prompt string to be '$x', and the
955 strings. Now you can set your prompt string to be '$x', and the
951 value of x will be printed from your interactive namespace. The
956 value of x will be printed from your interactive namespace. The
952 interpolation syntax includes the full Itpl support, so
957 interpolation syntax includes the full Itpl support, so
953 ${foo()+x+bar()} is a valid prompt string now, and the function
958 ${foo()+x+bar()} is a valid prompt string now, and the function
954 calls will be made at runtime.
959 calls will be made at runtime.
955
960
956 2005-03-15 Fernando Perez <fperez@colorado.edu>
961 2005-03-15 Fernando Perez <fperez@colorado.edu>
957
962
958 * IPython/Magic.py (magic_history): renamed %hist to %history, to
963 * IPython/Magic.py (magic_history): renamed %hist to %history, to
959 avoid name clashes in pylab. %hist still works, it just forwards
964 avoid name clashes in pylab. %hist still works, it just forwards
960 the call to %history.
965 the call to %history.
961
966
962 2005-03-02 *** Released version 0.6.12
967 2005-03-02 *** Released version 0.6.12
963
968
964 2005-03-02 Fernando Perez <fperez@colorado.edu>
969 2005-03-02 Fernando Perez <fperez@colorado.edu>
965
970
966 * IPython/iplib.py (handle_magic): log magic calls properly as
971 * IPython/iplib.py (handle_magic): log magic calls properly as
967 ipmagic() function calls.
972 ipmagic() function calls.
968
973
969 * IPython/Magic.py (magic_time): Improved %time to support
974 * IPython/Magic.py (magic_time): Improved %time to support
970 statements and provide wall-clock as well as CPU time.
975 statements and provide wall-clock as well as CPU time.
971
976
972 2005-02-27 Fernando Perez <fperez@colorado.edu>
977 2005-02-27 Fernando Perez <fperez@colorado.edu>
973
978
974 * IPython/hooks.py: New hooks module, to expose user-modifiable
979 * IPython/hooks.py: New hooks module, to expose user-modifiable
975 IPython functionality in a clean manner. For now only the editor
980 IPython functionality in a clean manner. For now only the editor
976 hook is actually written, and other thigns which I intend to turn
981 hook is actually written, and other thigns which I intend to turn
977 into proper hooks aren't yet there. The display and prefilter
982 into proper hooks aren't yet there. The display and prefilter
978 stuff, for example, should be hooks. But at least now the
983 stuff, for example, should be hooks. But at least now the
979 framework is in place, and the rest can be moved here with more
984 framework is in place, and the rest can be moved here with more
980 time later. IPython had had a .hooks variable for a long time for
985 time later. IPython had had a .hooks variable for a long time for
981 this purpose, but I'd never actually used it for anything.
986 this purpose, but I'd never actually used it for anything.
982
987
983 2005-02-26 Fernando Perez <fperez@colorado.edu>
988 2005-02-26 Fernando Perez <fperez@colorado.edu>
984
989
985 * IPython/ipmaker.py (make_IPython): make the default ipython
990 * IPython/ipmaker.py (make_IPython): make the default ipython
986 directory be called _ipython under win32, to follow more the
991 directory be called _ipython under win32, to follow more the
987 naming peculiarities of that platform (where buggy software like
992 naming peculiarities of that platform (where buggy software like
988 Visual Sourcesafe breaks with .named directories). Reported by
993 Visual Sourcesafe breaks with .named directories). Reported by
989 Ville Vainio.
994 Ville Vainio.
990
995
991 2005-02-23 Fernando Perez <fperez@colorado.edu>
996 2005-02-23 Fernando Perez <fperez@colorado.edu>
992
997
993 * IPython/iplib.py (InteractiveShell.__init__): removed a few
998 * IPython/iplib.py (InteractiveShell.__init__): removed a few
994 auto_aliases for win32 which were causing problems. Users can
999 auto_aliases for win32 which were causing problems. Users can
995 define the ones they personally like.
1000 define the ones they personally like.
996
1001
997 2005-02-21 Fernando Perez <fperez@colorado.edu>
1002 2005-02-21 Fernando Perez <fperez@colorado.edu>
998
1003
999 * IPython/Magic.py (magic_time): new magic to time execution of
1004 * IPython/Magic.py (magic_time): new magic to time execution of
1000 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1005 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1001
1006
1002 2005-02-19 Fernando Perez <fperez@colorado.edu>
1007 2005-02-19 Fernando Perez <fperez@colorado.edu>
1003
1008
1004 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1009 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1005 into keys (for prompts, for example).
1010 into keys (for prompts, for example).
1006
1011
1007 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1012 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1008 prompts in case users want them. This introduces a small behavior
1013 prompts in case users want them. This introduces a small behavior
1009 change: ipython does not automatically add a space to all prompts
1014 change: ipython does not automatically add a space to all prompts
1010 anymore. To get the old prompts with a space, users should add it
1015 anymore. To get the old prompts with a space, users should add it
1011 manually to their ipythonrc file, so for example prompt_in1 should
1016 manually to their ipythonrc file, so for example prompt_in1 should
1012 now read 'In [\#]: ' instead of 'In [\#]:'.
1017 now read 'In [\#]: ' instead of 'In [\#]:'.
1013 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1018 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1014 file) to control left-padding of secondary prompts.
1019 file) to control left-padding of secondary prompts.
1015
1020
1016 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1021 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1017 the profiler can't be imported. Fix for Debian, which removed
1022 the profiler can't be imported. Fix for Debian, which removed
1018 profile.py because of License issues. I applied a slightly
1023 profile.py because of License issues. I applied a slightly
1019 modified version of the original Debian patch at
1024 modified version of the original Debian patch at
1020 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1025 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1021
1026
1022 2005-02-17 Fernando Perez <fperez@colorado.edu>
1027 2005-02-17 Fernando Perez <fperez@colorado.edu>
1023
1028
1024 * IPython/genutils.py (native_line_ends): Fix bug which would
1029 * IPython/genutils.py (native_line_ends): Fix bug which would
1025 cause improper line-ends under win32 b/c I was not opening files
1030 cause improper line-ends under win32 b/c I was not opening files
1026 in binary mode. Bug report and fix thanks to Ville.
1031 in binary mode. Bug report and fix thanks to Ville.
1027
1032
1028 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1033 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1029 trying to catch spurious foo[1] autocalls. My fix actually broke
1034 trying to catch spurious foo[1] autocalls. My fix actually broke
1030 ',/' autoquote/call with explicit escape (bad regexp).
1035 ',/' autoquote/call with explicit escape (bad regexp).
1031
1036
1032 2005-02-15 *** Released version 0.6.11
1037 2005-02-15 *** Released version 0.6.11
1033
1038
1034 2005-02-14 Fernando Perez <fperez@colorado.edu>
1039 2005-02-14 Fernando Perez <fperez@colorado.edu>
1035
1040
1036 * IPython/background_jobs.py: New background job management
1041 * IPython/background_jobs.py: New background job management
1037 subsystem. This is implemented via a new set of classes, and
1042 subsystem. This is implemented via a new set of classes, and
1038 IPython now provides a builtin 'jobs' object for background job
1043 IPython now provides a builtin 'jobs' object for background job
1039 execution. A convenience %bg magic serves as a lightweight
1044 execution. A convenience %bg magic serves as a lightweight
1040 frontend for starting the more common type of calls. This was
1045 frontend for starting the more common type of calls. This was
1041 inspired by discussions with B. Granger and the BackgroundCommand
1046 inspired by discussions with B. Granger and the BackgroundCommand
1042 class described in the book Python Scripting for Computational
1047 class described in the book Python Scripting for Computational
1043 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1048 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1044 (although ultimately no code from this text was used, as IPython's
1049 (although ultimately no code from this text was used, as IPython's
1045 system is a separate implementation).
1050 system is a separate implementation).
1046
1051
1047 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1052 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1048 to control the completion of single/double underscore names
1053 to control the completion of single/double underscore names
1049 separately. As documented in the example ipytonrc file, the
1054 separately. As documented in the example ipytonrc file, the
1050 readline_omit__names variable can now be set to 2, to omit even
1055 readline_omit__names variable can now be set to 2, to omit even
1051 single underscore names. Thanks to a patch by Brian Wong
1056 single underscore names. Thanks to a patch by Brian Wong
1052 <BrianWong-AT-AirgoNetworks.Com>.
1057 <BrianWong-AT-AirgoNetworks.Com>.
1053 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1058 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1054 be autocalled as foo([1]) if foo were callable. A problem for
1059 be autocalled as foo([1]) if foo were callable. A problem for
1055 things which are both callable and implement __getitem__.
1060 things which are both callable and implement __getitem__.
1056 (init_readline): Fix autoindentation for win32. Thanks to a patch
1061 (init_readline): Fix autoindentation for win32. Thanks to a patch
1057 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1062 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1058
1063
1059 2005-02-12 Fernando Perez <fperez@colorado.edu>
1064 2005-02-12 Fernando Perez <fperez@colorado.edu>
1060
1065
1061 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1066 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1062 which I had written long ago to sort out user error messages which
1067 which I had written long ago to sort out user error messages which
1063 may occur during startup. This seemed like a good idea initially,
1068 may occur during startup. This seemed like a good idea initially,
1064 but it has proven a disaster in retrospect. I don't want to
1069 but it has proven a disaster in retrospect. I don't want to
1065 change much code for now, so my fix is to set the internal 'debug'
1070 change much code for now, so my fix is to set the internal 'debug'
1066 flag to true everywhere, whose only job was precisely to control
1071 flag to true everywhere, whose only job was precisely to control
1067 this subsystem. This closes issue 28 (as well as avoiding all
1072 this subsystem. This closes issue 28 (as well as avoiding all
1068 sorts of strange hangups which occur from time to time).
1073 sorts of strange hangups which occur from time to time).
1069
1074
1070 2005-02-07 Fernando Perez <fperez@colorado.edu>
1075 2005-02-07 Fernando Perez <fperez@colorado.edu>
1071
1076
1072 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1077 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1073 previous call produced a syntax error.
1078 previous call produced a syntax error.
1074
1079
1075 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1080 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1076 classes without constructor.
1081 classes without constructor.
1077
1082
1078 2005-02-06 Fernando Perez <fperez@colorado.edu>
1083 2005-02-06 Fernando Perez <fperez@colorado.edu>
1079
1084
1080 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1085 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1081 completions with the results of each matcher, so we return results
1086 completions with the results of each matcher, so we return results
1082 to the user from all namespaces. This breaks with ipython
1087 to the user from all namespaces. This breaks with ipython
1083 tradition, but I think it's a nicer behavior. Now you get all
1088 tradition, but I think it's a nicer behavior. Now you get all
1084 possible completions listed, from all possible namespaces (python,
1089 possible completions listed, from all possible namespaces (python,
1085 filesystem, magics...) After a request by John Hunter
1090 filesystem, magics...) After a request by John Hunter
1086 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1091 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1087
1092
1088 2005-02-05 Fernando Perez <fperez@colorado.edu>
1093 2005-02-05 Fernando Perez <fperez@colorado.edu>
1089
1094
1090 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1095 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1091 the call had quote characters in it (the quotes were stripped).
1096 the call had quote characters in it (the quotes were stripped).
1092
1097
1093 2005-01-31 Fernando Perez <fperez@colorado.edu>
1098 2005-01-31 Fernando Perez <fperez@colorado.edu>
1094
1099
1095 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1100 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1096 Itpl.itpl() to make the code more robust against psyco
1101 Itpl.itpl() to make the code more robust against psyco
1097 optimizations.
1102 optimizations.
1098
1103
1099 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1104 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1100 of causing an exception. Quicker, cleaner.
1105 of causing an exception. Quicker, cleaner.
1101
1106
1102 2005-01-28 Fernando Perez <fperez@colorado.edu>
1107 2005-01-28 Fernando Perez <fperez@colorado.edu>
1103
1108
1104 * scripts/ipython_win_post_install.py (install): hardcode
1109 * scripts/ipython_win_post_install.py (install): hardcode
1105 sys.prefix+'python.exe' as the executable path. It turns out that
1110 sys.prefix+'python.exe' as the executable path. It turns out that
1106 during the post-installation run, sys.executable resolves to the
1111 during the post-installation run, sys.executable resolves to the
1107 name of the binary installer! I should report this as a distutils
1112 name of the binary installer! I should report this as a distutils
1108 bug, I think. I updated the .10 release with this tiny fix, to
1113 bug, I think. I updated the .10 release with this tiny fix, to
1109 avoid annoying the lists further.
1114 avoid annoying the lists further.
1110
1115
1111 2005-01-27 *** Released version 0.6.10
1116 2005-01-27 *** Released version 0.6.10
1112
1117
1113 2005-01-27 Fernando Perez <fperez@colorado.edu>
1118 2005-01-27 Fernando Perez <fperez@colorado.edu>
1114
1119
1115 * IPython/numutils.py (norm): Added 'inf' as optional name for
1120 * IPython/numutils.py (norm): Added 'inf' as optional name for
1116 L-infinity norm, included references to mathworld.com for vector
1121 L-infinity norm, included references to mathworld.com for vector
1117 norm definitions.
1122 norm definitions.
1118 (amin/amax): added amin/amax for array min/max. Similar to what
1123 (amin/amax): added amin/amax for array min/max. Similar to what
1119 pylab ships with after the recent reorganization of names.
1124 pylab ships with after the recent reorganization of names.
1120 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1125 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1121
1126
1122 * ipython.el: committed Alex's recent fixes and improvements.
1127 * ipython.el: committed Alex's recent fixes and improvements.
1123 Tested with python-mode from CVS, and it looks excellent. Since
1128 Tested with python-mode from CVS, and it looks excellent. Since
1124 python-mode hasn't released anything in a while, I'm temporarily
1129 python-mode hasn't released anything in a while, I'm temporarily
1125 putting a copy of today's CVS (v 4.70) of python-mode in:
1130 putting a copy of today's CVS (v 4.70) of python-mode in:
1126 http://ipython.scipy.org/tmp/python-mode.el
1131 http://ipython.scipy.org/tmp/python-mode.el
1127
1132
1128 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1133 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1129 sys.executable for the executable name, instead of assuming it's
1134 sys.executable for the executable name, instead of assuming it's
1130 called 'python.exe' (the post-installer would have produced broken
1135 called 'python.exe' (the post-installer would have produced broken
1131 setups on systems with a differently named python binary).
1136 setups on systems with a differently named python binary).
1132
1137
1133 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1138 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1134 references to os.linesep, to make the code more
1139 references to os.linesep, to make the code more
1135 platform-independent. This is also part of the win32 coloring
1140 platform-independent. This is also part of the win32 coloring
1136 fixes.
1141 fixes.
1137
1142
1138 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1143 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1139 lines, which actually cause coloring bugs because the length of
1144 lines, which actually cause coloring bugs because the length of
1140 the line is very difficult to correctly compute with embedded
1145 the line is very difficult to correctly compute with embedded
1141 escapes. This was the source of all the coloring problems under
1146 escapes. This was the source of all the coloring problems under
1142 Win32. I think that _finally_, Win32 users have a properly
1147 Win32. I think that _finally_, Win32 users have a properly
1143 working ipython in all respects. This would never have happened
1148 working ipython in all respects. This would never have happened
1144 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1149 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1145
1150
1146 2005-01-26 *** Released version 0.6.9
1151 2005-01-26 *** Released version 0.6.9
1147
1152
1148 2005-01-25 Fernando Perez <fperez@colorado.edu>
1153 2005-01-25 Fernando Perez <fperez@colorado.edu>
1149
1154
1150 * setup.py: finally, we have a true Windows installer, thanks to
1155 * setup.py: finally, we have a true Windows installer, thanks to
1151 the excellent work of Viktor Ransmayr
1156 the excellent work of Viktor Ransmayr
1152 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1157 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1153 Windows users. The setup routine is quite a bit cleaner thanks to
1158 Windows users. The setup routine is quite a bit cleaner thanks to
1154 this, and the post-install script uses the proper functions to
1159 this, and the post-install script uses the proper functions to
1155 allow a clean de-installation using the standard Windows Control
1160 allow a clean de-installation using the standard Windows Control
1156 Panel.
1161 Panel.
1157
1162
1158 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1163 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1159 environment variable under all OSes (including win32) if
1164 environment variable under all OSes (including win32) if
1160 available. This will give consistency to win32 users who have set
1165 available. This will give consistency to win32 users who have set
1161 this variable for any reason. If os.environ['HOME'] fails, the
1166 this variable for any reason. If os.environ['HOME'] fails, the
1162 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1167 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1163
1168
1164 2005-01-24 Fernando Perez <fperez@colorado.edu>
1169 2005-01-24 Fernando Perez <fperez@colorado.edu>
1165
1170
1166 * IPython/numutils.py (empty_like): add empty_like(), similar to
1171 * IPython/numutils.py (empty_like): add empty_like(), similar to
1167 zeros_like() but taking advantage of the new empty() Numeric routine.
1172 zeros_like() but taking advantage of the new empty() Numeric routine.
1168
1173
1169 2005-01-23 *** Released version 0.6.8
1174 2005-01-23 *** Released version 0.6.8
1170
1175
1171 2005-01-22 Fernando Perez <fperez@colorado.edu>
1176 2005-01-22 Fernando Perez <fperez@colorado.edu>
1172
1177
1173 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1178 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1174 automatic show() calls. After discussing things with JDH, it
1179 automatic show() calls. After discussing things with JDH, it
1175 turns out there are too many corner cases where this can go wrong.
1180 turns out there are too many corner cases where this can go wrong.
1176 It's best not to try to be 'too smart', and simply have ipython
1181 It's best not to try to be 'too smart', and simply have ipython
1177 reproduce as much as possible the default behavior of a normal
1182 reproduce as much as possible the default behavior of a normal
1178 python shell.
1183 python shell.
1179
1184
1180 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1185 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1181 line-splitting regexp and _prefilter() to avoid calling getattr()
1186 line-splitting regexp and _prefilter() to avoid calling getattr()
1182 on assignments. This closes
1187 on assignments. This closes
1183 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1188 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1184 readline uses getattr(), so a simple <TAB> keypress is still
1189 readline uses getattr(), so a simple <TAB> keypress is still
1185 enough to trigger getattr() calls on an object.
1190 enough to trigger getattr() calls on an object.
1186
1191
1187 2005-01-21 Fernando Perez <fperez@colorado.edu>
1192 2005-01-21 Fernando Perez <fperez@colorado.edu>
1188
1193
1189 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1194 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1190 docstring under pylab so it doesn't mask the original.
1195 docstring under pylab so it doesn't mask the original.
1191
1196
1192 2005-01-21 *** Released version 0.6.7
1197 2005-01-21 *** Released version 0.6.7
1193
1198
1194 2005-01-21 Fernando Perez <fperez@colorado.edu>
1199 2005-01-21 Fernando Perez <fperez@colorado.edu>
1195
1200
1196 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1201 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1197 signal handling for win32 users in multithreaded mode.
1202 signal handling for win32 users in multithreaded mode.
1198
1203
1199 2005-01-17 Fernando Perez <fperez@colorado.edu>
1204 2005-01-17 Fernando Perez <fperez@colorado.edu>
1200
1205
1201 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1206 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1202 instances with no __init__. After a crash report by Norbert Nemec
1207 instances with no __init__. After a crash report by Norbert Nemec
1203 <Norbert-AT-nemec-online.de>.
1208 <Norbert-AT-nemec-online.de>.
1204
1209
1205 2005-01-14 Fernando Perez <fperez@colorado.edu>
1210 2005-01-14 Fernando Perez <fperez@colorado.edu>
1206
1211
1207 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1212 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1208 names for verbose exceptions, when multiple dotted names and the
1213 names for verbose exceptions, when multiple dotted names and the
1209 'parent' object were present on the same line.
1214 'parent' object were present on the same line.
1210
1215
1211 2005-01-11 Fernando Perez <fperez@colorado.edu>
1216 2005-01-11 Fernando Perez <fperez@colorado.edu>
1212
1217
1213 * IPython/genutils.py (flag_calls): new utility to trap and flag
1218 * IPython/genutils.py (flag_calls): new utility to trap and flag
1214 calls in functions. I need it to clean up matplotlib support.
1219 calls in functions. I need it to clean up matplotlib support.
1215 Also removed some deprecated code in genutils.
1220 Also removed some deprecated code in genutils.
1216
1221
1217 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1222 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1218 that matplotlib scripts called with %run, which don't call show()
1223 that matplotlib scripts called with %run, which don't call show()
1219 themselves, still have their plotting windows open.
1224 themselves, still have their plotting windows open.
1220
1225
1221 2005-01-05 Fernando Perez <fperez@colorado.edu>
1226 2005-01-05 Fernando Perez <fperez@colorado.edu>
1222
1227
1223 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1228 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1224 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1229 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1225
1230
1226 2004-12-19 Fernando Perez <fperez@colorado.edu>
1231 2004-12-19 Fernando Perez <fperez@colorado.edu>
1227
1232
1228 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1233 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1229 parent_runcode, which was an eyesore. The same result can be
1234 parent_runcode, which was an eyesore. The same result can be
1230 obtained with Python's regular superclass mechanisms.
1235 obtained with Python's regular superclass mechanisms.
1231
1236
1232 2004-12-17 Fernando Perez <fperez@colorado.edu>
1237 2004-12-17 Fernando Perez <fperez@colorado.edu>
1233
1238
1234 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1239 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1235 reported by Prabhu.
1240 reported by Prabhu.
1236 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1241 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1237 sys.stderr) instead of explicitly calling sys.stderr. This helps
1242 sys.stderr) instead of explicitly calling sys.stderr. This helps
1238 maintain our I/O abstractions clean, for future GUI embeddings.
1243 maintain our I/O abstractions clean, for future GUI embeddings.
1239
1244
1240 * IPython/genutils.py (info): added new utility for sys.stderr
1245 * IPython/genutils.py (info): added new utility for sys.stderr
1241 unified info message handling (thin wrapper around warn()).
1246 unified info message handling (thin wrapper around warn()).
1242
1247
1243 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1248 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1244 composite (dotted) names on verbose exceptions.
1249 composite (dotted) names on verbose exceptions.
1245 (VerboseTB.nullrepr): harden against another kind of errors which
1250 (VerboseTB.nullrepr): harden against another kind of errors which
1246 Python's inspect module can trigger, and which were crashing
1251 Python's inspect module can trigger, and which were crashing
1247 IPython. Thanks to a report by Marco Lombardi
1252 IPython. Thanks to a report by Marco Lombardi
1248 <mlombard-AT-ma010192.hq.eso.org>.
1253 <mlombard-AT-ma010192.hq.eso.org>.
1249
1254
1250 2004-12-13 *** Released version 0.6.6
1255 2004-12-13 *** Released version 0.6.6
1251
1256
1252 2004-12-12 Fernando Perez <fperez@colorado.edu>
1257 2004-12-12 Fernando Perez <fperez@colorado.edu>
1253
1258
1254 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1259 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1255 generated by pygtk upon initialization if it was built without
1260 generated by pygtk upon initialization if it was built without
1256 threads (for matplotlib users). After a crash reported by
1261 threads (for matplotlib users). After a crash reported by
1257 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1262 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1258
1263
1259 * IPython/ipmaker.py (make_IPython): fix small bug in the
1264 * IPython/ipmaker.py (make_IPython): fix small bug in the
1260 import_some parameter for multiple imports.
1265 import_some parameter for multiple imports.
1261
1266
1262 * IPython/iplib.py (ipmagic): simplified the interface of
1267 * IPython/iplib.py (ipmagic): simplified the interface of
1263 ipmagic() to take a single string argument, just as it would be
1268 ipmagic() to take a single string argument, just as it would be
1264 typed at the IPython cmd line.
1269 typed at the IPython cmd line.
1265 (ipalias): Added new ipalias() with an interface identical to
1270 (ipalias): Added new ipalias() with an interface identical to
1266 ipmagic(). This completes exposing a pure python interface to the
1271 ipmagic(). This completes exposing a pure python interface to the
1267 alias and magic system, which can be used in loops or more complex
1272 alias and magic system, which can be used in loops or more complex
1268 code where IPython's automatic line mangling is not active.
1273 code where IPython's automatic line mangling is not active.
1269
1274
1270 * IPython/genutils.py (timing): changed interface of timing to
1275 * IPython/genutils.py (timing): changed interface of timing to
1271 simply run code once, which is the most common case. timings()
1276 simply run code once, which is the most common case. timings()
1272 remains unchanged, for the cases where you want multiple runs.
1277 remains unchanged, for the cases where you want multiple runs.
1273
1278
1274 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1279 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1275 bug where Python2.2 crashes with exec'ing code which does not end
1280 bug where Python2.2 crashes with exec'ing code which does not end
1276 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1281 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1277 before.
1282 before.
1278
1283
1279 2004-12-10 Fernando Perez <fperez@colorado.edu>
1284 2004-12-10 Fernando Perez <fperez@colorado.edu>
1280
1285
1281 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1286 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1282 -t to -T, to accomodate the new -t flag in %run (the %run and
1287 -t to -T, to accomodate the new -t flag in %run (the %run and
1283 %prun options are kind of intermixed, and it's not easy to change
1288 %prun options are kind of intermixed, and it's not easy to change
1284 this with the limitations of python's getopt).
1289 this with the limitations of python's getopt).
1285
1290
1286 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1291 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1287 the execution of scripts. It's not as fine-tuned as timeit.py,
1292 the execution of scripts. It's not as fine-tuned as timeit.py,
1288 but it works from inside ipython (and under 2.2, which lacks
1293 but it works from inside ipython (and under 2.2, which lacks
1289 timeit.py). Optionally a number of runs > 1 can be given for
1294 timeit.py). Optionally a number of runs > 1 can be given for
1290 timing very short-running code.
1295 timing very short-running code.
1291
1296
1292 * IPython/genutils.py (uniq_stable): new routine which returns a
1297 * IPython/genutils.py (uniq_stable): new routine which returns a
1293 list of unique elements in any iterable, but in stable order of
1298 list of unique elements in any iterable, but in stable order of
1294 appearance. I needed this for the ultraTB fixes, and it's a handy
1299 appearance. I needed this for the ultraTB fixes, and it's a handy
1295 utility.
1300 utility.
1296
1301
1297 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1302 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1298 dotted names in Verbose exceptions. This had been broken since
1303 dotted names in Verbose exceptions. This had been broken since
1299 the very start, now x.y will properly be printed in a Verbose
1304 the very start, now x.y will properly be printed in a Verbose
1300 traceback, instead of x being shown and y appearing always as an
1305 traceback, instead of x being shown and y appearing always as an
1301 'undefined global'. Getting this to work was a bit tricky,
1306 'undefined global'. Getting this to work was a bit tricky,
1302 because by default python tokenizers are stateless. Saved by
1307 because by default python tokenizers are stateless. Saved by
1303 python's ability to easily add a bit of state to an arbitrary
1308 python's ability to easily add a bit of state to an arbitrary
1304 function (without needing to build a full-blown callable object).
1309 function (without needing to build a full-blown callable object).
1305
1310
1306 Also big cleanup of this code, which had horrendous runtime
1311 Also big cleanup of this code, which had horrendous runtime
1307 lookups of zillions of attributes for colorization. Moved all
1312 lookups of zillions of attributes for colorization. Moved all
1308 this code into a few templates, which make it cleaner and quicker.
1313 this code into a few templates, which make it cleaner and quicker.
1309
1314
1310 Printout quality was also improved for Verbose exceptions: one
1315 Printout quality was also improved for Verbose exceptions: one
1311 variable per line, and memory addresses are printed (this can be
1316 variable per line, and memory addresses are printed (this can be
1312 quite handy in nasty debugging situations, which is what Verbose
1317 quite handy in nasty debugging situations, which is what Verbose
1313 is for).
1318 is for).
1314
1319
1315 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1320 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1316 the command line as scripts to be loaded by embedded instances.
1321 the command line as scripts to be loaded by embedded instances.
1317 Doing so has the potential for an infinite recursion if there are
1322 Doing so has the potential for an infinite recursion if there are
1318 exceptions thrown in the process. This fixes a strange crash
1323 exceptions thrown in the process. This fixes a strange crash
1319 reported by Philippe MULLER <muller-AT-irit.fr>.
1324 reported by Philippe MULLER <muller-AT-irit.fr>.
1320
1325
1321 2004-12-09 Fernando Perez <fperez@colorado.edu>
1326 2004-12-09 Fernando Perez <fperez@colorado.edu>
1322
1327
1323 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1328 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1324 to reflect new names in matplotlib, which now expose the
1329 to reflect new names in matplotlib, which now expose the
1325 matlab-compatible interface via a pylab module instead of the
1330 matlab-compatible interface via a pylab module instead of the
1326 'matlab' name. The new code is backwards compatible, so users of
1331 'matlab' name. The new code is backwards compatible, so users of
1327 all matplotlib versions are OK. Patch by J. Hunter.
1332 all matplotlib versions are OK. Patch by J. Hunter.
1328
1333
1329 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1334 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1330 of __init__ docstrings for instances (class docstrings are already
1335 of __init__ docstrings for instances (class docstrings are already
1331 automatically printed). Instances with customized docstrings
1336 automatically printed). Instances with customized docstrings
1332 (indep. of the class) are also recognized and all 3 separate
1337 (indep. of the class) are also recognized and all 3 separate
1333 docstrings are printed (instance, class, constructor). After some
1338 docstrings are printed (instance, class, constructor). After some
1334 comments/suggestions by J. Hunter.
1339 comments/suggestions by J. Hunter.
1335
1340
1336 2004-12-05 Fernando Perez <fperez@colorado.edu>
1341 2004-12-05 Fernando Perez <fperez@colorado.edu>
1337
1342
1338 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1343 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1339 warnings when tab-completion fails and triggers an exception.
1344 warnings when tab-completion fails and triggers an exception.
1340
1345
1341 2004-12-03 Fernando Perez <fperez@colorado.edu>
1346 2004-12-03 Fernando Perez <fperez@colorado.edu>
1342
1347
1343 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1348 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1344 be triggered when using 'run -p'. An incorrect option flag was
1349 be triggered when using 'run -p'. An incorrect option flag was
1345 being set ('d' instead of 'D').
1350 being set ('d' instead of 'D').
1346 (manpage): fix missing escaped \- sign.
1351 (manpage): fix missing escaped \- sign.
1347
1352
1348 2004-11-30 *** Released version 0.6.5
1353 2004-11-30 *** Released version 0.6.5
1349
1354
1350 2004-11-30 Fernando Perez <fperez@colorado.edu>
1355 2004-11-30 Fernando Perez <fperez@colorado.edu>
1351
1356
1352 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1357 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1353 setting with -d option.
1358 setting with -d option.
1354
1359
1355 * setup.py (docfiles): Fix problem where the doc glob I was using
1360 * setup.py (docfiles): Fix problem where the doc glob I was using
1356 was COMPLETELY BROKEN. It was giving the right files by pure
1361 was COMPLETELY BROKEN. It was giving the right files by pure
1357 accident, but failed once I tried to include ipython.el. Note:
1362 accident, but failed once I tried to include ipython.el. Note:
1358 glob() does NOT allow you to do exclusion on multiple endings!
1363 glob() does NOT allow you to do exclusion on multiple endings!
1359
1364
1360 2004-11-29 Fernando Perez <fperez@colorado.edu>
1365 2004-11-29 Fernando Perez <fperez@colorado.edu>
1361
1366
1362 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1367 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1363 the manpage as the source. Better formatting & consistency.
1368 the manpage as the source. Better formatting & consistency.
1364
1369
1365 * IPython/Magic.py (magic_run): Added new -d option, to run
1370 * IPython/Magic.py (magic_run): Added new -d option, to run
1366 scripts under the control of the python pdb debugger. Note that
1371 scripts under the control of the python pdb debugger. Note that
1367 this required changing the %prun option -d to -D, to avoid a clash
1372 this required changing the %prun option -d to -D, to avoid a clash
1368 (since %run must pass options to %prun, and getopt is too dumb to
1373 (since %run must pass options to %prun, and getopt is too dumb to
1369 handle options with string values with embedded spaces). Thanks
1374 handle options with string values with embedded spaces). Thanks
1370 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1375 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1371 (magic_who_ls): added type matching to %who and %whos, so that one
1376 (magic_who_ls): added type matching to %who and %whos, so that one
1372 can filter their output to only include variables of certain
1377 can filter their output to only include variables of certain
1373 types. Another suggestion by Matthew.
1378 types. Another suggestion by Matthew.
1374 (magic_whos): Added memory summaries in kb and Mb for arrays.
1379 (magic_whos): Added memory summaries in kb and Mb for arrays.
1375 (magic_who): Improve formatting (break lines every 9 vars).
1380 (magic_who): Improve formatting (break lines every 9 vars).
1376
1381
1377 2004-11-28 Fernando Perez <fperez@colorado.edu>
1382 2004-11-28 Fernando Perez <fperez@colorado.edu>
1378
1383
1379 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1384 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1380 cache when empty lines were present.
1385 cache when empty lines were present.
1381
1386
1382 2004-11-24 Fernando Perez <fperez@colorado.edu>
1387 2004-11-24 Fernando Perez <fperez@colorado.edu>
1383
1388
1384 * IPython/usage.py (__doc__): document the re-activated threading
1389 * IPython/usage.py (__doc__): document the re-activated threading
1385 options for WX and GTK.
1390 options for WX and GTK.
1386
1391
1387 2004-11-23 Fernando Perez <fperez@colorado.edu>
1392 2004-11-23 Fernando Perez <fperez@colorado.edu>
1388
1393
1389 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1394 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1390 the -wthread and -gthread options, along with a new -tk one to try
1395 the -wthread and -gthread options, along with a new -tk one to try
1391 and coordinate Tk threading with wx/gtk. The tk support is very
1396 and coordinate Tk threading with wx/gtk. The tk support is very
1392 platform dependent, since it seems to require Tcl and Tk to be
1397 platform dependent, since it seems to require Tcl and Tk to be
1393 built with threads (Fedora1/2 appears NOT to have it, but in
1398 built with threads (Fedora1/2 appears NOT to have it, but in
1394 Prabhu's Debian boxes it works OK). But even with some Tk
1399 Prabhu's Debian boxes it works OK). But even with some Tk
1395 limitations, this is a great improvement.
1400 limitations, this is a great improvement.
1396
1401
1397 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1402 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1398 info in user prompts. Patch by Prabhu.
1403 info in user prompts. Patch by Prabhu.
1399
1404
1400 2004-11-18 Fernando Perez <fperez@colorado.edu>
1405 2004-11-18 Fernando Perez <fperez@colorado.edu>
1401
1406
1402 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1407 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1403 EOFErrors and bail, to avoid infinite loops if a non-terminating
1408 EOFErrors and bail, to avoid infinite loops if a non-terminating
1404 file is fed into ipython. Patch submitted in issue 19 by user,
1409 file is fed into ipython. Patch submitted in issue 19 by user,
1405 many thanks.
1410 many thanks.
1406
1411
1407 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1412 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1408 autoquote/parens in continuation prompts, which can cause lots of
1413 autoquote/parens in continuation prompts, which can cause lots of
1409 problems. Closes roundup issue 20.
1414 problems. Closes roundup issue 20.
1410
1415
1411 2004-11-17 Fernando Perez <fperez@colorado.edu>
1416 2004-11-17 Fernando Perez <fperez@colorado.edu>
1412
1417
1413 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1418 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1414 reported as debian bug #280505. I'm not sure my local changelog
1419 reported as debian bug #280505. I'm not sure my local changelog
1415 entry has the proper debian format (Jack?).
1420 entry has the proper debian format (Jack?).
1416
1421
1417 2004-11-08 *** Released version 0.6.4
1422 2004-11-08 *** Released version 0.6.4
1418
1423
1419 2004-11-08 Fernando Perez <fperez@colorado.edu>
1424 2004-11-08 Fernando Perez <fperez@colorado.edu>
1420
1425
1421 * IPython/iplib.py (init_readline): Fix exit message for Windows
1426 * IPython/iplib.py (init_readline): Fix exit message for Windows
1422 when readline is active. Thanks to a report by Eric Jones
1427 when readline is active. Thanks to a report by Eric Jones
1423 <eric-AT-enthought.com>.
1428 <eric-AT-enthought.com>.
1424
1429
1425 2004-11-07 Fernando Perez <fperez@colorado.edu>
1430 2004-11-07 Fernando Perez <fperez@colorado.edu>
1426
1431
1427 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1432 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1428 sometimes seen by win2k/cygwin users.
1433 sometimes seen by win2k/cygwin users.
1429
1434
1430 2004-11-06 Fernando Perez <fperez@colorado.edu>
1435 2004-11-06 Fernando Perez <fperez@colorado.edu>
1431
1436
1432 * IPython/iplib.py (interact): Change the handling of %Exit from
1437 * IPython/iplib.py (interact): Change the handling of %Exit from
1433 trying to propagate a SystemExit to an internal ipython flag.
1438 trying to propagate a SystemExit to an internal ipython flag.
1434 This is less elegant than using Python's exception mechanism, but
1439 This is less elegant than using Python's exception mechanism, but
1435 I can't get that to work reliably with threads, so under -pylab
1440 I can't get that to work reliably with threads, so under -pylab
1436 %Exit was hanging IPython. Cross-thread exception handling is
1441 %Exit was hanging IPython. Cross-thread exception handling is
1437 really a bitch. Thaks to a bug report by Stephen Walton
1442 really a bitch. Thaks to a bug report by Stephen Walton
1438 <stephen.walton-AT-csun.edu>.
1443 <stephen.walton-AT-csun.edu>.
1439
1444
1440 2004-11-04 Fernando Perez <fperez@colorado.edu>
1445 2004-11-04 Fernando Perez <fperez@colorado.edu>
1441
1446
1442 * IPython/iplib.py (raw_input_original): store a pointer to the
1447 * IPython/iplib.py (raw_input_original): store a pointer to the
1443 true raw_input to harden against code which can modify it
1448 true raw_input to harden against code which can modify it
1444 (wx.py.PyShell does this and would otherwise crash ipython).
1449 (wx.py.PyShell does this and would otherwise crash ipython).
1445 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1450 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1446
1451
1447 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1452 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1448 Ctrl-C problem, which does not mess up the input line.
1453 Ctrl-C problem, which does not mess up the input line.
1449
1454
1450 2004-11-03 Fernando Perez <fperez@colorado.edu>
1455 2004-11-03 Fernando Perez <fperez@colorado.edu>
1451
1456
1452 * IPython/Release.py: Changed licensing to BSD, in all files.
1457 * IPython/Release.py: Changed licensing to BSD, in all files.
1453 (name): lowercase name for tarball/RPM release.
1458 (name): lowercase name for tarball/RPM release.
1454
1459
1455 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1460 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1456 use throughout ipython.
1461 use throughout ipython.
1457
1462
1458 * IPython/Magic.py (Magic._ofind): Switch to using the new
1463 * IPython/Magic.py (Magic._ofind): Switch to using the new
1459 OInspect.getdoc() function.
1464 OInspect.getdoc() function.
1460
1465
1461 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1466 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1462 of the line currently being canceled via Ctrl-C. It's extremely
1467 of the line currently being canceled via Ctrl-C. It's extremely
1463 ugly, but I don't know how to do it better (the problem is one of
1468 ugly, but I don't know how to do it better (the problem is one of
1464 handling cross-thread exceptions).
1469 handling cross-thread exceptions).
1465
1470
1466 2004-10-28 Fernando Perez <fperez@colorado.edu>
1471 2004-10-28 Fernando Perez <fperez@colorado.edu>
1467
1472
1468 * IPython/Shell.py (signal_handler): add signal handlers to trap
1473 * IPython/Shell.py (signal_handler): add signal handlers to trap
1469 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1474 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1470 report by Francesc Alted.
1475 report by Francesc Alted.
1471
1476
1472 2004-10-21 Fernando Perez <fperez@colorado.edu>
1477 2004-10-21 Fernando Perez <fperez@colorado.edu>
1473
1478
1474 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1479 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1475 to % for pysh syntax extensions.
1480 to % for pysh syntax extensions.
1476
1481
1477 2004-10-09 Fernando Perez <fperez@colorado.edu>
1482 2004-10-09 Fernando Perez <fperez@colorado.edu>
1478
1483
1479 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1484 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1480 arrays to print a more useful summary, without calling str(arr).
1485 arrays to print a more useful summary, without calling str(arr).
1481 This avoids the problem of extremely lengthy computations which
1486 This avoids the problem of extremely lengthy computations which
1482 occur if arr is large, and appear to the user as a system lockup
1487 occur if arr is large, and appear to the user as a system lockup
1483 with 100% cpu activity. After a suggestion by Kristian Sandberg
1488 with 100% cpu activity. After a suggestion by Kristian Sandberg
1484 <Kristian.Sandberg@colorado.edu>.
1489 <Kristian.Sandberg@colorado.edu>.
1485 (Magic.__init__): fix bug in global magic escapes not being
1490 (Magic.__init__): fix bug in global magic escapes not being
1486 correctly set.
1491 correctly set.
1487
1492
1488 2004-10-08 Fernando Perez <fperez@colorado.edu>
1493 2004-10-08 Fernando Perez <fperez@colorado.edu>
1489
1494
1490 * IPython/Magic.py (__license__): change to absolute imports of
1495 * IPython/Magic.py (__license__): change to absolute imports of
1491 ipython's own internal packages, to start adapting to the absolute
1496 ipython's own internal packages, to start adapting to the absolute
1492 import requirement of PEP-328.
1497 import requirement of PEP-328.
1493
1498
1494 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1499 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1495 files, and standardize author/license marks through the Release
1500 files, and standardize author/license marks through the Release
1496 module instead of having per/file stuff (except for files with
1501 module instead of having per/file stuff (except for files with
1497 particular licenses, like the MIT/PSF-licensed codes).
1502 particular licenses, like the MIT/PSF-licensed codes).
1498
1503
1499 * IPython/Debugger.py: remove dead code for python 2.1
1504 * IPython/Debugger.py: remove dead code for python 2.1
1500
1505
1501 2004-10-04 Fernando Perez <fperez@colorado.edu>
1506 2004-10-04 Fernando Perez <fperez@colorado.edu>
1502
1507
1503 * IPython/iplib.py (ipmagic): New function for accessing magics
1508 * IPython/iplib.py (ipmagic): New function for accessing magics
1504 via a normal python function call.
1509 via a normal python function call.
1505
1510
1506 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1511 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1507 from '@' to '%', to accomodate the new @decorator syntax of python
1512 from '@' to '%', to accomodate the new @decorator syntax of python
1508 2.4.
1513 2.4.
1509
1514
1510 2004-09-29 Fernando Perez <fperez@colorado.edu>
1515 2004-09-29 Fernando Perez <fperez@colorado.edu>
1511
1516
1512 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1517 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1513 matplotlib.use to prevent running scripts which try to switch
1518 matplotlib.use to prevent running scripts which try to switch
1514 interactive backends from within ipython. This will just crash
1519 interactive backends from within ipython. This will just crash
1515 the python interpreter, so we can't allow it (but a detailed error
1520 the python interpreter, so we can't allow it (but a detailed error
1516 is given to the user).
1521 is given to the user).
1517
1522
1518 2004-09-28 Fernando Perez <fperez@colorado.edu>
1523 2004-09-28 Fernando Perez <fperez@colorado.edu>
1519
1524
1520 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1525 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1521 matplotlib-related fixes so that using @run with non-matplotlib
1526 matplotlib-related fixes so that using @run with non-matplotlib
1522 scripts doesn't pop up spurious plot windows. This requires
1527 scripts doesn't pop up spurious plot windows. This requires
1523 matplotlib >= 0.63, where I had to make some changes as well.
1528 matplotlib >= 0.63, where I had to make some changes as well.
1524
1529
1525 * IPython/ipmaker.py (make_IPython): update version requirement to
1530 * IPython/ipmaker.py (make_IPython): update version requirement to
1526 python 2.2.
1531 python 2.2.
1527
1532
1528 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1533 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1529 banner arg for embedded customization.
1534 banner arg for embedded customization.
1530
1535
1531 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1536 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1532 explicit uses of __IP as the IPython's instance name. Now things
1537 explicit uses of __IP as the IPython's instance name. Now things
1533 are properly handled via the shell.name value. The actual code
1538 are properly handled via the shell.name value. The actual code
1534 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1539 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1535 is much better than before. I'll clean things completely when the
1540 is much better than before. I'll clean things completely when the
1536 magic stuff gets a real overhaul.
1541 magic stuff gets a real overhaul.
1537
1542
1538 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1543 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1539 minor changes to debian dir.
1544 minor changes to debian dir.
1540
1545
1541 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1546 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1542 pointer to the shell itself in the interactive namespace even when
1547 pointer to the shell itself in the interactive namespace even when
1543 a user-supplied dict is provided. This is needed for embedding
1548 a user-supplied dict is provided. This is needed for embedding
1544 purposes (found by tests with Michel Sanner).
1549 purposes (found by tests with Michel Sanner).
1545
1550
1546 2004-09-27 Fernando Perez <fperez@colorado.edu>
1551 2004-09-27 Fernando Perez <fperez@colorado.edu>
1547
1552
1548 * IPython/UserConfig/ipythonrc: remove []{} from
1553 * IPython/UserConfig/ipythonrc: remove []{} from
1549 readline_remove_delims, so that things like [modname.<TAB> do
1554 readline_remove_delims, so that things like [modname.<TAB> do
1550 proper completion. This disables [].TAB, but that's a less common
1555 proper completion. This disables [].TAB, but that's a less common
1551 case than module names in list comprehensions, for example.
1556 case than module names in list comprehensions, for example.
1552 Thanks to a report by Andrea Riciputi.
1557 Thanks to a report by Andrea Riciputi.
1553
1558
1554 2004-09-09 Fernando Perez <fperez@colorado.edu>
1559 2004-09-09 Fernando Perez <fperez@colorado.edu>
1555
1560
1556 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1561 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1557 blocking problems in win32 and osx. Fix by John.
1562 blocking problems in win32 and osx. Fix by John.
1558
1563
1559 2004-09-08 Fernando Perez <fperez@colorado.edu>
1564 2004-09-08 Fernando Perez <fperez@colorado.edu>
1560
1565
1561 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1566 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1562 for Win32 and OSX. Fix by John Hunter.
1567 for Win32 and OSX. Fix by John Hunter.
1563
1568
1564 2004-08-30 *** Released version 0.6.3
1569 2004-08-30 *** Released version 0.6.3
1565
1570
1566 2004-08-30 Fernando Perez <fperez@colorado.edu>
1571 2004-08-30 Fernando Perez <fperez@colorado.edu>
1567
1572
1568 * setup.py (isfile): Add manpages to list of dependent files to be
1573 * setup.py (isfile): Add manpages to list of dependent files to be
1569 updated.
1574 updated.
1570
1575
1571 2004-08-27 Fernando Perez <fperez@colorado.edu>
1576 2004-08-27 Fernando Perez <fperez@colorado.edu>
1572
1577
1573 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1578 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1574 for now. They don't really work with standalone WX/GTK code
1579 for now. They don't really work with standalone WX/GTK code
1575 (though matplotlib IS working fine with both of those backends).
1580 (though matplotlib IS working fine with both of those backends).
1576 This will neeed much more testing. I disabled most things with
1581 This will neeed much more testing. I disabled most things with
1577 comments, so turning it back on later should be pretty easy.
1582 comments, so turning it back on later should be pretty easy.
1578
1583
1579 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1584 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1580 autocalling of expressions like r'foo', by modifying the line
1585 autocalling of expressions like r'foo', by modifying the line
1581 split regexp. Closes
1586 split regexp. Closes
1582 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1587 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1583 Riley <ipythonbugs-AT-sabi.net>.
1588 Riley <ipythonbugs-AT-sabi.net>.
1584 (InteractiveShell.mainloop): honor --nobanner with banner
1589 (InteractiveShell.mainloop): honor --nobanner with banner
1585 extensions.
1590 extensions.
1586
1591
1587 * IPython/Shell.py: Significant refactoring of all classes, so
1592 * IPython/Shell.py: Significant refactoring of all classes, so
1588 that we can really support ALL matplotlib backends and threading
1593 that we can really support ALL matplotlib backends and threading
1589 models (John spotted a bug with Tk which required this). Now we
1594 models (John spotted a bug with Tk which required this). Now we
1590 should support single-threaded, WX-threads and GTK-threads, both
1595 should support single-threaded, WX-threads and GTK-threads, both
1591 for generic code and for matplotlib.
1596 for generic code and for matplotlib.
1592
1597
1593 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1598 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1594 -pylab, to simplify things for users. Will also remove the pylab
1599 -pylab, to simplify things for users. Will also remove the pylab
1595 profile, since now all of matplotlib configuration is directly
1600 profile, since now all of matplotlib configuration is directly
1596 handled here. This also reduces startup time.
1601 handled here. This also reduces startup time.
1597
1602
1598 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1603 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1599 shell wasn't being correctly called. Also in IPShellWX.
1604 shell wasn't being correctly called. Also in IPShellWX.
1600
1605
1601 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1606 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1602 fine-tune banner.
1607 fine-tune banner.
1603
1608
1604 * IPython/numutils.py (spike): Deprecate these spike functions,
1609 * IPython/numutils.py (spike): Deprecate these spike functions,
1605 delete (long deprecated) gnuplot_exec handler.
1610 delete (long deprecated) gnuplot_exec handler.
1606
1611
1607 2004-08-26 Fernando Perez <fperez@colorado.edu>
1612 2004-08-26 Fernando Perez <fperez@colorado.edu>
1608
1613
1609 * ipython.1: Update for threading options, plus some others which
1614 * ipython.1: Update for threading options, plus some others which
1610 were missing.
1615 were missing.
1611
1616
1612 * IPython/ipmaker.py (__call__): Added -wthread option for
1617 * IPython/ipmaker.py (__call__): Added -wthread option for
1613 wxpython thread handling. Make sure threading options are only
1618 wxpython thread handling. Make sure threading options are only
1614 valid at the command line.
1619 valid at the command line.
1615
1620
1616 * scripts/ipython: moved shell selection into a factory function
1621 * scripts/ipython: moved shell selection into a factory function
1617 in Shell.py, to keep the starter script to a minimum.
1622 in Shell.py, to keep the starter script to a minimum.
1618
1623
1619 2004-08-25 Fernando Perez <fperez@colorado.edu>
1624 2004-08-25 Fernando Perez <fperez@colorado.edu>
1620
1625
1621 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1626 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1622 John. Along with some recent changes he made to matplotlib, the
1627 John. Along with some recent changes he made to matplotlib, the
1623 next versions of both systems should work very well together.
1628 next versions of both systems should work very well together.
1624
1629
1625 2004-08-24 Fernando Perez <fperez@colorado.edu>
1630 2004-08-24 Fernando Perez <fperez@colorado.edu>
1626
1631
1627 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1632 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1628 tried to switch the profiling to using hotshot, but I'm getting
1633 tried to switch the profiling to using hotshot, but I'm getting
1629 strange errors from prof.runctx() there. I may be misreading the
1634 strange errors from prof.runctx() there. I may be misreading the
1630 docs, but it looks weird. For now the profiling code will
1635 docs, but it looks weird. For now the profiling code will
1631 continue to use the standard profiler.
1636 continue to use the standard profiler.
1632
1637
1633 2004-08-23 Fernando Perez <fperez@colorado.edu>
1638 2004-08-23 Fernando Perez <fperez@colorado.edu>
1634
1639
1635 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1640 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1636 threaded shell, by John Hunter. It's not quite ready yet, but
1641 threaded shell, by John Hunter. It's not quite ready yet, but
1637 close.
1642 close.
1638
1643
1639 2004-08-22 Fernando Perez <fperez@colorado.edu>
1644 2004-08-22 Fernando Perez <fperez@colorado.edu>
1640
1645
1641 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1646 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1642 in Magic and ultraTB.
1647 in Magic and ultraTB.
1643
1648
1644 * ipython.1: document threading options in manpage.
1649 * ipython.1: document threading options in manpage.
1645
1650
1646 * scripts/ipython: Changed name of -thread option to -gthread,
1651 * scripts/ipython: Changed name of -thread option to -gthread,
1647 since this is GTK specific. I want to leave the door open for a
1652 since this is GTK specific. I want to leave the door open for a
1648 -wthread option for WX, which will most likely be necessary. This
1653 -wthread option for WX, which will most likely be necessary. This
1649 change affects usage and ipmaker as well.
1654 change affects usage and ipmaker as well.
1650
1655
1651 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1656 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1652 handle the matplotlib shell issues. Code by John Hunter
1657 handle the matplotlib shell issues. Code by John Hunter
1653 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1658 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1654 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1659 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1655 broken (and disabled for end users) for now, but it puts the
1660 broken (and disabled for end users) for now, but it puts the
1656 infrastructure in place.
1661 infrastructure in place.
1657
1662
1658 2004-08-21 Fernando Perez <fperez@colorado.edu>
1663 2004-08-21 Fernando Perez <fperez@colorado.edu>
1659
1664
1660 * ipythonrc-pylab: Add matplotlib support.
1665 * ipythonrc-pylab: Add matplotlib support.
1661
1666
1662 * matplotlib_config.py: new files for matplotlib support, part of
1667 * matplotlib_config.py: new files for matplotlib support, part of
1663 the pylab profile.
1668 the pylab profile.
1664
1669
1665 * IPython/usage.py (__doc__): documented the threading options.
1670 * IPython/usage.py (__doc__): documented the threading options.
1666
1671
1667 2004-08-20 Fernando Perez <fperez@colorado.edu>
1672 2004-08-20 Fernando Perez <fperez@colorado.edu>
1668
1673
1669 * ipython: Modified the main calling routine to handle the -thread
1674 * ipython: Modified the main calling routine to handle the -thread
1670 and -mpthread options. This needs to be done as a top-level hack,
1675 and -mpthread options. This needs to be done as a top-level hack,
1671 because it determines which class to instantiate for IPython
1676 because it determines which class to instantiate for IPython
1672 itself.
1677 itself.
1673
1678
1674 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1679 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1675 classes to support multithreaded GTK operation without blocking,
1680 classes to support multithreaded GTK operation without blocking,
1676 and matplotlib with all backends. This is a lot of still very
1681 and matplotlib with all backends. This is a lot of still very
1677 experimental code, and threads are tricky. So it may still have a
1682 experimental code, and threads are tricky. So it may still have a
1678 few rough edges... This code owes a lot to
1683 few rough edges... This code owes a lot to
1679 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1684 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1680 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1685 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1681 to John Hunter for all the matplotlib work.
1686 to John Hunter for all the matplotlib work.
1682
1687
1683 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1688 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1684 options for gtk thread and matplotlib support.
1689 options for gtk thread and matplotlib support.
1685
1690
1686 2004-08-16 Fernando Perez <fperez@colorado.edu>
1691 2004-08-16 Fernando Perez <fperez@colorado.edu>
1687
1692
1688 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1693 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1689 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1694 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1690 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1695 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1691
1696
1692 2004-08-11 Fernando Perez <fperez@colorado.edu>
1697 2004-08-11 Fernando Perez <fperez@colorado.edu>
1693
1698
1694 * setup.py (isfile): Fix build so documentation gets updated for
1699 * setup.py (isfile): Fix build so documentation gets updated for
1695 rpms (it was only done for .tgz builds).
1700 rpms (it was only done for .tgz builds).
1696
1701
1697 2004-08-10 Fernando Perez <fperez@colorado.edu>
1702 2004-08-10 Fernando Perez <fperez@colorado.edu>
1698
1703
1699 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1704 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1700
1705
1701 * iplib.py : Silence syntax error exceptions in tab-completion.
1706 * iplib.py : Silence syntax error exceptions in tab-completion.
1702
1707
1703 2004-08-05 Fernando Perez <fperez@colorado.edu>
1708 2004-08-05 Fernando Perez <fperez@colorado.edu>
1704
1709
1705 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1710 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1706 'color off' mark for continuation prompts. This was causing long
1711 'color off' mark for continuation prompts. This was causing long
1707 continuation lines to mis-wrap.
1712 continuation lines to mis-wrap.
1708
1713
1709 2004-08-01 Fernando Perez <fperez@colorado.edu>
1714 2004-08-01 Fernando Perez <fperez@colorado.edu>
1710
1715
1711 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1716 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1712 for building ipython to be a parameter. All this is necessary
1717 for building ipython to be a parameter. All this is necessary
1713 right now to have a multithreaded version, but this insane
1718 right now to have a multithreaded version, but this insane
1714 non-design will be cleaned up soon. For now, it's a hack that
1719 non-design will be cleaned up soon. For now, it's a hack that
1715 works.
1720 works.
1716
1721
1717 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1722 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1718 args in various places. No bugs so far, but it's a dangerous
1723 args in various places. No bugs so far, but it's a dangerous
1719 practice.
1724 practice.
1720
1725
1721 2004-07-31 Fernando Perez <fperez@colorado.edu>
1726 2004-07-31 Fernando Perez <fperez@colorado.edu>
1722
1727
1723 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1728 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1724 fix completion of files with dots in their names under most
1729 fix completion of files with dots in their names under most
1725 profiles (pysh was OK because the completion order is different).
1730 profiles (pysh was OK because the completion order is different).
1726
1731
1727 2004-07-27 Fernando Perez <fperez@colorado.edu>
1732 2004-07-27 Fernando Perez <fperez@colorado.edu>
1728
1733
1729 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1734 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1730 keywords manually, b/c the one in keyword.py was removed in python
1735 keywords manually, b/c the one in keyword.py was removed in python
1731 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1736 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1732 This is NOT a bug under python 2.3 and earlier.
1737 This is NOT a bug under python 2.3 and earlier.
1733
1738
1734 2004-07-26 Fernando Perez <fperez@colorado.edu>
1739 2004-07-26 Fernando Perez <fperez@colorado.edu>
1735
1740
1736 * IPython/ultraTB.py (VerboseTB.text): Add another
1741 * IPython/ultraTB.py (VerboseTB.text): Add another
1737 linecache.checkcache() call to try to prevent inspect.py from
1742 linecache.checkcache() call to try to prevent inspect.py from
1738 crashing under python 2.3. I think this fixes
1743 crashing under python 2.3. I think this fixes
1739 http://www.scipy.net/roundup/ipython/issue17.
1744 http://www.scipy.net/roundup/ipython/issue17.
1740
1745
1741 2004-07-26 *** Released version 0.6.2
1746 2004-07-26 *** Released version 0.6.2
1742
1747
1743 2004-07-26 Fernando Perez <fperez@colorado.edu>
1748 2004-07-26 Fernando Perez <fperez@colorado.edu>
1744
1749
1745 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1750 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1746 fail for any number.
1751 fail for any number.
1747 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1752 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1748 empty bookmarks.
1753 empty bookmarks.
1749
1754
1750 2004-07-26 *** Released version 0.6.1
1755 2004-07-26 *** Released version 0.6.1
1751
1756
1752 2004-07-26 Fernando Perez <fperez@colorado.edu>
1757 2004-07-26 Fernando Perez <fperez@colorado.edu>
1753
1758
1754 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1759 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1755
1760
1756 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1761 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1757 escaping '()[]{}' in filenames.
1762 escaping '()[]{}' in filenames.
1758
1763
1759 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1764 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1760 Python 2.2 users who lack a proper shlex.split.
1765 Python 2.2 users who lack a proper shlex.split.
1761
1766
1762 2004-07-19 Fernando Perez <fperez@colorado.edu>
1767 2004-07-19 Fernando Perez <fperez@colorado.edu>
1763
1768
1764 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1769 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1765 for reading readline's init file. I follow the normal chain:
1770 for reading readline's init file. I follow the normal chain:
1766 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1771 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1767 report by Mike Heeter. This closes
1772 report by Mike Heeter. This closes
1768 http://www.scipy.net/roundup/ipython/issue16.
1773 http://www.scipy.net/roundup/ipython/issue16.
1769
1774
1770 2004-07-18 Fernando Perez <fperez@colorado.edu>
1775 2004-07-18 Fernando Perez <fperez@colorado.edu>
1771
1776
1772 * IPython/iplib.py (__init__): Add better handling of '\' under
1777 * IPython/iplib.py (__init__): Add better handling of '\' under
1773 Win32 for filenames. After a patch by Ville.
1778 Win32 for filenames. After a patch by Ville.
1774
1779
1775 2004-07-17 Fernando Perez <fperez@colorado.edu>
1780 2004-07-17 Fernando Perez <fperez@colorado.edu>
1776
1781
1777 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1782 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1778 autocalling would be triggered for 'foo is bar' if foo is
1783 autocalling would be triggered for 'foo is bar' if foo is
1779 callable. I also cleaned up the autocall detection code to use a
1784 callable. I also cleaned up the autocall detection code to use a
1780 regexp, which is faster. Bug reported by Alexander Schmolck.
1785 regexp, which is faster. Bug reported by Alexander Schmolck.
1781
1786
1782 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1787 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1783 '?' in them would confuse the help system. Reported by Alex
1788 '?' in them would confuse the help system. Reported by Alex
1784 Schmolck.
1789 Schmolck.
1785
1790
1786 2004-07-16 Fernando Perez <fperez@colorado.edu>
1791 2004-07-16 Fernando Perez <fperez@colorado.edu>
1787
1792
1788 * IPython/GnuplotInteractive.py (__all__): added plot2.
1793 * IPython/GnuplotInteractive.py (__all__): added plot2.
1789
1794
1790 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1795 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1791 plotting dictionaries, lists or tuples of 1d arrays.
1796 plotting dictionaries, lists or tuples of 1d arrays.
1792
1797
1793 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1798 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1794 optimizations.
1799 optimizations.
1795
1800
1796 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1801 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1797 the information which was there from Janko's original IPP code:
1802 the information which was there from Janko's original IPP code:
1798
1803
1799 03.05.99 20:53 porto.ifm.uni-kiel.de
1804 03.05.99 20:53 porto.ifm.uni-kiel.de
1800 --Started changelog.
1805 --Started changelog.
1801 --make clear do what it say it does
1806 --make clear do what it say it does
1802 --added pretty output of lines from inputcache
1807 --added pretty output of lines from inputcache
1803 --Made Logger a mixin class, simplifies handling of switches
1808 --Made Logger a mixin class, simplifies handling of switches
1804 --Added own completer class. .string<TAB> expands to last history
1809 --Added own completer class. .string<TAB> expands to last history
1805 line which starts with string. The new expansion is also present
1810 line which starts with string. The new expansion is also present
1806 with Ctrl-r from the readline library. But this shows, who this
1811 with Ctrl-r from the readline library. But this shows, who this
1807 can be done for other cases.
1812 can be done for other cases.
1808 --Added convention that all shell functions should accept a
1813 --Added convention that all shell functions should accept a
1809 parameter_string This opens the door for different behaviour for
1814 parameter_string This opens the door for different behaviour for
1810 each function. @cd is a good example of this.
1815 each function. @cd is a good example of this.
1811
1816
1812 04.05.99 12:12 porto.ifm.uni-kiel.de
1817 04.05.99 12:12 porto.ifm.uni-kiel.de
1813 --added logfile rotation
1818 --added logfile rotation
1814 --added new mainloop method which freezes first the namespace
1819 --added new mainloop method which freezes first the namespace
1815
1820
1816 07.05.99 21:24 porto.ifm.uni-kiel.de
1821 07.05.99 21:24 porto.ifm.uni-kiel.de
1817 --added the docreader classes. Now there is a help system.
1822 --added the docreader classes. Now there is a help system.
1818 -This is only a first try. Currently it's not easy to put new
1823 -This is only a first try. Currently it's not easy to put new
1819 stuff in the indices. But this is the way to go. Info would be
1824 stuff in the indices. But this is the way to go. Info would be
1820 better, but HTML is every where and not everybody has an info
1825 better, but HTML is every where and not everybody has an info
1821 system installed and it's not so easy to change html-docs to info.
1826 system installed and it's not so easy to change html-docs to info.
1822 --added global logfile option
1827 --added global logfile option
1823 --there is now a hook for object inspection method pinfo needs to
1828 --there is now a hook for object inspection method pinfo needs to
1824 be provided for this. Can be reached by two '??'.
1829 be provided for this. Can be reached by two '??'.
1825
1830
1826 08.05.99 20:51 porto.ifm.uni-kiel.de
1831 08.05.99 20:51 porto.ifm.uni-kiel.de
1827 --added a README
1832 --added a README
1828 --bug in rc file. Something has changed so functions in the rc
1833 --bug in rc file. Something has changed so functions in the rc
1829 file need to reference the shell and not self. Not clear if it's a
1834 file need to reference the shell and not self. Not clear if it's a
1830 bug or feature.
1835 bug or feature.
1831 --changed rc file for new behavior
1836 --changed rc file for new behavior
1832
1837
1833 2004-07-15 Fernando Perez <fperez@colorado.edu>
1838 2004-07-15 Fernando Perez <fperez@colorado.edu>
1834
1839
1835 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1840 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1836 cache was falling out of sync in bizarre manners when multi-line
1841 cache was falling out of sync in bizarre manners when multi-line
1837 input was present. Minor optimizations and cleanup.
1842 input was present. Minor optimizations and cleanup.
1838
1843
1839 (Logger): Remove old Changelog info for cleanup. This is the
1844 (Logger): Remove old Changelog info for cleanup. This is the
1840 information which was there from Janko's original code:
1845 information which was there from Janko's original code:
1841
1846
1842 Changes to Logger: - made the default log filename a parameter
1847 Changes to Logger: - made the default log filename a parameter
1843
1848
1844 - put a check for lines beginning with !@? in log(). Needed
1849 - put a check for lines beginning with !@? in log(). Needed
1845 (even if the handlers properly log their lines) for mid-session
1850 (even if the handlers properly log their lines) for mid-session
1846 logging activation to work properly. Without this, lines logged
1851 logging activation to work properly. Without this, lines logged
1847 in mid session, which get read from the cache, would end up
1852 in mid session, which get read from the cache, would end up
1848 'bare' (with !@? in the open) in the log. Now they are caught
1853 'bare' (with !@? in the open) in the log. Now they are caught
1849 and prepended with a #.
1854 and prepended with a #.
1850
1855
1851 * IPython/iplib.py (InteractiveShell.init_readline): added check
1856 * IPython/iplib.py (InteractiveShell.init_readline): added check
1852 in case MagicCompleter fails to be defined, so we don't crash.
1857 in case MagicCompleter fails to be defined, so we don't crash.
1853
1858
1854 2004-07-13 Fernando Perez <fperez@colorado.edu>
1859 2004-07-13 Fernando Perez <fperez@colorado.edu>
1855
1860
1856 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1861 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1857 of EPS if the requested filename ends in '.eps'.
1862 of EPS if the requested filename ends in '.eps'.
1858
1863
1859 2004-07-04 Fernando Perez <fperez@colorado.edu>
1864 2004-07-04 Fernando Perez <fperez@colorado.edu>
1860
1865
1861 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1866 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1862 escaping of quotes when calling the shell.
1867 escaping of quotes when calling the shell.
1863
1868
1864 2004-07-02 Fernando Perez <fperez@colorado.edu>
1869 2004-07-02 Fernando Perez <fperez@colorado.edu>
1865
1870
1866 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1871 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1867 gettext not working because we were clobbering '_'. Fixes
1872 gettext not working because we were clobbering '_'. Fixes
1868 http://www.scipy.net/roundup/ipython/issue6.
1873 http://www.scipy.net/roundup/ipython/issue6.
1869
1874
1870 2004-07-01 Fernando Perez <fperez@colorado.edu>
1875 2004-07-01 Fernando Perez <fperez@colorado.edu>
1871
1876
1872 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1877 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1873 into @cd. Patch by Ville.
1878 into @cd. Patch by Ville.
1874
1879
1875 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1880 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1876 new function to store things after ipmaker runs. Patch by Ville.
1881 new function to store things after ipmaker runs. Patch by Ville.
1877 Eventually this will go away once ipmaker is removed and the class
1882 Eventually this will go away once ipmaker is removed and the class
1878 gets cleaned up, but for now it's ok. Key functionality here is
1883 gets cleaned up, but for now it's ok. Key functionality here is
1879 the addition of the persistent storage mechanism, a dict for
1884 the addition of the persistent storage mechanism, a dict for
1880 keeping data across sessions (for now just bookmarks, but more can
1885 keeping data across sessions (for now just bookmarks, but more can
1881 be implemented later).
1886 be implemented later).
1882
1887
1883 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1888 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1884 persistent across sections. Patch by Ville, I modified it
1889 persistent across sections. Patch by Ville, I modified it
1885 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1890 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1886 added a '-l' option to list all bookmarks.
1891 added a '-l' option to list all bookmarks.
1887
1892
1888 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1893 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1889 center for cleanup. Registered with atexit.register(). I moved
1894 center for cleanup. Registered with atexit.register(). I moved
1890 here the old exit_cleanup(). After a patch by Ville.
1895 here the old exit_cleanup(). After a patch by Ville.
1891
1896
1892 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1897 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1893 characters in the hacked shlex_split for python 2.2.
1898 characters in the hacked shlex_split for python 2.2.
1894
1899
1895 * IPython/iplib.py (file_matches): more fixes to filenames with
1900 * IPython/iplib.py (file_matches): more fixes to filenames with
1896 whitespace in them. It's not perfect, but limitations in python's
1901 whitespace in them. It's not perfect, but limitations in python's
1897 readline make it impossible to go further.
1902 readline make it impossible to go further.
1898
1903
1899 2004-06-29 Fernando Perez <fperez@colorado.edu>
1904 2004-06-29 Fernando Perez <fperez@colorado.edu>
1900
1905
1901 * IPython/iplib.py (file_matches): escape whitespace correctly in
1906 * IPython/iplib.py (file_matches): escape whitespace correctly in
1902 filename completions. Bug reported by Ville.
1907 filename completions. Bug reported by Ville.
1903
1908
1904 2004-06-28 Fernando Perez <fperez@colorado.edu>
1909 2004-06-28 Fernando Perez <fperez@colorado.edu>
1905
1910
1906 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1911 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1907 the history file will be called 'history-PROFNAME' (or just
1912 the history file will be called 'history-PROFNAME' (or just
1908 'history' if no profile is loaded). I was getting annoyed at
1913 'history' if no profile is loaded). I was getting annoyed at
1909 getting my Numerical work history clobbered by pysh sessions.
1914 getting my Numerical work history clobbered by pysh sessions.
1910
1915
1911 * IPython/iplib.py (InteractiveShell.__init__): Internal
1916 * IPython/iplib.py (InteractiveShell.__init__): Internal
1912 getoutputerror() function so that we can honor the system_verbose
1917 getoutputerror() function so that we can honor the system_verbose
1913 flag for _all_ system calls. I also added escaping of #
1918 flag for _all_ system calls. I also added escaping of #
1914 characters here to avoid confusing Itpl.
1919 characters here to avoid confusing Itpl.
1915
1920
1916 * IPython/Magic.py (shlex_split): removed call to shell in
1921 * IPython/Magic.py (shlex_split): removed call to shell in
1917 parse_options and replaced it with shlex.split(). The annoying
1922 parse_options and replaced it with shlex.split(). The annoying
1918 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1923 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1919 to backport it from 2.3, with several frail hacks (the shlex
1924 to backport it from 2.3, with several frail hacks (the shlex
1920 module is rather limited in 2.2). Thanks to a suggestion by Ville
1925 module is rather limited in 2.2). Thanks to a suggestion by Ville
1921 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1926 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1922 problem.
1927 problem.
1923
1928
1924 (Magic.magic_system_verbose): new toggle to print the actual
1929 (Magic.magic_system_verbose): new toggle to print the actual
1925 system calls made by ipython. Mainly for debugging purposes.
1930 system calls made by ipython. Mainly for debugging purposes.
1926
1931
1927 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1932 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1928 doesn't support persistence. Reported (and fix suggested) by
1933 doesn't support persistence. Reported (and fix suggested) by
1929 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1934 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1930
1935
1931 2004-06-26 Fernando Perez <fperez@colorado.edu>
1936 2004-06-26 Fernando Perez <fperez@colorado.edu>
1932
1937
1933 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1938 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1934 continue prompts.
1939 continue prompts.
1935
1940
1936 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1941 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1937 function (basically a big docstring) and a few more things here to
1942 function (basically a big docstring) and a few more things here to
1938 speedup startup. pysh.py is now very lightweight. We want because
1943 speedup startup. pysh.py is now very lightweight. We want because
1939 it gets execfile'd, while InterpreterExec gets imported, so
1944 it gets execfile'd, while InterpreterExec gets imported, so
1940 byte-compilation saves time.
1945 byte-compilation saves time.
1941
1946
1942 2004-06-25 Fernando Perez <fperez@colorado.edu>
1947 2004-06-25 Fernando Perez <fperez@colorado.edu>
1943
1948
1944 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1949 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1945 -NUM', which was recently broken.
1950 -NUM', which was recently broken.
1946
1951
1947 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1952 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1948 in multi-line input (but not !!, which doesn't make sense there).
1953 in multi-line input (but not !!, which doesn't make sense there).
1949
1954
1950 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1955 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1951 It's just too useful, and people can turn it off in the less
1956 It's just too useful, and people can turn it off in the less
1952 common cases where it's a problem.
1957 common cases where it's a problem.
1953
1958
1954 2004-06-24 Fernando Perez <fperez@colorado.edu>
1959 2004-06-24 Fernando Perez <fperez@colorado.edu>
1955
1960
1956 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1961 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1957 special syntaxes (like alias calling) is now allied in multi-line
1962 special syntaxes (like alias calling) is now allied in multi-line
1958 input. This is still _very_ experimental, but it's necessary for
1963 input. This is still _very_ experimental, but it's necessary for
1959 efficient shell usage combining python looping syntax with system
1964 efficient shell usage combining python looping syntax with system
1960 calls. For now it's restricted to aliases, I don't think it
1965 calls. For now it's restricted to aliases, I don't think it
1961 really even makes sense to have this for magics.
1966 really even makes sense to have this for magics.
1962
1967
1963 2004-06-23 Fernando Perez <fperez@colorado.edu>
1968 2004-06-23 Fernando Perez <fperez@colorado.edu>
1964
1969
1965 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1970 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1966 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1971 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1967
1972
1968 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1973 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1969 extensions under Windows (after code sent by Gary Bishop). The
1974 extensions under Windows (after code sent by Gary Bishop). The
1970 extensions considered 'executable' are stored in IPython's rc
1975 extensions considered 'executable' are stored in IPython's rc
1971 structure as win_exec_ext.
1976 structure as win_exec_ext.
1972
1977
1973 * IPython/genutils.py (shell): new function, like system() but
1978 * IPython/genutils.py (shell): new function, like system() but
1974 without return value. Very useful for interactive shell work.
1979 without return value. Very useful for interactive shell work.
1975
1980
1976 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1981 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1977 delete aliases.
1982 delete aliases.
1978
1983
1979 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1984 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1980 sure that the alias table doesn't contain python keywords.
1985 sure that the alias table doesn't contain python keywords.
1981
1986
1982 2004-06-21 Fernando Perez <fperez@colorado.edu>
1987 2004-06-21 Fernando Perez <fperez@colorado.edu>
1983
1988
1984 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1989 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1985 non-existent items are found in $PATH. Reported by Thorsten.
1990 non-existent items are found in $PATH. Reported by Thorsten.
1986
1991
1987 2004-06-20 Fernando Perez <fperez@colorado.edu>
1992 2004-06-20 Fernando Perez <fperez@colorado.edu>
1988
1993
1989 * IPython/iplib.py (complete): modified the completer so that the
1994 * IPython/iplib.py (complete): modified the completer so that the
1990 order of priorities can be easily changed at runtime.
1995 order of priorities can be easily changed at runtime.
1991
1996
1992 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1997 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1993 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1998 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1994
1999
1995 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2000 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1996 expand Python variables prepended with $ in all system calls. The
2001 expand Python variables prepended with $ in all system calls. The
1997 same was done to InteractiveShell.handle_shell_escape. Now all
2002 same was done to InteractiveShell.handle_shell_escape. Now all
1998 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2003 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1999 expansion of python variables and expressions according to the
2004 expansion of python variables and expressions according to the
2000 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2005 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2001
2006
2002 Though PEP-215 has been rejected, a similar (but simpler) one
2007 Though PEP-215 has been rejected, a similar (but simpler) one
2003 seems like it will go into Python 2.4, PEP-292 -
2008 seems like it will go into Python 2.4, PEP-292 -
2004 http://www.python.org/peps/pep-0292.html.
2009 http://www.python.org/peps/pep-0292.html.
2005
2010
2006 I'll keep the full syntax of PEP-215, since IPython has since the
2011 I'll keep the full syntax of PEP-215, since IPython has since the
2007 start used Ka-Ping Yee's reference implementation discussed there
2012 start used Ka-Ping Yee's reference implementation discussed there
2008 (Itpl), and I actually like the powerful semantics it offers.
2013 (Itpl), and I actually like the powerful semantics it offers.
2009
2014
2010 In order to access normal shell variables, the $ has to be escaped
2015 In order to access normal shell variables, the $ has to be escaped
2011 via an extra $. For example:
2016 via an extra $. For example:
2012
2017
2013 In [7]: PATH='a python variable'
2018 In [7]: PATH='a python variable'
2014
2019
2015 In [8]: !echo $PATH
2020 In [8]: !echo $PATH
2016 a python variable
2021 a python variable
2017
2022
2018 In [9]: !echo $$PATH
2023 In [9]: !echo $$PATH
2019 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2024 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2020
2025
2021 (Magic.parse_options): escape $ so the shell doesn't evaluate
2026 (Magic.parse_options): escape $ so the shell doesn't evaluate
2022 things prematurely.
2027 things prematurely.
2023
2028
2024 * IPython/iplib.py (InteractiveShell.call_alias): added the
2029 * IPython/iplib.py (InteractiveShell.call_alias): added the
2025 ability for aliases to expand python variables via $.
2030 ability for aliases to expand python variables via $.
2026
2031
2027 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2032 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2028 system, now there's a @rehash/@rehashx pair of magics. These work
2033 system, now there's a @rehash/@rehashx pair of magics. These work
2029 like the csh rehash command, and can be invoked at any time. They
2034 like the csh rehash command, and can be invoked at any time. They
2030 build a table of aliases to everything in the user's $PATH
2035 build a table of aliases to everything in the user's $PATH
2031 (@rehash uses everything, @rehashx is slower but only adds
2036 (@rehash uses everything, @rehashx is slower but only adds
2032 executable files). With this, the pysh.py-based shell profile can
2037 executable files). With this, the pysh.py-based shell profile can
2033 now simply call rehash upon startup, and full access to all
2038 now simply call rehash upon startup, and full access to all
2034 programs in the user's path is obtained.
2039 programs in the user's path is obtained.
2035
2040
2036 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2041 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2037 functionality is now fully in place. I removed the old dynamic
2042 functionality is now fully in place. I removed the old dynamic
2038 code generation based approach, in favor of a much lighter one
2043 code generation based approach, in favor of a much lighter one
2039 based on a simple dict. The advantage is that this allows me to
2044 based on a simple dict. The advantage is that this allows me to
2040 now have thousands of aliases with negligible cost (unthinkable
2045 now have thousands of aliases with negligible cost (unthinkable
2041 with the old system).
2046 with the old system).
2042
2047
2043 2004-06-19 Fernando Perez <fperez@colorado.edu>
2048 2004-06-19 Fernando Perez <fperez@colorado.edu>
2044
2049
2045 * IPython/iplib.py (__init__): extended MagicCompleter class to
2050 * IPython/iplib.py (__init__): extended MagicCompleter class to
2046 also complete (last in priority) on user aliases.
2051 also complete (last in priority) on user aliases.
2047
2052
2048 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2053 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2049 call to eval.
2054 call to eval.
2050 (ItplNS.__init__): Added a new class which functions like Itpl,
2055 (ItplNS.__init__): Added a new class which functions like Itpl,
2051 but allows configuring the namespace for the evaluation to occur
2056 but allows configuring the namespace for the evaluation to occur
2052 in.
2057 in.
2053
2058
2054 2004-06-18 Fernando Perez <fperez@colorado.edu>
2059 2004-06-18 Fernando Perez <fperez@colorado.edu>
2055
2060
2056 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2061 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2057 better message when 'exit' or 'quit' are typed (a common newbie
2062 better message when 'exit' or 'quit' are typed (a common newbie
2058 confusion).
2063 confusion).
2059
2064
2060 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2065 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2061 check for Windows users.
2066 check for Windows users.
2062
2067
2063 * IPython/iplib.py (InteractiveShell.user_setup): removed
2068 * IPython/iplib.py (InteractiveShell.user_setup): removed
2064 disabling of colors for Windows. I'll test at runtime and issue a
2069 disabling of colors for Windows. I'll test at runtime and issue a
2065 warning if Gary's readline isn't found, as to nudge users to
2070 warning if Gary's readline isn't found, as to nudge users to
2066 download it.
2071 download it.
2067
2072
2068 2004-06-16 Fernando Perez <fperez@colorado.edu>
2073 2004-06-16 Fernando Perez <fperez@colorado.edu>
2069
2074
2070 * IPython/genutils.py (Stream.__init__): changed to print errors
2075 * IPython/genutils.py (Stream.__init__): changed to print errors
2071 to sys.stderr. I had a circular dependency here. Now it's
2076 to sys.stderr. I had a circular dependency here. Now it's
2072 possible to run ipython as IDLE's shell (consider this pre-alpha,
2077 possible to run ipython as IDLE's shell (consider this pre-alpha,
2073 since true stdout things end up in the starting terminal instead
2078 since true stdout things end up in the starting terminal instead
2074 of IDLE's out).
2079 of IDLE's out).
2075
2080
2076 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2081 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2077 users who haven't # updated their prompt_in2 definitions. Remove
2082 users who haven't # updated their prompt_in2 definitions. Remove
2078 eventually.
2083 eventually.
2079 (multiple_replace): added credit to original ASPN recipe.
2084 (multiple_replace): added credit to original ASPN recipe.
2080
2085
2081 2004-06-15 Fernando Perez <fperez@colorado.edu>
2086 2004-06-15 Fernando Perez <fperez@colorado.edu>
2082
2087
2083 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2088 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2084 list of auto-defined aliases.
2089 list of auto-defined aliases.
2085
2090
2086 2004-06-13 Fernando Perez <fperez@colorado.edu>
2091 2004-06-13 Fernando Perez <fperez@colorado.edu>
2087
2092
2088 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2093 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2089 install was really requested (so setup.py can be used for other
2094 install was really requested (so setup.py can be used for other
2090 things under Windows).
2095 things under Windows).
2091
2096
2092 2004-06-10 Fernando Perez <fperez@colorado.edu>
2097 2004-06-10 Fernando Perez <fperez@colorado.edu>
2093
2098
2094 * IPython/Logger.py (Logger.create_log): Manually remove any old
2099 * IPython/Logger.py (Logger.create_log): Manually remove any old
2095 backup, since os.remove may fail under Windows. Fixes bug
2100 backup, since os.remove may fail under Windows. Fixes bug
2096 reported by Thorsten.
2101 reported by Thorsten.
2097
2102
2098 2004-06-09 Fernando Perez <fperez@colorado.edu>
2103 2004-06-09 Fernando Perez <fperez@colorado.edu>
2099
2104
2100 * examples/example-embed.py: fixed all references to %n (replaced
2105 * examples/example-embed.py: fixed all references to %n (replaced
2101 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2106 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2102 for all examples and the manual as well.
2107 for all examples and the manual as well.
2103
2108
2104 2004-06-08 Fernando Perez <fperez@colorado.edu>
2109 2004-06-08 Fernando Perez <fperez@colorado.edu>
2105
2110
2106 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2111 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2107 alignment and color management. All 3 prompt subsystems now
2112 alignment and color management. All 3 prompt subsystems now
2108 inherit from BasePrompt.
2113 inherit from BasePrompt.
2109
2114
2110 * tools/release: updates for windows installer build and tag rpms
2115 * tools/release: updates for windows installer build and tag rpms
2111 with python version (since paths are fixed).
2116 with python version (since paths are fixed).
2112
2117
2113 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2118 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2114 which will become eventually obsolete. Also fixed the default
2119 which will become eventually obsolete. Also fixed the default
2115 prompt_in2 to use \D, so at least new users start with the correct
2120 prompt_in2 to use \D, so at least new users start with the correct
2116 defaults.
2121 defaults.
2117 WARNING: Users with existing ipythonrc files will need to apply
2122 WARNING: Users with existing ipythonrc files will need to apply
2118 this fix manually!
2123 this fix manually!
2119
2124
2120 * setup.py: make windows installer (.exe). This is finally the
2125 * setup.py: make windows installer (.exe). This is finally the
2121 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2126 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2122 which I hadn't included because it required Python 2.3 (or recent
2127 which I hadn't included because it required Python 2.3 (or recent
2123 distutils).
2128 distutils).
2124
2129
2125 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2130 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2126 usage of new '\D' escape.
2131 usage of new '\D' escape.
2127
2132
2128 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2133 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2129 lacks os.getuid())
2134 lacks os.getuid())
2130 (CachedOutput.set_colors): Added the ability to turn coloring
2135 (CachedOutput.set_colors): Added the ability to turn coloring
2131 on/off with @colors even for manually defined prompt colors. It
2136 on/off with @colors even for manually defined prompt colors. It
2132 uses a nasty global, but it works safely and via the generic color
2137 uses a nasty global, but it works safely and via the generic color
2133 handling mechanism.
2138 handling mechanism.
2134 (Prompt2.__init__): Introduced new escape '\D' for continuation
2139 (Prompt2.__init__): Introduced new escape '\D' for continuation
2135 prompts. It represents the counter ('\#') as dots.
2140 prompts. It represents the counter ('\#') as dots.
2136 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2141 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2137 need to update their ipythonrc files and replace '%n' with '\D' in
2142 need to update their ipythonrc files and replace '%n' with '\D' in
2138 their prompt_in2 settings everywhere. Sorry, but there's
2143 their prompt_in2 settings everywhere. Sorry, but there's
2139 otherwise no clean way to get all prompts to properly align. The
2144 otherwise no clean way to get all prompts to properly align. The
2140 ipythonrc shipped with IPython has been updated.
2145 ipythonrc shipped with IPython has been updated.
2141
2146
2142 2004-06-07 Fernando Perez <fperez@colorado.edu>
2147 2004-06-07 Fernando Perez <fperez@colorado.edu>
2143
2148
2144 * setup.py (isfile): Pass local_icons option to latex2html, so the
2149 * setup.py (isfile): Pass local_icons option to latex2html, so the
2145 resulting HTML file is self-contained. Thanks to
2150 resulting HTML file is self-contained. Thanks to
2146 dryice-AT-liu.com.cn for the tip.
2151 dryice-AT-liu.com.cn for the tip.
2147
2152
2148 * pysh.py: I created a new profile 'shell', which implements a
2153 * pysh.py: I created a new profile 'shell', which implements a
2149 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2154 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2150 system shell, nor will it become one anytime soon. It's mainly
2155 system shell, nor will it become one anytime soon. It's mainly
2151 meant to illustrate the use of the new flexible bash-like prompts.
2156 meant to illustrate the use of the new flexible bash-like prompts.
2152 I guess it could be used by hardy souls for true shell management,
2157 I guess it could be used by hardy souls for true shell management,
2153 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2158 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2154 profile. This uses the InterpreterExec extension provided by
2159 profile. This uses the InterpreterExec extension provided by
2155 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2160 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2156
2161
2157 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2162 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2158 auto-align itself with the length of the previous input prompt
2163 auto-align itself with the length of the previous input prompt
2159 (taking into account the invisible color escapes).
2164 (taking into account the invisible color escapes).
2160 (CachedOutput.__init__): Large restructuring of this class. Now
2165 (CachedOutput.__init__): Large restructuring of this class. Now
2161 all three prompts (primary1, primary2, output) are proper objects,
2166 all three prompts (primary1, primary2, output) are proper objects,
2162 managed by the 'parent' CachedOutput class. The code is still a
2167 managed by the 'parent' CachedOutput class. The code is still a
2163 bit hackish (all prompts share state via a pointer to the cache),
2168 bit hackish (all prompts share state via a pointer to the cache),
2164 but it's overall far cleaner than before.
2169 but it's overall far cleaner than before.
2165
2170
2166 * IPython/genutils.py (getoutputerror): modified to add verbose,
2171 * IPython/genutils.py (getoutputerror): modified to add verbose,
2167 debug and header options. This makes the interface of all getout*
2172 debug and header options. This makes the interface of all getout*
2168 functions uniform.
2173 functions uniform.
2169 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2174 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2170
2175
2171 * IPython/Magic.py (Magic.default_option): added a function to
2176 * IPython/Magic.py (Magic.default_option): added a function to
2172 allow registering default options for any magic command. This
2177 allow registering default options for any magic command. This
2173 makes it easy to have profiles which customize the magics globally
2178 makes it easy to have profiles which customize the magics globally
2174 for a certain use. The values set through this function are
2179 for a certain use. The values set through this function are
2175 picked up by the parse_options() method, which all magics should
2180 picked up by the parse_options() method, which all magics should
2176 use to parse their options.
2181 use to parse their options.
2177
2182
2178 * IPython/genutils.py (warn): modified the warnings framework to
2183 * IPython/genutils.py (warn): modified the warnings framework to
2179 use the Term I/O class. I'm trying to slowly unify all of
2184 use the Term I/O class. I'm trying to slowly unify all of
2180 IPython's I/O operations to pass through Term.
2185 IPython's I/O operations to pass through Term.
2181
2186
2182 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2187 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2183 the secondary prompt to correctly match the length of the primary
2188 the secondary prompt to correctly match the length of the primary
2184 one for any prompt. Now multi-line code will properly line up
2189 one for any prompt. Now multi-line code will properly line up
2185 even for path dependent prompts, such as the new ones available
2190 even for path dependent prompts, such as the new ones available
2186 via the prompt_specials.
2191 via the prompt_specials.
2187
2192
2188 2004-06-06 Fernando Perez <fperez@colorado.edu>
2193 2004-06-06 Fernando Perez <fperez@colorado.edu>
2189
2194
2190 * IPython/Prompts.py (prompt_specials): Added the ability to have
2195 * IPython/Prompts.py (prompt_specials): Added the ability to have
2191 bash-like special sequences in the prompts, which get
2196 bash-like special sequences in the prompts, which get
2192 automatically expanded. Things like hostname, current working
2197 automatically expanded. Things like hostname, current working
2193 directory and username are implemented already, but it's easy to
2198 directory and username are implemented already, but it's easy to
2194 add more in the future. Thanks to a patch by W.J. van der Laan
2199 add more in the future. Thanks to a patch by W.J. van der Laan
2195 <gnufnork-AT-hetdigitalegat.nl>
2200 <gnufnork-AT-hetdigitalegat.nl>
2196 (prompt_specials): Added color support for prompt strings, so
2201 (prompt_specials): Added color support for prompt strings, so
2197 users can define arbitrary color setups for their prompts.
2202 users can define arbitrary color setups for their prompts.
2198
2203
2199 2004-06-05 Fernando Perez <fperez@colorado.edu>
2204 2004-06-05 Fernando Perez <fperez@colorado.edu>
2200
2205
2201 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2206 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2202 code to load Gary Bishop's readline and configure it
2207 code to load Gary Bishop's readline and configure it
2203 automatically. Thanks to Gary for help on this.
2208 automatically. Thanks to Gary for help on this.
2204
2209
2205 2004-06-01 Fernando Perez <fperez@colorado.edu>
2210 2004-06-01 Fernando Perez <fperez@colorado.edu>
2206
2211
2207 * IPython/Logger.py (Logger.create_log): fix bug for logging
2212 * IPython/Logger.py (Logger.create_log): fix bug for logging
2208 with no filename (previous fix was incomplete).
2213 with no filename (previous fix was incomplete).
2209
2214
2210 2004-05-25 Fernando Perez <fperez@colorado.edu>
2215 2004-05-25 Fernando Perez <fperez@colorado.edu>
2211
2216
2212 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2217 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2213 parens would get passed to the shell.
2218 parens would get passed to the shell.
2214
2219
2215 2004-05-20 Fernando Perez <fperez@colorado.edu>
2220 2004-05-20 Fernando Perez <fperez@colorado.edu>
2216
2221
2217 * IPython/Magic.py (Magic.magic_prun): changed default profile
2222 * IPython/Magic.py (Magic.magic_prun): changed default profile
2218 sort order to 'time' (the more common profiling need).
2223 sort order to 'time' (the more common profiling need).
2219
2224
2220 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2225 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2221 so that source code shown is guaranteed in sync with the file on
2226 so that source code shown is guaranteed in sync with the file on
2222 disk (also changed in psource). Similar fix to the one for
2227 disk (also changed in psource). Similar fix to the one for
2223 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2228 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2224 <yann.ledu-AT-noos.fr>.
2229 <yann.ledu-AT-noos.fr>.
2225
2230
2226 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2231 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2227 with a single option would not be correctly parsed. Closes
2232 with a single option would not be correctly parsed. Closes
2228 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2233 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2229 introduced in 0.6.0 (on 2004-05-06).
2234 introduced in 0.6.0 (on 2004-05-06).
2230
2235
2231 2004-05-13 *** Released version 0.6.0
2236 2004-05-13 *** Released version 0.6.0
2232
2237
2233 2004-05-13 Fernando Perez <fperez@colorado.edu>
2238 2004-05-13 Fernando Perez <fperez@colorado.edu>
2234
2239
2235 * debian/: Added debian/ directory to CVS, so that debian support
2240 * debian/: Added debian/ directory to CVS, so that debian support
2236 is publicly accessible. The debian package is maintained by Jack
2241 is publicly accessible. The debian package is maintained by Jack
2237 Moffit <jack-AT-xiph.org>.
2242 Moffit <jack-AT-xiph.org>.
2238
2243
2239 * Documentation: included the notes about an ipython-based system
2244 * Documentation: included the notes about an ipython-based system
2240 shell (the hypothetical 'pysh') into the new_design.pdf document,
2245 shell (the hypothetical 'pysh') into the new_design.pdf document,
2241 so that these ideas get distributed to users along with the
2246 so that these ideas get distributed to users along with the
2242 official documentation.
2247 official documentation.
2243
2248
2244 2004-05-10 Fernando Perez <fperez@colorado.edu>
2249 2004-05-10 Fernando Perez <fperez@colorado.edu>
2245
2250
2246 * IPython/Logger.py (Logger.create_log): fix recently introduced
2251 * IPython/Logger.py (Logger.create_log): fix recently introduced
2247 bug (misindented line) where logstart would fail when not given an
2252 bug (misindented line) where logstart would fail when not given an
2248 explicit filename.
2253 explicit filename.
2249
2254
2250 2004-05-09 Fernando Perez <fperez@colorado.edu>
2255 2004-05-09 Fernando Perez <fperez@colorado.edu>
2251
2256
2252 * IPython/Magic.py (Magic.parse_options): skip system call when
2257 * IPython/Magic.py (Magic.parse_options): skip system call when
2253 there are no options to look for. Faster, cleaner for the common
2258 there are no options to look for. Faster, cleaner for the common
2254 case.
2259 case.
2255
2260
2256 * Documentation: many updates to the manual: describing Windows
2261 * Documentation: many updates to the manual: describing Windows
2257 support better, Gnuplot updates, credits, misc small stuff. Also
2262 support better, Gnuplot updates, credits, misc small stuff. Also
2258 updated the new_design doc a bit.
2263 updated the new_design doc a bit.
2259
2264
2260 2004-05-06 *** Released version 0.6.0.rc1
2265 2004-05-06 *** Released version 0.6.0.rc1
2261
2266
2262 2004-05-06 Fernando Perez <fperez@colorado.edu>
2267 2004-05-06 Fernando Perez <fperez@colorado.edu>
2263
2268
2264 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2269 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2265 operations to use the vastly more efficient list/''.join() method.
2270 operations to use the vastly more efficient list/''.join() method.
2266 (FormattedTB.text): Fix
2271 (FormattedTB.text): Fix
2267 http://www.scipy.net/roundup/ipython/issue12 - exception source
2272 http://www.scipy.net/roundup/ipython/issue12 - exception source
2268 extract not updated after reload. Thanks to Mike Salib
2273 extract not updated after reload. Thanks to Mike Salib
2269 <msalib-AT-mit.edu> for pinning the source of the problem.
2274 <msalib-AT-mit.edu> for pinning the source of the problem.
2270 Fortunately, the solution works inside ipython and doesn't require
2275 Fortunately, the solution works inside ipython and doesn't require
2271 any changes to python proper.
2276 any changes to python proper.
2272
2277
2273 * IPython/Magic.py (Magic.parse_options): Improved to process the
2278 * IPython/Magic.py (Magic.parse_options): Improved to process the
2274 argument list as a true shell would (by actually using the
2279 argument list as a true shell would (by actually using the
2275 underlying system shell). This way, all @magics automatically get
2280 underlying system shell). This way, all @magics automatically get
2276 shell expansion for variables. Thanks to a comment by Alex
2281 shell expansion for variables. Thanks to a comment by Alex
2277 Schmolck.
2282 Schmolck.
2278
2283
2279 2004-04-04 Fernando Perez <fperez@colorado.edu>
2284 2004-04-04 Fernando Perez <fperez@colorado.edu>
2280
2285
2281 * IPython/iplib.py (InteractiveShell.interact): Added a special
2286 * IPython/iplib.py (InteractiveShell.interact): Added a special
2282 trap for a debugger quit exception, which is basically impossible
2287 trap for a debugger quit exception, which is basically impossible
2283 to handle by normal mechanisms, given what pdb does to the stack.
2288 to handle by normal mechanisms, given what pdb does to the stack.
2284 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2289 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2285
2290
2286 2004-04-03 Fernando Perez <fperez@colorado.edu>
2291 2004-04-03 Fernando Perez <fperez@colorado.edu>
2287
2292
2288 * IPython/genutils.py (Term): Standardized the names of the Term
2293 * IPython/genutils.py (Term): Standardized the names of the Term
2289 class streams to cin/cout/cerr, following C++ naming conventions
2294 class streams to cin/cout/cerr, following C++ naming conventions
2290 (I can't use in/out/err because 'in' is not a valid attribute
2295 (I can't use in/out/err because 'in' is not a valid attribute
2291 name).
2296 name).
2292
2297
2293 * IPython/iplib.py (InteractiveShell.interact): don't increment
2298 * IPython/iplib.py (InteractiveShell.interact): don't increment
2294 the prompt if there's no user input. By Daniel 'Dang' Griffith
2299 the prompt if there's no user input. By Daniel 'Dang' Griffith
2295 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2300 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2296 Francois Pinard.
2301 Francois Pinard.
2297
2302
2298 2004-04-02 Fernando Perez <fperez@colorado.edu>
2303 2004-04-02 Fernando Perez <fperez@colorado.edu>
2299
2304
2300 * IPython/genutils.py (Stream.__init__): Modified to survive at
2305 * IPython/genutils.py (Stream.__init__): Modified to survive at
2301 least importing in contexts where stdin/out/err aren't true file
2306 least importing in contexts where stdin/out/err aren't true file
2302 objects, such as PyCrust (they lack fileno() and mode). However,
2307 objects, such as PyCrust (they lack fileno() and mode). However,
2303 the recovery facilities which rely on these things existing will
2308 the recovery facilities which rely on these things existing will
2304 not work.
2309 not work.
2305
2310
2306 2004-04-01 Fernando Perez <fperez@colorado.edu>
2311 2004-04-01 Fernando Perez <fperez@colorado.edu>
2307
2312
2308 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2313 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2309 use the new getoutputerror() function, so it properly
2314 use the new getoutputerror() function, so it properly
2310 distinguishes stdout/err.
2315 distinguishes stdout/err.
2311
2316
2312 * IPython/genutils.py (getoutputerror): added a function to
2317 * IPython/genutils.py (getoutputerror): added a function to
2313 capture separately the standard output and error of a command.
2318 capture separately the standard output and error of a command.
2314 After a comment from dang on the mailing lists. This code is
2319 After a comment from dang on the mailing lists. This code is
2315 basically a modified version of commands.getstatusoutput(), from
2320 basically a modified version of commands.getstatusoutput(), from
2316 the standard library.
2321 the standard library.
2317
2322
2318 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2323 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2319 '!!' as a special syntax (shorthand) to access @sx.
2324 '!!' as a special syntax (shorthand) to access @sx.
2320
2325
2321 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2326 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2322 command and return its output as a list split on '\n'.
2327 command and return its output as a list split on '\n'.
2323
2328
2324 2004-03-31 Fernando Perez <fperez@colorado.edu>
2329 2004-03-31 Fernando Perez <fperez@colorado.edu>
2325
2330
2326 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2331 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2327 method to dictionaries used as FakeModule instances if they lack
2332 method to dictionaries used as FakeModule instances if they lack
2328 it. At least pydoc in python2.3 breaks for runtime-defined
2333 it. At least pydoc in python2.3 breaks for runtime-defined
2329 functions without this hack. At some point I need to _really_
2334 functions without this hack. At some point I need to _really_
2330 understand what FakeModule is doing, because it's a gross hack.
2335 understand what FakeModule is doing, because it's a gross hack.
2331 But it solves Arnd's problem for now...
2336 But it solves Arnd's problem for now...
2332
2337
2333 2004-02-27 Fernando Perez <fperez@colorado.edu>
2338 2004-02-27 Fernando Perez <fperez@colorado.edu>
2334
2339
2335 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2340 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2336 mode would behave erratically. Also increased the number of
2341 mode would behave erratically. Also increased the number of
2337 possible logs in rotate mod to 999. Thanks to Rod Holland
2342 possible logs in rotate mod to 999. Thanks to Rod Holland
2338 <rhh@StructureLABS.com> for the report and fixes.
2343 <rhh@StructureLABS.com> for the report and fixes.
2339
2344
2340 2004-02-26 Fernando Perez <fperez@colorado.edu>
2345 2004-02-26 Fernando Perez <fperez@colorado.edu>
2341
2346
2342 * IPython/genutils.py (page): Check that the curses module really
2347 * IPython/genutils.py (page): Check that the curses module really
2343 has the initscr attribute before trying to use it. For some
2348 has the initscr attribute before trying to use it. For some
2344 reason, the Solaris curses module is missing this. I think this
2349 reason, the Solaris curses module is missing this. I think this
2345 should be considered a Solaris python bug, but I'm not sure.
2350 should be considered a Solaris python bug, but I'm not sure.
2346
2351
2347 2004-01-17 Fernando Perez <fperez@colorado.edu>
2352 2004-01-17 Fernando Perez <fperez@colorado.edu>
2348
2353
2349 * IPython/genutils.py (Stream.__init__): Changes to try to make
2354 * IPython/genutils.py (Stream.__init__): Changes to try to make
2350 ipython robust against stdin/out/err being closed by the user.
2355 ipython robust against stdin/out/err being closed by the user.
2351 This is 'user error' (and blocks a normal python session, at least
2356 This is 'user error' (and blocks a normal python session, at least
2352 the stdout case). However, Ipython should be able to survive such
2357 the stdout case). However, Ipython should be able to survive such
2353 instances of abuse as gracefully as possible. To simplify the
2358 instances of abuse as gracefully as possible. To simplify the
2354 coding and maintain compatibility with Gary Bishop's Term
2359 coding and maintain compatibility with Gary Bishop's Term
2355 contributions, I've made use of classmethods for this. I think
2360 contributions, I've made use of classmethods for this. I think
2356 this introduces a dependency on python 2.2.
2361 this introduces a dependency on python 2.2.
2357
2362
2358 2004-01-13 Fernando Perez <fperez@colorado.edu>
2363 2004-01-13 Fernando Perez <fperez@colorado.edu>
2359
2364
2360 * IPython/numutils.py (exp_safe): simplified the code a bit and
2365 * IPython/numutils.py (exp_safe): simplified the code a bit and
2361 removed the need for importing the kinds module altogether.
2366 removed the need for importing the kinds module altogether.
2362
2367
2363 2004-01-06 Fernando Perez <fperez@colorado.edu>
2368 2004-01-06 Fernando Perez <fperez@colorado.edu>
2364
2369
2365 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2370 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2366 a magic function instead, after some community feedback. No
2371 a magic function instead, after some community feedback. No
2367 special syntax will exist for it, but its name is deliberately
2372 special syntax will exist for it, but its name is deliberately
2368 very short.
2373 very short.
2369
2374
2370 2003-12-20 Fernando Perez <fperez@colorado.edu>
2375 2003-12-20 Fernando Perez <fperez@colorado.edu>
2371
2376
2372 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2377 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2373 new functionality, to automagically assign the result of a shell
2378 new functionality, to automagically assign the result of a shell
2374 command to a variable. I'll solicit some community feedback on
2379 command to a variable. I'll solicit some community feedback on
2375 this before making it permanent.
2380 this before making it permanent.
2376
2381
2377 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2382 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2378 requested about callables for which inspect couldn't obtain a
2383 requested about callables for which inspect couldn't obtain a
2379 proper argspec. Thanks to a crash report sent by Etienne
2384 proper argspec. Thanks to a crash report sent by Etienne
2380 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2385 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2381
2386
2382 2003-12-09 Fernando Perez <fperez@colorado.edu>
2387 2003-12-09 Fernando Perez <fperez@colorado.edu>
2383
2388
2384 * IPython/genutils.py (page): patch for the pager to work across
2389 * IPython/genutils.py (page): patch for the pager to work across
2385 various versions of Windows. By Gary Bishop.
2390 various versions of Windows. By Gary Bishop.
2386
2391
2387 2003-12-04 Fernando Perez <fperez@colorado.edu>
2392 2003-12-04 Fernando Perez <fperez@colorado.edu>
2388
2393
2389 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2394 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2390 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2395 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2391 While I tested this and it looks ok, there may still be corner
2396 While I tested this and it looks ok, there may still be corner
2392 cases I've missed.
2397 cases I've missed.
2393
2398
2394 2003-12-01 Fernando Perez <fperez@colorado.edu>
2399 2003-12-01 Fernando Perez <fperez@colorado.edu>
2395
2400
2396 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2401 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2397 where a line like 'p,q=1,2' would fail because the automagic
2402 where a line like 'p,q=1,2' would fail because the automagic
2398 system would be triggered for @p.
2403 system would be triggered for @p.
2399
2404
2400 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2405 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2401 cleanups, code unmodified.
2406 cleanups, code unmodified.
2402
2407
2403 * IPython/genutils.py (Term): added a class for IPython to handle
2408 * IPython/genutils.py (Term): added a class for IPython to handle
2404 output. In most cases it will just be a proxy for stdout/err, but
2409 output. In most cases it will just be a proxy for stdout/err, but
2405 having this allows modifications to be made for some platforms,
2410 having this allows modifications to be made for some platforms,
2406 such as handling color escapes under Windows. All of this code
2411 such as handling color escapes under Windows. All of this code
2407 was contributed by Gary Bishop, with minor modifications by me.
2412 was contributed by Gary Bishop, with minor modifications by me.
2408 The actual changes affect many files.
2413 The actual changes affect many files.
2409
2414
2410 2003-11-30 Fernando Perez <fperez@colorado.edu>
2415 2003-11-30 Fernando Perez <fperez@colorado.edu>
2411
2416
2412 * IPython/iplib.py (file_matches): new completion code, courtesy
2417 * IPython/iplib.py (file_matches): new completion code, courtesy
2413 of Jeff Collins. This enables filename completion again under
2418 of Jeff Collins. This enables filename completion again under
2414 python 2.3, which disabled it at the C level.
2419 python 2.3, which disabled it at the C level.
2415
2420
2416 2003-11-11 Fernando Perez <fperez@colorado.edu>
2421 2003-11-11 Fernando Perez <fperez@colorado.edu>
2417
2422
2418 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2423 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2419 for Numeric.array(map(...)), but often convenient.
2424 for Numeric.array(map(...)), but often convenient.
2420
2425
2421 2003-11-05 Fernando Perez <fperez@colorado.edu>
2426 2003-11-05 Fernando Perez <fperez@colorado.edu>
2422
2427
2423 * IPython/numutils.py (frange): Changed a call from int() to
2428 * IPython/numutils.py (frange): Changed a call from int() to
2424 int(round()) to prevent a problem reported with arange() in the
2429 int(round()) to prevent a problem reported with arange() in the
2425 numpy list.
2430 numpy list.
2426
2431
2427 2003-10-06 Fernando Perez <fperez@colorado.edu>
2432 2003-10-06 Fernando Perez <fperez@colorado.edu>
2428
2433
2429 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2434 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2430 prevent crashes if sys lacks an argv attribute (it happens with
2435 prevent crashes if sys lacks an argv attribute (it happens with
2431 embedded interpreters which build a bare-bones sys module).
2436 embedded interpreters which build a bare-bones sys module).
2432 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2437 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2433
2438
2434 2003-09-24 Fernando Perez <fperez@colorado.edu>
2439 2003-09-24 Fernando Perez <fperez@colorado.edu>
2435
2440
2436 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2441 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2437 to protect against poorly written user objects where __getattr__
2442 to protect against poorly written user objects where __getattr__
2438 raises exceptions other than AttributeError. Thanks to a bug
2443 raises exceptions other than AttributeError. Thanks to a bug
2439 report by Oliver Sander <osander-AT-gmx.de>.
2444 report by Oliver Sander <osander-AT-gmx.de>.
2440
2445
2441 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2446 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2442 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2447 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2443
2448
2444 2003-09-09 Fernando Perez <fperez@colorado.edu>
2449 2003-09-09 Fernando Perez <fperez@colorado.edu>
2445
2450
2446 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2451 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2447 unpacking a list whith a callable as first element would
2452 unpacking a list whith a callable as first element would
2448 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2453 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2449 Collins.
2454 Collins.
2450
2455
2451 2003-08-25 *** Released version 0.5.0
2456 2003-08-25 *** Released version 0.5.0
2452
2457
2453 2003-08-22 Fernando Perez <fperez@colorado.edu>
2458 2003-08-22 Fernando Perez <fperez@colorado.edu>
2454
2459
2455 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2460 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2456 improperly defined user exceptions. Thanks to feedback from Mark
2461 improperly defined user exceptions. Thanks to feedback from Mark
2457 Russell <mrussell-AT-verio.net>.
2462 Russell <mrussell-AT-verio.net>.
2458
2463
2459 2003-08-20 Fernando Perez <fperez@colorado.edu>
2464 2003-08-20 Fernando Perez <fperez@colorado.edu>
2460
2465
2461 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2466 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2462 printing so that it would print multi-line string forms starting
2467 printing so that it would print multi-line string forms starting
2463 with a new line. This way the formatting is better respected for
2468 with a new line. This way the formatting is better respected for
2464 objects which work hard to make nice string forms.
2469 objects which work hard to make nice string forms.
2465
2470
2466 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2471 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2467 autocall would overtake data access for objects with both
2472 autocall would overtake data access for objects with both
2468 __getitem__ and __call__.
2473 __getitem__ and __call__.
2469
2474
2470 2003-08-19 *** Released version 0.5.0-rc1
2475 2003-08-19 *** Released version 0.5.0-rc1
2471
2476
2472 2003-08-19 Fernando Perez <fperez@colorado.edu>
2477 2003-08-19 Fernando Perez <fperez@colorado.edu>
2473
2478
2474 * IPython/deep_reload.py (load_tail): single tiny change here
2479 * IPython/deep_reload.py (load_tail): single tiny change here
2475 seems to fix the long-standing bug of dreload() failing to work
2480 seems to fix the long-standing bug of dreload() failing to work
2476 for dotted names. But this module is pretty tricky, so I may have
2481 for dotted names. But this module is pretty tricky, so I may have
2477 missed some subtlety. Needs more testing!.
2482 missed some subtlety. Needs more testing!.
2478
2483
2479 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2484 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2480 exceptions which have badly implemented __str__ methods.
2485 exceptions which have badly implemented __str__ methods.
2481 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2486 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2482 which I've been getting reports about from Python 2.3 users. I
2487 which I've been getting reports about from Python 2.3 users. I
2483 wish I had a simple test case to reproduce the problem, so I could
2488 wish I had a simple test case to reproduce the problem, so I could
2484 either write a cleaner workaround or file a bug report if
2489 either write a cleaner workaround or file a bug report if
2485 necessary.
2490 necessary.
2486
2491
2487 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2492 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2488 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2493 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2489 a bug report by Tjabo Kloppenburg.
2494 a bug report by Tjabo Kloppenburg.
2490
2495
2491 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2496 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2492 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2497 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2493 seems rather unstable. Thanks to a bug report by Tjabo
2498 seems rather unstable. Thanks to a bug report by Tjabo
2494 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2499 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2495
2500
2496 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2501 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2497 this out soon because of the critical fixes in the inner loop for
2502 this out soon because of the critical fixes in the inner loop for
2498 generators.
2503 generators.
2499
2504
2500 * IPython/Magic.py (Magic.getargspec): removed. This (and
2505 * IPython/Magic.py (Magic.getargspec): removed. This (and
2501 _get_def) have been obsoleted by OInspect for a long time, I
2506 _get_def) have been obsoleted by OInspect for a long time, I
2502 hadn't noticed that they were dead code.
2507 hadn't noticed that they were dead code.
2503 (Magic._ofind): restored _ofind functionality for a few literals
2508 (Magic._ofind): restored _ofind functionality for a few literals
2504 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2509 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2505 for things like "hello".capitalize?, since that would require a
2510 for things like "hello".capitalize?, since that would require a
2506 potentially dangerous eval() again.
2511 potentially dangerous eval() again.
2507
2512
2508 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2513 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2509 logic a bit more to clean up the escapes handling and minimize the
2514 logic a bit more to clean up the escapes handling and minimize the
2510 use of _ofind to only necessary cases. The interactive 'feel' of
2515 use of _ofind to only necessary cases. The interactive 'feel' of
2511 IPython should have improved quite a bit with the changes in
2516 IPython should have improved quite a bit with the changes in
2512 _prefilter and _ofind (besides being far safer than before).
2517 _prefilter and _ofind (besides being far safer than before).
2513
2518
2514 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2519 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2515 obscure, never reported). Edit would fail to find the object to
2520 obscure, never reported). Edit would fail to find the object to
2516 edit under some circumstances.
2521 edit under some circumstances.
2517 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2522 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2518 which were causing double-calling of generators. Those eval calls
2523 which were causing double-calling of generators. Those eval calls
2519 were _very_ dangerous, since code with side effects could be
2524 were _very_ dangerous, since code with side effects could be
2520 triggered. As they say, 'eval is evil'... These were the
2525 triggered. As they say, 'eval is evil'... These were the
2521 nastiest evals in IPython. Besides, _ofind is now far simpler,
2526 nastiest evals in IPython. Besides, _ofind is now far simpler,
2522 and it should also be quite a bit faster. Its use of inspect is
2527 and it should also be quite a bit faster. Its use of inspect is
2523 also safer, so perhaps some of the inspect-related crashes I've
2528 also safer, so perhaps some of the inspect-related crashes I've
2524 seen lately with Python 2.3 might be taken care of. That will
2529 seen lately with Python 2.3 might be taken care of. That will
2525 need more testing.
2530 need more testing.
2526
2531
2527 2003-08-17 Fernando Perez <fperez@colorado.edu>
2532 2003-08-17 Fernando Perez <fperez@colorado.edu>
2528
2533
2529 * IPython/iplib.py (InteractiveShell._prefilter): significant
2534 * IPython/iplib.py (InteractiveShell._prefilter): significant
2530 simplifications to the logic for handling user escapes. Faster
2535 simplifications to the logic for handling user escapes. Faster
2531 and simpler code.
2536 and simpler code.
2532
2537
2533 2003-08-14 Fernando Perez <fperez@colorado.edu>
2538 2003-08-14 Fernando Perez <fperez@colorado.edu>
2534
2539
2535 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2540 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2536 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2541 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2537 but it should be quite a bit faster. And the recursive version
2542 but it should be quite a bit faster. And the recursive version
2538 generated O(log N) intermediate storage for all rank>1 arrays,
2543 generated O(log N) intermediate storage for all rank>1 arrays,
2539 even if they were contiguous.
2544 even if they were contiguous.
2540 (l1norm): Added this function.
2545 (l1norm): Added this function.
2541 (norm): Added this function for arbitrary norms (including
2546 (norm): Added this function for arbitrary norms (including
2542 l-infinity). l1 and l2 are still special cases for convenience
2547 l-infinity). l1 and l2 are still special cases for convenience
2543 and speed.
2548 and speed.
2544
2549
2545 2003-08-03 Fernando Perez <fperez@colorado.edu>
2550 2003-08-03 Fernando Perez <fperez@colorado.edu>
2546
2551
2547 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2552 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2548 exceptions, which now raise PendingDeprecationWarnings in Python
2553 exceptions, which now raise PendingDeprecationWarnings in Python
2549 2.3. There were some in Magic and some in Gnuplot2.
2554 2.3. There were some in Magic and some in Gnuplot2.
2550
2555
2551 2003-06-30 Fernando Perez <fperez@colorado.edu>
2556 2003-06-30 Fernando Perez <fperez@colorado.edu>
2552
2557
2553 * IPython/genutils.py (page): modified to call curses only for
2558 * IPython/genutils.py (page): modified to call curses only for
2554 terminals where TERM=='xterm'. After problems under many other
2559 terminals where TERM=='xterm'. After problems under many other
2555 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2560 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2556
2561
2557 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2562 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2558 would be triggered when readline was absent. This was just an old
2563 would be triggered when readline was absent. This was just an old
2559 debugging statement I'd forgotten to take out.
2564 debugging statement I'd forgotten to take out.
2560
2565
2561 2003-06-20 Fernando Perez <fperez@colorado.edu>
2566 2003-06-20 Fernando Perez <fperez@colorado.edu>
2562
2567
2563 * IPython/genutils.py (clock): modified to return only user time
2568 * IPython/genutils.py (clock): modified to return only user time
2564 (not counting system time), after a discussion on scipy. While
2569 (not counting system time), after a discussion on scipy. While
2565 system time may be a useful quantity occasionally, it may much
2570 system time may be a useful quantity occasionally, it may much
2566 more easily be skewed by occasional swapping or other similar
2571 more easily be skewed by occasional swapping or other similar
2567 activity.
2572 activity.
2568
2573
2569 2003-06-05 Fernando Perez <fperez@colorado.edu>
2574 2003-06-05 Fernando Perez <fperez@colorado.edu>
2570
2575
2571 * IPython/numutils.py (identity): new function, for building
2576 * IPython/numutils.py (identity): new function, for building
2572 arbitrary rank Kronecker deltas (mostly backwards compatible with
2577 arbitrary rank Kronecker deltas (mostly backwards compatible with
2573 Numeric.identity)
2578 Numeric.identity)
2574
2579
2575 2003-06-03 Fernando Perez <fperez@colorado.edu>
2580 2003-06-03 Fernando Perez <fperez@colorado.edu>
2576
2581
2577 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2582 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2578 arguments passed to magics with spaces, to allow trailing '\' to
2583 arguments passed to magics with spaces, to allow trailing '\' to
2579 work normally (mainly for Windows users).
2584 work normally (mainly for Windows users).
2580
2585
2581 2003-05-29 Fernando Perez <fperez@colorado.edu>
2586 2003-05-29 Fernando Perez <fperez@colorado.edu>
2582
2587
2583 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2588 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2584 instead of pydoc.help. This fixes a bizarre behavior where
2589 instead of pydoc.help. This fixes a bizarre behavior where
2585 printing '%s' % locals() would trigger the help system. Now
2590 printing '%s' % locals() would trigger the help system. Now
2586 ipython behaves like normal python does.
2591 ipython behaves like normal python does.
2587
2592
2588 Note that if one does 'from pydoc import help', the bizarre
2593 Note that if one does 'from pydoc import help', the bizarre
2589 behavior returns, but this will also happen in normal python, so
2594 behavior returns, but this will also happen in normal python, so
2590 it's not an ipython bug anymore (it has to do with how pydoc.help
2595 it's not an ipython bug anymore (it has to do with how pydoc.help
2591 is implemented).
2596 is implemented).
2592
2597
2593 2003-05-22 Fernando Perez <fperez@colorado.edu>
2598 2003-05-22 Fernando Perez <fperez@colorado.edu>
2594
2599
2595 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2600 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2596 return [] instead of None when nothing matches, also match to end
2601 return [] instead of None when nothing matches, also match to end
2597 of line. Patch by Gary Bishop.
2602 of line. Patch by Gary Bishop.
2598
2603
2599 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2604 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2600 protection as before, for files passed on the command line. This
2605 protection as before, for files passed on the command line. This
2601 prevents the CrashHandler from kicking in if user files call into
2606 prevents the CrashHandler from kicking in if user files call into
2602 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2607 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2603 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2608 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2604
2609
2605 2003-05-20 *** Released version 0.4.0
2610 2003-05-20 *** Released version 0.4.0
2606
2611
2607 2003-05-20 Fernando Perez <fperez@colorado.edu>
2612 2003-05-20 Fernando Perez <fperez@colorado.edu>
2608
2613
2609 * setup.py: added support for manpages. It's a bit hackish b/c of
2614 * setup.py: added support for manpages. It's a bit hackish b/c of
2610 a bug in the way the bdist_rpm distutils target handles gzipped
2615 a bug in the way the bdist_rpm distutils target handles gzipped
2611 manpages, but it works. After a patch by Jack.
2616 manpages, but it works. After a patch by Jack.
2612
2617
2613 2003-05-19 Fernando Perez <fperez@colorado.edu>
2618 2003-05-19 Fernando Perez <fperez@colorado.edu>
2614
2619
2615 * IPython/numutils.py: added a mockup of the kinds module, since
2620 * IPython/numutils.py: added a mockup of the kinds module, since
2616 it was recently removed from Numeric. This way, numutils will
2621 it was recently removed from Numeric. This way, numutils will
2617 work for all users even if they are missing kinds.
2622 work for all users even if they are missing kinds.
2618
2623
2619 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2624 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2620 failure, which can occur with SWIG-wrapped extensions. After a
2625 failure, which can occur with SWIG-wrapped extensions. After a
2621 crash report from Prabhu.
2626 crash report from Prabhu.
2622
2627
2623 2003-05-16 Fernando Perez <fperez@colorado.edu>
2628 2003-05-16 Fernando Perez <fperez@colorado.edu>
2624
2629
2625 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2630 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2626 protect ipython from user code which may call directly
2631 protect ipython from user code which may call directly
2627 sys.excepthook (this looks like an ipython crash to the user, even
2632 sys.excepthook (this looks like an ipython crash to the user, even
2628 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2633 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2629 This is especially important to help users of WxWindows, but may
2634 This is especially important to help users of WxWindows, but may
2630 also be useful in other cases.
2635 also be useful in other cases.
2631
2636
2632 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2637 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2633 an optional tb_offset to be specified, and to preserve exception
2638 an optional tb_offset to be specified, and to preserve exception
2634 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2639 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2635
2640
2636 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2641 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2637
2642
2638 2003-05-15 Fernando Perez <fperez@colorado.edu>
2643 2003-05-15 Fernando Perez <fperez@colorado.edu>
2639
2644
2640 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2645 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2641 installing for a new user under Windows.
2646 installing for a new user under Windows.
2642
2647
2643 2003-05-12 Fernando Perez <fperez@colorado.edu>
2648 2003-05-12 Fernando Perez <fperez@colorado.edu>
2644
2649
2645 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2650 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2646 handler for Emacs comint-based lines. Currently it doesn't do
2651 handler for Emacs comint-based lines. Currently it doesn't do
2647 much (but importantly, it doesn't update the history cache). In
2652 much (but importantly, it doesn't update the history cache). In
2648 the future it may be expanded if Alex needs more functionality
2653 the future it may be expanded if Alex needs more functionality
2649 there.
2654 there.
2650
2655
2651 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2656 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2652 info to crash reports.
2657 info to crash reports.
2653
2658
2654 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2659 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2655 just like Python's -c. Also fixed crash with invalid -color
2660 just like Python's -c. Also fixed crash with invalid -color
2656 option value at startup. Thanks to Will French
2661 option value at startup. Thanks to Will French
2657 <wfrench-AT-bestweb.net> for the bug report.
2662 <wfrench-AT-bestweb.net> for the bug report.
2658
2663
2659 2003-05-09 Fernando Perez <fperez@colorado.edu>
2664 2003-05-09 Fernando Perez <fperez@colorado.edu>
2660
2665
2661 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2666 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2662 to EvalDict (it's a mapping, after all) and simplified its code
2667 to EvalDict (it's a mapping, after all) and simplified its code
2663 quite a bit, after a nice discussion on c.l.py where Gustavo
2668 quite a bit, after a nice discussion on c.l.py where Gustavo
2664 Córdova <gcordova-AT-sismex.com> suggested the new version.
2669 Córdova <gcordova-AT-sismex.com> suggested the new version.
2665
2670
2666 2003-04-30 Fernando Perez <fperez@colorado.edu>
2671 2003-04-30 Fernando Perez <fperez@colorado.edu>
2667
2672
2668 * IPython/genutils.py (timings_out): modified it to reduce its
2673 * IPython/genutils.py (timings_out): modified it to reduce its
2669 overhead in the common reps==1 case.
2674 overhead in the common reps==1 case.
2670
2675
2671 2003-04-29 Fernando Perez <fperez@colorado.edu>
2676 2003-04-29 Fernando Perez <fperez@colorado.edu>
2672
2677
2673 * IPython/genutils.py (timings_out): Modified to use the resource
2678 * IPython/genutils.py (timings_out): Modified to use the resource
2674 module, which avoids the wraparound problems of time.clock().
2679 module, which avoids the wraparound problems of time.clock().
2675
2680
2676 2003-04-17 *** Released version 0.2.15pre4
2681 2003-04-17 *** Released version 0.2.15pre4
2677
2682
2678 2003-04-17 Fernando Perez <fperez@colorado.edu>
2683 2003-04-17 Fernando Perez <fperez@colorado.edu>
2679
2684
2680 * setup.py (scriptfiles): Split windows-specific stuff over to a
2685 * setup.py (scriptfiles): Split windows-specific stuff over to a
2681 separate file, in an attempt to have a Windows GUI installer.
2686 separate file, in an attempt to have a Windows GUI installer.
2682 That didn't work, but part of the groundwork is done.
2687 That didn't work, but part of the groundwork is done.
2683
2688
2684 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2689 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2685 indent/unindent with 4 spaces. Particularly useful in combination
2690 indent/unindent with 4 spaces. Particularly useful in combination
2686 with the new auto-indent option.
2691 with the new auto-indent option.
2687
2692
2688 2003-04-16 Fernando Perez <fperez@colorado.edu>
2693 2003-04-16 Fernando Perez <fperez@colorado.edu>
2689
2694
2690 * IPython/Magic.py: various replacements of self.rc for
2695 * IPython/Magic.py: various replacements of self.rc for
2691 self.shell.rc. A lot more remains to be done to fully disentangle
2696 self.shell.rc. A lot more remains to be done to fully disentangle
2692 this class from the main Shell class.
2697 this class from the main Shell class.
2693
2698
2694 * IPython/GnuplotRuntime.py: added checks for mouse support so
2699 * IPython/GnuplotRuntime.py: added checks for mouse support so
2695 that we don't try to enable it if the current gnuplot doesn't
2700 that we don't try to enable it if the current gnuplot doesn't
2696 really support it. Also added checks so that we don't try to
2701 really support it. Also added checks so that we don't try to
2697 enable persist under Windows (where Gnuplot doesn't recognize the
2702 enable persist under Windows (where Gnuplot doesn't recognize the
2698 option).
2703 option).
2699
2704
2700 * IPython/iplib.py (InteractiveShell.interact): Added optional
2705 * IPython/iplib.py (InteractiveShell.interact): Added optional
2701 auto-indenting code, after a patch by King C. Shu
2706 auto-indenting code, after a patch by King C. Shu
2702 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2707 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2703 get along well with pasting indented code. If I ever figure out
2708 get along well with pasting indented code. If I ever figure out
2704 how to make that part go well, it will become on by default.
2709 how to make that part go well, it will become on by default.
2705
2710
2706 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2711 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2707 crash ipython if there was an unmatched '%' in the user's prompt
2712 crash ipython if there was an unmatched '%' in the user's prompt
2708 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2713 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2709
2714
2710 * IPython/iplib.py (InteractiveShell.interact): removed the
2715 * IPython/iplib.py (InteractiveShell.interact): removed the
2711 ability to ask the user whether he wants to crash or not at the
2716 ability to ask the user whether he wants to crash or not at the
2712 'last line' exception handler. Calling functions at that point
2717 'last line' exception handler. Calling functions at that point
2713 changes the stack, and the error reports would have incorrect
2718 changes the stack, and the error reports would have incorrect
2714 tracebacks.
2719 tracebacks.
2715
2720
2716 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2721 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2717 pass through a peger a pretty-printed form of any object. After a
2722 pass through a peger a pretty-printed form of any object. After a
2718 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2723 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2719
2724
2720 2003-04-14 Fernando Perez <fperez@colorado.edu>
2725 2003-04-14 Fernando Perez <fperez@colorado.edu>
2721
2726
2722 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2727 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2723 all files in ~ would be modified at first install (instead of
2728 all files in ~ would be modified at first install (instead of
2724 ~/.ipython). This could be potentially disastrous, as the
2729 ~/.ipython). This could be potentially disastrous, as the
2725 modification (make line-endings native) could damage binary files.
2730 modification (make line-endings native) could damage binary files.
2726
2731
2727 2003-04-10 Fernando Perez <fperez@colorado.edu>
2732 2003-04-10 Fernando Perez <fperez@colorado.edu>
2728
2733
2729 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2734 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2730 handle only lines which are invalid python. This now means that
2735 handle only lines which are invalid python. This now means that
2731 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2736 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2732 for the bug report.
2737 for the bug report.
2733
2738
2734 2003-04-01 Fernando Perez <fperez@colorado.edu>
2739 2003-04-01 Fernando Perez <fperez@colorado.edu>
2735
2740
2736 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2741 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2737 where failing to set sys.last_traceback would crash pdb.pm().
2742 where failing to set sys.last_traceback would crash pdb.pm().
2738 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2743 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2739 report.
2744 report.
2740
2745
2741 2003-03-25 Fernando Perez <fperez@colorado.edu>
2746 2003-03-25 Fernando Perez <fperez@colorado.edu>
2742
2747
2743 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2748 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2744 before printing it (it had a lot of spurious blank lines at the
2749 before printing it (it had a lot of spurious blank lines at the
2745 end).
2750 end).
2746
2751
2747 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2752 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2748 output would be sent 21 times! Obviously people don't use this
2753 output would be sent 21 times! Obviously people don't use this
2749 too often, or I would have heard about it.
2754 too often, or I would have heard about it.
2750
2755
2751 2003-03-24 Fernando Perez <fperez@colorado.edu>
2756 2003-03-24 Fernando Perez <fperez@colorado.edu>
2752
2757
2753 * setup.py (scriptfiles): renamed the data_files parameter from
2758 * setup.py (scriptfiles): renamed the data_files parameter from
2754 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2759 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2755 for the patch.
2760 for the patch.
2756
2761
2757 2003-03-20 Fernando Perez <fperez@colorado.edu>
2762 2003-03-20 Fernando Perez <fperez@colorado.edu>
2758
2763
2759 * IPython/genutils.py (error): added error() and fatal()
2764 * IPython/genutils.py (error): added error() and fatal()
2760 functions.
2765 functions.
2761
2766
2762 2003-03-18 *** Released version 0.2.15pre3
2767 2003-03-18 *** Released version 0.2.15pre3
2763
2768
2764 2003-03-18 Fernando Perez <fperez@colorado.edu>
2769 2003-03-18 Fernando Perez <fperez@colorado.edu>
2765
2770
2766 * setupext/install_data_ext.py
2771 * setupext/install_data_ext.py
2767 (install_data_ext.initialize_options): Class contributed by Jack
2772 (install_data_ext.initialize_options): Class contributed by Jack
2768 Moffit for fixing the old distutils hack. He is sending this to
2773 Moffit for fixing the old distutils hack. He is sending this to
2769 the distutils folks so in the future we may not need it as a
2774 the distutils folks so in the future we may not need it as a
2770 private fix.
2775 private fix.
2771
2776
2772 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2777 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2773 changes for Debian packaging. See his patch for full details.
2778 changes for Debian packaging. See his patch for full details.
2774 The old distutils hack of making the ipythonrc* files carry a
2779 The old distutils hack of making the ipythonrc* files carry a
2775 bogus .py extension is gone, at last. Examples were moved to a
2780 bogus .py extension is gone, at last. Examples were moved to a
2776 separate subdir under doc/, and the separate executable scripts
2781 separate subdir under doc/, and the separate executable scripts
2777 now live in their own directory. Overall a great cleanup. The
2782 now live in their own directory. Overall a great cleanup. The
2778 manual was updated to use the new files, and setup.py has been
2783 manual was updated to use the new files, and setup.py has been
2779 fixed for this setup.
2784 fixed for this setup.
2780
2785
2781 * IPython/PyColorize.py (Parser.usage): made non-executable and
2786 * IPython/PyColorize.py (Parser.usage): made non-executable and
2782 created a pycolor wrapper around it to be included as a script.
2787 created a pycolor wrapper around it to be included as a script.
2783
2788
2784 2003-03-12 *** Released version 0.2.15pre2
2789 2003-03-12 *** Released version 0.2.15pre2
2785
2790
2786 2003-03-12 Fernando Perez <fperez@colorado.edu>
2791 2003-03-12 Fernando Perez <fperez@colorado.edu>
2787
2792
2788 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2793 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2789 long-standing problem with garbage characters in some terminals.
2794 long-standing problem with garbage characters in some terminals.
2790 The issue was really that the \001 and \002 escapes must _only_ be
2795 The issue was really that the \001 and \002 escapes must _only_ be
2791 passed to input prompts (which call readline), but _never_ to
2796 passed to input prompts (which call readline), but _never_ to
2792 normal text to be printed on screen. I changed ColorANSI to have
2797 normal text to be printed on screen. I changed ColorANSI to have
2793 two classes: TermColors and InputTermColors, each with the
2798 two classes: TermColors and InputTermColors, each with the
2794 appropriate escapes for input prompts or normal text. The code in
2799 appropriate escapes for input prompts or normal text. The code in
2795 Prompts.py got slightly more complicated, but this very old and
2800 Prompts.py got slightly more complicated, but this very old and
2796 annoying bug is finally fixed.
2801 annoying bug is finally fixed.
2797
2802
2798 All the credit for nailing down the real origin of this problem
2803 All the credit for nailing down the real origin of this problem
2799 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2804 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2800 *Many* thanks to him for spending quite a bit of effort on this.
2805 *Many* thanks to him for spending quite a bit of effort on this.
2801
2806
2802 2003-03-05 *** Released version 0.2.15pre1
2807 2003-03-05 *** Released version 0.2.15pre1
2803
2808
2804 2003-03-03 Fernando Perez <fperez@colorado.edu>
2809 2003-03-03 Fernando Perez <fperez@colorado.edu>
2805
2810
2806 * IPython/FakeModule.py: Moved the former _FakeModule to a
2811 * IPython/FakeModule.py: Moved the former _FakeModule to a
2807 separate file, because it's also needed by Magic (to fix a similar
2812 separate file, because it's also needed by Magic (to fix a similar
2808 pickle-related issue in @run).
2813 pickle-related issue in @run).
2809
2814
2810 2003-03-02 Fernando Perez <fperez@colorado.edu>
2815 2003-03-02 Fernando Perez <fperez@colorado.edu>
2811
2816
2812 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2817 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2813 the autocall option at runtime.
2818 the autocall option at runtime.
2814 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2819 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2815 across Magic.py to start separating Magic from InteractiveShell.
2820 across Magic.py to start separating Magic from InteractiveShell.
2816 (Magic._ofind): Fixed to return proper namespace for dotted
2821 (Magic._ofind): Fixed to return proper namespace for dotted
2817 names. Before, a dotted name would always return 'not currently
2822 names. Before, a dotted name would always return 'not currently
2818 defined', because it would find the 'parent'. s.x would be found,
2823 defined', because it would find the 'parent'. s.x would be found,
2819 but since 'x' isn't defined by itself, it would get confused.
2824 but since 'x' isn't defined by itself, it would get confused.
2820 (Magic.magic_run): Fixed pickling problems reported by Ralf
2825 (Magic.magic_run): Fixed pickling problems reported by Ralf
2821 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2826 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2822 that I'd used when Mike Heeter reported similar issues at the
2827 that I'd used when Mike Heeter reported similar issues at the
2823 top-level, but now for @run. It boils down to injecting the
2828 top-level, but now for @run. It boils down to injecting the
2824 namespace where code is being executed with something that looks
2829 namespace where code is being executed with something that looks
2825 enough like a module to fool pickle.dump(). Since a pickle stores
2830 enough like a module to fool pickle.dump(). Since a pickle stores
2826 a named reference to the importing module, we need this for
2831 a named reference to the importing module, we need this for
2827 pickles to save something sensible.
2832 pickles to save something sensible.
2828
2833
2829 * IPython/ipmaker.py (make_IPython): added an autocall option.
2834 * IPython/ipmaker.py (make_IPython): added an autocall option.
2830
2835
2831 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2836 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2832 the auto-eval code. Now autocalling is an option, and the code is
2837 the auto-eval code. Now autocalling is an option, and the code is
2833 also vastly safer. There is no more eval() involved at all.
2838 also vastly safer. There is no more eval() involved at all.
2834
2839
2835 2003-03-01 Fernando Perez <fperez@colorado.edu>
2840 2003-03-01 Fernando Perez <fperez@colorado.edu>
2836
2841
2837 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2842 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2838 dict with named keys instead of a tuple.
2843 dict with named keys instead of a tuple.
2839
2844
2840 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2845 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2841
2846
2842 * setup.py (make_shortcut): Fixed message about directories
2847 * setup.py (make_shortcut): Fixed message about directories
2843 created during Windows installation (the directories were ok, just
2848 created during Windows installation (the directories were ok, just
2844 the printed message was misleading). Thanks to Chris Liechti
2849 the printed message was misleading). Thanks to Chris Liechti
2845 <cliechti-AT-gmx.net> for the heads up.
2850 <cliechti-AT-gmx.net> for the heads up.
2846
2851
2847 2003-02-21 Fernando Perez <fperez@colorado.edu>
2852 2003-02-21 Fernando Perez <fperez@colorado.edu>
2848
2853
2849 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2854 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2850 of ValueError exception when checking for auto-execution. This
2855 of ValueError exception when checking for auto-execution. This
2851 one is raised by things like Numeric arrays arr.flat when the
2856 one is raised by things like Numeric arrays arr.flat when the
2852 array is non-contiguous.
2857 array is non-contiguous.
2853
2858
2854 2003-01-31 Fernando Perez <fperez@colorado.edu>
2859 2003-01-31 Fernando Perez <fperez@colorado.edu>
2855
2860
2856 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2861 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2857 not return any value at all (even though the command would get
2862 not return any value at all (even though the command would get
2858 executed).
2863 executed).
2859 (xsys): Flush stdout right after printing the command to ensure
2864 (xsys): Flush stdout right after printing the command to ensure
2860 proper ordering of commands and command output in the total
2865 proper ordering of commands and command output in the total
2861 output.
2866 output.
2862 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2867 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2863 system/getoutput as defaults. The old ones are kept for
2868 system/getoutput as defaults. The old ones are kept for
2864 compatibility reasons, so no code which uses this library needs
2869 compatibility reasons, so no code which uses this library needs
2865 changing.
2870 changing.
2866
2871
2867 2003-01-27 *** Released version 0.2.14
2872 2003-01-27 *** Released version 0.2.14
2868
2873
2869 2003-01-25 Fernando Perez <fperez@colorado.edu>
2874 2003-01-25 Fernando Perez <fperez@colorado.edu>
2870
2875
2871 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2876 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2872 functions defined in previous edit sessions could not be re-edited
2877 functions defined in previous edit sessions could not be re-edited
2873 (because the temp files were immediately removed). Now temp files
2878 (because the temp files were immediately removed). Now temp files
2874 are removed only at IPython's exit.
2879 are removed only at IPython's exit.
2875 (Magic.magic_run): Improved @run to perform shell-like expansions
2880 (Magic.magic_run): Improved @run to perform shell-like expansions
2876 on its arguments (~users and $VARS). With this, @run becomes more
2881 on its arguments (~users and $VARS). With this, @run becomes more
2877 like a normal command-line.
2882 like a normal command-line.
2878
2883
2879 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2884 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2880 bugs related to embedding and cleaned up that code. A fairly
2885 bugs related to embedding and cleaned up that code. A fairly
2881 important one was the impossibility to access the global namespace
2886 important one was the impossibility to access the global namespace
2882 through the embedded IPython (only local variables were visible).
2887 through the embedded IPython (only local variables were visible).
2883
2888
2884 2003-01-14 Fernando Perez <fperez@colorado.edu>
2889 2003-01-14 Fernando Perez <fperez@colorado.edu>
2885
2890
2886 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2891 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2887 auto-calling to be a bit more conservative. Now it doesn't get
2892 auto-calling to be a bit more conservative. Now it doesn't get
2888 triggered if any of '!=()<>' are in the rest of the input line, to
2893 triggered if any of '!=()<>' are in the rest of the input line, to
2889 allow comparing callables. Thanks to Alex for the heads up.
2894 allow comparing callables. Thanks to Alex for the heads up.
2890
2895
2891 2003-01-07 Fernando Perez <fperez@colorado.edu>
2896 2003-01-07 Fernando Perez <fperez@colorado.edu>
2892
2897
2893 * IPython/genutils.py (page): fixed estimation of the number of
2898 * IPython/genutils.py (page): fixed estimation of the number of
2894 lines in a string to be paged to simply count newlines. This
2899 lines in a string to be paged to simply count newlines. This
2895 prevents over-guessing due to embedded escape sequences. A better
2900 prevents over-guessing due to embedded escape sequences. A better
2896 long-term solution would involve stripping out the control chars
2901 long-term solution would involve stripping out the control chars
2897 for the count, but it's potentially so expensive I just don't
2902 for the count, but it's potentially so expensive I just don't
2898 think it's worth doing.
2903 think it's worth doing.
2899
2904
2900 2002-12-19 *** Released version 0.2.14pre50
2905 2002-12-19 *** Released version 0.2.14pre50
2901
2906
2902 2002-12-19 Fernando Perez <fperez@colorado.edu>
2907 2002-12-19 Fernando Perez <fperez@colorado.edu>
2903
2908
2904 * tools/release (version): Changed release scripts to inform
2909 * tools/release (version): Changed release scripts to inform
2905 Andrea and build a NEWS file with a list of recent changes.
2910 Andrea and build a NEWS file with a list of recent changes.
2906
2911
2907 * IPython/ColorANSI.py (__all__): changed terminal detection
2912 * IPython/ColorANSI.py (__all__): changed terminal detection
2908 code. Seems to work better for xterms without breaking
2913 code. Seems to work better for xterms without breaking
2909 konsole. Will need more testing to determine if WinXP and Mac OSX
2914 konsole. Will need more testing to determine if WinXP and Mac OSX
2910 also work ok.
2915 also work ok.
2911
2916
2912 2002-12-18 *** Released version 0.2.14pre49
2917 2002-12-18 *** Released version 0.2.14pre49
2913
2918
2914 2002-12-18 Fernando Perez <fperez@colorado.edu>
2919 2002-12-18 Fernando Perez <fperez@colorado.edu>
2915
2920
2916 * Docs: added new info about Mac OSX, from Andrea.
2921 * Docs: added new info about Mac OSX, from Andrea.
2917
2922
2918 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2923 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2919 allow direct plotting of python strings whose format is the same
2924 allow direct plotting of python strings whose format is the same
2920 of gnuplot data files.
2925 of gnuplot data files.
2921
2926
2922 2002-12-16 Fernando Perez <fperez@colorado.edu>
2927 2002-12-16 Fernando Perez <fperez@colorado.edu>
2923
2928
2924 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2929 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2925 value of exit question to be acknowledged.
2930 value of exit question to be acknowledged.
2926
2931
2927 2002-12-03 Fernando Perez <fperez@colorado.edu>
2932 2002-12-03 Fernando Perez <fperez@colorado.edu>
2928
2933
2929 * IPython/ipmaker.py: removed generators, which had been added
2934 * IPython/ipmaker.py: removed generators, which had been added
2930 by mistake in an earlier debugging run. This was causing trouble
2935 by mistake in an earlier debugging run. This was causing trouble
2931 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2936 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2932 for pointing this out.
2937 for pointing this out.
2933
2938
2934 2002-11-17 Fernando Perez <fperez@colorado.edu>
2939 2002-11-17 Fernando Perez <fperez@colorado.edu>
2935
2940
2936 * Manual: updated the Gnuplot section.
2941 * Manual: updated the Gnuplot section.
2937
2942
2938 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2943 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2939 a much better split of what goes in Runtime and what goes in
2944 a much better split of what goes in Runtime and what goes in
2940 Interactive.
2945 Interactive.
2941
2946
2942 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2947 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2943 being imported from iplib.
2948 being imported from iplib.
2944
2949
2945 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2950 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2946 for command-passing. Now the global Gnuplot instance is called
2951 for command-passing. Now the global Gnuplot instance is called
2947 'gp' instead of 'g', which was really a far too fragile and
2952 'gp' instead of 'g', which was really a far too fragile and
2948 common name.
2953 common name.
2949
2954
2950 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2955 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2951 bounding boxes generated by Gnuplot for square plots.
2956 bounding boxes generated by Gnuplot for square plots.
2952
2957
2953 * IPython/genutils.py (popkey): new function added. I should
2958 * IPython/genutils.py (popkey): new function added. I should
2954 suggest this on c.l.py as a dict method, it seems useful.
2959 suggest this on c.l.py as a dict method, it seems useful.
2955
2960
2956 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2961 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2957 to transparently handle PostScript generation. MUCH better than
2962 to transparently handle PostScript generation. MUCH better than
2958 the previous plot_eps/replot_eps (which I removed now). The code
2963 the previous plot_eps/replot_eps (which I removed now). The code
2959 is also fairly clean and well documented now (including
2964 is also fairly clean and well documented now (including
2960 docstrings).
2965 docstrings).
2961
2966
2962 2002-11-13 Fernando Perez <fperez@colorado.edu>
2967 2002-11-13 Fernando Perez <fperez@colorado.edu>
2963
2968
2964 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2969 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2965 (inconsistent with options).
2970 (inconsistent with options).
2966
2971
2967 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2972 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2968 manually disabled, I don't know why. Fixed it.
2973 manually disabled, I don't know why. Fixed it.
2969 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2974 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2970 eps output.
2975 eps output.
2971
2976
2972 2002-11-12 Fernando Perez <fperez@colorado.edu>
2977 2002-11-12 Fernando Perez <fperez@colorado.edu>
2973
2978
2974 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2979 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2975 don't propagate up to caller. Fixes crash reported by François
2980 don't propagate up to caller. Fixes crash reported by François
2976 Pinard.
2981 Pinard.
2977
2982
2978 2002-11-09 Fernando Perez <fperez@colorado.edu>
2983 2002-11-09 Fernando Perez <fperez@colorado.edu>
2979
2984
2980 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2985 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2981 history file for new users.
2986 history file for new users.
2982 (make_IPython): fixed bug where initial install would leave the
2987 (make_IPython): fixed bug where initial install would leave the
2983 user running in the .ipython dir.
2988 user running in the .ipython dir.
2984 (make_IPython): fixed bug where config dir .ipython would be
2989 (make_IPython): fixed bug where config dir .ipython would be
2985 created regardless of the given -ipythondir option. Thanks to Cory
2990 created regardless of the given -ipythondir option. Thanks to Cory
2986 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2991 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2987
2992
2988 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2993 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2989 type confirmations. Will need to use it in all of IPython's code
2994 type confirmations. Will need to use it in all of IPython's code
2990 consistently.
2995 consistently.
2991
2996
2992 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2997 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2993 context to print 31 lines instead of the default 5. This will make
2998 context to print 31 lines instead of the default 5. This will make
2994 the crash reports extremely detailed in case the problem is in
2999 the crash reports extremely detailed in case the problem is in
2995 libraries I don't have access to.
3000 libraries I don't have access to.
2996
3001
2997 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3002 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2998 line of defense' code to still crash, but giving users fair
3003 line of defense' code to still crash, but giving users fair
2999 warning. I don't want internal errors to go unreported: if there's
3004 warning. I don't want internal errors to go unreported: if there's
3000 an internal problem, IPython should crash and generate a full
3005 an internal problem, IPython should crash and generate a full
3001 report.
3006 report.
3002
3007
3003 2002-11-08 Fernando Perez <fperez@colorado.edu>
3008 2002-11-08 Fernando Perez <fperez@colorado.edu>
3004
3009
3005 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3010 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3006 otherwise uncaught exceptions which can appear if people set
3011 otherwise uncaught exceptions which can appear if people set
3007 sys.stdout to something badly broken. Thanks to a crash report
3012 sys.stdout to something badly broken. Thanks to a crash report
3008 from henni-AT-mail.brainbot.com.
3013 from henni-AT-mail.brainbot.com.
3009
3014
3010 2002-11-04 Fernando Perez <fperez@colorado.edu>
3015 2002-11-04 Fernando Perez <fperez@colorado.edu>
3011
3016
3012 * IPython/iplib.py (InteractiveShell.interact): added
3017 * IPython/iplib.py (InteractiveShell.interact): added
3013 __IPYTHON__active to the builtins. It's a flag which goes on when
3018 __IPYTHON__active to the builtins. It's a flag which goes on when
3014 the interaction starts and goes off again when it stops. This
3019 the interaction starts and goes off again when it stops. This
3015 allows embedding code to detect being inside IPython. Before this
3020 allows embedding code to detect being inside IPython. Before this
3016 was done via __IPYTHON__, but that only shows that an IPython
3021 was done via __IPYTHON__, but that only shows that an IPython
3017 instance has been created.
3022 instance has been created.
3018
3023
3019 * IPython/Magic.py (Magic.magic_env): I realized that in a
3024 * IPython/Magic.py (Magic.magic_env): I realized that in a
3020 UserDict, instance.data holds the data as a normal dict. So I
3025 UserDict, instance.data holds the data as a normal dict. So I
3021 modified @env to return os.environ.data instead of rebuilding a
3026 modified @env to return os.environ.data instead of rebuilding a
3022 dict by hand.
3027 dict by hand.
3023
3028
3024 2002-11-02 Fernando Perez <fperez@colorado.edu>
3029 2002-11-02 Fernando Perez <fperez@colorado.edu>
3025
3030
3026 * IPython/genutils.py (warn): changed so that level 1 prints no
3031 * IPython/genutils.py (warn): changed so that level 1 prints no
3027 header. Level 2 is now the default (with 'WARNING' header, as
3032 header. Level 2 is now the default (with 'WARNING' header, as
3028 before). I think I tracked all places where changes were needed in
3033 before). I think I tracked all places where changes were needed in
3029 IPython, but outside code using the old level numbering may have
3034 IPython, but outside code using the old level numbering may have
3030 broken.
3035 broken.
3031
3036
3032 * IPython/iplib.py (InteractiveShell.runcode): added this to
3037 * IPython/iplib.py (InteractiveShell.runcode): added this to
3033 handle the tracebacks in SystemExit traps correctly. The previous
3038 handle the tracebacks in SystemExit traps correctly. The previous
3034 code (through interact) was printing more of the stack than
3039 code (through interact) was printing more of the stack than
3035 necessary, showing IPython internal code to the user.
3040 necessary, showing IPython internal code to the user.
3036
3041
3037 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3042 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3038 default. Now that the default at the confirmation prompt is yes,
3043 default. Now that the default at the confirmation prompt is yes,
3039 it's not so intrusive. François' argument that ipython sessions
3044 it's not so intrusive. François' argument that ipython sessions
3040 tend to be complex enough not to lose them from an accidental C-d,
3045 tend to be complex enough not to lose them from an accidental C-d,
3041 is a valid one.
3046 is a valid one.
3042
3047
3043 * IPython/iplib.py (InteractiveShell.interact): added a
3048 * IPython/iplib.py (InteractiveShell.interact): added a
3044 showtraceback() call to the SystemExit trap, and modified the exit
3049 showtraceback() call to the SystemExit trap, and modified the exit
3045 confirmation to have yes as the default.
3050 confirmation to have yes as the default.
3046
3051
3047 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3052 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3048 this file. It's been gone from the code for a long time, this was
3053 this file. It's been gone from the code for a long time, this was
3049 simply leftover junk.
3054 simply leftover junk.
3050
3055
3051 2002-11-01 Fernando Perez <fperez@colorado.edu>
3056 2002-11-01 Fernando Perez <fperez@colorado.edu>
3052
3057
3053 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3058 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3054 added. If set, IPython now traps EOF and asks for
3059 added. If set, IPython now traps EOF and asks for
3055 confirmation. After a request by François Pinard.
3060 confirmation. After a request by François Pinard.
3056
3061
3057 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3062 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3058 of @abort, and with a new (better) mechanism for handling the
3063 of @abort, and with a new (better) mechanism for handling the
3059 exceptions.
3064 exceptions.
3060
3065
3061 2002-10-27 Fernando Perez <fperez@colorado.edu>
3066 2002-10-27 Fernando Perez <fperez@colorado.edu>
3062
3067
3063 * IPython/usage.py (__doc__): updated the --help information and
3068 * IPython/usage.py (__doc__): updated the --help information and
3064 the ipythonrc file to indicate that -log generates
3069 the ipythonrc file to indicate that -log generates
3065 ./ipython.log. Also fixed the corresponding info in @logstart.
3070 ./ipython.log. Also fixed the corresponding info in @logstart.
3066 This and several other fixes in the manuals thanks to reports by
3071 This and several other fixes in the manuals thanks to reports by
3067 François Pinard <pinard-AT-iro.umontreal.ca>.
3072 François Pinard <pinard-AT-iro.umontreal.ca>.
3068
3073
3069 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3074 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3070 refer to @logstart (instead of @log, which doesn't exist).
3075 refer to @logstart (instead of @log, which doesn't exist).
3071
3076
3072 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3077 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3073 AttributeError crash. Thanks to Christopher Armstrong
3078 AttributeError crash. Thanks to Christopher Armstrong
3074 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3079 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3075 introduced recently (in 0.2.14pre37) with the fix to the eval
3080 introduced recently (in 0.2.14pre37) with the fix to the eval
3076 problem mentioned below.
3081 problem mentioned below.
3077
3082
3078 2002-10-17 Fernando Perez <fperez@colorado.edu>
3083 2002-10-17 Fernando Perez <fperez@colorado.edu>
3079
3084
3080 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3085 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3081 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3086 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3082
3087
3083 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3088 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3084 this function to fix a problem reported by Alex Schmolck. He saw
3089 this function to fix a problem reported by Alex Schmolck. He saw
3085 it with list comprehensions and generators, which were getting
3090 it with list comprehensions and generators, which were getting
3086 called twice. The real problem was an 'eval' call in testing for
3091 called twice. The real problem was an 'eval' call in testing for
3087 automagic which was evaluating the input line silently.
3092 automagic which was evaluating the input line silently.
3088
3093
3089 This is a potentially very nasty bug, if the input has side
3094 This is a potentially very nasty bug, if the input has side
3090 effects which must not be repeated. The code is much cleaner now,
3095 effects which must not be repeated. The code is much cleaner now,
3091 without any blanket 'except' left and with a regexp test for
3096 without any blanket 'except' left and with a regexp test for
3092 actual function names.
3097 actual function names.
3093
3098
3094 But an eval remains, which I'm not fully comfortable with. I just
3099 But an eval remains, which I'm not fully comfortable with. I just
3095 don't know how to find out if an expression could be a callable in
3100 don't know how to find out if an expression could be a callable in
3096 the user's namespace without doing an eval on the string. However
3101 the user's namespace without doing an eval on the string. However
3097 that string is now much more strictly checked so that no code
3102 that string is now much more strictly checked so that no code
3098 slips by, so the eval should only happen for things that can
3103 slips by, so the eval should only happen for things that can
3099 really be only function/method names.
3104 really be only function/method names.
3100
3105
3101 2002-10-15 Fernando Perez <fperez@colorado.edu>
3106 2002-10-15 Fernando Perez <fperez@colorado.edu>
3102
3107
3103 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3108 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3104 OSX information to main manual, removed README_Mac_OSX file from
3109 OSX information to main manual, removed README_Mac_OSX file from
3105 distribution. Also updated credits for recent additions.
3110 distribution. Also updated credits for recent additions.
3106
3111
3107 2002-10-10 Fernando Perez <fperez@colorado.edu>
3112 2002-10-10 Fernando Perez <fperez@colorado.edu>
3108
3113
3109 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3114 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3110 terminal-related issues. Many thanks to Andrea Riciputi
3115 terminal-related issues. Many thanks to Andrea Riciputi
3111 <andrea.riciputi-AT-libero.it> for writing it.
3116 <andrea.riciputi-AT-libero.it> for writing it.
3112
3117
3113 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3118 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3114 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3119 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3115
3120
3116 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3121 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3117 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3122 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3118 <syver-en-AT-online.no> who both submitted patches for this problem.
3123 <syver-en-AT-online.no> who both submitted patches for this problem.
3119
3124
3120 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3125 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3121 global embedding to make sure that things don't overwrite user
3126 global embedding to make sure that things don't overwrite user
3122 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3127 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3123
3128
3124 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3129 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3125 compatibility. Thanks to Hayden Callow
3130 compatibility. Thanks to Hayden Callow
3126 <h.callow-AT-elec.canterbury.ac.nz>
3131 <h.callow-AT-elec.canterbury.ac.nz>
3127
3132
3128 2002-10-04 Fernando Perez <fperez@colorado.edu>
3133 2002-10-04 Fernando Perez <fperez@colorado.edu>
3129
3134
3130 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3135 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3131 Gnuplot.File objects.
3136 Gnuplot.File objects.
3132
3137
3133 2002-07-23 Fernando Perez <fperez@colorado.edu>
3138 2002-07-23 Fernando Perez <fperez@colorado.edu>
3134
3139
3135 * IPython/genutils.py (timing): Added timings() and timing() for
3140 * IPython/genutils.py (timing): Added timings() and timing() for
3136 quick access to the most commonly needed data, the execution
3141 quick access to the most commonly needed data, the execution
3137 times. Old timing() renamed to timings_out().
3142 times. Old timing() renamed to timings_out().
3138
3143
3139 2002-07-18 Fernando Perez <fperez@colorado.edu>
3144 2002-07-18 Fernando Perez <fperez@colorado.edu>
3140
3145
3141 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3146 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3142 bug with nested instances disrupting the parent's tab completion.
3147 bug with nested instances disrupting the parent's tab completion.
3143
3148
3144 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3149 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3145 all_completions code to begin the emacs integration.
3150 all_completions code to begin the emacs integration.
3146
3151
3147 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3152 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3148 argument to allow titling individual arrays when plotting.
3153 argument to allow titling individual arrays when plotting.
3149
3154
3150 2002-07-15 Fernando Perez <fperez@colorado.edu>
3155 2002-07-15 Fernando Perez <fperez@colorado.edu>
3151
3156
3152 * setup.py (make_shortcut): changed to retrieve the value of
3157 * setup.py (make_shortcut): changed to retrieve the value of
3153 'Program Files' directory from the registry (this value changes in
3158 'Program Files' directory from the registry (this value changes in
3154 non-english versions of Windows). Thanks to Thomas Fanslau
3159 non-english versions of Windows). Thanks to Thomas Fanslau
3155 <tfanslau-AT-gmx.de> for the report.
3160 <tfanslau-AT-gmx.de> for the report.
3156
3161
3157 2002-07-10 Fernando Perez <fperez@colorado.edu>
3162 2002-07-10 Fernando Perez <fperez@colorado.edu>
3158
3163
3159 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3164 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3160 a bug in pdb, which crashes if a line with only whitespace is
3165 a bug in pdb, which crashes if a line with only whitespace is
3161 entered. Bug report submitted to sourceforge.
3166 entered. Bug report submitted to sourceforge.
3162
3167
3163 2002-07-09 Fernando Perez <fperez@colorado.edu>
3168 2002-07-09 Fernando Perez <fperez@colorado.edu>
3164
3169
3165 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3170 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3166 reporting exceptions (it's a bug in inspect.py, I just set a
3171 reporting exceptions (it's a bug in inspect.py, I just set a
3167 workaround).
3172 workaround).
3168
3173
3169 2002-07-08 Fernando Perez <fperez@colorado.edu>
3174 2002-07-08 Fernando Perez <fperez@colorado.edu>
3170
3175
3171 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3176 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3172 __IPYTHON__ in __builtins__ to show up in user_ns.
3177 __IPYTHON__ in __builtins__ to show up in user_ns.
3173
3178
3174 2002-07-03 Fernando Perez <fperez@colorado.edu>
3179 2002-07-03 Fernando Perez <fperez@colorado.edu>
3175
3180
3176 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3181 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3177 name from @gp_set_instance to @gp_set_default.
3182 name from @gp_set_instance to @gp_set_default.
3178
3183
3179 * IPython/ipmaker.py (make_IPython): default editor value set to
3184 * IPython/ipmaker.py (make_IPython): default editor value set to
3180 '0' (a string), to match the rc file. Otherwise will crash when
3185 '0' (a string), to match the rc file. Otherwise will crash when
3181 .strip() is called on it.
3186 .strip() is called on it.
3182
3187
3183
3188
3184 2002-06-28 Fernando Perez <fperez@colorado.edu>
3189 2002-06-28 Fernando Perez <fperez@colorado.edu>
3185
3190
3186 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3191 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3187 of files in current directory when a file is executed via
3192 of files in current directory when a file is executed via
3188 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3193 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3189
3194
3190 * setup.py (manfiles): fix for rpm builds, submitted by RA
3195 * setup.py (manfiles): fix for rpm builds, submitted by RA
3191 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3196 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3192
3197
3193 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3198 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3194 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3199 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3195 string!). A. Schmolck caught this one.
3200 string!). A. Schmolck caught this one.
3196
3201
3197 2002-06-27 Fernando Perez <fperez@colorado.edu>
3202 2002-06-27 Fernando Perez <fperez@colorado.edu>
3198
3203
3199 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3204 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3200 defined files at the cmd line. __name__ wasn't being set to
3205 defined files at the cmd line. __name__ wasn't being set to
3201 __main__.
3206 __main__.
3202
3207
3203 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3208 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3204 regular lists and tuples besides Numeric arrays.
3209 regular lists and tuples besides Numeric arrays.
3205
3210
3206 * IPython/Prompts.py (CachedOutput.__call__): Added output
3211 * IPython/Prompts.py (CachedOutput.__call__): Added output
3207 supression for input ending with ';'. Similar to Mathematica and
3212 supression for input ending with ';'. Similar to Mathematica and
3208 Matlab. The _* vars and Out[] list are still updated, just like
3213 Matlab. The _* vars and Out[] list are still updated, just like
3209 Mathematica behaves.
3214 Mathematica behaves.
3210
3215
3211 2002-06-25 Fernando Perez <fperez@colorado.edu>
3216 2002-06-25 Fernando Perez <fperez@colorado.edu>
3212
3217
3213 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3218 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3214 .ini extensions for profiels under Windows.
3219 .ini extensions for profiels under Windows.
3215
3220
3216 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3221 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3217 string form. Fix contributed by Alexander Schmolck
3222 string form. Fix contributed by Alexander Schmolck
3218 <a.schmolck-AT-gmx.net>
3223 <a.schmolck-AT-gmx.net>
3219
3224
3220 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3225 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3221 pre-configured Gnuplot instance.
3226 pre-configured Gnuplot instance.
3222
3227
3223 2002-06-21 Fernando Perez <fperez@colorado.edu>
3228 2002-06-21 Fernando Perez <fperez@colorado.edu>
3224
3229
3225 * IPython/numutils.py (exp_safe): new function, works around the
3230 * IPython/numutils.py (exp_safe): new function, works around the
3226 underflow problems in Numeric.
3231 underflow problems in Numeric.
3227 (log2): New fn. Safe log in base 2: returns exact integer answer
3232 (log2): New fn. Safe log in base 2: returns exact integer answer
3228 for exact integer powers of 2.
3233 for exact integer powers of 2.
3229
3234
3230 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3235 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3231 properly.
3236 properly.
3232
3237
3233 2002-06-20 Fernando Perez <fperez@colorado.edu>
3238 2002-06-20 Fernando Perez <fperez@colorado.edu>
3234
3239
3235 * IPython/genutils.py (timing): new function like
3240 * IPython/genutils.py (timing): new function like
3236 Mathematica's. Similar to time_test, but returns more info.
3241 Mathematica's. Similar to time_test, but returns more info.
3237
3242
3238 2002-06-18 Fernando Perez <fperez@colorado.edu>
3243 2002-06-18 Fernando Perez <fperez@colorado.edu>
3239
3244
3240 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3245 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3241 according to Mike Heeter's suggestions.
3246 according to Mike Heeter's suggestions.
3242
3247
3243 2002-06-16 Fernando Perez <fperez@colorado.edu>
3248 2002-06-16 Fernando Perez <fperez@colorado.edu>
3244
3249
3245 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3250 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3246 system. GnuplotMagic is gone as a user-directory option. New files
3251 system. GnuplotMagic is gone as a user-directory option. New files
3247 make it easier to use all the gnuplot stuff both from external
3252 make it easier to use all the gnuplot stuff both from external
3248 programs as well as from IPython. Had to rewrite part of
3253 programs as well as from IPython. Had to rewrite part of
3249 hardcopy() b/c of a strange bug: often the ps files simply don't
3254 hardcopy() b/c of a strange bug: often the ps files simply don't
3250 get created, and require a repeat of the command (often several
3255 get created, and require a repeat of the command (often several
3251 times).
3256 times).
3252
3257
3253 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3258 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3254 resolve output channel at call time, so that if sys.stderr has
3259 resolve output channel at call time, so that if sys.stderr has
3255 been redirected by user this gets honored.
3260 been redirected by user this gets honored.
3256
3261
3257 2002-06-13 Fernando Perez <fperez@colorado.edu>
3262 2002-06-13 Fernando Perez <fperez@colorado.edu>
3258
3263
3259 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3264 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3260 IPShell. Kept a copy with the old names to avoid breaking people's
3265 IPShell. Kept a copy with the old names to avoid breaking people's
3261 embedded code.
3266 embedded code.
3262
3267
3263 * IPython/ipython: simplified it to the bare minimum after
3268 * IPython/ipython: simplified it to the bare minimum after
3264 Holger's suggestions. Added info about how to use it in
3269 Holger's suggestions. Added info about how to use it in
3265 PYTHONSTARTUP.
3270 PYTHONSTARTUP.
3266
3271
3267 * IPython/Shell.py (IPythonShell): changed the options passing
3272 * IPython/Shell.py (IPythonShell): changed the options passing
3268 from a string with funky %s replacements to a straight list. Maybe
3273 from a string with funky %s replacements to a straight list. Maybe
3269 a bit more typing, but it follows sys.argv conventions, so there's
3274 a bit more typing, but it follows sys.argv conventions, so there's
3270 less special-casing to remember.
3275 less special-casing to remember.
3271
3276
3272 2002-06-12 Fernando Perez <fperez@colorado.edu>
3277 2002-06-12 Fernando Perez <fperez@colorado.edu>
3273
3278
3274 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3279 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3275 command. Thanks to a suggestion by Mike Heeter.
3280 command. Thanks to a suggestion by Mike Heeter.
3276 (Magic.magic_pfile): added behavior to look at filenames if given
3281 (Magic.magic_pfile): added behavior to look at filenames if given
3277 arg is not a defined object.
3282 arg is not a defined object.
3278 (Magic.magic_save): New @save function to save code snippets. Also
3283 (Magic.magic_save): New @save function to save code snippets. Also
3279 a Mike Heeter idea.
3284 a Mike Heeter idea.
3280
3285
3281 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3286 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3282 plot() and replot(). Much more convenient now, especially for
3287 plot() and replot(). Much more convenient now, especially for
3283 interactive use.
3288 interactive use.
3284
3289
3285 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3290 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3286 filenames.
3291 filenames.
3287
3292
3288 2002-06-02 Fernando Perez <fperez@colorado.edu>
3293 2002-06-02 Fernando Perez <fperez@colorado.edu>
3289
3294
3290 * IPython/Struct.py (Struct.__init__): modified to admit
3295 * IPython/Struct.py (Struct.__init__): modified to admit
3291 initialization via another struct.
3296 initialization via another struct.
3292
3297
3293 * IPython/genutils.py (SystemExec.__init__): New stateful
3298 * IPython/genutils.py (SystemExec.__init__): New stateful
3294 interface to xsys and bq. Useful for writing system scripts.
3299 interface to xsys and bq. Useful for writing system scripts.
3295
3300
3296 2002-05-30 Fernando Perez <fperez@colorado.edu>
3301 2002-05-30 Fernando Perez <fperez@colorado.edu>
3297
3302
3298 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3303 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3299 documents. This will make the user download smaller (it's getting
3304 documents. This will make the user download smaller (it's getting
3300 too big).
3305 too big).
3301
3306
3302 2002-05-29 Fernando Perez <fperez@colorado.edu>
3307 2002-05-29 Fernando Perez <fperez@colorado.edu>
3303
3308
3304 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3309 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3305 fix problems with shelve and pickle. Seems to work, but I don't
3310 fix problems with shelve and pickle. Seems to work, but I don't
3306 know if corner cases break it. Thanks to Mike Heeter
3311 know if corner cases break it. Thanks to Mike Heeter
3307 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3312 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3308
3313
3309 2002-05-24 Fernando Perez <fperez@colorado.edu>
3314 2002-05-24 Fernando Perez <fperez@colorado.edu>
3310
3315
3311 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3316 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3312 macros having broken.
3317 macros having broken.
3313
3318
3314 2002-05-21 Fernando Perez <fperez@colorado.edu>
3319 2002-05-21 Fernando Perez <fperez@colorado.edu>
3315
3320
3316 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3321 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3317 introduced logging bug: all history before logging started was
3322 introduced logging bug: all history before logging started was
3318 being written one character per line! This came from the redesign
3323 being written one character per line! This came from the redesign
3319 of the input history as a special list which slices to strings,
3324 of the input history as a special list which slices to strings,
3320 not to lists.
3325 not to lists.
3321
3326
3322 2002-05-20 Fernando Perez <fperez@colorado.edu>
3327 2002-05-20 Fernando Perez <fperez@colorado.edu>
3323
3328
3324 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3329 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3325 be an attribute of all classes in this module. The design of these
3330 be an attribute of all classes in this module. The design of these
3326 classes needs some serious overhauling.
3331 classes needs some serious overhauling.
3327
3332
3328 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3333 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3329 which was ignoring '_' in option names.
3334 which was ignoring '_' in option names.
3330
3335
3331 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3336 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3332 'Verbose_novars' to 'Context' and made it the new default. It's a
3337 'Verbose_novars' to 'Context' and made it the new default. It's a
3333 bit more readable and also safer than verbose.
3338 bit more readable and also safer than verbose.
3334
3339
3335 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3340 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3336 triple-quoted strings.
3341 triple-quoted strings.
3337
3342
3338 * IPython/OInspect.py (__all__): new module exposing the object
3343 * IPython/OInspect.py (__all__): new module exposing the object
3339 introspection facilities. Now the corresponding magics are dummy
3344 introspection facilities. Now the corresponding magics are dummy
3340 wrappers around this. Having this module will make it much easier
3345 wrappers around this. Having this module will make it much easier
3341 to put these functions into our modified pdb.
3346 to put these functions into our modified pdb.
3342 This new object inspector system uses the new colorizing module,
3347 This new object inspector system uses the new colorizing module,
3343 so source code and other things are nicely syntax highlighted.
3348 so source code and other things are nicely syntax highlighted.
3344
3349
3345 2002-05-18 Fernando Perez <fperez@colorado.edu>
3350 2002-05-18 Fernando Perez <fperez@colorado.edu>
3346
3351
3347 * IPython/ColorANSI.py: Split the coloring tools into a separate
3352 * IPython/ColorANSI.py: Split the coloring tools into a separate
3348 module so I can use them in other code easier (they were part of
3353 module so I can use them in other code easier (they were part of
3349 ultraTB).
3354 ultraTB).
3350
3355
3351 2002-05-17 Fernando Perez <fperez@colorado.edu>
3356 2002-05-17 Fernando Perez <fperez@colorado.edu>
3352
3357
3353 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3358 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3354 fixed it to set the global 'g' also to the called instance, as
3359 fixed it to set the global 'g' also to the called instance, as
3355 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3360 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3356 user's 'g' variables).
3361 user's 'g' variables).
3357
3362
3358 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3363 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3359 global variables (aliases to _ih,_oh) so that users which expect
3364 global variables (aliases to _ih,_oh) so that users which expect
3360 In[5] or Out[7] to work aren't unpleasantly surprised.
3365 In[5] or Out[7] to work aren't unpleasantly surprised.
3361 (InputList.__getslice__): new class to allow executing slices of
3366 (InputList.__getslice__): new class to allow executing slices of
3362 input history directly. Very simple class, complements the use of
3367 input history directly. Very simple class, complements the use of
3363 macros.
3368 macros.
3364
3369
3365 2002-05-16 Fernando Perez <fperez@colorado.edu>
3370 2002-05-16 Fernando Perez <fperez@colorado.edu>
3366
3371
3367 * setup.py (docdirbase): make doc directory be just doc/IPython
3372 * setup.py (docdirbase): make doc directory be just doc/IPython
3368 without version numbers, it will reduce clutter for users.
3373 without version numbers, it will reduce clutter for users.
3369
3374
3370 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3375 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3371 execfile call to prevent possible memory leak. See for details:
3376 execfile call to prevent possible memory leak. See for details:
3372 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3377 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3373
3378
3374 2002-05-15 Fernando Perez <fperez@colorado.edu>
3379 2002-05-15 Fernando Perez <fperez@colorado.edu>
3375
3380
3376 * IPython/Magic.py (Magic.magic_psource): made the object
3381 * IPython/Magic.py (Magic.magic_psource): made the object
3377 introspection names be more standard: pdoc, pdef, pfile and
3382 introspection names be more standard: pdoc, pdef, pfile and
3378 psource. They all print/page their output, and it makes
3383 psource. They all print/page their output, and it makes
3379 remembering them easier. Kept old names for compatibility as
3384 remembering them easier. Kept old names for compatibility as
3380 aliases.
3385 aliases.
3381
3386
3382 2002-05-14 Fernando Perez <fperez@colorado.edu>
3387 2002-05-14 Fernando Perez <fperez@colorado.edu>
3383
3388
3384 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3389 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3385 what the mouse problem was. The trick is to use gnuplot with temp
3390 what the mouse problem was. The trick is to use gnuplot with temp
3386 files and NOT with pipes (for data communication), because having
3391 files and NOT with pipes (for data communication), because having
3387 both pipes and the mouse on is bad news.
3392 both pipes and the mouse on is bad news.
3388
3393
3389 2002-05-13 Fernando Perez <fperez@colorado.edu>
3394 2002-05-13 Fernando Perez <fperez@colorado.edu>
3390
3395
3391 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3396 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3392 bug. Information would be reported about builtins even when
3397 bug. Information would be reported about builtins even when
3393 user-defined functions overrode them.
3398 user-defined functions overrode them.
3394
3399
3395 2002-05-11 Fernando Perez <fperez@colorado.edu>
3400 2002-05-11 Fernando Perez <fperez@colorado.edu>
3396
3401
3397 * IPython/__init__.py (__all__): removed FlexCompleter from
3402 * IPython/__init__.py (__all__): removed FlexCompleter from
3398 __all__ so that things don't fail in platforms without readline.
3403 __all__ so that things don't fail in platforms without readline.
3399
3404
3400 2002-05-10 Fernando Perez <fperez@colorado.edu>
3405 2002-05-10 Fernando Perez <fperez@colorado.edu>
3401
3406
3402 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3407 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3403 it requires Numeric, effectively making Numeric a dependency for
3408 it requires Numeric, effectively making Numeric a dependency for
3404 IPython.
3409 IPython.
3405
3410
3406 * Released 0.2.13
3411 * Released 0.2.13
3407
3412
3408 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3413 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3409 profiler interface. Now all the major options from the profiler
3414 profiler interface. Now all the major options from the profiler
3410 module are directly supported in IPython, both for single
3415 module are directly supported in IPython, both for single
3411 expressions (@prun) and for full programs (@run -p).
3416 expressions (@prun) and for full programs (@run -p).
3412
3417
3413 2002-05-09 Fernando Perez <fperez@colorado.edu>
3418 2002-05-09 Fernando Perez <fperez@colorado.edu>
3414
3419
3415 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3420 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3416 magic properly formatted for screen.
3421 magic properly formatted for screen.
3417
3422
3418 * setup.py (make_shortcut): Changed things to put pdf version in
3423 * setup.py (make_shortcut): Changed things to put pdf version in
3419 doc/ instead of doc/manual (had to change lyxport a bit).
3424 doc/ instead of doc/manual (had to change lyxport a bit).
3420
3425
3421 * IPython/Magic.py (Profile.string_stats): made profile runs go
3426 * IPython/Magic.py (Profile.string_stats): made profile runs go
3422 through pager (they are long and a pager allows searching, saving,
3427 through pager (they are long and a pager allows searching, saving,
3423 etc.)
3428 etc.)
3424
3429
3425 2002-05-08 Fernando Perez <fperez@colorado.edu>
3430 2002-05-08 Fernando Perez <fperez@colorado.edu>
3426
3431
3427 * Released 0.2.12
3432 * Released 0.2.12
3428
3433
3429 2002-05-06 Fernando Perez <fperez@colorado.edu>
3434 2002-05-06 Fernando Perez <fperez@colorado.edu>
3430
3435
3431 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3436 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3432 introduced); 'hist n1 n2' was broken.
3437 introduced); 'hist n1 n2' was broken.
3433 (Magic.magic_pdb): added optional on/off arguments to @pdb
3438 (Magic.magic_pdb): added optional on/off arguments to @pdb
3434 (Magic.magic_run): added option -i to @run, which executes code in
3439 (Magic.magic_run): added option -i to @run, which executes code in
3435 the IPython namespace instead of a clean one. Also added @irun as
3440 the IPython namespace instead of a clean one. Also added @irun as
3436 an alias to @run -i.
3441 an alias to @run -i.
3437
3442
3438 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3443 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3439 fixed (it didn't really do anything, the namespaces were wrong).
3444 fixed (it didn't really do anything, the namespaces were wrong).
3440
3445
3441 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3446 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3442
3447
3443 * IPython/__init__.py (__all__): Fixed package namespace, now
3448 * IPython/__init__.py (__all__): Fixed package namespace, now
3444 'import IPython' does give access to IPython.<all> as
3449 'import IPython' does give access to IPython.<all> as
3445 expected. Also renamed __release__ to Release.
3450 expected. Also renamed __release__ to Release.
3446
3451
3447 * IPython/Debugger.py (__license__): created new Pdb class which
3452 * IPython/Debugger.py (__license__): created new Pdb class which
3448 functions like a drop-in for the normal pdb.Pdb but does NOT
3453 functions like a drop-in for the normal pdb.Pdb but does NOT
3449 import readline by default. This way it doesn't muck up IPython's
3454 import readline by default. This way it doesn't muck up IPython's
3450 readline handling, and now tab-completion finally works in the
3455 readline handling, and now tab-completion finally works in the
3451 debugger -- sort of. It completes things globally visible, but the
3456 debugger -- sort of. It completes things globally visible, but the
3452 completer doesn't track the stack as pdb walks it. That's a bit
3457 completer doesn't track the stack as pdb walks it. That's a bit
3453 tricky, and I'll have to implement it later.
3458 tricky, and I'll have to implement it later.
3454
3459
3455 2002-05-05 Fernando Perez <fperez@colorado.edu>
3460 2002-05-05 Fernando Perez <fperez@colorado.edu>
3456
3461
3457 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3462 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3458 magic docstrings when printed via ? (explicit \'s were being
3463 magic docstrings when printed via ? (explicit \'s were being
3459 printed).
3464 printed).
3460
3465
3461 * IPython/ipmaker.py (make_IPython): fixed namespace
3466 * IPython/ipmaker.py (make_IPython): fixed namespace
3462 identification bug. Now variables loaded via logs or command-line
3467 identification bug. Now variables loaded via logs or command-line
3463 files are recognized in the interactive namespace by @who.
3468 files are recognized in the interactive namespace by @who.
3464
3469
3465 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3470 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3466 log replay system stemming from the string form of Structs.
3471 log replay system stemming from the string form of Structs.
3467
3472
3468 * IPython/Magic.py (Macro.__init__): improved macros to properly
3473 * IPython/Magic.py (Macro.__init__): improved macros to properly
3469 handle magic commands in them.
3474 handle magic commands in them.
3470 (Magic.magic_logstart): usernames are now expanded so 'logstart
3475 (Magic.magic_logstart): usernames are now expanded so 'logstart
3471 ~/mylog' now works.
3476 ~/mylog' now works.
3472
3477
3473 * IPython/iplib.py (complete): fixed bug where paths starting with
3478 * IPython/iplib.py (complete): fixed bug where paths starting with
3474 '/' would be completed as magic names.
3479 '/' would be completed as magic names.
3475
3480
3476 2002-05-04 Fernando Perez <fperez@colorado.edu>
3481 2002-05-04 Fernando Perez <fperez@colorado.edu>
3477
3482
3478 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3483 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3479 allow running full programs under the profiler's control.
3484 allow running full programs under the profiler's control.
3480
3485
3481 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3486 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3482 mode to report exceptions verbosely but without formatting
3487 mode to report exceptions verbosely but without formatting
3483 variables. This addresses the issue of ipython 'freezing' (it's
3488 variables. This addresses the issue of ipython 'freezing' (it's
3484 not frozen, but caught in an expensive formatting loop) when huge
3489 not frozen, but caught in an expensive formatting loop) when huge
3485 variables are in the context of an exception.
3490 variables are in the context of an exception.
3486 (VerboseTB.text): Added '--->' markers at line where exception was
3491 (VerboseTB.text): Added '--->' markers at line where exception was
3487 triggered. Much clearer to read, especially in NoColor modes.
3492 triggered. Much clearer to read, especially in NoColor modes.
3488
3493
3489 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3494 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3490 implemented in reverse when changing to the new parse_options().
3495 implemented in reverse when changing to the new parse_options().
3491
3496
3492 2002-05-03 Fernando Perez <fperez@colorado.edu>
3497 2002-05-03 Fernando Perez <fperez@colorado.edu>
3493
3498
3494 * IPython/Magic.py (Magic.parse_options): new function so that
3499 * IPython/Magic.py (Magic.parse_options): new function so that
3495 magics can parse options easier.
3500 magics can parse options easier.
3496 (Magic.magic_prun): new function similar to profile.run(),
3501 (Magic.magic_prun): new function similar to profile.run(),
3497 suggested by Chris Hart.
3502 suggested by Chris Hart.
3498 (Magic.magic_cd): fixed behavior so that it only changes if
3503 (Magic.magic_cd): fixed behavior so that it only changes if
3499 directory actually is in history.
3504 directory actually is in history.
3500
3505
3501 * IPython/usage.py (__doc__): added information about potential
3506 * IPython/usage.py (__doc__): added information about potential
3502 slowness of Verbose exception mode when there are huge data
3507 slowness of Verbose exception mode when there are huge data
3503 structures to be formatted (thanks to Archie Paulson).
3508 structures to be formatted (thanks to Archie Paulson).
3504
3509
3505 * IPython/ipmaker.py (make_IPython): Changed default logging
3510 * IPython/ipmaker.py (make_IPython): Changed default logging
3506 (when simply called with -log) to use curr_dir/ipython.log in
3511 (when simply called with -log) to use curr_dir/ipython.log in
3507 rotate mode. Fixed crash which was occuring with -log before
3512 rotate mode. Fixed crash which was occuring with -log before
3508 (thanks to Jim Boyle).
3513 (thanks to Jim Boyle).
3509
3514
3510 2002-05-01 Fernando Perez <fperez@colorado.edu>
3515 2002-05-01 Fernando Perez <fperez@colorado.edu>
3511
3516
3512 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3517 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3513 was nasty -- though somewhat of a corner case).
3518 was nasty -- though somewhat of a corner case).
3514
3519
3515 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3520 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3516 text (was a bug).
3521 text (was a bug).
3517
3522
3518 2002-04-30 Fernando Perez <fperez@colorado.edu>
3523 2002-04-30 Fernando Perez <fperez@colorado.edu>
3519
3524
3520 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3525 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3521 a print after ^D or ^C from the user so that the In[] prompt
3526 a print after ^D or ^C from the user so that the In[] prompt
3522 doesn't over-run the gnuplot one.
3527 doesn't over-run the gnuplot one.
3523
3528
3524 2002-04-29 Fernando Perez <fperez@colorado.edu>
3529 2002-04-29 Fernando Perez <fperez@colorado.edu>
3525
3530
3526 * Released 0.2.10
3531 * Released 0.2.10
3527
3532
3528 * IPython/__release__.py (version): get date dynamically.
3533 * IPython/__release__.py (version): get date dynamically.
3529
3534
3530 * Misc. documentation updates thanks to Arnd's comments. Also ran
3535 * Misc. documentation updates thanks to Arnd's comments. Also ran
3531 a full spellcheck on the manual (hadn't been done in a while).
3536 a full spellcheck on the manual (hadn't been done in a while).
3532
3537
3533 2002-04-27 Fernando Perez <fperez@colorado.edu>
3538 2002-04-27 Fernando Perez <fperez@colorado.edu>
3534
3539
3535 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3540 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3536 starting a log in mid-session would reset the input history list.
3541 starting a log in mid-session would reset the input history list.
3537
3542
3538 2002-04-26 Fernando Perez <fperez@colorado.edu>
3543 2002-04-26 Fernando Perez <fperez@colorado.edu>
3539
3544
3540 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3545 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3541 all files were being included in an update. Now anything in
3546 all files were being included in an update. Now anything in
3542 UserConfig that matches [A-Za-z]*.py will go (this excludes
3547 UserConfig that matches [A-Za-z]*.py will go (this excludes
3543 __init__.py)
3548 __init__.py)
3544
3549
3545 2002-04-25 Fernando Perez <fperez@colorado.edu>
3550 2002-04-25 Fernando Perez <fperez@colorado.edu>
3546
3551
3547 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3552 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3548 to __builtins__ so that any form of embedded or imported code can
3553 to __builtins__ so that any form of embedded or imported code can
3549 test for being inside IPython.
3554 test for being inside IPython.
3550
3555
3551 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3556 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3552 changed to GnuplotMagic because it's now an importable module,
3557 changed to GnuplotMagic because it's now an importable module,
3553 this makes the name follow that of the standard Gnuplot module.
3558 this makes the name follow that of the standard Gnuplot module.
3554 GnuplotMagic can now be loaded at any time in mid-session.
3559 GnuplotMagic can now be loaded at any time in mid-session.
3555
3560
3556 2002-04-24 Fernando Perez <fperez@colorado.edu>
3561 2002-04-24 Fernando Perez <fperez@colorado.edu>
3557
3562
3558 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3563 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3559 the globals (IPython has its own namespace) and the
3564 the globals (IPython has its own namespace) and the
3560 PhysicalQuantity stuff is much better anyway.
3565 PhysicalQuantity stuff is much better anyway.
3561
3566
3562 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3567 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3563 embedding example to standard user directory for
3568 embedding example to standard user directory for
3564 distribution. Also put it in the manual.
3569 distribution. Also put it in the manual.
3565
3570
3566 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3571 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3567 instance as first argument (so it doesn't rely on some obscure
3572 instance as first argument (so it doesn't rely on some obscure
3568 hidden global).
3573 hidden global).
3569
3574
3570 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3575 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3571 delimiters. While it prevents ().TAB from working, it allows
3576 delimiters. While it prevents ().TAB from working, it allows
3572 completions in open (... expressions. This is by far a more common
3577 completions in open (... expressions. This is by far a more common
3573 case.
3578 case.
3574
3579
3575 2002-04-23 Fernando Perez <fperez@colorado.edu>
3580 2002-04-23 Fernando Perez <fperez@colorado.edu>
3576
3581
3577 * IPython/Extensions/InterpreterPasteInput.py: new
3582 * IPython/Extensions/InterpreterPasteInput.py: new
3578 syntax-processing module for pasting lines with >>> or ... at the
3583 syntax-processing module for pasting lines with >>> or ... at the
3579 start.
3584 start.
3580
3585
3581 * IPython/Extensions/PhysicalQ_Interactive.py
3586 * IPython/Extensions/PhysicalQ_Interactive.py
3582 (PhysicalQuantityInteractive.__int__): fixed to work with either
3587 (PhysicalQuantityInteractive.__int__): fixed to work with either
3583 Numeric or math.
3588 Numeric or math.
3584
3589
3585 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3590 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3586 provided profiles. Now we have:
3591 provided profiles. Now we have:
3587 -math -> math module as * and cmath with its own namespace.
3592 -math -> math module as * and cmath with its own namespace.
3588 -numeric -> Numeric as *, plus gnuplot & grace
3593 -numeric -> Numeric as *, plus gnuplot & grace
3589 -physics -> same as before
3594 -physics -> same as before
3590
3595
3591 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3596 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3592 user-defined magics wouldn't be found by @magic if they were
3597 user-defined magics wouldn't be found by @magic if they were
3593 defined as class methods. Also cleaned up the namespace search
3598 defined as class methods. Also cleaned up the namespace search
3594 logic and the string building (to use %s instead of many repeated
3599 logic and the string building (to use %s instead of many repeated
3595 string adds).
3600 string adds).
3596
3601
3597 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3602 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3598 of user-defined magics to operate with class methods (cleaner, in
3603 of user-defined magics to operate with class methods (cleaner, in
3599 line with the gnuplot code).
3604 line with the gnuplot code).
3600
3605
3601 2002-04-22 Fernando Perez <fperez@colorado.edu>
3606 2002-04-22 Fernando Perez <fperez@colorado.edu>
3602
3607
3603 * setup.py: updated dependency list so that manual is updated when
3608 * setup.py: updated dependency list so that manual is updated when
3604 all included files change.
3609 all included files change.
3605
3610
3606 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3611 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3607 the delimiter removal option (the fix is ugly right now).
3612 the delimiter removal option (the fix is ugly right now).
3608
3613
3609 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3614 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3610 all of the math profile (quicker loading, no conflict between
3615 all of the math profile (quicker loading, no conflict between
3611 g-9.8 and g-gnuplot).
3616 g-9.8 and g-gnuplot).
3612
3617
3613 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3618 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3614 name of post-mortem files to IPython_crash_report.txt.
3619 name of post-mortem files to IPython_crash_report.txt.
3615
3620
3616 * Cleanup/update of the docs. Added all the new readline info and
3621 * Cleanup/update of the docs. Added all the new readline info and
3617 formatted all lists as 'real lists'.
3622 formatted all lists as 'real lists'.
3618
3623
3619 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3624 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3620 tab-completion options, since the full readline parse_and_bind is
3625 tab-completion options, since the full readline parse_and_bind is
3621 now accessible.
3626 now accessible.
3622
3627
3623 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3628 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3624 handling of readline options. Now users can specify any string to
3629 handling of readline options. Now users can specify any string to
3625 be passed to parse_and_bind(), as well as the delimiters to be
3630 be passed to parse_and_bind(), as well as the delimiters to be
3626 removed.
3631 removed.
3627 (InteractiveShell.__init__): Added __name__ to the global
3632 (InteractiveShell.__init__): Added __name__ to the global
3628 namespace so that things like Itpl which rely on its existence
3633 namespace so that things like Itpl which rely on its existence
3629 don't crash.
3634 don't crash.
3630 (InteractiveShell._prefilter): Defined the default with a _ so
3635 (InteractiveShell._prefilter): Defined the default with a _ so
3631 that prefilter() is easier to override, while the default one
3636 that prefilter() is easier to override, while the default one
3632 remains available.
3637 remains available.
3633
3638
3634 2002-04-18 Fernando Perez <fperez@colorado.edu>
3639 2002-04-18 Fernando Perez <fperez@colorado.edu>
3635
3640
3636 * Added information about pdb in the docs.
3641 * Added information about pdb in the docs.
3637
3642
3638 2002-04-17 Fernando Perez <fperez@colorado.edu>
3643 2002-04-17 Fernando Perez <fperez@colorado.edu>
3639
3644
3640 * IPython/ipmaker.py (make_IPython): added rc_override option to
3645 * IPython/ipmaker.py (make_IPython): added rc_override option to
3641 allow passing config options at creation time which may override
3646 allow passing config options at creation time which may override
3642 anything set in the config files or command line. This is
3647 anything set in the config files or command line. This is
3643 particularly useful for configuring embedded instances.
3648 particularly useful for configuring embedded instances.
3644
3649
3645 2002-04-15 Fernando Perez <fperez@colorado.edu>
3650 2002-04-15 Fernando Perez <fperez@colorado.edu>
3646
3651
3647 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3652 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3648 crash embedded instances because of the input cache falling out of
3653 crash embedded instances because of the input cache falling out of
3649 sync with the output counter.
3654 sync with the output counter.
3650
3655
3651 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3656 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3652 mode which calls pdb after an uncaught exception in IPython itself.
3657 mode which calls pdb after an uncaught exception in IPython itself.
3653
3658
3654 2002-04-14 Fernando Perez <fperez@colorado.edu>
3659 2002-04-14 Fernando Perez <fperez@colorado.edu>
3655
3660
3656 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3661 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3657 readline, fix it back after each call.
3662 readline, fix it back after each call.
3658
3663
3659 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3664 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3660 method to force all access via __call__(), which guarantees that
3665 method to force all access via __call__(), which guarantees that
3661 traceback references are properly deleted.
3666 traceback references are properly deleted.
3662
3667
3663 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3668 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3664 improve printing when pprint is in use.
3669 improve printing when pprint is in use.
3665
3670
3666 2002-04-13 Fernando Perez <fperez@colorado.edu>
3671 2002-04-13 Fernando Perez <fperez@colorado.edu>
3667
3672
3668 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3673 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3669 exceptions aren't caught anymore. If the user triggers one, he
3674 exceptions aren't caught anymore. If the user triggers one, he
3670 should know why he's doing it and it should go all the way up,
3675 should know why he's doing it and it should go all the way up,
3671 just like any other exception. So now @abort will fully kill the
3676 just like any other exception. So now @abort will fully kill the
3672 embedded interpreter and the embedding code (unless that happens
3677 embedded interpreter and the embedding code (unless that happens
3673 to catch SystemExit).
3678 to catch SystemExit).
3674
3679
3675 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3680 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3676 and a debugger() method to invoke the interactive pdb debugger
3681 and a debugger() method to invoke the interactive pdb debugger
3677 after printing exception information. Also added the corresponding
3682 after printing exception information. Also added the corresponding
3678 -pdb option and @pdb magic to control this feature, and updated
3683 -pdb option and @pdb magic to control this feature, and updated
3679 the docs. After a suggestion from Christopher Hart
3684 the docs. After a suggestion from Christopher Hart
3680 (hart-AT-caltech.edu).
3685 (hart-AT-caltech.edu).
3681
3686
3682 2002-04-12 Fernando Perez <fperez@colorado.edu>
3687 2002-04-12 Fernando Perez <fperez@colorado.edu>
3683
3688
3684 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3689 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3685 the exception handlers defined by the user (not the CrashHandler)
3690 the exception handlers defined by the user (not the CrashHandler)
3686 so that user exceptions don't trigger an ipython bug report.
3691 so that user exceptions don't trigger an ipython bug report.
3687
3692
3688 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3693 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3689 configurable (it should have always been so).
3694 configurable (it should have always been so).
3690
3695
3691 2002-03-26 Fernando Perez <fperez@colorado.edu>
3696 2002-03-26 Fernando Perez <fperez@colorado.edu>
3692
3697
3693 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3698 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3694 and there to fix embedding namespace issues. This should all be
3699 and there to fix embedding namespace issues. This should all be
3695 done in a more elegant way.
3700 done in a more elegant way.
3696
3701
3697 2002-03-25 Fernando Perez <fperez@colorado.edu>
3702 2002-03-25 Fernando Perez <fperez@colorado.edu>
3698
3703
3699 * IPython/genutils.py (get_home_dir): Try to make it work under
3704 * IPython/genutils.py (get_home_dir): Try to make it work under
3700 win9x also.
3705 win9x also.
3701
3706
3702 2002-03-20 Fernando Perez <fperez@colorado.edu>
3707 2002-03-20 Fernando Perez <fperez@colorado.edu>
3703
3708
3704 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3709 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3705 sys.displayhook untouched upon __init__.
3710 sys.displayhook untouched upon __init__.
3706
3711
3707 2002-03-19 Fernando Perez <fperez@colorado.edu>
3712 2002-03-19 Fernando Perez <fperez@colorado.edu>
3708
3713
3709 * Released 0.2.9 (for embedding bug, basically).
3714 * Released 0.2.9 (for embedding bug, basically).
3710
3715
3711 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3716 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3712 exceptions so that enclosing shell's state can be restored.
3717 exceptions so that enclosing shell's state can be restored.
3713
3718
3714 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3719 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3715 naming conventions in the .ipython/ dir.
3720 naming conventions in the .ipython/ dir.
3716
3721
3717 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3722 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3718 from delimiters list so filenames with - in them get expanded.
3723 from delimiters list so filenames with - in them get expanded.
3719
3724
3720 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3725 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3721 sys.displayhook not being properly restored after an embedded call.
3726 sys.displayhook not being properly restored after an embedded call.
3722
3727
3723 2002-03-18 Fernando Perez <fperez@colorado.edu>
3728 2002-03-18 Fernando Perez <fperez@colorado.edu>
3724
3729
3725 * Released 0.2.8
3730 * Released 0.2.8
3726
3731
3727 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3732 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3728 some files weren't being included in a -upgrade.
3733 some files weren't being included in a -upgrade.
3729 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3734 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3730 on' so that the first tab completes.
3735 on' so that the first tab completes.
3731 (InteractiveShell.handle_magic): fixed bug with spaces around
3736 (InteractiveShell.handle_magic): fixed bug with spaces around
3732 quotes breaking many magic commands.
3737 quotes breaking many magic commands.
3733
3738
3734 * setup.py: added note about ignoring the syntax error messages at
3739 * setup.py: added note about ignoring the syntax error messages at
3735 installation.
3740 installation.
3736
3741
3737 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3742 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3738 streamlining the gnuplot interface, now there's only one magic @gp.
3743 streamlining the gnuplot interface, now there's only one magic @gp.
3739
3744
3740 2002-03-17 Fernando Perez <fperez@colorado.edu>
3745 2002-03-17 Fernando Perez <fperez@colorado.edu>
3741
3746
3742 * IPython/UserConfig/magic_gnuplot.py: new name for the
3747 * IPython/UserConfig/magic_gnuplot.py: new name for the
3743 example-magic_pm.py file. Much enhanced system, now with a shell
3748 example-magic_pm.py file. Much enhanced system, now with a shell
3744 for communicating directly with gnuplot, one command at a time.
3749 for communicating directly with gnuplot, one command at a time.
3745
3750
3746 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3751 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3747 setting __name__=='__main__'.
3752 setting __name__=='__main__'.
3748
3753
3749 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3754 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3750 mini-shell for accessing gnuplot from inside ipython. Should
3755 mini-shell for accessing gnuplot from inside ipython. Should
3751 extend it later for grace access too. Inspired by Arnd's
3756 extend it later for grace access too. Inspired by Arnd's
3752 suggestion.
3757 suggestion.
3753
3758
3754 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3759 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3755 calling magic functions with () in their arguments. Thanks to Arnd
3760 calling magic functions with () in their arguments. Thanks to Arnd
3756 Baecker for pointing this to me.
3761 Baecker for pointing this to me.
3757
3762
3758 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3763 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3759 infinitely for integer or complex arrays (only worked with floats).
3764 infinitely for integer or complex arrays (only worked with floats).
3760
3765
3761 2002-03-16 Fernando Perez <fperez@colorado.edu>
3766 2002-03-16 Fernando Perez <fperez@colorado.edu>
3762
3767
3763 * setup.py: Merged setup and setup_windows into a single script
3768 * setup.py: Merged setup and setup_windows into a single script
3764 which properly handles things for windows users.
3769 which properly handles things for windows users.
3765
3770
3766 2002-03-15 Fernando Perez <fperez@colorado.edu>
3771 2002-03-15 Fernando Perez <fperez@colorado.edu>
3767
3772
3768 * Big change to the manual: now the magics are all automatically
3773 * Big change to the manual: now the magics are all automatically
3769 documented. This information is generated from their docstrings
3774 documented. This information is generated from their docstrings
3770 and put in a latex file included by the manual lyx file. This way
3775 and put in a latex file included by the manual lyx file. This way
3771 we get always up to date information for the magics. The manual
3776 we get always up to date information for the magics. The manual
3772 now also has proper version information, also auto-synced.
3777 now also has proper version information, also auto-synced.
3773
3778
3774 For this to work, an undocumented --magic_docstrings option was added.
3779 For this to work, an undocumented --magic_docstrings option was added.
3775
3780
3776 2002-03-13 Fernando Perez <fperez@colorado.edu>
3781 2002-03-13 Fernando Perez <fperez@colorado.edu>
3777
3782
3778 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3783 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3779 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3784 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3780
3785
3781 2002-03-12 Fernando Perez <fperez@colorado.edu>
3786 2002-03-12 Fernando Perez <fperez@colorado.edu>
3782
3787
3783 * IPython/ultraTB.py (TermColors): changed color escapes again to
3788 * IPython/ultraTB.py (TermColors): changed color escapes again to
3784 fix the (old, reintroduced) line-wrapping bug. Basically, if
3789 fix the (old, reintroduced) line-wrapping bug. Basically, if
3785 \001..\002 aren't given in the color escapes, lines get wrapped
3790 \001..\002 aren't given in the color escapes, lines get wrapped
3786 weirdly. But giving those screws up old xterms and emacs terms. So
3791 weirdly. But giving those screws up old xterms and emacs terms. So
3787 I added some logic for emacs terms to be ok, but I can't identify old
3792 I added some logic for emacs terms to be ok, but I can't identify old
3788 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3793 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3789
3794
3790 2002-03-10 Fernando Perez <fperez@colorado.edu>
3795 2002-03-10 Fernando Perez <fperez@colorado.edu>
3791
3796
3792 * IPython/usage.py (__doc__): Various documentation cleanups and
3797 * IPython/usage.py (__doc__): Various documentation cleanups and
3793 updates, both in usage docstrings and in the manual.
3798 updates, both in usage docstrings and in the manual.
3794
3799
3795 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3800 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3796 handling of caching. Set minimum acceptabe value for having a
3801 handling of caching. Set minimum acceptabe value for having a
3797 cache at 20 values.
3802 cache at 20 values.
3798
3803
3799 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3804 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3800 install_first_time function to a method, renamed it and added an
3805 install_first_time function to a method, renamed it and added an
3801 'upgrade' mode. Now people can update their config directory with
3806 'upgrade' mode. Now people can update their config directory with
3802 a simple command line switch (-upgrade, also new).
3807 a simple command line switch (-upgrade, also new).
3803
3808
3804 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3809 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3805 @file (convenient for automagic users under Python >= 2.2).
3810 @file (convenient for automagic users under Python >= 2.2).
3806 Removed @files (it seemed more like a plural than an abbrev. of
3811 Removed @files (it seemed more like a plural than an abbrev. of
3807 'file show').
3812 'file show').
3808
3813
3809 * IPython/iplib.py (install_first_time): Fixed crash if there were
3814 * IPython/iplib.py (install_first_time): Fixed crash if there were
3810 backup files ('~') in .ipython/ install directory.
3815 backup files ('~') in .ipython/ install directory.
3811
3816
3812 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3817 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3813 system. Things look fine, but these changes are fairly
3818 system. Things look fine, but these changes are fairly
3814 intrusive. Test them for a few days.
3819 intrusive. Test them for a few days.
3815
3820
3816 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3821 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3817 the prompts system. Now all in/out prompt strings are user
3822 the prompts system. Now all in/out prompt strings are user
3818 controllable. This is particularly useful for embedding, as one
3823 controllable. This is particularly useful for embedding, as one
3819 can tag embedded instances with particular prompts.
3824 can tag embedded instances with particular prompts.
3820
3825
3821 Also removed global use of sys.ps1/2, which now allows nested
3826 Also removed global use of sys.ps1/2, which now allows nested
3822 embeddings without any problems. Added command-line options for
3827 embeddings without any problems. Added command-line options for
3823 the prompt strings.
3828 the prompt strings.
3824
3829
3825 2002-03-08 Fernando Perez <fperez@colorado.edu>
3830 2002-03-08 Fernando Perez <fperez@colorado.edu>
3826
3831
3827 * IPython/UserConfig/example-embed-short.py (ipshell): added
3832 * IPython/UserConfig/example-embed-short.py (ipshell): added
3828 example file with the bare minimum code for embedding.
3833 example file with the bare minimum code for embedding.
3829
3834
3830 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3835 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3831 functionality for the embeddable shell to be activated/deactivated
3836 functionality for the embeddable shell to be activated/deactivated
3832 either globally or at each call.
3837 either globally or at each call.
3833
3838
3834 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3839 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3835 rewriting the prompt with '--->' for auto-inputs with proper
3840 rewriting the prompt with '--->' for auto-inputs with proper
3836 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3841 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3837 this is handled by the prompts class itself, as it should.
3842 this is handled by the prompts class itself, as it should.
3838
3843
3839 2002-03-05 Fernando Perez <fperez@colorado.edu>
3844 2002-03-05 Fernando Perez <fperez@colorado.edu>
3840
3845
3841 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3846 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3842 @logstart to avoid name clashes with the math log function.
3847 @logstart to avoid name clashes with the math log function.
3843
3848
3844 * Big updates to X/Emacs section of the manual.
3849 * Big updates to X/Emacs section of the manual.
3845
3850
3846 * Removed ipython_emacs. Milan explained to me how to pass
3851 * Removed ipython_emacs. Milan explained to me how to pass
3847 arguments to ipython through Emacs. Some day I'm going to end up
3852 arguments to ipython through Emacs. Some day I'm going to end up
3848 learning some lisp...
3853 learning some lisp...
3849
3854
3850 2002-03-04 Fernando Perez <fperez@colorado.edu>
3855 2002-03-04 Fernando Perez <fperez@colorado.edu>
3851
3856
3852 * IPython/ipython_emacs: Created script to be used as the
3857 * IPython/ipython_emacs: Created script to be used as the
3853 py-python-command Emacs variable so we can pass IPython
3858 py-python-command Emacs variable so we can pass IPython
3854 parameters. I can't figure out how to tell Emacs directly to pass
3859 parameters. I can't figure out how to tell Emacs directly to pass
3855 parameters to IPython, so a dummy shell script will do it.
3860 parameters to IPython, so a dummy shell script will do it.
3856
3861
3857 Other enhancements made for things to work better under Emacs'
3862 Other enhancements made for things to work better under Emacs'
3858 various types of terminals. Many thanks to Milan Zamazal
3863 various types of terminals. Many thanks to Milan Zamazal
3859 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3864 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3860
3865
3861 2002-03-01 Fernando Perez <fperez@colorado.edu>
3866 2002-03-01 Fernando Perez <fperez@colorado.edu>
3862
3867
3863 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3868 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3864 that loading of readline is now optional. This gives better
3869 that loading of readline is now optional. This gives better
3865 control to emacs users.
3870 control to emacs users.
3866
3871
3867 * IPython/ultraTB.py (__date__): Modified color escape sequences
3872 * IPython/ultraTB.py (__date__): Modified color escape sequences
3868 and now things work fine under xterm and in Emacs' term buffers
3873 and now things work fine under xterm and in Emacs' term buffers
3869 (though not shell ones). Well, in emacs you get colors, but all
3874 (though not shell ones). Well, in emacs you get colors, but all
3870 seem to be 'light' colors (no difference between dark and light
3875 seem to be 'light' colors (no difference between dark and light
3871 ones). But the garbage chars are gone, and also in xterms. It
3876 ones). But the garbage chars are gone, and also in xterms. It
3872 seems that now I'm using 'cleaner' ansi sequences.
3877 seems that now I'm using 'cleaner' ansi sequences.
3873
3878
3874 2002-02-21 Fernando Perez <fperez@colorado.edu>
3879 2002-02-21 Fernando Perez <fperez@colorado.edu>
3875
3880
3876 * Released 0.2.7 (mainly to publish the scoping fix).
3881 * Released 0.2.7 (mainly to publish the scoping fix).
3877
3882
3878 * IPython/Logger.py (Logger.logstate): added. A corresponding
3883 * IPython/Logger.py (Logger.logstate): added. A corresponding
3879 @logstate magic was created.
3884 @logstate magic was created.
3880
3885
3881 * IPython/Magic.py: fixed nested scoping problem under Python
3886 * IPython/Magic.py: fixed nested scoping problem under Python
3882 2.1.x (automagic wasn't working).
3887 2.1.x (automagic wasn't working).
3883
3888
3884 2002-02-20 Fernando Perez <fperez@colorado.edu>
3889 2002-02-20 Fernando Perez <fperez@colorado.edu>
3885
3890
3886 * Released 0.2.6.
3891 * Released 0.2.6.
3887
3892
3888 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3893 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3889 option so that logs can come out without any headers at all.
3894 option so that logs can come out without any headers at all.
3890
3895
3891 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3896 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3892 SciPy.
3897 SciPy.
3893
3898
3894 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3899 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3895 that embedded IPython calls don't require vars() to be explicitly
3900 that embedded IPython calls don't require vars() to be explicitly
3896 passed. Now they are extracted from the caller's frame (code
3901 passed. Now they are extracted from the caller's frame (code
3897 snatched from Eric Jones' weave). Added better documentation to
3902 snatched from Eric Jones' weave). Added better documentation to
3898 the section on embedding and the example file.
3903 the section on embedding and the example file.
3899
3904
3900 * IPython/genutils.py (page): Changed so that under emacs, it just
3905 * IPython/genutils.py (page): Changed so that under emacs, it just
3901 prints the string. You can then page up and down in the emacs
3906 prints the string. You can then page up and down in the emacs
3902 buffer itself. This is how the builtin help() works.
3907 buffer itself. This is how the builtin help() works.
3903
3908
3904 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3909 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3905 macro scoping: macros need to be executed in the user's namespace
3910 macro scoping: macros need to be executed in the user's namespace
3906 to work as if they had been typed by the user.
3911 to work as if they had been typed by the user.
3907
3912
3908 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3913 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3909 execute automatically (no need to type 'exec...'). They then
3914 execute automatically (no need to type 'exec...'). They then
3910 behave like 'true macros'. The printing system was also modified
3915 behave like 'true macros'. The printing system was also modified
3911 for this to work.
3916 for this to work.
3912
3917
3913 2002-02-19 Fernando Perez <fperez@colorado.edu>
3918 2002-02-19 Fernando Perez <fperez@colorado.edu>
3914
3919
3915 * IPython/genutils.py (page_file): new function for paging files
3920 * IPython/genutils.py (page_file): new function for paging files
3916 in an OS-independent way. Also necessary for file viewing to work
3921 in an OS-independent way. Also necessary for file viewing to work
3917 well inside Emacs buffers.
3922 well inside Emacs buffers.
3918 (page): Added checks for being in an emacs buffer.
3923 (page): Added checks for being in an emacs buffer.
3919 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3924 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3920 same bug in iplib.
3925 same bug in iplib.
3921
3926
3922 2002-02-18 Fernando Perez <fperez@colorado.edu>
3927 2002-02-18 Fernando Perez <fperez@colorado.edu>
3923
3928
3924 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3929 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3925 of readline so that IPython can work inside an Emacs buffer.
3930 of readline so that IPython can work inside an Emacs buffer.
3926
3931
3927 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3932 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3928 method signatures (they weren't really bugs, but it looks cleaner
3933 method signatures (they weren't really bugs, but it looks cleaner
3929 and keeps PyChecker happy).
3934 and keeps PyChecker happy).
3930
3935
3931 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3936 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3932 for implementing various user-defined hooks. Currently only
3937 for implementing various user-defined hooks. Currently only
3933 display is done.
3938 display is done.
3934
3939
3935 * IPython/Prompts.py (CachedOutput._display): changed display
3940 * IPython/Prompts.py (CachedOutput._display): changed display
3936 functions so that they can be dynamically changed by users easily.
3941 functions so that they can be dynamically changed by users easily.
3937
3942
3938 * IPython/Extensions/numeric_formats.py (num_display): added an
3943 * IPython/Extensions/numeric_formats.py (num_display): added an
3939 extension for printing NumPy arrays in flexible manners. It
3944 extension for printing NumPy arrays in flexible manners. It
3940 doesn't do anything yet, but all the structure is in
3945 doesn't do anything yet, but all the structure is in
3941 place. Ultimately the plan is to implement output format control
3946 place. Ultimately the plan is to implement output format control
3942 like in Octave.
3947 like in Octave.
3943
3948
3944 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3949 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3945 methods are found at run-time by all the automatic machinery.
3950 methods are found at run-time by all the automatic machinery.
3946
3951
3947 2002-02-17 Fernando Perez <fperez@colorado.edu>
3952 2002-02-17 Fernando Perez <fperez@colorado.edu>
3948
3953
3949 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3954 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3950 whole file a little.
3955 whole file a little.
3951
3956
3952 * ToDo: closed this document. Now there's a new_design.lyx
3957 * ToDo: closed this document. Now there's a new_design.lyx
3953 document for all new ideas. Added making a pdf of it for the
3958 document for all new ideas. Added making a pdf of it for the
3954 end-user distro.
3959 end-user distro.
3955
3960
3956 * IPython/Logger.py (Logger.switch_log): Created this to replace
3961 * IPython/Logger.py (Logger.switch_log): Created this to replace
3957 logon() and logoff(). It also fixes a nasty crash reported by
3962 logon() and logoff(). It also fixes a nasty crash reported by
3958 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3963 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3959
3964
3960 * IPython/iplib.py (complete): got auto-completion to work with
3965 * IPython/iplib.py (complete): got auto-completion to work with
3961 automagic (I had wanted this for a long time).
3966 automagic (I had wanted this for a long time).
3962
3967
3963 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3968 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3964 to @file, since file() is now a builtin and clashes with automagic
3969 to @file, since file() is now a builtin and clashes with automagic
3965 for @file.
3970 for @file.
3966
3971
3967 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3972 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3968 of this was previously in iplib, which had grown to more than 2000
3973 of this was previously in iplib, which had grown to more than 2000
3969 lines, way too long. No new functionality, but it makes managing
3974 lines, way too long. No new functionality, but it makes managing
3970 the code a bit easier.
3975 the code a bit easier.
3971
3976
3972 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3977 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3973 information to crash reports.
3978 information to crash reports.
3974
3979
3975 2002-02-12 Fernando Perez <fperez@colorado.edu>
3980 2002-02-12 Fernando Perez <fperez@colorado.edu>
3976
3981
3977 * Released 0.2.5.
3982 * Released 0.2.5.
3978
3983
3979 2002-02-11 Fernando Perez <fperez@colorado.edu>
3984 2002-02-11 Fernando Perez <fperez@colorado.edu>
3980
3985
3981 * Wrote a relatively complete Windows installer. It puts
3986 * Wrote a relatively complete Windows installer. It puts
3982 everything in place, creates Start Menu entries and fixes the
3987 everything in place, creates Start Menu entries and fixes the
3983 color issues. Nothing fancy, but it works.
3988 color issues. Nothing fancy, but it works.
3984
3989
3985 2002-02-10 Fernando Perez <fperez@colorado.edu>
3990 2002-02-10 Fernando Perez <fperez@colorado.edu>
3986
3991
3987 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3992 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3988 os.path.expanduser() call so that we can type @run ~/myfile.py and
3993 os.path.expanduser() call so that we can type @run ~/myfile.py and
3989 have thigs work as expected.
3994 have thigs work as expected.
3990
3995
3991 * IPython/genutils.py (page): fixed exception handling so things
3996 * IPython/genutils.py (page): fixed exception handling so things
3992 work both in Unix and Windows correctly. Quitting a pager triggers
3997 work both in Unix and Windows correctly. Quitting a pager triggers
3993 an IOError/broken pipe in Unix, and in windows not finding a pager
3998 an IOError/broken pipe in Unix, and in windows not finding a pager
3994 is also an IOError, so I had to actually look at the return value
3999 is also an IOError, so I had to actually look at the return value
3995 of the exception, not just the exception itself. Should be ok now.
4000 of the exception, not just the exception itself. Should be ok now.
3996
4001
3997 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4002 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3998 modified to allow case-insensitive color scheme changes.
4003 modified to allow case-insensitive color scheme changes.
3999
4004
4000 2002-02-09 Fernando Perez <fperez@colorado.edu>
4005 2002-02-09 Fernando Perez <fperez@colorado.edu>
4001
4006
4002 * IPython/genutils.py (native_line_ends): new function to leave
4007 * IPython/genutils.py (native_line_ends): new function to leave
4003 user config files with os-native line-endings.
4008 user config files with os-native line-endings.
4004
4009
4005 * README and manual updates.
4010 * README and manual updates.
4006
4011
4007 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4012 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4008 instead of StringType to catch Unicode strings.
4013 instead of StringType to catch Unicode strings.
4009
4014
4010 * IPython/genutils.py (filefind): fixed bug for paths with
4015 * IPython/genutils.py (filefind): fixed bug for paths with
4011 embedded spaces (very common in Windows).
4016 embedded spaces (very common in Windows).
4012
4017
4013 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4018 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4014 files under Windows, so that they get automatically associated
4019 files under Windows, so that they get automatically associated
4015 with a text editor. Windows makes it a pain to handle
4020 with a text editor. Windows makes it a pain to handle
4016 extension-less files.
4021 extension-less files.
4017
4022
4018 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4023 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4019 warning about readline only occur for Posix. In Windows there's no
4024 warning about readline only occur for Posix. In Windows there's no
4020 way to get readline, so why bother with the warning.
4025 way to get readline, so why bother with the warning.
4021
4026
4022 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4027 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4023 for __str__ instead of dir(self), since dir() changed in 2.2.
4028 for __str__ instead of dir(self), since dir() changed in 2.2.
4024
4029
4025 * Ported to Windows! Tested on XP, I suspect it should work fine
4030 * Ported to Windows! Tested on XP, I suspect it should work fine
4026 on NT/2000, but I don't think it will work on 98 et al. That
4031 on NT/2000, but I don't think it will work on 98 et al. That
4027 series of Windows is such a piece of junk anyway that I won't try
4032 series of Windows is such a piece of junk anyway that I won't try
4028 porting it there. The XP port was straightforward, showed a few
4033 porting it there. The XP port was straightforward, showed a few
4029 bugs here and there (fixed all), in particular some string
4034 bugs here and there (fixed all), in particular some string
4030 handling stuff which required considering Unicode strings (which
4035 handling stuff which required considering Unicode strings (which
4031 Windows uses). This is good, but hasn't been too tested :) No
4036 Windows uses). This is good, but hasn't been too tested :) No
4032 fancy installer yet, I'll put a note in the manual so people at
4037 fancy installer yet, I'll put a note in the manual so people at
4033 least make manually a shortcut.
4038 least make manually a shortcut.
4034
4039
4035 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4040 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4036 into a single one, "colors". This now controls both prompt and
4041 into a single one, "colors". This now controls both prompt and
4037 exception color schemes, and can be changed both at startup
4042 exception color schemes, and can be changed both at startup
4038 (either via command-line switches or via ipythonrc files) and at
4043 (either via command-line switches or via ipythonrc files) and at
4039 runtime, with @colors.
4044 runtime, with @colors.
4040 (Magic.magic_run): renamed @prun to @run and removed the old
4045 (Magic.magic_run): renamed @prun to @run and removed the old
4041 @run. The two were too similar to warrant keeping both.
4046 @run. The two were too similar to warrant keeping both.
4042
4047
4043 2002-02-03 Fernando Perez <fperez@colorado.edu>
4048 2002-02-03 Fernando Perez <fperez@colorado.edu>
4044
4049
4045 * IPython/iplib.py (install_first_time): Added comment on how to
4050 * IPython/iplib.py (install_first_time): Added comment on how to
4046 configure the color options for first-time users. Put a <return>
4051 configure the color options for first-time users. Put a <return>
4047 request at the end so that small-terminal users get a chance to
4052 request at the end so that small-terminal users get a chance to
4048 read the startup info.
4053 read the startup info.
4049
4054
4050 2002-01-23 Fernando Perez <fperez@colorado.edu>
4055 2002-01-23 Fernando Perez <fperez@colorado.edu>
4051
4056
4052 * IPython/iplib.py (CachedOutput.update): Changed output memory
4057 * IPython/iplib.py (CachedOutput.update): Changed output memory
4053 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4058 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4054 input history we still use _i. Did this b/c these variable are
4059 input history we still use _i. Did this b/c these variable are
4055 very commonly used in interactive work, so the less we need to
4060 very commonly used in interactive work, so the less we need to
4056 type the better off we are.
4061 type the better off we are.
4057 (Magic.magic_prun): updated @prun to better handle the namespaces
4062 (Magic.magic_prun): updated @prun to better handle the namespaces
4058 the file will run in, including a fix for __name__ not being set
4063 the file will run in, including a fix for __name__ not being set
4059 before.
4064 before.
4060
4065
4061 2002-01-20 Fernando Perez <fperez@colorado.edu>
4066 2002-01-20 Fernando Perez <fperez@colorado.edu>
4062
4067
4063 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4068 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4064 extra garbage for Python 2.2. Need to look more carefully into
4069 extra garbage for Python 2.2. Need to look more carefully into
4065 this later.
4070 this later.
4066
4071
4067 2002-01-19 Fernando Perez <fperez@colorado.edu>
4072 2002-01-19 Fernando Perez <fperez@colorado.edu>
4068
4073
4069 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4074 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4070 display SyntaxError exceptions properly formatted when they occur
4075 display SyntaxError exceptions properly formatted when they occur
4071 (they can be triggered by imported code).
4076 (they can be triggered by imported code).
4072
4077
4073 2002-01-18 Fernando Perez <fperez@colorado.edu>
4078 2002-01-18 Fernando Perez <fperez@colorado.edu>
4074
4079
4075 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4080 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4076 SyntaxError exceptions are reported nicely formatted, instead of
4081 SyntaxError exceptions are reported nicely formatted, instead of
4077 spitting out only offset information as before.
4082 spitting out only offset information as before.
4078 (Magic.magic_prun): Added the @prun function for executing
4083 (Magic.magic_prun): Added the @prun function for executing
4079 programs with command line args inside IPython.
4084 programs with command line args inside IPython.
4080
4085
4081 2002-01-16 Fernando Perez <fperez@colorado.edu>
4086 2002-01-16 Fernando Perez <fperez@colorado.edu>
4082
4087
4083 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4088 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4084 to *not* include the last item given in a range. This brings their
4089 to *not* include the last item given in a range. This brings their
4085 behavior in line with Python's slicing:
4090 behavior in line with Python's slicing:
4086 a[n1:n2] -> a[n1]...a[n2-1]
4091 a[n1:n2] -> a[n1]...a[n2-1]
4087 It may be a bit less convenient, but I prefer to stick to Python's
4092 It may be a bit less convenient, but I prefer to stick to Python's
4088 conventions *everywhere*, so users never have to wonder.
4093 conventions *everywhere*, so users never have to wonder.
4089 (Magic.magic_macro): Added @macro function to ease the creation of
4094 (Magic.magic_macro): Added @macro function to ease the creation of
4090 macros.
4095 macros.
4091
4096
4092 2002-01-05 Fernando Perez <fperez@colorado.edu>
4097 2002-01-05 Fernando Perez <fperez@colorado.edu>
4093
4098
4094 * Released 0.2.4.
4099 * Released 0.2.4.
4095
4100
4096 * IPython/iplib.py (Magic.magic_pdef):
4101 * IPython/iplib.py (Magic.magic_pdef):
4097 (InteractiveShell.safe_execfile): report magic lines and error
4102 (InteractiveShell.safe_execfile): report magic lines and error
4098 lines without line numbers so one can easily copy/paste them for
4103 lines without line numbers so one can easily copy/paste them for
4099 re-execution.
4104 re-execution.
4100
4105
4101 * Updated manual with recent changes.
4106 * Updated manual with recent changes.
4102
4107
4103 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4108 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4104 docstring printing when class? is called. Very handy for knowing
4109 docstring printing when class? is called. Very handy for knowing
4105 how to create class instances (as long as __init__ is well
4110 how to create class instances (as long as __init__ is well
4106 documented, of course :)
4111 documented, of course :)
4107 (Magic.magic_doc): print both class and constructor docstrings.
4112 (Magic.magic_doc): print both class and constructor docstrings.
4108 (Magic.magic_pdef): give constructor info if passed a class and
4113 (Magic.magic_pdef): give constructor info if passed a class and
4109 __call__ info for callable object instances.
4114 __call__ info for callable object instances.
4110
4115
4111 2002-01-04 Fernando Perez <fperez@colorado.edu>
4116 2002-01-04 Fernando Perez <fperez@colorado.edu>
4112
4117
4113 * Made deep_reload() off by default. It doesn't always work
4118 * Made deep_reload() off by default. It doesn't always work
4114 exactly as intended, so it's probably safer to have it off. It's
4119 exactly as intended, so it's probably safer to have it off. It's
4115 still available as dreload() anyway, so nothing is lost.
4120 still available as dreload() anyway, so nothing is lost.
4116
4121
4117 2002-01-02 Fernando Perez <fperez@colorado.edu>
4122 2002-01-02 Fernando Perez <fperez@colorado.edu>
4118
4123
4119 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4124 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4120 so I wanted an updated release).
4125 so I wanted an updated release).
4121
4126
4122 2001-12-27 Fernando Perez <fperez@colorado.edu>
4127 2001-12-27 Fernando Perez <fperez@colorado.edu>
4123
4128
4124 * IPython/iplib.py (InteractiveShell.interact): Added the original
4129 * IPython/iplib.py (InteractiveShell.interact): Added the original
4125 code from 'code.py' for this module in order to change the
4130 code from 'code.py' for this module in order to change the
4126 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4131 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4127 the history cache would break when the user hit Ctrl-C, and
4132 the history cache would break when the user hit Ctrl-C, and
4128 interact() offers no way to add any hooks to it.
4133 interact() offers no way to add any hooks to it.
4129
4134
4130 2001-12-23 Fernando Perez <fperez@colorado.edu>
4135 2001-12-23 Fernando Perez <fperez@colorado.edu>
4131
4136
4132 * setup.py: added check for 'MANIFEST' before trying to remove
4137 * setup.py: added check for 'MANIFEST' before trying to remove
4133 it. Thanks to Sean Reifschneider.
4138 it. Thanks to Sean Reifschneider.
4134
4139
4135 2001-12-22 Fernando Perez <fperez@colorado.edu>
4140 2001-12-22 Fernando Perez <fperez@colorado.edu>
4136
4141
4137 * Released 0.2.2.
4142 * Released 0.2.2.
4138
4143
4139 * Finished (reasonably) writing the manual. Later will add the
4144 * Finished (reasonably) writing the manual. Later will add the
4140 python-standard navigation stylesheets, but for the time being
4145 python-standard navigation stylesheets, but for the time being
4141 it's fairly complete. Distribution will include html and pdf
4146 it's fairly complete. Distribution will include html and pdf
4142 versions.
4147 versions.
4143
4148
4144 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4149 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4145 (MayaVi author).
4150 (MayaVi author).
4146
4151
4147 2001-12-21 Fernando Perez <fperez@colorado.edu>
4152 2001-12-21 Fernando Perez <fperez@colorado.edu>
4148
4153
4149 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4154 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4150 good public release, I think (with the manual and the distutils
4155 good public release, I think (with the manual and the distutils
4151 installer). The manual can use some work, but that can go
4156 installer). The manual can use some work, but that can go
4152 slowly. Otherwise I think it's quite nice for end users. Next
4157 slowly. Otherwise I think it's quite nice for end users. Next
4153 summer, rewrite the guts of it...
4158 summer, rewrite the guts of it...
4154
4159
4155 * Changed format of ipythonrc files to use whitespace as the
4160 * Changed format of ipythonrc files to use whitespace as the
4156 separator instead of an explicit '='. Cleaner.
4161 separator instead of an explicit '='. Cleaner.
4157
4162
4158 2001-12-20 Fernando Perez <fperez@colorado.edu>
4163 2001-12-20 Fernando Perez <fperez@colorado.edu>
4159
4164
4160 * Started a manual in LyX. For now it's just a quick merge of the
4165 * Started a manual in LyX. For now it's just a quick merge of the
4161 various internal docstrings and READMEs. Later it may grow into a
4166 various internal docstrings and READMEs. Later it may grow into a
4162 nice, full-blown manual.
4167 nice, full-blown manual.
4163
4168
4164 * Set up a distutils based installer. Installation should now be
4169 * Set up a distutils based installer. Installation should now be
4165 trivially simple for end-users.
4170 trivially simple for end-users.
4166
4171
4167 2001-12-11 Fernando Perez <fperez@colorado.edu>
4172 2001-12-11 Fernando Perez <fperez@colorado.edu>
4168
4173
4169 * Released 0.2.0. First public release, announced it at
4174 * Released 0.2.0. First public release, announced it at
4170 comp.lang.python. From now on, just bugfixes...
4175 comp.lang.python. From now on, just bugfixes...
4171
4176
4172 * Went through all the files, set copyright/license notices and
4177 * Went through all the files, set copyright/license notices and
4173 cleaned up things. Ready for release.
4178 cleaned up things. Ready for release.
4174
4179
4175 2001-12-10 Fernando Perez <fperez@colorado.edu>
4180 2001-12-10 Fernando Perez <fperez@colorado.edu>
4176
4181
4177 * Changed the first-time installer not to use tarfiles. It's more
4182 * Changed the first-time installer not to use tarfiles. It's more
4178 robust now and less unix-dependent. Also makes it easier for
4183 robust now and less unix-dependent. Also makes it easier for
4179 people to later upgrade versions.
4184 people to later upgrade versions.
4180
4185
4181 * Changed @exit to @abort to reflect the fact that it's pretty
4186 * Changed @exit to @abort to reflect the fact that it's pretty
4182 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4187 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4183 becomes significant only when IPyhton is embedded: in that case,
4188 becomes significant only when IPyhton is embedded: in that case,
4184 C-D closes IPython only, but @abort kills the enclosing program
4189 C-D closes IPython only, but @abort kills the enclosing program
4185 too (unless it had called IPython inside a try catching
4190 too (unless it had called IPython inside a try catching
4186 SystemExit).
4191 SystemExit).
4187
4192
4188 * Created Shell module which exposes the actuall IPython Shell
4193 * Created Shell module which exposes the actuall IPython Shell
4189 classes, currently the normal and the embeddable one. This at
4194 classes, currently the normal and the embeddable one. This at
4190 least offers a stable interface we won't need to change when
4195 least offers a stable interface we won't need to change when
4191 (later) the internals are rewritten. That rewrite will be confined
4196 (later) the internals are rewritten. That rewrite will be confined
4192 to iplib and ipmaker, but the Shell interface should remain as is.
4197 to iplib and ipmaker, but the Shell interface should remain as is.
4193
4198
4194 * Added embed module which offers an embeddable IPShell object,
4199 * Added embed module which offers an embeddable IPShell object,
4195 useful to fire up IPython *inside* a running program. Great for
4200 useful to fire up IPython *inside* a running program. Great for
4196 debugging or dynamical data analysis.
4201 debugging or dynamical data analysis.
4197
4202
4198 2001-12-08 Fernando Perez <fperez@colorado.edu>
4203 2001-12-08 Fernando Perez <fperez@colorado.edu>
4199
4204
4200 * Fixed small bug preventing seeing info from methods of defined
4205 * Fixed small bug preventing seeing info from methods of defined
4201 objects (incorrect namespace in _ofind()).
4206 objects (incorrect namespace in _ofind()).
4202
4207
4203 * Documentation cleanup. Moved the main usage docstrings to a
4208 * Documentation cleanup. Moved the main usage docstrings to a
4204 separate file, usage.py (cleaner to maintain, and hopefully in the
4209 separate file, usage.py (cleaner to maintain, and hopefully in the
4205 future some perlpod-like way of producing interactive, man and
4210 future some perlpod-like way of producing interactive, man and
4206 html docs out of it will be found).
4211 html docs out of it will be found).
4207
4212
4208 * Added @profile to see your profile at any time.
4213 * Added @profile to see your profile at any time.
4209
4214
4210 * Added @p as an alias for 'print'. It's especially convenient if
4215 * Added @p as an alias for 'print'. It's especially convenient if
4211 using automagic ('p x' prints x).
4216 using automagic ('p x' prints x).
4212
4217
4213 * Small cleanups and fixes after a pychecker run.
4218 * Small cleanups and fixes after a pychecker run.
4214
4219
4215 * Changed the @cd command to handle @cd - and @cd -<n> for
4220 * Changed the @cd command to handle @cd - and @cd -<n> for
4216 visiting any directory in _dh.
4221 visiting any directory in _dh.
4217
4222
4218 * Introduced _dh, a history of visited directories. @dhist prints
4223 * Introduced _dh, a history of visited directories. @dhist prints
4219 it out with numbers.
4224 it out with numbers.
4220
4225
4221 2001-12-07 Fernando Perez <fperez@colorado.edu>
4226 2001-12-07 Fernando Perez <fperez@colorado.edu>
4222
4227
4223 * Released 0.1.22
4228 * Released 0.1.22
4224
4229
4225 * Made initialization a bit more robust against invalid color
4230 * Made initialization a bit more robust against invalid color
4226 options in user input (exit, not traceback-crash).
4231 options in user input (exit, not traceback-crash).
4227
4232
4228 * Changed the bug crash reporter to write the report only in the
4233 * Changed the bug crash reporter to write the report only in the
4229 user's .ipython directory. That way IPython won't litter people's
4234 user's .ipython directory. That way IPython won't litter people's
4230 hard disks with crash files all over the place. Also print on
4235 hard disks with crash files all over the place. Also print on
4231 screen the necessary mail command.
4236 screen the necessary mail command.
4232
4237
4233 * With the new ultraTB, implemented LightBG color scheme for light
4238 * With the new ultraTB, implemented LightBG color scheme for light
4234 background terminals. A lot of people like white backgrounds, so I
4239 background terminals. A lot of people like white backgrounds, so I
4235 guess we should at least give them something readable.
4240 guess we should at least give them something readable.
4236
4241
4237 2001-12-06 Fernando Perez <fperez@colorado.edu>
4242 2001-12-06 Fernando Perez <fperez@colorado.edu>
4238
4243
4239 * Modified the structure of ultraTB. Now there's a proper class
4244 * Modified the structure of ultraTB. Now there's a proper class
4240 for tables of color schemes which allow adding schemes easily and
4245 for tables of color schemes which allow adding schemes easily and
4241 switching the active scheme without creating a new instance every
4246 switching the active scheme without creating a new instance every
4242 time (which was ridiculous). The syntax for creating new schemes
4247 time (which was ridiculous). The syntax for creating new schemes
4243 is also cleaner. I think ultraTB is finally done, with a clean
4248 is also cleaner. I think ultraTB is finally done, with a clean
4244 class structure. Names are also much cleaner (now there's proper
4249 class structure. Names are also much cleaner (now there's proper
4245 color tables, no need for every variable to also have 'color' in
4250 color tables, no need for every variable to also have 'color' in
4246 its name).
4251 its name).
4247
4252
4248 * Broke down genutils into separate files. Now genutils only
4253 * Broke down genutils into separate files. Now genutils only
4249 contains utility functions, and classes have been moved to their
4254 contains utility functions, and classes have been moved to their
4250 own files (they had enough independent functionality to warrant
4255 own files (they had enough independent functionality to warrant
4251 it): ConfigLoader, OutputTrap, Struct.
4256 it): ConfigLoader, OutputTrap, Struct.
4252
4257
4253 2001-12-05 Fernando Perez <fperez@colorado.edu>
4258 2001-12-05 Fernando Perez <fperez@colorado.edu>
4254
4259
4255 * IPython turns 21! Released version 0.1.21, as a candidate for
4260 * IPython turns 21! Released version 0.1.21, as a candidate for
4256 public consumption. If all goes well, release in a few days.
4261 public consumption. If all goes well, release in a few days.
4257
4262
4258 * Fixed path bug (files in Extensions/ directory wouldn't be found
4263 * Fixed path bug (files in Extensions/ directory wouldn't be found
4259 unless IPython/ was explicitly in sys.path).
4264 unless IPython/ was explicitly in sys.path).
4260
4265
4261 * Extended the FlexCompleter class as MagicCompleter to allow
4266 * Extended the FlexCompleter class as MagicCompleter to allow
4262 completion of @-starting lines.
4267 completion of @-starting lines.
4263
4268
4264 * Created __release__.py file as a central repository for release
4269 * Created __release__.py file as a central repository for release
4265 info that other files can read from.
4270 info that other files can read from.
4266
4271
4267 * Fixed small bug in logging: when logging was turned on in
4272 * Fixed small bug in logging: when logging was turned on in
4268 mid-session, old lines with special meanings (!@?) were being
4273 mid-session, old lines with special meanings (!@?) were being
4269 logged without the prepended comment, which is necessary since
4274 logged without the prepended comment, which is necessary since
4270 they are not truly valid python syntax. This should make session
4275 they are not truly valid python syntax. This should make session
4271 restores produce less errors.
4276 restores produce less errors.
4272
4277
4273 * The namespace cleanup forced me to make a FlexCompleter class
4278 * The namespace cleanup forced me to make a FlexCompleter class
4274 which is nothing but a ripoff of rlcompleter, but with selectable
4279 which is nothing but a ripoff of rlcompleter, but with selectable
4275 namespace (rlcompleter only works in __main__.__dict__). I'll try
4280 namespace (rlcompleter only works in __main__.__dict__). I'll try
4276 to submit a note to the authors to see if this change can be
4281 to submit a note to the authors to see if this change can be
4277 incorporated in future rlcompleter releases (Dec.6: done)
4282 incorporated in future rlcompleter releases (Dec.6: done)
4278
4283
4279 * More fixes to namespace handling. It was a mess! Now all
4284 * More fixes to namespace handling. It was a mess! Now all
4280 explicit references to __main__.__dict__ are gone (except when
4285 explicit references to __main__.__dict__ are gone (except when
4281 really needed) and everything is handled through the namespace
4286 really needed) and everything is handled through the namespace
4282 dicts in the IPython instance. We seem to be getting somewhere
4287 dicts in the IPython instance. We seem to be getting somewhere
4283 with this, finally...
4288 with this, finally...
4284
4289
4285 * Small documentation updates.
4290 * Small documentation updates.
4286
4291
4287 * Created the Extensions directory under IPython (with an
4292 * Created the Extensions directory under IPython (with an
4288 __init__.py). Put the PhysicalQ stuff there. This directory should
4293 __init__.py). Put the PhysicalQ stuff there. This directory should
4289 be used for all special-purpose extensions.
4294 be used for all special-purpose extensions.
4290
4295
4291 * File renaming:
4296 * File renaming:
4292 ipythonlib --> ipmaker
4297 ipythonlib --> ipmaker
4293 ipplib --> iplib
4298 ipplib --> iplib
4294 This makes a bit more sense in terms of what these files actually do.
4299 This makes a bit more sense in terms of what these files actually do.
4295
4300
4296 * Moved all the classes and functions in ipythonlib to ipplib, so
4301 * Moved all the classes and functions in ipythonlib to ipplib, so
4297 now ipythonlib only has make_IPython(). This will ease up its
4302 now ipythonlib only has make_IPython(). This will ease up its
4298 splitting in smaller functional chunks later.
4303 splitting in smaller functional chunks later.
4299
4304
4300 * Cleaned up (done, I think) output of @whos. Better column
4305 * Cleaned up (done, I think) output of @whos. Better column
4301 formatting, and now shows str(var) for as much as it can, which is
4306 formatting, and now shows str(var) for as much as it can, which is
4302 typically what one gets with a 'print var'.
4307 typically what one gets with a 'print var'.
4303
4308
4304 2001-12-04 Fernando Perez <fperez@colorado.edu>
4309 2001-12-04 Fernando Perez <fperez@colorado.edu>
4305
4310
4306 * Fixed namespace problems. Now builtin/IPyhton/user names get
4311 * Fixed namespace problems. Now builtin/IPyhton/user names get
4307 properly reported in their namespace. Internal namespace handling
4312 properly reported in their namespace. Internal namespace handling
4308 is finally getting decent (not perfect yet, but much better than
4313 is finally getting decent (not perfect yet, but much better than
4309 the ad-hoc mess we had).
4314 the ad-hoc mess we had).
4310
4315
4311 * Removed -exit option. If people just want to run a python
4316 * Removed -exit option. If people just want to run a python
4312 script, that's what the normal interpreter is for. Less
4317 script, that's what the normal interpreter is for. Less
4313 unnecessary options, less chances for bugs.
4318 unnecessary options, less chances for bugs.
4314
4319
4315 * Added a crash handler which generates a complete post-mortem if
4320 * Added a crash handler which generates a complete post-mortem if
4316 IPython crashes. This will help a lot in tracking bugs down the
4321 IPython crashes. This will help a lot in tracking bugs down the
4317 road.
4322 road.
4318
4323
4319 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4324 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4320 which were boud to functions being reassigned would bypass the
4325 which were boud to functions being reassigned would bypass the
4321 logger, breaking the sync of _il with the prompt counter. This
4326 logger, breaking the sync of _il with the prompt counter. This
4322 would then crash IPython later when a new line was logged.
4327 would then crash IPython later when a new line was logged.
4323
4328
4324 2001-12-02 Fernando Perez <fperez@colorado.edu>
4329 2001-12-02 Fernando Perez <fperez@colorado.edu>
4325
4330
4326 * Made IPython a package. This means people don't have to clutter
4331 * Made IPython a package. This means people don't have to clutter
4327 their sys.path with yet another directory. Changed the INSTALL
4332 their sys.path with yet another directory. Changed the INSTALL
4328 file accordingly.
4333 file accordingly.
4329
4334
4330 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4335 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4331 sorts its output (so @who shows it sorted) and @whos formats the
4336 sorts its output (so @who shows it sorted) and @whos formats the
4332 table according to the width of the first column. Nicer, easier to
4337 table according to the width of the first column. Nicer, easier to
4333 read. Todo: write a generic table_format() which takes a list of
4338 read. Todo: write a generic table_format() which takes a list of
4334 lists and prints it nicely formatted, with optional row/column
4339 lists and prints it nicely formatted, with optional row/column
4335 separators and proper padding and justification.
4340 separators and proper padding and justification.
4336
4341
4337 * Released 0.1.20
4342 * Released 0.1.20
4338
4343
4339 * Fixed bug in @log which would reverse the inputcache list (a
4344 * Fixed bug in @log which would reverse the inputcache list (a
4340 copy operation was missing).
4345 copy operation was missing).
4341
4346
4342 * Code cleanup. @config was changed to use page(). Better, since
4347 * Code cleanup. @config was changed to use page(). Better, since
4343 its output is always quite long.
4348 its output is always quite long.
4344
4349
4345 * Itpl is back as a dependency. I was having too many problems
4350 * Itpl is back as a dependency. I was having too many problems
4346 getting the parametric aliases to work reliably, and it's just
4351 getting the parametric aliases to work reliably, and it's just
4347 easier to code weird string operations with it than playing %()s
4352 easier to code weird string operations with it than playing %()s
4348 games. It's only ~6k, so I don't think it's too big a deal.
4353 games. It's only ~6k, so I don't think it's too big a deal.
4349
4354
4350 * Found (and fixed) a very nasty bug with history. !lines weren't
4355 * Found (and fixed) a very nasty bug with history. !lines weren't
4351 getting cached, and the out of sync caches would crash
4356 getting cached, and the out of sync caches would crash
4352 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4357 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4353 division of labor a bit better. Bug fixed, cleaner structure.
4358 division of labor a bit better. Bug fixed, cleaner structure.
4354
4359
4355 2001-12-01 Fernando Perez <fperez@colorado.edu>
4360 2001-12-01 Fernando Perez <fperez@colorado.edu>
4356
4361
4357 * Released 0.1.19
4362 * Released 0.1.19
4358
4363
4359 * Added option -n to @hist to prevent line number printing. Much
4364 * Added option -n to @hist to prevent line number printing. Much
4360 easier to copy/paste code this way.
4365 easier to copy/paste code this way.
4361
4366
4362 * Created global _il to hold the input list. Allows easy
4367 * Created global _il to hold the input list. Allows easy
4363 re-execution of blocks of code by slicing it (inspired by Janko's
4368 re-execution of blocks of code by slicing it (inspired by Janko's
4364 comment on 'macros').
4369 comment on 'macros').
4365
4370
4366 * Small fixes and doc updates.
4371 * Small fixes and doc updates.
4367
4372
4368 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4373 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4369 much too fragile with automagic. Handles properly multi-line
4374 much too fragile with automagic. Handles properly multi-line
4370 statements and takes parameters.
4375 statements and takes parameters.
4371
4376
4372 2001-11-30 Fernando Perez <fperez@colorado.edu>
4377 2001-11-30 Fernando Perez <fperez@colorado.edu>
4373
4378
4374 * Version 0.1.18 released.
4379 * Version 0.1.18 released.
4375
4380
4376 * Fixed nasty namespace bug in initial module imports.
4381 * Fixed nasty namespace bug in initial module imports.
4377
4382
4378 * Added copyright/license notes to all code files (except
4383 * Added copyright/license notes to all code files (except
4379 DPyGetOpt). For the time being, LGPL. That could change.
4384 DPyGetOpt). For the time being, LGPL. That could change.
4380
4385
4381 * Rewrote a much nicer README, updated INSTALL, cleaned up
4386 * Rewrote a much nicer README, updated INSTALL, cleaned up
4382 ipythonrc-* samples.
4387 ipythonrc-* samples.
4383
4388
4384 * Overall code/documentation cleanup. Basically ready for
4389 * Overall code/documentation cleanup. Basically ready for
4385 release. Only remaining thing: licence decision (LGPL?).
4390 release. Only remaining thing: licence decision (LGPL?).
4386
4391
4387 * Converted load_config to a class, ConfigLoader. Now recursion
4392 * Converted load_config to a class, ConfigLoader. Now recursion
4388 control is better organized. Doesn't include the same file twice.
4393 control is better organized. Doesn't include the same file twice.
4389
4394
4390 2001-11-29 Fernando Perez <fperez@colorado.edu>
4395 2001-11-29 Fernando Perez <fperez@colorado.edu>
4391
4396
4392 * Got input history working. Changed output history variables from
4397 * Got input history working. Changed output history variables from
4393 _p to _o so that _i is for input and _o for output. Just cleaner
4398 _p to _o so that _i is for input and _o for output. Just cleaner
4394 convention.
4399 convention.
4395
4400
4396 * Implemented parametric aliases. This pretty much allows the
4401 * Implemented parametric aliases. This pretty much allows the
4397 alias system to offer full-blown shell convenience, I think.
4402 alias system to offer full-blown shell convenience, I think.
4398
4403
4399 * Version 0.1.17 released, 0.1.18 opened.
4404 * Version 0.1.17 released, 0.1.18 opened.
4400
4405
4401 * dot_ipython/ipythonrc (alias): added documentation.
4406 * dot_ipython/ipythonrc (alias): added documentation.
4402 (xcolor): Fixed small bug (xcolors -> xcolor)
4407 (xcolor): Fixed small bug (xcolors -> xcolor)
4403
4408
4404 * Changed the alias system. Now alias is a magic command to define
4409 * Changed the alias system. Now alias is a magic command to define
4405 aliases just like the shell. Rationale: the builtin magics should
4410 aliases just like the shell. Rationale: the builtin magics should
4406 be there for things deeply connected to IPython's
4411 be there for things deeply connected to IPython's
4407 architecture. And this is a much lighter system for what I think
4412 architecture. And this is a much lighter system for what I think
4408 is the really important feature: allowing users to define quickly
4413 is the really important feature: allowing users to define quickly
4409 magics that will do shell things for them, so they can customize
4414 magics that will do shell things for them, so they can customize
4410 IPython easily to match their work habits. If someone is really
4415 IPython easily to match their work habits. If someone is really
4411 desperate to have another name for a builtin alias, they can
4416 desperate to have another name for a builtin alias, they can
4412 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4417 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4413 works.
4418 works.
4414
4419
4415 2001-11-28 Fernando Perez <fperez@colorado.edu>
4420 2001-11-28 Fernando Perez <fperez@colorado.edu>
4416
4421
4417 * Changed @file so that it opens the source file at the proper
4422 * Changed @file so that it opens the source file at the proper
4418 line. Since it uses less, if your EDITOR environment is
4423 line. Since it uses less, if your EDITOR environment is
4419 configured, typing v will immediately open your editor of choice
4424 configured, typing v will immediately open your editor of choice
4420 right at the line where the object is defined. Not as quick as
4425 right at the line where the object is defined. Not as quick as
4421 having a direct @edit command, but for all intents and purposes it
4426 having a direct @edit command, but for all intents and purposes it
4422 works. And I don't have to worry about writing @edit to deal with
4427 works. And I don't have to worry about writing @edit to deal with
4423 all the editors, less does that.
4428 all the editors, less does that.
4424
4429
4425 * Version 0.1.16 released, 0.1.17 opened.
4430 * Version 0.1.16 released, 0.1.17 opened.
4426
4431
4427 * Fixed some nasty bugs in the page/page_dumb combo that could
4432 * Fixed some nasty bugs in the page/page_dumb combo that could
4428 crash IPython.
4433 crash IPython.
4429
4434
4430 2001-11-27 Fernando Perez <fperez@colorado.edu>
4435 2001-11-27 Fernando Perez <fperez@colorado.edu>
4431
4436
4432 * Version 0.1.15 released, 0.1.16 opened.
4437 * Version 0.1.15 released, 0.1.16 opened.
4433
4438
4434 * Finally got ? and ?? to work for undefined things: now it's
4439 * Finally got ? and ?? to work for undefined things: now it's
4435 possible to type {}.get? and get information about the get method
4440 possible to type {}.get? and get information about the get method
4436 of dicts, or os.path? even if only os is defined (so technically
4441 of dicts, or os.path? even if only os is defined (so technically
4437 os.path isn't). Works at any level. For example, after import os,
4442 os.path isn't). Works at any level. For example, after import os,
4438 os?, os.path?, os.path.abspath? all work. This is great, took some
4443 os?, os.path?, os.path.abspath? all work. This is great, took some
4439 work in _ofind.
4444 work in _ofind.
4440
4445
4441 * Fixed more bugs with logging. The sanest way to do it was to add
4446 * Fixed more bugs with logging. The sanest way to do it was to add
4442 to @log a 'mode' parameter. Killed two in one shot (this mode
4447 to @log a 'mode' parameter. Killed two in one shot (this mode
4443 option was a request of Janko's). I think it's finally clean
4448 option was a request of Janko's). I think it's finally clean
4444 (famous last words).
4449 (famous last words).
4445
4450
4446 * Added a page_dumb() pager which does a decent job of paging on
4451 * Added a page_dumb() pager which does a decent job of paging on
4447 screen, if better things (like less) aren't available. One less
4452 screen, if better things (like less) aren't available. One less
4448 unix dependency (someday maybe somebody will port this to
4453 unix dependency (someday maybe somebody will port this to
4449 windows).
4454 windows).
4450
4455
4451 * Fixed problem in magic_log: would lock of logging out if log
4456 * Fixed problem in magic_log: would lock of logging out if log
4452 creation failed (because it would still think it had succeeded).
4457 creation failed (because it would still think it had succeeded).
4453
4458
4454 * Improved the page() function using curses to auto-detect screen
4459 * Improved the page() function using curses to auto-detect screen
4455 size. Now it can make a much better decision on whether to print
4460 size. Now it can make a much better decision on whether to print
4456 or page a string. Option screen_length was modified: a value 0
4461 or page a string. Option screen_length was modified: a value 0
4457 means auto-detect, and that's the default now.
4462 means auto-detect, and that's the default now.
4458
4463
4459 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4464 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4460 go out. I'll test it for a few days, then talk to Janko about
4465 go out. I'll test it for a few days, then talk to Janko about
4461 licences and announce it.
4466 licences and announce it.
4462
4467
4463 * Fixed the length of the auto-generated ---> prompt which appears
4468 * Fixed the length of the auto-generated ---> prompt which appears
4464 for auto-parens and auto-quotes. Getting this right isn't trivial,
4469 for auto-parens and auto-quotes. Getting this right isn't trivial,
4465 with all the color escapes, different prompt types and optional
4470 with all the color escapes, different prompt types and optional
4466 separators. But it seems to be working in all the combinations.
4471 separators. But it seems to be working in all the combinations.
4467
4472
4468 2001-11-26 Fernando Perez <fperez@colorado.edu>
4473 2001-11-26 Fernando Perez <fperez@colorado.edu>
4469
4474
4470 * Wrote a regexp filter to get option types from the option names
4475 * Wrote a regexp filter to get option types from the option names
4471 string. This eliminates the need to manually keep two duplicate
4476 string. This eliminates the need to manually keep two duplicate
4472 lists.
4477 lists.
4473
4478
4474 * Removed the unneeded check_option_names. Now options are handled
4479 * Removed the unneeded check_option_names. Now options are handled
4475 in a much saner manner and it's easy to visually check that things
4480 in a much saner manner and it's easy to visually check that things
4476 are ok.
4481 are ok.
4477
4482
4478 * Updated version numbers on all files I modified to carry a
4483 * Updated version numbers on all files I modified to carry a
4479 notice so Janko and Nathan have clear version markers.
4484 notice so Janko and Nathan have clear version markers.
4480
4485
4481 * Updated docstring for ultraTB with my changes. I should send
4486 * Updated docstring for ultraTB with my changes. I should send
4482 this to Nathan.
4487 this to Nathan.
4483
4488
4484 * Lots of small fixes. Ran everything through pychecker again.
4489 * Lots of small fixes. Ran everything through pychecker again.
4485
4490
4486 * Made loading of deep_reload an cmd line option. If it's not too
4491 * Made loading of deep_reload an cmd line option. If it's not too
4487 kosher, now people can just disable it. With -nodeep_reload it's
4492 kosher, now people can just disable it. With -nodeep_reload it's
4488 still available as dreload(), it just won't overwrite reload().
4493 still available as dreload(), it just won't overwrite reload().
4489
4494
4490 * Moved many options to the no| form (-opt and -noopt
4495 * Moved many options to the no| form (-opt and -noopt
4491 accepted). Cleaner.
4496 accepted). Cleaner.
4492
4497
4493 * Changed magic_log so that if called with no parameters, it uses
4498 * Changed magic_log so that if called with no parameters, it uses
4494 'rotate' mode. That way auto-generated logs aren't automatically
4499 'rotate' mode. That way auto-generated logs aren't automatically
4495 over-written. For normal logs, now a backup is made if it exists
4500 over-written. For normal logs, now a backup is made if it exists
4496 (only 1 level of backups). A new 'backup' mode was added to the
4501 (only 1 level of backups). A new 'backup' mode was added to the
4497 Logger class to support this. This was a request by Janko.
4502 Logger class to support this. This was a request by Janko.
4498
4503
4499 * Added @logoff/@logon to stop/restart an active log.
4504 * Added @logoff/@logon to stop/restart an active log.
4500
4505
4501 * Fixed a lot of bugs in log saving/replay. It was pretty
4506 * Fixed a lot of bugs in log saving/replay. It was pretty
4502 broken. Now special lines (!@,/) appear properly in the command
4507 broken. Now special lines (!@,/) appear properly in the command
4503 history after a log replay.
4508 history after a log replay.
4504
4509
4505 * Tried and failed to implement full session saving via pickle. My
4510 * Tried and failed to implement full session saving via pickle. My
4506 idea was to pickle __main__.__dict__, but modules can't be
4511 idea was to pickle __main__.__dict__, but modules can't be
4507 pickled. This would be a better alternative to replaying logs, but
4512 pickled. This would be a better alternative to replaying logs, but
4508 seems quite tricky to get to work. Changed -session to be called
4513 seems quite tricky to get to work. Changed -session to be called
4509 -logplay, which more accurately reflects what it does. And if we
4514 -logplay, which more accurately reflects what it does. And if we
4510 ever get real session saving working, -session is now available.
4515 ever get real session saving working, -session is now available.
4511
4516
4512 * Implemented color schemes for prompts also. As for tracebacks,
4517 * Implemented color schemes for prompts also. As for tracebacks,
4513 currently only NoColor and Linux are supported. But now the
4518 currently only NoColor and Linux are supported. But now the
4514 infrastructure is in place, based on a generic ColorScheme
4519 infrastructure is in place, based on a generic ColorScheme
4515 class. So writing and activating new schemes both for the prompts
4520 class. So writing and activating new schemes both for the prompts
4516 and the tracebacks should be straightforward.
4521 and the tracebacks should be straightforward.
4517
4522
4518 * Version 0.1.13 released, 0.1.14 opened.
4523 * Version 0.1.13 released, 0.1.14 opened.
4519
4524
4520 * Changed handling of options for output cache. Now counter is
4525 * Changed handling of options for output cache. Now counter is
4521 hardwired starting at 1 and one specifies the maximum number of
4526 hardwired starting at 1 and one specifies the maximum number of
4522 entries *in the outcache* (not the max prompt counter). This is
4527 entries *in the outcache* (not the max prompt counter). This is
4523 much better, since many statements won't increase the cache
4528 much better, since many statements won't increase the cache
4524 count. It also eliminated some confusing options, now there's only
4529 count. It also eliminated some confusing options, now there's only
4525 one: cache_size.
4530 one: cache_size.
4526
4531
4527 * Added 'alias' magic function and magic_alias option in the
4532 * Added 'alias' magic function and magic_alias option in the
4528 ipythonrc file. Now the user can easily define whatever names he
4533 ipythonrc file. Now the user can easily define whatever names he
4529 wants for the magic functions without having to play weird
4534 wants for the magic functions without having to play weird
4530 namespace games. This gives IPython a real shell-like feel.
4535 namespace games. This gives IPython a real shell-like feel.
4531
4536
4532 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4537 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4533 @ or not).
4538 @ or not).
4534
4539
4535 This was one of the last remaining 'visible' bugs (that I know
4540 This was one of the last remaining 'visible' bugs (that I know
4536 of). I think if I can clean up the session loading so it works
4541 of). I think if I can clean up the session loading so it works
4537 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4542 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4538 about licensing).
4543 about licensing).
4539
4544
4540 2001-11-25 Fernando Perez <fperez@colorado.edu>
4545 2001-11-25 Fernando Perez <fperez@colorado.edu>
4541
4546
4542 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4547 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4543 there's a cleaner distinction between what ? and ?? show.
4548 there's a cleaner distinction between what ? and ?? show.
4544
4549
4545 * Added screen_length option. Now the user can define his own
4550 * Added screen_length option. Now the user can define his own
4546 screen size for page() operations.
4551 screen size for page() operations.
4547
4552
4548 * Implemented magic shell-like functions with automatic code
4553 * Implemented magic shell-like functions with automatic code
4549 generation. Now adding another function is just a matter of adding
4554 generation. Now adding another function is just a matter of adding
4550 an entry to a dict, and the function is dynamically generated at
4555 an entry to a dict, and the function is dynamically generated at
4551 run-time. Python has some really cool features!
4556 run-time. Python has some really cool features!
4552
4557
4553 * Renamed many options to cleanup conventions a little. Now all
4558 * Renamed many options to cleanup conventions a little. Now all
4554 are lowercase, and only underscores where needed. Also in the code
4559 are lowercase, and only underscores where needed. Also in the code
4555 option name tables are clearer.
4560 option name tables are clearer.
4556
4561
4557 * Changed prompts a little. Now input is 'In [n]:' instead of
4562 * Changed prompts a little. Now input is 'In [n]:' instead of
4558 'In[n]:='. This allows it the numbers to be aligned with the
4563 'In[n]:='. This allows it the numbers to be aligned with the
4559 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4564 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4560 Python (it was a Mathematica thing). The '...' continuation prompt
4565 Python (it was a Mathematica thing). The '...' continuation prompt
4561 was also changed a little to align better.
4566 was also changed a little to align better.
4562
4567
4563 * Fixed bug when flushing output cache. Not all _p<n> variables
4568 * Fixed bug when flushing output cache. Not all _p<n> variables
4564 exist, so their deletion needs to be wrapped in a try:
4569 exist, so their deletion needs to be wrapped in a try:
4565
4570
4566 * Figured out how to properly use inspect.formatargspec() (it
4571 * Figured out how to properly use inspect.formatargspec() (it
4567 requires the args preceded by *). So I removed all the code from
4572 requires the args preceded by *). So I removed all the code from
4568 _get_pdef in Magic, which was just replicating that.
4573 _get_pdef in Magic, which was just replicating that.
4569
4574
4570 * Added test to prefilter to allow redefining magic function names
4575 * Added test to prefilter to allow redefining magic function names
4571 as variables. This is ok, since the @ form is always available,
4576 as variables. This is ok, since the @ form is always available,
4572 but whe should allow the user to define a variable called 'ls' if
4577 but whe should allow the user to define a variable called 'ls' if
4573 he needs it.
4578 he needs it.
4574
4579
4575 * Moved the ToDo information from README into a separate ToDo.
4580 * Moved the ToDo information from README into a separate ToDo.
4576
4581
4577 * General code cleanup and small bugfixes. I think it's close to a
4582 * General code cleanup and small bugfixes. I think it's close to a
4578 state where it can be released, obviously with a big 'beta'
4583 state where it can be released, obviously with a big 'beta'
4579 warning on it.
4584 warning on it.
4580
4585
4581 * Got the magic function split to work. Now all magics are defined
4586 * Got the magic function split to work. Now all magics are defined
4582 in a separate class. It just organizes things a bit, and now
4587 in a separate class. It just organizes things a bit, and now
4583 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4588 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4584 was too long).
4589 was too long).
4585
4590
4586 * Changed @clear to @reset to avoid potential confusions with
4591 * Changed @clear to @reset to avoid potential confusions with
4587 the shell command clear. Also renamed @cl to @clear, which does
4592 the shell command clear. Also renamed @cl to @clear, which does
4588 exactly what people expect it to from their shell experience.
4593 exactly what people expect it to from their shell experience.
4589
4594
4590 Added a check to the @reset command (since it's so
4595 Added a check to the @reset command (since it's so
4591 destructive, it's probably a good idea to ask for confirmation).
4596 destructive, it's probably a good idea to ask for confirmation).
4592 But now reset only works for full namespace resetting. Since the
4597 But now reset only works for full namespace resetting. Since the
4593 del keyword is already there for deleting a few specific
4598 del keyword is already there for deleting a few specific
4594 variables, I don't see the point of having a redundant magic
4599 variables, I don't see the point of having a redundant magic
4595 function for the same task.
4600 function for the same task.
4596
4601
4597 2001-11-24 Fernando Perez <fperez@colorado.edu>
4602 2001-11-24 Fernando Perez <fperez@colorado.edu>
4598
4603
4599 * Updated the builtin docs (esp. the ? ones).
4604 * Updated the builtin docs (esp. the ? ones).
4600
4605
4601 * Ran all the code through pychecker. Not terribly impressed with
4606 * Ran all the code through pychecker. Not terribly impressed with
4602 it: lots of spurious warnings and didn't really find anything of
4607 it: lots of spurious warnings and didn't really find anything of
4603 substance (just a few modules being imported and not used).
4608 substance (just a few modules being imported and not used).
4604
4609
4605 * Implemented the new ultraTB functionality into IPython. New
4610 * Implemented the new ultraTB functionality into IPython. New
4606 option: xcolors. This chooses color scheme. xmode now only selects
4611 option: xcolors. This chooses color scheme. xmode now only selects
4607 between Plain and Verbose. Better orthogonality.
4612 between Plain and Verbose. Better orthogonality.
4608
4613
4609 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4614 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4610 mode and color scheme for the exception handlers. Now it's
4615 mode and color scheme for the exception handlers. Now it's
4611 possible to have the verbose traceback with no coloring.
4616 possible to have the verbose traceback with no coloring.
4612
4617
4613 2001-11-23 Fernando Perez <fperez@colorado.edu>
4618 2001-11-23 Fernando Perez <fperez@colorado.edu>
4614
4619
4615 * Version 0.1.12 released, 0.1.13 opened.
4620 * Version 0.1.12 released, 0.1.13 opened.
4616
4621
4617 * Removed option to set auto-quote and auto-paren escapes by
4622 * Removed option to set auto-quote and auto-paren escapes by
4618 user. The chances of breaking valid syntax are just too high. If
4623 user. The chances of breaking valid syntax are just too high. If
4619 someone *really* wants, they can always dig into the code.
4624 someone *really* wants, they can always dig into the code.
4620
4625
4621 * Made prompt separators configurable.
4626 * Made prompt separators configurable.
4622
4627
4623 2001-11-22 Fernando Perez <fperez@colorado.edu>
4628 2001-11-22 Fernando Perez <fperez@colorado.edu>
4624
4629
4625 * Small bugfixes in many places.
4630 * Small bugfixes in many places.
4626
4631
4627 * Removed the MyCompleter class from ipplib. It seemed redundant
4632 * Removed the MyCompleter class from ipplib. It seemed redundant
4628 with the C-p,C-n history search functionality. Less code to
4633 with the C-p,C-n history search functionality. Less code to
4629 maintain.
4634 maintain.
4630
4635
4631 * Moved all the original ipython.py code into ipythonlib.py. Right
4636 * Moved all the original ipython.py code into ipythonlib.py. Right
4632 now it's just one big dump into a function called make_IPython, so
4637 now it's just one big dump into a function called make_IPython, so
4633 no real modularity has been gained. But at least it makes the
4638 no real modularity has been gained. But at least it makes the
4634 wrapper script tiny, and since ipythonlib is a module, it gets
4639 wrapper script tiny, and since ipythonlib is a module, it gets
4635 compiled and startup is much faster.
4640 compiled and startup is much faster.
4636
4641
4637 This is a reasobably 'deep' change, so we should test it for a
4642 This is a reasobably 'deep' change, so we should test it for a
4638 while without messing too much more with the code.
4643 while without messing too much more with the code.
4639
4644
4640 2001-11-21 Fernando Perez <fperez@colorado.edu>
4645 2001-11-21 Fernando Perez <fperez@colorado.edu>
4641
4646
4642 * Version 0.1.11 released, 0.1.12 opened for further work.
4647 * Version 0.1.11 released, 0.1.12 opened for further work.
4643
4648
4644 * Removed dependency on Itpl. It was only needed in one place. It
4649 * Removed dependency on Itpl. It was only needed in one place. It
4645 would be nice if this became part of python, though. It makes life
4650 would be nice if this became part of python, though. It makes life
4646 *a lot* easier in some cases.
4651 *a lot* easier in some cases.
4647
4652
4648 * Simplified the prefilter code a bit. Now all handlers are
4653 * Simplified the prefilter code a bit. Now all handlers are
4649 expected to explicitly return a value (at least a blank string).
4654 expected to explicitly return a value (at least a blank string).
4650
4655
4651 * Heavy edits in ipplib. Removed the help system altogether. Now
4656 * Heavy edits in ipplib. Removed the help system altogether. Now
4652 obj?/?? is used for inspecting objects, a magic @doc prints
4657 obj?/?? is used for inspecting objects, a magic @doc prints
4653 docstrings, and full-blown Python help is accessed via the 'help'
4658 docstrings, and full-blown Python help is accessed via the 'help'
4654 keyword. This cleans up a lot of code (less to maintain) and does
4659 keyword. This cleans up a lot of code (less to maintain) and does
4655 the job. Since 'help' is now a standard Python component, might as
4660 the job. Since 'help' is now a standard Python component, might as
4656 well use it and remove duplicate functionality.
4661 well use it and remove duplicate functionality.
4657
4662
4658 Also removed the option to use ipplib as a standalone program. By
4663 Also removed the option to use ipplib as a standalone program. By
4659 now it's too dependent on other parts of IPython to function alone.
4664 now it's too dependent on other parts of IPython to function alone.
4660
4665
4661 * Fixed bug in genutils.pager. It would crash if the pager was
4666 * Fixed bug in genutils.pager. It would crash if the pager was
4662 exited immediately after opening (broken pipe).
4667 exited immediately after opening (broken pipe).
4663
4668
4664 * Trimmed down the VerboseTB reporting a little. The header is
4669 * Trimmed down the VerboseTB reporting a little. The header is
4665 much shorter now and the repeated exception arguments at the end
4670 much shorter now and the repeated exception arguments at the end
4666 have been removed. For interactive use the old header seemed a bit
4671 have been removed. For interactive use the old header seemed a bit
4667 excessive.
4672 excessive.
4668
4673
4669 * Fixed small bug in output of @whos for variables with multi-word
4674 * Fixed small bug in output of @whos for variables with multi-word
4670 types (only first word was displayed).
4675 types (only first word was displayed).
4671
4676
4672 2001-11-17 Fernando Perez <fperez@colorado.edu>
4677 2001-11-17 Fernando Perez <fperez@colorado.edu>
4673
4678
4674 * Version 0.1.10 released, 0.1.11 opened for further work.
4679 * Version 0.1.10 released, 0.1.11 opened for further work.
4675
4680
4676 * Modified dirs and friends. dirs now *returns* the stack (not
4681 * Modified dirs and friends. dirs now *returns* the stack (not
4677 prints), so one can manipulate it as a variable. Convenient to
4682 prints), so one can manipulate it as a variable. Convenient to
4678 travel along many directories.
4683 travel along many directories.
4679
4684
4680 * Fixed bug in magic_pdef: would only work with functions with
4685 * Fixed bug in magic_pdef: would only work with functions with
4681 arguments with default values.
4686 arguments with default values.
4682
4687
4683 2001-11-14 Fernando Perez <fperez@colorado.edu>
4688 2001-11-14 Fernando Perez <fperez@colorado.edu>
4684
4689
4685 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4690 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4686 example with IPython. Various other minor fixes and cleanups.
4691 example with IPython. Various other minor fixes and cleanups.
4687
4692
4688 * Version 0.1.9 released, 0.1.10 opened for further work.
4693 * Version 0.1.9 released, 0.1.10 opened for further work.
4689
4694
4690 * Added sys.path to the list of directories searched in the
4695 * Added sys.path to the list of directories searched in the
4691 execfile= option. It used to be the current directory and the
4696 execfile= option. It used to be the current directory and the
4692 user's IPYTHONDIR only.
4697 user's IPYTHONDIR only.
4693
4698
4694 2001-11-13 Fernando Perez <fperez@colorado.edu>
4699 2001-11-13 Fernando Perez <fperez@colorado.edu>
4695
4700
4696 * Reinstated the raw_input/prefilter separation that Janko had
4701 * Reinstated the raw_input/prefilter separation that Janko had
4697 initially. This gives a more convenient setup for extending the
4702 initially. This gives a more convenient setup for extending the
4698 pre-processor from the outside: raw_input always gets a string,
4703 pre-processor from the outside: raw_input always gets a string,
4699 and prefilter has to process it. We can then redefine prefilter
4704 and prefilter has to process it. We can then redefine prefilter
4700 from the outside and implement extensions for special
4705 from the outside and implement extensions for special
4701 purposes.
4706 purposes.
4702
4707
4703 Today I got one for inputting PhysicalQuantity objects
4708 Today I got one for inputting PhysicalQuantity objects
4704 (from Scientific) without needing any function calls at
4709 (from Scientific) without needing any function calls at
4705 all. Extremely convenient, and it's all done as a user-level
4710 all. Extremely convenient, and it's all done as a user-level
4706 extension (no IPython code was touched). Now instead of:
4711 extension (no IPython code was touched). Now instead of:
4707 a = PhysicalQuantity(4.2,'m/s**2')
4712 a = PhysicalQuantity(4.2,'m/s**2')
4708 one can simply say
4713 one can simply say
4709 a = 4.2 m/s**2
4714 a = 4.2 m/s**2
4710 or even
4715 or even
4711 a = 4.2 m/s^2
4716 a = 4.2 m/s^2
4712
4717
4713 I use this, but it's also a proof of concept: IPython really is
4718 I use this, but it's also a proof of concept: IPython really is
4714 fully user-extensible, even at the level of the parsing of the
4719 fully user-extensible, even at the level of the parsing of the
4715 command line. It's not trivial, but it's perfectly doable.
4720 command line. It's not trivial, but it's perfectly doable.
4716
4721
4717 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4722 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4718 the problem of modules being loaded in the inverse order in which
4723 the problem of modules being loaded in the inverse order in which
4719 they were defined in
4724 they were defined in
4720
4725
4721 * Version 0.1.8 released, 0.1.9 opened for further work.
4726 * Version 0.1.8 released, 0.1.9 opened for further work.
4722
4727
4723 * Added magics pdef, source and file. They respectively show the
4728 * Added magics pdef, source and file. They respectively show the
4724 definition line ('prototype' in C), source code and full python
4729 definition line ('prototype' in C), source code and full python
4725 file for any callable object. The object inspector oinfo uses
4730 file for any callable object. The object inspector oinfo uses
4726 these to show the same information.
4731 these to show the same information.
4727
4732
4728 * Version 0.1.7 released, 0.1.8 opened for further work.
4733 * Version 0.1.7 released, 0.1.8 opened for further work.
4729
4734
4730 * Separated all the magic functions into a class called Magic. The
4735 * Separated all the magic functions into a class called Magic. The
4731 InteractiveShell class was becoming too big for Xemacs to handle
4736 InteractiveShell class was becoming too big for Xemacs to handle
4732 (de-indenting a line would lock it up for 10 seconds while it
4737 (de-indenting a line would lock it up for 10 seconds while it
4733 backtracked on the whole class!)
4738 backtracked on the whole class!)
4734
4739
4735 FIXME: didn't work. It can be done, but right now namespaces are
4740 FIXME: didn't work. It can be done, but right now namespaces are
4736 all messed up. Do it later (reverted it for now, so at least
4741 all messed up. Do it later (reverted it for now, so at least
4737 everything works as before).
4742 everything works as before).
4738
4743
4739 * Got the object introspection system (magic_oinfo) working! I
4744 * Got the object introspection system (magic_oinfo) working! I
4740 think this is pretty much ready for release to Janko, so he can
4745 think this is pretty much ready for release to Janko, so he can
4741 test it for a while and then announce it. Pretty much 100% of what
4746 test it for a while and then announce it. Pretty much 100% of what
4742 I wanted for the 'phase 1' release is ready. Happy, tired.
4747 I wanted for the 'phase 1' release is ready. Happy, tired.
4743
4748
4744 2001-11-12 Fernando Perez <fperez@colorado.edu>
4749 2001-11-12 Fernando Perez <fperez@colorado.edu>
4745
4750
4746 * Version 0.1.6 released, 0.1.7 opened for further work.
4751 * Version 0.1.6 released, 0.1.7 opened for further work.
4747
4752
4748 * Fixed bug in printing: it used to test for truth before
4753 * Fixed bug in printing: it used to test for truth before
4749 printing, so 0 wouldn't print. Now checks for None.
4754 printing, so 0 wouldn't print. Now checks for None.
4750
4755
4751 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4756 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4752 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4757 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4753 reaches by hand into the outputcache. Think of a better way to do
4758 reaches by hand into the outputcache. Think of a better way to do
4754 this later.
4759 this later.
4755
4760
4756 * Various small fixes thanks to Nathan's comments.
4761 * Various small fixes thanks to Nathan's comments.
4757
4762
4758 * Changed magic_pprint to magic_Pprint. This way it doesn't
4763 * Changed magic_pprint to magic_Pprint. This way it doesn't
4759 collide with pprint() and the name is consistent with the command
4764 collide with pprint() and the name is consistent with the command
4760 line option.
4765 line option.
4761
4766
4762 * Changed prompt counter behavior to be fully like
4767 * Changed prompt counter behavior to be fully like
4763 Mathematica's. That is, even input that doesn't return a result
4768 Mathematica's. That is, even input that doesn't return a result
4764 raises the prompt counter. The old behavior was kind of confusing
4769 raises the prompt counter. The old behavior was kind of confusing
4765 (getting the same prompt number several times if the operation
4770 (getting the same prompt number several times if the operation
4766 didn't return a result).
4771 didn't return a result).
4767
4772
4768 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4773 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4769
4774
4770 * Fixed -Classic mode (wasn't working anymore).
4775 * Fixed -Classic mode (wasn't working anymore).
4771
4776
4772 * Added colored prompts using Nathan's new code. Colors are
4777 * Added colored prompts using Nathan's new code. Colors are
4773 currently hardwired, they can be user-configurable. For
4778 currently hardwired, they can be user-configurable. For
4774 developers, they can be chosen in file ipythonlib.py, at the
4779 developers, they can be chosen in file ipythonlib.py, at the
4775 beginning of the CachedOutput class def.
4780 beginning of the CachedOutput class def.
4776
4781
4777 2001-11-11 Fernando Perez <fperez@colorado.edu>
4782 2001-11-11 Fernando Perez <fperez@colorado.edu>
4778
4783
4779 * Version 0.1.5 released, 0.1.6 opened for further work.
4784 * Version 0.1.5 released, 0.1.6 opened for further work.
4780
4785
4781 * Changed magic_env to *return* the environment as a dict (not to
4786 * Changed magic_env to *return* the environment as a dict (not to
4782 print it). This way it prints, but it can also be processed.
4787 print it). This way it prints, but it can also be processed.
4783
4788
4784 * Added Verbose exception reporting to interactive
4789 * Added Verbose exception reporting to interactive
4785 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4790 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4786 traceback. Had to make some changes to the ultraTB file. This is
4791 traceback. Had to make some changes to the ultraTB file. This is
4787 probably the last 'big' thing in my mental todo list. This ties
4792 probably the last 'big' thing in my mental todo list. This ties
4788 in with the next entry:
4793 in with the next entry:
4789
4794
4790 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4795 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4791 has to specify is Plain, Color or Verbose for all exception
4796 has to specify is Plain, Color or Verbose for all exception
4792 handling.
4797 handling.
4793
4798
4794 * Removed ShellServices option. All this can really be done via
4799 * Removed ShellServices option. All this can really be done via
4795 the magic system. It's easier to extend, cleaner and has automatic
4800 the magic system. It's easier to extend, cleaner and has automatic
4796 namespace protection and documentation.
4801 namespace protection and documentation.
4797
4802
4798 2001-11-09 Fernando Perez <fperez@colorado.edu>
4803 2001-11-09 Fernando Perez <fperez@colorado.edu>
4799
4804
4800 * Fixed bug in output cache flushing (missing parameter to
4805 * Fixed bug in output cache flushing (missing parameter to
4801 __init__). Other small bugs fixed (found using pychecker).
4806 __init__). Other small bugs fixed (found using pychecker).
4802
4807
4803 * Version 0.1.4 opened for bugfixing.
4808 * Version 0.1.4 opened for bugfixing.
4804
4809
4805 2001-11-07 Fernando Perez <fperez@colorado.edu>
4810 2001-11-07 Fernando Perez <fperez@colorado.edu>
4806
4811
4807 * Version 0.1.3 released, mainly because of the raw_input bug.
4812 * Version 0.1.3 released, mainly because of the raw_input bug.
4808
4813
4809 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4814 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4810 and when testing for whether things were callable, a call could
4815 and when testing for whether things were callable, a call could
4811 actually be made to certain functions. They would get called again
4816 actually be made to certain functions. They would get called again
4812 once 'really' executed, with a resulting double call. A disaster
4817 once 'really' executed, with a resulting double call. A disaster
4813 in many cases (list.reverse() would never work!).
4818 in many cases (list.reverse() would never work!).
4814
4819
4815 * Removed prefilter() function, moved its code to raw_input (which
4820 * Removed prefilter() function, moved its code to raw_input (which
4816 after all was just a near-empty caller for prefilter). This saves
4821 after all was just a near-empty caller for prefilter). This saves
4817 a function call on every prompt, and simplifies the class a tiny bit.
4822 a function call on every prompt, and simplifies the class a tiny bit.
4818
4823
4819 * Fix _ip to __ip name in magic example file.
4824 * Fix _ip to __ip name in magic example file.
4820
4825
4821 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4826 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4822 work with non-gnu versions of tar.
4827 work with non-gnu versions of tar.
4823
4828
4824 2001-11-06 Fernando Perez <fperez@colorado.edu>
4829 2001-11-06 Fernando Perez <fperez@colorado.edu>
4825
4830
4826 * Version 0.1.2. Just to keep track of the recent changes.
4831 * Version 0.1.2. Just to keep track of the recent changes.
4827
4832
4828 * Fixed nasty bug in output prompt routine. It used to check 'if
4833 * Fixed nasty bug in output prompt routine. It used to check 'if
4829 arg != None...'. Problem is, this fails if arg implements a
4834 arg != None...'. Problem is, this fails if arg implements a
4830 special comparison (__cmp__) which disallows comparing to
4835 special comparison (__cmp__) which disallows comparing to
4831 None. Found it when trying to use the PhysicalQuantity module from
4836 None. Found it when trying to use the PhysicalQuantity module from
4832 ScientificPython.
4837 ScientificPython.
4833
4838
4834 2001-11-05 Fernando Perez <fperez@colorado.edu>
4839 2001-11-05 Fernando Perez <fperez@colorado.edu>
4835
4840
4836 * Also added dirs. Now the pushd/popd/dirs family functions
4841 * Also added dirs. Now the pushd/popd/dirs family functions
4837 basically like the shell, with the added convenience of going home
4842 basically like the shell, with the added convenience of going home
4838 when called with no args.
4843 when called with no args.
4839
4844
4840 * pushd/popd slightly modified to mimic shell behavior more
4845 * pushd/popd slightly modified to mimic shell behavior more
4841 closely.
4846 closely.
4842
4847
4843 * Added env,pushd,popd from ShellServices as magic functions. I
4848 * Added env,pushd,popd from ShellServices as magic functions. I
4844 think the cleanest will be to port all desired functions from
4849 think the cleanest will be to port all desired functions from
4845 ShellServices as magics and remove ShellServices altogether. This
4850 ShellServices as magics and remove ShellServices altogether. This
4846 will provide a single, clean way of adding functionality
4851 will provide a single, clean way of adding functionality
4847 (shell-type or otherwise) to IP.
4852 (shell-type or otherwise) to IP.
4848
4853
4849 2001-11-04 Fernando Perez <fperez@colorado.edu>
4854 2001-11-04 Fernando Perez <fperez@colorado.edu>
4850
4855
4851 * Added .ipython/ directory to sys.path. This way users can keep
4856 * Added .ipython/ directory to sys.path. This way users can keep
4852 customizations there and access them via import.
4857 customizations there and access them via import.
4853
4858
4854 2001-11-03 Fernando Perez <fperez@colorado.edu>
4859 2001-11-03 Fernando Perez <fperez@colorado.edu>
4855
4860
4856 * Opened version 0.1.1 for new changes.
4861 * Opened version 0.1.1 for new changes.
4857
4862
4858 * Changed version number to 0.1.0: first 'public' release, sent to
4863 * Changed version number to 0.1.0: first 'public' release, sent to
4859 Nathan and Janko.
4864 Nathan and Janko.
4860
4865
4861 * Lots of small fixes and tweaks.
4866 * Lots of small fixes and tweaks.
4862
4867
4863 * Minor changes to whos format. Now strings are shown, snipped if
4868 * Minor changes to whos format. Now strings are shown, snipped if
4864 too long.
4869 too long.
4865
4870
4866 * Changed ShellServices to work on __main__ so they show up in @who
4871 * Changed ShellServices to work on __main__ so they show up in @who
4867
4872
4868 * Help also works with ? at the end of a line:
4873 * Help also works with ? at the end of a line:
4869 ?sin and sin?
4874 ?sin and sin?
4870 both produce the same effect. This is nice, as often I use the
4875 both produce the same effect. This is nice, as often I use the
4871 tab-complete to find the name of a method, but I used to then have
4876 tab-complete to find the name of a method, but I used to then have
4872 to go to the beginning of the line to put a ? if I wanted more
4877 to go to the beginning of the line to put a ? if I wanted more
4873 info. Now I can just add the ? and hit return. Convenient.
4878 info. Now I can just add the ? and hit return. Convenient.
4874
4879
4875 2001-11-02 Fernando Perez <fperez@colorado.edu>
4880 2001-11-02 Fernando Perez <fperez@colorado.edu>
4876
4881
4877 * Python version check (>=2.1) added.
4882 * Python version check (>=2.1) added.
4878
4883
4879 * Added LazyPython documentation. At this point the docs are quite
4884 * Added LazyPython documentation. At this point the docs are quite
4880 a mess. A cleanup is in order.
4885 a mess. A cleanup is in order.
4881
4886
4882 * Auto-installer created. For some bizarre reason, the zipfiles
4887 * Auto-installer created. For some bizarre reason, the zipfiles
4883 module isn't working on my system. So I made a tar version
4888 module isn't working on my system. So I made a tar version
4884 (hopefully the command line options in various systems won't kill
4889 (hopefully the command line options in various systems won't kill
4885 me).
4890 me).
4886
4891
4887 * Fixes to Struct in genutils. Now all dictionary-like methods are
4892 * Fixes to Struct in genutils. Now all dictionary-like methods are
4888 protected (reasonably).
4893 protected (reasonably).
4889
4894
4890 * Added pager function to genutils and changed ? to print usage
4895 * Added pager function to genutils and changed ? to print usage
4891 note through it (it was too long).
4896 note through it (it was too long).
4892
4897
4893 * Added the LazyPython functionality. Works great! I changed the
4898 * Added the LazyPython functionality. Works great! I changed the
4894 auto-quote escape to ';', it's on home row and next to '. But
4899 auto-quote escape to ';', it's on home row and next to '. But
4895 both auto-quote and auto-paren (still /) escapes are command-line
4900 both auto-quote and auto-paren (still /) escapes are command-line
4896 parameters.
4901 parameters.
4897
4902
4898
4903
4899 2001-11-01 Fernando Perez <fperez@colorado.edu>
4904 2001-11-01 Fernando Perez <fperez@colorado.edu>
4900
4905
4901 * Version changed to 0.0.7. Fairly large change: configuration now
4906 * Version changed to 0.0.7. Fairly large change: configuration now
4902 is all stored in a directory, by default .ipython. There, all
4907 is all stored in a directory, by default .ipython. There, all
4903 config files have normal looking names (not .names)
4908 config files have normal looking names (not .names)
4904
4909
4905 * Version 0.0.6 Released first to Lucas and Archie as a test
4910 * Version 0.0.6 Released first to Lucas and Archie as a test
4906 run. Since it's the first 'semi-public' release, change version to
4911 run. Since it's the first 'semi-public' release, change version to
4907 > 0.0.6 for any changes now.
4912 > 0.0.6 for any changes now.
4908
4913
4909 * Stuff I had put in the ipplib.py changelog:
4914 * Stuff I had put in the ipplib.py changelog:
4910
4915
4911 Changes to InteractiveShell:
4916 Changes to InteractiveShell:
4912
4917
4913 - Made the usage message a parameter.
4918 - Made the usage message a parameter.
4914
4919
4915 - Require the name of the shell variable to be given. It's a bit
4920 - Require the name of the shell variable to be given. It's a bit
4916 of a hack, but allows the name 'shell' not to be hardwire in the
4921 of a hack, but allows the name 'shell' not to be hardwire in the
4917 magic (@) handler, which is problematic b/c it requires
4922 magic (@) handler, which is problematic b/c it requires
4918 polluting the global namespace with 'shell'. This in turn is
4923 polluting the global namespace with 'shell'. This in turn is
4919 fragile: if a user redefines a variable called shell, things
4924 fragile: if a user redefines a variable called shell, things
4920 break.
4925 break.
4921
4926
4922 - magic @: all functions available through @ need to be defined
4927 - magic @: all functions available through @ need to be defined
4923 as magic_<name>, even though they can be called simply as
4928 as magic_<name>, even though they can be called simply as
4924 @<name>. This allows the special command @magic to gather
4929 @<name>. This allows the special command @magic to gather
4925 information automatically about all existing magic functions,
4930 information automatically about all existing magic functions,
4926 even if they are run-time user extensions, by parsing the shell
4931 even if they are run-time user extensions, by parsing the shell
4927 instance __dict__ looking for special magic_ names.
4932 instance __dict__ looking for special magic_ names.
4928
4933
4929 - mainloop: added *two* local namespace parameters. This allows
4934 - mainloop: added *two* local namespace parameters. This allows
4930 the class to differentiate between parameters which were there
4935 the class to differentiate between parameters which were there
4931 before and after command line initialization was processed. This
4936 before and after command line initialization was processed. This
4932 way, later @who can show things loaded at startup by the
4937 way, later @who can show things loaded at startup by the
4933 user. This trick was necessary to make session saving/reloading
4938 user. This trick was necessary to make session saving/reloading
4934 really work: ideally after saving/exiting/reloading a session,
4939 really work: ideally after saving/exiting/reloading a session,
4935 *everythin* should look the same, including the output of @who. I
4940 *everythin* should look the same, including the output of @who. I
4936 was only able to make this work with this double namespace
4941 was only able to make this work with this double namespace
4937 trick.
4942 trick.
4938
4943
4939 - added a header to the logfile which allows (almost) full
4944 - added a header to the logfile which allows (almost) full
4940 session restoring.
4945 session restoring.
4941
4946
4942 - prepend lines beginning with @ or !, with a and log
4947 - prepend lines beginning with @ or !, with a and log
4943 them. Why? !lines: may be useful to know what you did @lines:
4948 them. Why? !lines: may be useful to know what you did @lines:
4944 they may affect session state. So when restoring a session, at
4949 they may affect session state. So when restoring a session, at
4945 least inform the user of their presence. I couldn't quite get
4950 least inform the user of their presence. I couldn't quite get
4946 them to properly re-execute, but at least the user is warned.
4951 them to properly re-execute, but at least the user is warned.
4947
4952
4948 * Started ChangeLog.
4953 * Started ChangeLog.
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now